web-dev-qa-db-ja.com

OpenSSLでのrc4-40とrc4の違い

私は200ビットキー(25バイト)を使用してrc4-40をテストしていましたが、驚いたことに、結果はrc4を使用した場合と同じでした。

<?php
$key_size = 25;
$key = '';
for ($i = 0; $i < $key_size; $i++) {
    $key.= chr(mt_Rand(0, 255));
}

$a = openssl_encrypt(str_repeat('z', 50), 'rc4-40', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
$b = openssl_encrypt(str_repeat('z', 50), 'rc4', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);

echo $a == $b ? 'good' : 'bad';

出典: https://3v4l.org/7n0VC

opensslコマンドでRC4が正しく機能しない? のような投稿に基づいて、rc4-40は40ビットのキーのみをサポートし、rc4は128ビットのみをサポートすることが私の理解でしたキー。しかし、ここでは、どちらも200ビットキーをサポートしているように見えます。

でも https://wiki.openssl.org/index.php/Manual:Enc(1) は、rc4-40が40ビットに固定され、rc4が128ビットに固定(どちらも上記のコードで反証されているようです):

 rc4                128 bit RC4
 rc4-64             64 bit RC4
 rc4-40             40 bit RC4

rc4、この例では、128ビットに長くなったキーを単に切り捨て、サポートされているキーよりも40ビットに長く切り捨てられたrc4-40を単純に切り捨てたとしても、結果が異なるのは当然のことです。 、しかしそうではありません。

では、自分のテストで固定長でないことが示唆されているのに、オンラインのすべての文献が固定長であることを示唆しているのはなぜですか?

1
neubert

から https://en.wikipedia.org/wiki/Export_of_cryptography_from_the_United_States

米国からの暗号技術およびデバイスの輸出は、1992年まで米国の法律によって厳しく制限されていましたが、2000年まで徐々に緩和されました。いくつかの制限はまだ残っています。
[…]
1992年、NSAとSPAの間の取り決めにより、商品管轄区域を使用して40ビットのRC2およびRC4暗号化を簡単にエクスポートできるようになりました(国務省から商務省に制御が移りました) )。

したがって、これは、ソフトウェアが非常に弱い暗号でのみexportedされることを許可された当時の残り(および注意)です。

1
phk