web-dev-qa-db-ja.com

MD4暗号化とMD5暗号化の違い

コーディング中は、MD4とMD5の両方の暗号化手法を使用しました。しかし、どちらにも目立ったセキュリティの違いはありません。それでも、それらのほとんどはMD5を好み、実際にはそれを指定しています。 MD5:

System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();

byte[] TDESKey = null;

TDESKey = HashProvider.ComputeHash(UTF8.GetBytes("CXPUB001"));  // ASYNC PRIVATE KEY CODE FOR DATA ENCRYPTION

//DATA ENCRYPTION 
TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
TDESAlgorithm.Key = TDESKey; //SENDER KEY APPENDED
TDESAlgorithm.Mode = CipherMode.ECB;
TDESAlgorithm.Padding = PaddingMode.PKCS7;
byte[] DataToEncrypt = UTF8.GetBytes(Message);

では、MD4とMD5を使用することのセキュリティ面での違いは何ですか?

2
SandyShores

それらのほとんどはMD5を好み、実際にはそれを指定します

まあ、MD5は単にひどく壊れた暗号ハッシュ関数ですが、MD4はコミカルでひどく壊された暗号ハッシュ関数です。 (3DESも少し壊れているFWIWです。)

ただし、Stephaneの回答の背景に加えて、

TDESKey = HashProvider.ComputeHash(UTF8.GetBytes( "CXPUB001"));

あなたの場合、MD4とMD5の違いは、暗号化の目的でハッシュを使用しているようには見えないため、おそらく問題ではありません。可変長のパスワードから、キーマテリアルとしての使用に適した固定幅のバイト配列に取得するためのユーティリティキー派生関数として使用しています。

この場合、ハッシュの弱点によって危険にさらされる可能性のある、ハッシュによって提供されるセキュリティ対策はありません。これをセキュリティ対策にしたい場合(つまり、攻撃者がTDESKeyを持っている可能性があり、攻撃者がそこから"CXPUB001"をすばやく導出できないようにしたい場合)、はるかに強力な/ MD4またはMD5のどちらよりも遅い形式のハッシュ。

TDESAlgorithm.Mode = CipherMode.ECB;

うん、それは有望に聞こえませんし、署名の明らかな欠如もそうではありません。これが実際のアプリケーションである場合は、代わりに既存の既知の暗号システムを使用することを検討してください。よく引用される コードにA-E-Sの文字を入力している場合... を参照してください。

5
bobince