最も安全な秘密鍵を生成する必要があります。
通常、私はコマンドを使用します:
openssl genrsa -des3 -out mykey.key 2048
トリプルDESで十分安全ですか?
2048は十分な大きさですか?
秘密鍵をより強力にする他の方法はありますか?
AESと4096ビットRSAを使用することは確かに役立ちます。少なくともopensslは3つのキートリプルDESを使用しますが、これはトリプルDESとRSA秘密鍵が112ビットのセキュリティ強度でスタックしています。鍵の強度については https://keylength.com を参照してください。112ビットで十分ですが、快適さには少し近すぎます。 128ビットのセキュリティでもっとよく眠れます。
openssl genrsa -aes128 -out mykey.key 4096
3DESはCBCモードで使用され、機密性のみを提供することに注意してください。つまり、攻撃者が知らないうちに秘密鍵の値を変更する可能性があります。それが問題ないかどうかは状況によって異なります。攻撃者が秘密鍵に到達できない場合や、秘密鍵やメッセージを秘密にしておくことに興味がある場合があります。
代わりに、PKCS#12コンテナーにキーを格納することを検討してください。これにより、セキュリティが少し強化されます。ただし、そのためには公開鍵を含む証明書が必要です。残念ながら、genrsa
コマンドは、AES-GCMなどの認証された暗号化モードを許可していないようです。おそらく、生成された秘密鍵に署名を付けることができます(コードの署名に別の秘密鍵を使用している場合)。または、秘密鍵ファイルに安全な場所にハッシュを保存し、それを使用する前に比較することもできます。
パスワード暗号化の最も弱い点は常にパスワードです。 1.0.0より前の古いコマンドラインopenssl
は、非常に弱いパスワードベースのキー導出関数を使用します(単一の反復回数を使用)。新しいopenssl
は幸いにもPBKDF2を使用していますが、反復回数は2048です(まだ少ないですが優れています)(以下のDaveのコメントを参照)。 -iter N
コマンドラインオプションを使用して、この数を増やすことができます。さらに重要なのは、非常に強力なパスワードを生成し、強力なパスワードを何らかのパスワードマネージャに保存することで、問題を回避できることです。本当に強力なパスワードを思い出せない可能性があります(または、パスワードが想定したほど強力ではない可能性があります)。
上記のアドバイスを使用して、more安全な秘密鍵を生成できます。 most安全な秘密鍵などはありません。そのようなことがあるとしたら、OpenSSLコマンドラインを使用して(ソフトウェアのみ)生成できるとは思えません。
何のために十分安全ですか?これは本当にあなたのユースケースに依存します。私自身の読書から、RSA 2048は今でも一般的に安全であると見なされており、公開されている方法を使用してキーを解読する時間に基づいており、非常に広く使用されています。他の人が言ったように、いくつかのユースケースでは、より長いキーの長さを検討したい場合があります。ただし、一部のアプリケーションでは、特定のサイズまでのRSAキーしかサポートされない場合があることに注意してください。
3DESについては、ここ数年は安全とは考えていません。 AESファミリは十分に確立され、広くサポートされており、RSAよりもはるかに短いキー長で同等のセキュリティを提供できます。他のアルゴリズムも利用できます。