攻撃者がパスフレーズなしで作成された秘密鍵を取得した場合、攻撃者は明らかにその鍵で保護されているすべてのものにアクセスできます。秘密鍵はどの程度安全に設定されていますかwithパスフレーズ?攻撃者がパスフレーズで保護されたキーを盗んだ場合、キーを危険にさらすことはどれほど難しいですか?つまり、攻撃者がアクセスした場合でも、適切なパスフレーズを持つ秘密鍵は安全ですか?
OpenSSL、OpenSSH、およびGPG/PGPを使用すると、ラッピングアルゴリズムは十分に強力になるため、心配する必要はありません(そして、心配する必要がある場合は、より大きな問題が発生しますが、これが最も心配されることはありません)。 。
他のパスワードやパスフレーズと同様に、パスフレーズの強度にもよります。 40文字のパスフレーズは、256ビットキーと同じようにブルートフォースにするのが困難です(ASCIIは7ビットしか使用しないため)。強力なパスワードと同じルールがここに適用されます。
暗号化されたデータブロックが攻撃者の手に渡ると、それは決して安全ではありません永久に-それはどのくらいの期間とどのような手段が利用できるかという問題ですそれを割る。
考慮すべき点は次のとおりです。
ラッピングアルゴリズムの強度-OpenSSL、OpenSSH、およびGPG/PGPについてのバハマトを信じて喜んでいます-これらはかなりよく吟味されたコンポーネントです。
鍵スペースのサイズ-つまり、-パスワードのサイズと複雑さ-総当たり攻撃の典型的なコストが適用されます。注目すべきことに、いくつかの形式のキーストレージは、パスワードで使用できる文字のタイプを制限します。たとえば、JKS(Java Key Store)は、かなりの数の特殊文字を排除し、潜在的なキースペースのサイズ。キーサイズを特定の文字数にトリミングするシステムにも注意してください。
試行のコストキーのアンラップを試行することは、どれほど計算コストがかかりますか?それはブルートフォース攻撃を遅くします。
どのアルゴリズム?-安全なファイルの保存方法に依存-暗号化に使用されたアルゴリズムは明らかですか?
比較可能な暗号テキストはありますか?攻撃者は彼が成功したことをどのようにして知るのですか?彼のテストメカニズムは何ですか?キーストアをキャプチャするより強力な要素の1つは、攻撃者が、キーを保存しているシステムによってさらに検出されることなく、自分の試みをテストできる可能性があることです。
攻撃者が自由に使えるリソースの数は?-一般に、脅威の分析には、攻撃者のリソースの分析が含まれます。彼は1台のコンピューターを持っていますか?コンピューターの銀行?そして、彼の処分で盗まれたCPUパワーの全バイラルネットワーク?隣にいる13歳のスクリプトキディについて話しているのか、それとも悪党の国について話しているのかによって異なります。
キーが変更されるまでの時間&データを保護する必要のある期間?-内部のデータの有用性よりも攻撃者がパスワードストアをクラックするのに時間がかかる場合ストアの場合、ストアは安全と見なされます十分
Martin Kleppmann によると:
[デフォルトOpenSSH]秘密鍵保護には2つの弱点があります。
- ダイジェストアルゴリズムはMD5にハードコードされています。つまり、フォーマットを変更せずに、別のハッシュ関数(SHA-1など)にアップグレードすることはできません。 MD5が十分でないことが判明した場合、これは問題になる可能性があります。
- ハッシュ関数は一度だけ適用されます---ストレッチはありません。これは問題です。MD5とAESはどちらも計算が高速で、短いパスフレーズはブルートフォースで簡単に解読できるためです。
秘密のSSHキーが悪用された場合(デフォルトのOpenSSH設定を使用してパスフレーズで保護されていた場合、パスフレーズが辞書の単語である場合)は、ほんの数秒で[解読]される可能性があります。 ...しかし、朗報です。より安全な秘密鍵形式にアップグレードでき、すべてが引き続き機能します!
次に、RFC 5208に従って「PKCS#8」を使用して、より安全に暗号化された秘密鍵を取得する方法を説明します。
$ mv test_rsa_key test_rsa_key.old
$ openssl pkcs8 -topk8 -v2 des3 \
-in test_rsa_key.old -passin 'pass:super secret passphrase' \
-out test_rsa_key -passout 'pass:super secret passphrase'
OpenSSH秘密鍵の暗号化は脆弱ですか?
パスフレーズを使用して秘密鍵を保護することは、暗号の問題では通常そうであるように、慎重に行う必要があります。一般的には、鍵導出関数を介してパスフレーズから導出された鍵を使用して、対称アルゴリズムで秘密鍵を暗号化します。適切な鍵導出関数の古典的な例は、 RFC 2898-PKCS#5:パスワードベースの暗号化仕様バージョン2. のPBKDF2です。
Colin Percivalの scryptプレゼンテーション によると、「OpenSSHはMD5をキーファイルのパスフレーズのキー派生関数として使用する」。コンテキストから、彼はソルトやイテレーションを使用していないと言っているようですが、最近のブルートフォースがどれほど速いかを考えると怖いです。 OpenSSHが秘密鍵の格納に使用するいくつかの異なる形式があるため、詳細と影響を受けるバージョンを正確に知りたいのですが、PBKDF2や他の手法とはかけ離れているようです 繰り返しのソルトテクニックそれは1978年以来存在しています 。
PGPとGPGはファイルに格納された秘密鍵を保護するときに反復/ストレッチング手法を使用すると主張するリファレンスを参照しましたが、やはり詳細はまだわかりません。