暗号化アルゴリズムとしてAES-256を使用して、gnupgでファイルを暗号化するとします。 (したがって、対称暗号化。)
このモードでは、gnupgはユーザーからのパスフレーズを要求します。次に、gnupgがこのパスフレーズから256ビットの鍵を導出し、暗号化に使用することを理解しています。
この質問は、暗号化スキームの他の部分と同じくらい解読するのが難しいパスフレーズを選択することに関するものです。
現在、パスフレーズは通常、印刷可能な文字の文字列ですが、ランダムな256ビット文字列を「パスフレーズ」として使用した場合、そのような「パスフレーズ」は、この暗号化方式の他の部分と同じくらい安全です。
対照的に、単一のASCII文字(8ビット)で構成されるパスフレーズは、ブルートフォース検索では簡単に推測できないため、安全であるとは見なされません。
ただし、パスフレーズの強度とランダムな256ビットキーの強度の比較は、少なくとも2つの理由から簡単ではありません。
まず、パスフレーズからキーを導出するために、gnupgは「パスフレーズストレッチ」を使用します。これにより、パスフレーズのブルートフォース検索を実行する計算コストが増加します。
次に、パスフレーズは印刷可能なASCII文字で構成されるため、32文字(== 256ビット)のパスフレーズは、たとえ印刷可能なASCII文字のランダムな文字列であっても、同じビット数であるにもかかわらず、ランダムな256ビットのキーよりもエントロピーが少なくなります。
したがって、私の質問は、gnupgのパスフレーズストレッチと、パスフレーズが印刷可能なASCII文字で構成されるという事実の両方を考慮に入れると、同等に推測するのが難しい最短のランダムパスフレーズの長さはどうなるかです。パスフレーズストレッチなしのランダムな256ビット文字列として?
2のスペースを見つける256 明確な可能性、およびそのスペースからランダムに均一にパスワードを選択します。例えば:
tr -cd '[:graph:]' < /dev/urandom | head -c 40
のように、グラフィックUS-ASCIIセットからランダムにランダムに個別に40文字を選択します。そのような文字は94個あり、したがって94個です。40 > 2256 この方法で可能なパスワード。 (スペースを許可する場合は、スペースも含めることができます。39で2を超えます。256 可能性。)これを行うと、ストレッチはもはや重要ではなくなります!ストレッチは、とにかく悪い考えである人間のパスワード(選ばれた)を主張する場合にのみ頼りになる松葉杖です。
IfあなたはGnuPGのパスワードonlyを使用し、常にソルトs2k(これは明らかに!)で使用しますthen安全に変更できますこれは2に128、例わずか20文字またはわずか10単語。ただし、危険がある場合は、無塩のコンテキストで再利用する可能性があります。256。