6

社内アプリのテキストを暗号化するために、Delphi 2007 の DCPcrypt ライブラリを使用しています。

現在、次のコードを使用しています(実際のキーではありません):

  Cipher := TDCP_rijndael.Create(nil);
  try
    Cipher.InitStr('5t@ck0v3rf10w', TDCP_md5);
    Result := Cipher.EncryptString('Test string');
  finally
    Cipher.Burn;
    Cipher.Free;
  end;

InitStr のコメントは次のとおりです。

キー文字列のハッシュに基づいてキー設定を行う

たとえば、SHA2-256 または SHA2-512 の MD5 アルゴリズムを交換すると、暗号化の強度に理論的または実際の違いが生じますか?

4

2 に答える 2

9

あなたの質問に対する直接の答えは「いいえ」です-それは暗号の強さに感知できるほどの違いをもたらすことはありません。はい、MD5は壊れていますが、実際にはその弱点はこの特定のアプリケーションに違いはありません。AESのキーサイズは128、192、および256ビットです。ここで行っているのは、キーの文字列仮名(16バイト、24バイト、または32バイトのいずれか)を作成することだけです。暗号の専門家がハッシュ関数が壊れていると言ったとき、これが意味するのは、既知のハッシュ出力が与えられた場合、同じ出力にハッシュする元のメッセージとは異なるメッセージを計算することが可能であるということです。言い換えると、ハッシュ関数の暗号化の長所または短所が何らかの意味を持つためには、バイナリキーが悪意のある当事者にすでに知られている必要があります。つまり、セキュリティがすでに完全に無効になっている場合にのみ関連します。

ハッシュアルゴリズムの強度は、非対称暗号の強度とはまったく関係ありません。

でも...

ただし、はるかに深刻な懸念は、コードにソルトがないことです。メッセージを手動でソルトする予定がない限り(可能性は低いですが)、通信はリプレイ攻撃に対して非常に脆弱です。ECBモードを使用すると、これはさらに悪化しますが、ソルトを使用しないと、どのモードでもセキュリティ上の大きな問題になります。「ソルティング」とは、暗号化の前に、IVまたはメッセージの先頭に十分に大きな予測不可能な非反復値を挿入することを意味します。

これは、DCPCryptの大きな問題を浮き彫りにします。DCPcryptのほとんどのユーザーは、適切なソルティングの重要性を理解するのに十分な暗号化について知らず、あなたが持っているのとまったく同じ方法で暗号化コンポーネントを使用します。このようにDCPcryptを使用する場合(これは非常に自然なことです)、DCPcryptはソルトしません。実際、IVをゼロに設定します。そしてさらに悪化します...キーストリーミングタイプのチェーンモード(非常に人気があります)を選択し、IVが習慣的にゼロである場合、単一のプレーンテキストメッセージが既知または推測されると、セキュリティは完全に完全に破壊されます、(またはメッセージの断片だけでも推測されます)。DCPcryptは、ユーザーがIVを設定できるようにするとともに(文字列からではなく)バイナリキーを初期化する別の方法を提供します(ランダムなIVを自分で生成する必要があります)。次の問題は、IV管理全体が少し複雑になることです。

開示

私はTurboPowerLockBox3の作者です。立派で包括的なエンジニアリング作業であるDaveBartonのDCPcryptは、LockBox3を作成するための私のインスピレーションの1つでした。

于 2012-12-10T06:56:14.943 に答える
0

暗号化に対する攻撃の種類を指定する必要があります。既知の平文攻撃が使用され、侵入者が事前に計算されたハッシュ値を使用してキー文字列を見つけると仮定すると、使用されるハッシュ アルゴリズムに違いはなく、どのハッシュ アルゴリズムでもキー文字列を見つけるのにほぼ同じ時間が必要です。

于 2012-12-10T02:26:57.500 に答える