2

キーの暗号化 (AES256 または 3DES 256) を判別するにはどうすればよいでしょうか...どちらのキーも 32 文字 (1 文字あたり 8 ビット * 32 文字) = 256 ビットで、Mime エンコードされるためです。

MQAyAEgAOgA5ADUAMwA3AD8AQgBFAD4A --->AES256 キー

g1EOWGFb+JjCZ7BbH2RergtKUtDfXrNb --->3DES キー

AES キーは Openssl で作成されましたが、3DES キーは Java と次の Api を使用して作成されました。

javax.crypto.Cipher;
 javax.crypto.KeyGenerator;
 javax.crypto.SecretKey;
 javax.crypto.SecretKeyFactory;
 javax.crypto.spec.DESedeKeySpec;
 javax.crypto.spec.IvParameterSpec;
4

1 に答える 1

2

まず、3DES 256 というものはありません。3DES は 128 ビットまたは 192 ビットのキー サイズを持ち、そのうち 112 ビットと 168 ビットが有効に使用されます。3DES のセキュリティ マージンはさらに低いことに注意してください。

一方、AES は 128、192、および 256 ビットで使用でき、これらすべてが使用されます。

現在、base 64 (より高いレベルのプロトコルである SMIME ではありません) は、1 文字あたり 6 ビットです (末尾のスプリアス ビットは除外されません)。キーを確認すると、どちらもサイズが 192 ビットであるため、キーを区別するのに役立ちません。Apache Codec ライブラリを使用して、base 64 文字列をデコードできます。

ただし、3DES キー (2 番目のキー) は、3 つの単一 DES キーに奇数パリティ バイトを使用しているようです。これは、キーを互いに区別するために使用できます。これは絶対確実ではないことに注意してください。ランダムに生成されたAES キーでは、偶然だけでパリティ ビットが正しく設定されている可能性があります。ただし、その可能性は のオーダーのどこかです2^24

このメソッドDESedeKeySpec.isParityAdjusted(byte[] key, int offset)を使用して、パリティが正しく設定されているかどうかを確認できます。もちろん、最初に base 64 文字列をデコードする必要があります。

パリティが正しく設定されていない状態で 3DES キーが配布される場合があることに注意してください。あなたの場合、を使用してキーを生成する必要がありKeyFactoryます。そうしないと、パリティが設定されない可能性があります。

キーが正しいタイプであるかどうかを確認する別の方法は、両方のアルゴリズムを使用して既知の平文/暗号文/秘密鍵のペアを復号化することです。

于 2013-05-30T12:44:56.883 に答える