128、192、または256ビットのキーをサポートする暗号があるとします。鍵の長さに関係なく、暗号に脆弱性がないと仮定します。これを使用して何かを暗号化し、パスワードまたはパスフレーズを使用します。
同じパスワードを使用する場合、キーのサイズは本当に重要ですか? 2つすべてを総当たり攻撃するように見えるため128 可能なキーは近い将来実現可能ではありませんが、暗号化の強度はほとんどパスワードのみに基づいていると想定して間違いありませんか?
鍵導出関数が任意のサイズの鍵を生成するのに同じ時間を要すると仮定すると、これは、パスワードへの攻撃が鍵のサイズに関係なく同じ量の時間を要することを意味しませんか?したがって、暗号化の強度は、キーのサイズよりもパスワードの強度の関数ではありませんか?
それでも問題が解決しない場合、128ビットキーではなく256ビットキーまたは192ビットキーで何が得られますか?
「壊れない」ゾーンに到達した後は、鍵のサイズを増やしてもセキュリティは変わりません。それ以上の安全性を確保することはできません。 128ビットの鍵は、すでに「それを壊すことはできません」ゾーンにまで遠く入っています。より大きなキーは、だまされやすいバイヤーを感動させる必要があるマーケティング担当者、および法令により、集団的男らしさを広範囲に表示する必要がある軍人向けです。
(最高のマーケティングマネージャーは 量子コンピューター について話すことにより、より大きなキーサイズを合理化しようとします。)
パスワードからキーを導出し、キーを128ビットから256ビットに拡張すると、セキュリティに何らかの変更が生じた場合、それは非常に間違っています。
異なるキー長の暗号に脆弱性がなく、キー導出関数が衝突なしでランダムと区別できない出力を生成するとします。
数学的に言えば、2 ^ 256 = 2 ^ 128 * 2 ^ 128。 2^X
この場合の代数は、キースペースと呼ばれる一意のキーの総数を指します。各ビットは0または1のいずれかであるため、2つの可能性があります。 2ビットで2x2、3つで2x2x2となります。
とにかく、私が言うように、2 ^ 256 = 2 ^ 128 * 2 ^ 128なので、2 ^ 128 * 2 ^ 128 = 2 ^(128 + 128)です。アドレススペースを2倍にすると、可能なキーの数が2倍になりません-可能なキーが340282366920938463463374607431768211456になりました。 2 ^ 128が人類の到達範囲外にある場合、2 ^ 256はSkynetの到達範囲外です。
同じパスワードを使用する場合、キーのサイズは本当に重要ですか?
これは、KDFに依存します。たとえば、PBKDF2は、入力として指定されたキー付きハッシュ関数のブロックを生成し、これをソルトとして次の反復に送ります。したがって、128ビットのキーに対して生成されたキーの最初の160ビットは、256ビットのキーに対して生成されたキーの最初の160ビットと同じです。
問題は、これが鍵を危険にさらすことですか?そもそも、実際には操作するための保存された値はありませんが、128ビットのキーがどういうわけか持っていたとしましょう。 256ビットキーを生成するには、他の128ビットを確実に生成できる必要があります。これは、出力からは実行できません入力がない場合。したがって、プリイメージ、つまりパスワードを見つける必要があります。使用されたHMAC関数の多くの反復を中断する必要があることを除いて、それは簡単だと考えられるかもしれません。
別の質問はこれは再利用可能ですか?適切なPBKDF2実装はソルトを使用するため、ソルトハッシュ関数を攻撃するのと同じ問題が発生します。
暗号化の強度は、キーのサイズよりもパスワードの強度の関数ではありませんか?
あんまり。ただし、問題は、不十分なキー生成手法を使用すると、キースペースのサイズが不注意に小さくなり、パスワードのブルートフォースが容易になる可能性があることです。例えば:
char encryption_key[16] = {0};
strncpy(encryption_key, 16, source);
aes_with_some_mode(encryption_key, plaintext, &ciphertext);
パスワードが16バイト長であることを確認しても、各バイトを可能な数のASCII文字と記号の1つに制限しています。したがって、大文字だけを想定すると、キースペースを26 ^ 16に減らしました。足で自分を約8 x 10 ^ 15倍に射撃しました。
KDFは、パスワードをキースペースにマッピングすることにより、この状況を回避するように設計されています(ただし、完全にランダムなソースの方が理想的です)。一致するキーを見つける問題は、KDFで使用される条件下でハッシュアルゴリズムのプリイメージを見つけるのと同じくらい難しくなります。
確かに、PBKDF2では、KDFが128ビットと256ビットのキーに等しい時間を費やすとは限りません。
簡単に言えば、問題はあなたが述べた仮定にあります。
鍵の長さに関係なく、暗号に脆弱性がないと仮定します。
セキュリティは約 多層防御 です。セーフクラッカーがハンマーで何日も金庫にぶつけないのと同じように、攻撃者は通常、強引に暗号化キーを強要しません。
ある日、セキュリティ研究者がAES(または他の現在の対称暗号化標準)の弱点を発見するのは避けられないでしょう。可能性の高い軌跡は、最初に短い鍵長の暗号文に対して弱点が実際に悪用され、その後、長い鍵を使用する暗号文に(研究、専用ハードウェア、または単にムーアの法則によって)拡張されることです。