Des

OpenSSL des-ede3 不產生與測試向量相同的輸出意味著它應該是

  • December 21, 2014

我正在使用 openssl 加密標準 TDEA/3DES/DES-EDE 測試向量之一:

<?php
$key = pack('H*', '0123456789ABCDEF' . '23456789ABCDEF01' . '456789ABCDEF0123');

$result = openssl_encrypt('The quick brown fox jump', 'des-ede3', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);

echo chunk_split(bin2hex($result), 16, ' ');

(des-ede3是ecb模式)

這給出1ccf23869d09333e cce21c8112256fe6 68d5c05dd9b6b900了結果。

但是NIST SP 800-67 附錄 B.1中 ECB 模式下 TDEA 的測試向量表明輸出應該是A826FD8CE53B855F CCE21C8112256FE6 68D5C05DD9B6B900

那麼這是什麼一回事?

看起來測試向量中有錯誤。

附錄 B.1 的文字說明:

P1 =“狡辯”= 5468652071756663

…這是不正確的。

的十六進制編碼The quic實際上是5468652071756963(注意編碼中i/69f/的轉置66

例如,按預期加密測試向量:

$ echo -n 'The quick brown fox jump' | openssl  des-ede3 -nosalt -nopad -K '0123456789ABCDEF23456789ABCDEF01456789ABCDEF0123'  | xxd -c 8 -ps
1ccf23869d09333e
cce21c8112256fe6
68d5c05dd9b6b900

…並將測試向量加密為十六進制編碼:

$ echo -n 'The qufck brown fox jump' | openssl  des-ede3 -nosalt -nopad -K '0123456789ABCDEF23456789ABCDEF01456789ABCDEF0123'  | xxd -c 8 -ps
a826fd8ce53b855f
cce21c8112256fe6
68d5c05dd9b6b900

自 2004 年版本 1以來,此錯誤似乎一直存在於 NIST SP 800-67中。

引用自:https://crypto.stackexchange.com/questions/20906