web-dev-qa-db-ja.com

既存の秘密鍵にパスワードを追加できますか?

たとえば、以前に秘密鍵と公開鍵の組み合わせを作成し、そのときに秘密鍵をパスワードで保護しないことを決定したとします。後でセキュリティを "強化"し、代わりにパスワードで保護された秘密キーを使用する場合、新しい秘密/公開キーのペアを生成する必要がありますか、それとも既存の秘密キーにパスワードを追加するだけですか?

反対も可能ですか、既存の秘密鍵からパスワードを「削除」できますか?

66
IQAndreas

警告: laveryaの回答 に記載されているように、opensslは(脅威モデルに応じて)おそらく十分ではない方法でキーを暗号化します。


もちろん、後でパスフレーズを追加/削除することができます。

  • 1つ追加します(それがrsaキーであると仮定して、それ以外はdsaを使用します)

    openssl rsa -aes256 -in your.key -out your.encrypted.key
    mv your.encrypted.key your.key
    chmod 600 your.key
    

    -aes256は、AES256でキーを暗号化するようopensslに指示します。

    ArianFaurtoshが正しく指摘したように:暗号化アルゴリズムには、aes128aes192aes256camellia128camellia192camellia256des(絶対に避けてください)、des3またはidea

  • それを除く

    openssl rsa -in your.key -out your.open.key
    

    最後にもう一度パスフレーズを要求されます
    -aes256を省略して、出力を暗号化しないようにopensslに指示します。

    mv your.open.key your.key
    chmod 600 your.key
    
88
guntbert

ガントベルトの答え は当時は良かったが、少し古くなっている。 openssl rsa -aes256は、パスワードのmd5ハッシュを暗号化キーとして使用して暗号化ファイルを作成します。これは 予想よりも弱い -であり、実際にはプレーンテキストよりも悪い可能性があるという見方によって異なります。 (sshキーとログインに同じパスワードを使用している場合、md5ハッシュをクラックする方が攻撃よりもはるかに速くなりますが、システムはパスワードを保存します-Windows XPなどを除きます)

最新の解決策はssh-keygen -p -o -f PRIVATEKEY。パスフレーズを入力し、既存の秘密鍵を暗号化されたバージョンで上書きします。これは bcrypt pbkdfを使用 であり、デフォルトの16ラウンドで実行している場合でも、md5よりもFARが遅くなります。この場合の「はるかに遅い」とは、100万分の1秒ではなく、10分の1秒から0.5秒の間にあることを意味します。ログイン時に気づくことではなく、パスワードを解読するときに大きな違いがあります。

12
laverya

プライベートが「パスワードで保護されている」場合、それは、どこかに保存されているキーバイトがパスワードから取得した対称キーで暗号化されていることを意味します。秘密鍵はバイトシーケンスとして簡単にエンコードでき、ファイルと同じようにコピー、暗号化、復号化できます。ここでの重要なポイントは、パスワードはすべてstorageに関するものであるということです。秘密鍵を使用する場合(たとえば、何かに署名する場合)、最初に一部のコンピューターのRAM=で復号化され、暗号化されていない秘密鍵の使用が続行されます。対応して、RSA鍵ペアには、パスワード保護に適した、または適さない特別なものはありません。 。パスワード保護は実際には直交する問題です。

もちろん、秘密鍵がなんらかの物理メディア(ハードディスクなど)に保存されており、特別な保護がなされていない場合、そこに悪用可能な痕跡が残っている可能性があります。詳細は、実際に秘密鍵の保管に使用されているシステムに大きく依存します。たとえば、Windowsシステムでは、ユーザーの秘密キーを格納するために [〜#〜] dpapi [〜#〜] を使用し、DPAPIは、格納されたキーを漏らさないように特別な努力をしています(これらの努力が成功したかどうかは、証明される)。

9
Thomas Pornin