web-dev-qa-db-ja.com

最も安全な秘密鍵を生成する方法は?

最も安全な秘密鍵を生成する必要があります。

通常、私はコマンドを使用します:

openssl genrsa -des3 -out mykey.key 2048

トリプルDESで十分安全ですか?

2048は十分な大きさですか?

秘密鍵をより強力にする他の方法はありますか?

1
sluge

AESと4096ビットRSAを使用することは確かに役立ちます。少なくともopensslは3つのキートリプルDESを使用しますが、これはトリプルDESRSA秘密鍵が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コマンドラインを使用して(ソフトウェアのみ)生成できるとは思えません。

4
Maarten Bodewes

何のために十分安全ですか?これは本当にあなたのユースケースに依存します。私自身の読書から、RSA 2048は今でも一般的に安全であると見なされており、公開されている方法を使用してキーを解読する時間に基づいており、非常に広く使用されています。他の人が言ったように、いくつかのユースケースでは、より長いキーの長さを検討したい場合があります。ただし、一部のアプリケーションでは、特定のサイズまでのRSAキーしかサポートされない場合があることに注意してください。

3DESについては、ここ数年は安全とは考えていません。 AESファミリは十分に確立され、広くサポートされており、RSAよりもはるかに短いキー長で同等のセキュリティを提供できます。他のアルゴリズムも利用できます。

0
Richard N