我研究的是前人未曾研究过的东西,俺没什么理论依据。
可以仔细看贴:
http://bbs.pediy.com/showthread.php?t=93968&page=4
我研究的是任意碰撞,而不是穷举得来的结果,因为那些全部都是可预测的。
我把帖中网友给的CRC32碰撞的数据给出分析结果,
工具是最新版的HotWC3_V4.09
它支持任意碰撞、对任意CRC逆向出多项式,支持位域4表即可操作半字节。支持16个通用的CRC多项式。
并支持任意多项式的CRC4~CRC64.
http://bbs.pediy.com/showthread.php?t=93968
14楼
可设长度
像 '1234' 的 CRC32 为 9BE3E0A3
我试过 长度=4 的明文 只有 '1234'
菜农回答:此话是对的
但长度=5的明文有256个, 例如下列几个明文 (十六进制), 其CRC32都是 9BE3E0A3:
20 74 FD 5F DD
21 E2 CD 58 AA
22 58 9C 51 33
23 CE AC 56 44
24 6D 39 32 DA
25 FB 09 35 AD
26 41 58 3C 34
27 D7 68 3B 43
28 46 75 84 D3
29 D0 45 83 A4
2A 6A 14 8A 3D
2B FC 24 8D 4A
长度=16 的明文只有下列一组附合 CRC32=9BE3E0A3
00 00 00 00 00 00 00 01 CE DD 16 26
菜农注解:此话天大的错误!!!
00 00 00 00 00 00 00 01 CE DD 16 26实际长度为12,因为它大于4个字节,故有2^(16-4)次碰撞!!!
输入:0000000000000001CEDD1626
输出:DEBB20E3EDDA1000641C1F5C 结果:9BE3E0A3
攻击位XXXXXXXXXXXXXXXX641C1F5C
菜农开始攻击!
输入:FFFFFFFF00000000CECDCCCB
输出:0000000000000000641C1F5C 结果:9BE3E0A3
输入:E075C51A0E9B2BF4DFDCDDDA
输出:1111111111111111641C1F5C 结果:9BE3E0A3
输入:9D0AD96D9D0AD96D31323334
输出:FFFFFFFFFFFFFFFF641C1F5C 结果:9BE3E0A3
现在再选择16位攻击:
输入:FFFFFFFF0000000000000000CECDCCCB
输出:000000000000000000000000641C1F5C 结果:9BE3E0A3
输入:9D0AD96D9D0AD96D9D0AD96D31323334
输出:FFFFFFFFFFFFFFFFFFFFFFFF641C1F5C 结果:9BE3E0A3
哈哈~~~现在看出来了吧,碰撞次数一定是个“天文数字”~~~
可设长度
像 '1234' 的 CRC32 为 9BE3E0A3
我试过 长度=4 的明文 只有 '1234'
但长度=5的明文有256个, 例如下列几个明文 (十六进制), 其CRC32都是 9BE3E0A3:
输入明文 输出密文 输入碰撞等效明文 校验结果
2074FD5FDD 77B79CC4641C1F5C 2074FD5F0A517BBC 9BE3E0A3
YYYYYYYYNNNNNNNN Y:可攻击位置 N:不准攻击位置
21E2CD58AA 77B79CB3641C1F5C 21E2CD587D517BBC 9BE3E0A3
22589C5133 77B79C2A641C1F5C 22589C51E4517BBC 9BE3E0A3
23CEAC5644 77B79C5D641C1F5C 23CEAC5693517BBC 9BE3E0A3
246D3932DA 77B79CC3641C1F5C 246D39320D517BBC 9BE3E0A3
25FB0935AD 77B79CB4641C1F5C 25FB09357A517BBC 9BE3E0A3
2641583C34 77B79C2D641C1F5C 2641583CE3517BBC 9BE3E0A3
27D7683B43 77B79C5A641C1F5C 27D7683B94517BBC 9BE3E0A3
28467584D3 77B79CCA641C1F5C 2846758404517BBC 9BE3E0A3
29D04583A4 77B79CBD641C1F5C 29D0458373517BBC 9BE3E0A3
2A6A148A3D 77B79C24641C1F5C 2A6A148AEA517BBC 9BE3E0A3
2BFC248D4A 77B79C53641C1F5C 2BFC248D9D517BBC 9BE3E0A3
XX 攻击位置 00~FF 共256次
实际有密文位数-32个攻击点,如
输入明文 输出密文 输入碰撞等效明文 校验结果
XXXXXXXXXX 77B79C53641C1F5C 2BFC248D67577886 9BE3E0A3
XX 攻击位置 00~FF 共256次
XXXXXXXXXX 00B79C53641C1F5C 4AC8733B675778F1 9BE3E0A3
YY 新攻击位置 00~FF 共256次
长度=16 的明文只有下列一组附合 CRC32=9BE3E0A3
输入明文 输出密文 校验结果
0000000000000001CEDD1626 DEBB20E3EDDA1000641C1F5C 9BE3E0A3
YYYYYYYYYYYYYYYYNNNNNNNN Y:可攻击位置 N:不准攻击位置
00000000410671DACFDD1626 DEBB20E3EDDA1001641C1F5C 9BE3E0A3
00000000C30A936CCCDD1626 DEBB20E3EDDA1002641C1F5C 9BE3E0A3
X 攻击位置 0~F 共16次
实际有密文位数-64个攻击点,如
输入明文 输出密文 校验结果
00000000C30A936CCCDD1626 DEBB20E3EDDA1002641C1F5C 9BE3E0A3
X 攻击位置 0~F 共16次
C46692D5C30A286CCCDD1626 DE0020E3EDDA1002641C1F5C 9BE3E0A3
YY 新攻击位置 00~FF 共256次
由crchead, crcfinal可快速得出1个32bit的值,这个32 bit是可逆的。
附件是我写的一个工具。
比如:
crchead = 0xFFFFFFFF;
crcfianl = 0xDEADBEEF;
5 byte, 每个byte范围 0 - FF,
则符合值为:
004E3726D4
01D80721A3
026256283A
...
FE55E8238E
FFC3D824F9
它们的crc都是
0xDEADBEEF
输入明文 输出密文 输入碰撞等效明文 校验结果
004E3726D4 E6B5A5E021524110 004E3726DC826E1F DEADBEEF
YYYYYYYYNNNNNNNN Y:可攻击位置 N:不准攻击位置
01D80721A3 E6B5A59721524110 01D80721AB826E1F DEADBEEF
026256283A E6B5A50E21524110 0262562832826E1F DEADBEEF
FE55E8238E E6B5A5BA21524110 FE55E82386826E1F DEADBEEF
FFC3D824F9 E6B5A5CD21524110 FFC3D824F1826E1F DEADBEEF
XX 攻击位置 00~FF 共256次
实际有密文位数-32个攻击点,如
输入明文 输出密文 输入碰撞等效明文 校验结果
XXXXXXXXXX E6B5A5CD21524110 FFC3D824F1826E1F DEADBEEF
XX 攻击位置 00~FF 共256次
XXXXXXXXXX 00B79C53641C1F5C 4AC8733B6FBB6CF9 DEADBEEF
YY 新攻击位置 00~FF 共256次