6

24 バイトのデータ ブロックに対して次の暗号化ルールを規定するプロジェクトがあります。

1) 暗号化は、MAC アルゴリズム 3 として 9797-1 で定義されている完全なトリプル DES MAC アルゴリズムを使用して、切り捨てなしの出力変換 3 を使用し、ICV がゼロに設定されたブロック暗号として CBC モードの DES を使用して実行する必要があります。暗号化されたデータの最後の 8 バイトは、必要な値を構成します。

プログラムは、行われた暗号化が間違っていると言っています。上記の仕様を満たすために他に必要なことはありますか?

データは 24 バイトの値で、暗号化の出力は 8 バイトになるはずです (仕様によると)。出力として24バイト全体を取得しています:(

上記の仕様を達成するために、次のコードを作成しました。

des.KeySize = 128;
des.Key = ParseHex(key);
des.Mode = CipherMode.CBC;
des.Padding = PaddingMode.None;

ICryptoTransform ic = des.CreateEncryptor();

CryptoOutput = ic.TransformFinalBlock(CryptoOutput, 0, 24);

私もこれを試しました:

MACTripleDES des = new MACTripleDES(ParseHex(key));
byte[] CDCryptp = des.ComputeHash(CryptoOutput);
4

3 に答える 3

4

ISO 9797-1 MAC アルゴリズム 3 は、最初の DES キーを使用して CBC MAC を実行し、最後のブロックに対してのみ完全な 3-DES 操作を実行します。

これを試して:

byte[] keybytes = ParseHex(key);
byte[] key1 = new byte[8];
Array.Copy(keybytes, 0, key1, 0, 8);
byte[] key2 = new byte[8];
Array.Copy(keybytes, 8, key2, 0, 8);

DES des1 = DES.Create();
des1.Key = key1;
des1.Mode = CipherMode.CBC;
des1.Padding = PaddingMode.None;
des1.IV = new byte[8];

DES des2 = DES.Create();
des2.Key = key2;
des2.Mode = CipherMode.CBC;
des2.Padding = PaddingMode.None;
des2.IV = new byte[8];

// MAC Algorithm 3
byte[] intermediate = des1.CreateEncryptor().TransformFinalBlock(data, 0, data.Length);

// Output Transformation 3
byte[] intermediate2 = des2.CreateDecryptor().TransformFinalBlock(intermediate, intermediate.Length - 8, 8);
byte[] result = des1.CreateEncryptor().TransformFinalBlock(intermediate2, 0, 8);
于 2011-06-09T11:08:49.960 に答える
2

CBC-MAC モードでは、メッセージ全体を CBC モードで初期化ベクトル (IV) をゼロにして暗号化し、出力の最後の 8 バイト (DES の場合) のみを取得する必要があります。また、DES を使用する必要があるため、128 ではなく 64 ビット キーを使用する必要があります。ISO を引用できる場合 (無料のコピーが見つかりません)、何をすべきかを詳しく説明できます。

于 2011-06-08T19:11:50.753 に答える
-2

質問は、本来あるべきほど適切に表現されておらず、宿題のように見えます。そこで、まだ見ていないかもしれないいくつかのリンクを紹介します。

他の誰かがTripleDES で 3DES MAC 値を実行しています: 指定されたキーは「TripleDES」の既知の弱いキーであり、使用できませんが 、いくつかの回答のように .NET の動作を変更することはお勧めしません。

3DES を使用することだけが必要な場合は、これを確認してください: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b9239824-e8a1-4955-9193-d9f6993703f3/

于 2011-06-07T20:14:10.290 に答える