web-dev-qa-db-ja.com

256ランダムビットのストレッチされていない文字列と同等の強度のストレッチされたgnupgパスフレーズの長さ

暗号化アルゴリズムとしてAES-256を使用して、gnupgでファイルを暗号化するとします。 (したがって、対称暗号化。)

このモードでは、gnupgはユーザーからのパスフレーズを要求します。次に、gnupgがこのパスフレーズから256ビットの鍵を導出し、暗号化に使用することを理解しています。

この質問は、暗号化スキームの他の部分と同じくらい解読するのが難しいパスフレーズを選択することに関するものです。

現在、パスフレーズは通常、印刷可能な文字の文字列ですが、ランダムな256ビット文字列を「パスフレーズ」として使用した場合、そのような「パスフレーズ」は、この暗号化方式の他の部分と同じくらい安全です。

対照的に、単一のASCII文字(8ビット)で構成されるパスフレーズは、ブルートフォース検索では簡単に推測できないため、安全であるとは見なされません。

ただし、パスフレーズの強度とランダムな256ビットキーの強度の比較は、少なくとも2つの理由から簡単ではありません。

まず、パスフレーズからキーを導出するために、gnupgは「パスフレーズストレッチ」を使用します。これにより、パスフレーズのブルートフォース検索を実行する計算コストが増加します。

次に、パスフレーズは印刷可能なASCII文字で構成されるため、32文字(== 256ビット)のパスフレーズは、たとえ印刷可能なASCII文字のランダムな文字列であっても、同じビット数であるにもかかわらず、ランダムな256ビットのキーよりもエントロピーが少なくなります。

したがって、私の質問は、gnupgのパスフレーズストレッチと、パスフレーズが印刷可能なASCII文字で構成されるという事実の両方を考慮に入れると、同等に推測するのが難しい最短のランダムパスフレーズの長さはどうなるかです。パスフレーズストレッチなしのランダムな256ビット文字列として?

2
kjo

2のスペースを見つける256 明確な可能性、およびそのスペースからランダムに均一にパスワードを選択します。例えば:

  • tr -cd '[:graph:]' < /dev/urandom | head -c 40のように、グラフィックUS-ASCIIセットからランダムにランダムに個別に40文字を選択します。そのような文字は94個あり、したがって94個です。40 > 2256 この方法で可能なパスワード。 (スペースを許可する場合は、スペースも含めることができます。39で2を超えます。256 可能性。)
  • ダイスウェアのように、7776ワードのリストからランダムに20ワードをランダムに個別に選択します。 7776があります20 > 2256 この方法で可能なパスワード。あなたが物事をより思い出深いものにするために好きな単語リストを選択することができます。利用可能な多くのオプションがあります。

これを行うと、ストレッチはもはや重要ではなくなります!ストレッチは、とにかく悪い考えである人間のパスワード(選ばれた)を主張する場合にのみ頼りになる松葉杖です。

IfあなたはGnuPGのパスワードonlyを使用し、常にソルトs2k(これは明らかに!)で使用しますthen安全に変更できますこれは2に128わずか20文字またはわずか10単語。ただし、危険がある場合は、無塩のコンテキストで再利用する可能性があります。256

6