OpenSSL の des ツールを使用してファイルを暗号化しています。
openssl des3 -salt -k SUPER_SECURE_PASSPHRASE < inputFile > outputFile
すべてが機能していますが、今は最終的な固定の暗号化パスフレーズを選択する必要があります。覚える必要はないので、ランダムに生成されたある種の文字を選択します。しかし、ランダムはどれほど便利で、どれくらいの時間が便利ですか?有用なエントロピーを無意識のうちに捨ててしまうのではないかと心配しています。
たとえば、AZQBB
は、おそらく長さと文字セットの制限のため、パスフレーズとしては不十分です。しかし、文字セットが限られているため、kecqnutaspyyhgheikfzuwkjaoitqooasujjfhhsiiwqoekihaeyhflpijfmnhssdyyy
は貧弱でしょうか?または、dU# i?|m:v
その長さのために貧しいですか? opensslがパスフレーズを使用して暗号化キーのビットを生成する方法がすべて重要であり、どこにも文書化されていることがわかりません。
別の例として、opensslが8ビットから156ビットを取得する場合ASCIIパスフレーズの最初の21文字の表現で、制御文字以外の低ASCIIに制限する場合約30ビットのエントロピーを破棄します。
したがって、非常に安全なパスフレーズの場合、私の質問は次のとおりです。
「openssl des3」は、実際には「openssl enc -des3」です。パスワードベースのキー導出は、カスタム化された、文書化されていないスキームであり、パスワードベースの鍵導出スキームに関する限り、非常に弱いものです。詳細については この回答 (特に最後)を参照してください。基本的に、これはパスワードをいくつかのMD5呼び出しでハッシュすることと同じです。
パスワードに重要なのはentropyです。つまり、パスワードの長さや使用する文字のタイプではありません。エントロピーはパスワードの可能性の尺度です。エントロピーの計算方法の詳細については、 この答え を参照してください。エントロピーはパスワード自体では計算されないが、パスワードを生成したprocessを分析して計算されることに注意してください。
OpenSSLで使用される鍵導出スキームはかなり悪いため、適切なセキュリティを実現するには、多くのパスワードエントロピーが必要です。経験則として、深刻な攻撃者の計算能力の限界は2です。80 MD5のような暗号プリミティブの呼び出し(NSAのようなリッチな攻撃者は、このような計算レベルに到達するのに多くの問題を抱えています。very Googleのようなリッチな組織やAppleは、それが非常に困難であることがわかり、慎重に行うことはできません。この場合、パスワードを試行すると、おおよそ2つのMD5を計算することになるため、パスワードエントロピーは2を超える必要があります。79 -つまり、「79ビット」です。これは、(暗号化における)エントロピーが通常ビット(対数スケール)で表されるためです。
[〜#〜] if [〜#〜]パスフレーズを特定のアルファベットのランダムな文字のシーケンスとして生成し、各文字をランダムに選択します、均一に、そして(決定的に)他のパスフレーズ文字とは無関係に、[〜#〜] [〜#〜]エントロピーは簡単に計算できます:if n小文字(各文字に26の選択肢)を使用すると、エントロピーは26になりますn。 n = 17(17個のランダムな小文字)の場合、エントロピーは2に近い80、つまり、80ビットです。これは、上記で説明したように、これで十分です。本当に重要なのはエントロピーであり、文字の長さや種類ではないため、小さな文字セットでさえも、十分に長いパスフレーズを使用することで補正できます。
人間にとって「意味のある」パスフレーズを生成しようとすると、人間の心理はランダム性が非常に悪いため、エントロピーの計算ははるかに困難になります。繰り返しになりますが、エントロピー計算の答えをご覧ください。
DES3は168ビットの最大キーサイズを使用するため、DES3を使用する必要がある場合は、最大キーサイズを求めます。自分ではキーを記憶していないので、CPRNGからキーを生成する必要があります。オプションがある場合は、より大きな鍵サイズを持つAESを検討する必要があります。