原创 HotWC3网上运算器CRC碰撞操作方法

2009-11-4 01:18 3370 6 6 分类: MCU/ 嵌入式

最新版的HotWC3网上在线CRC运算器V4.11开始全部兼容优秀的CRC计算器fsum frontend-1.5.5.1软件
并全部演算正确。
 
由于IE版面的问题,将所有功能集成到一个功能下拉选择框内,它内嵌许多有用的功能。类似一个带有
CRC运算的计算器。
 
本CRC运算器支持hex半字节和ascii单字节输入,在"CRC运算"功能下点击运算即可对输入进行CRC正运算,
运算过程即密文在输出框内,校验和在结果框内。
半字节的个数或ascii字符的双个数在“碰撞”钮的右侧,表示输入的半字节位数。
其“0”为与输出等长的位数,主要用于CRC碰撞。
 
点击“还原”即可得到输出框对应的输入,注意结果将替代最后一组密文(CRCN的位数)
 
CRC碰撞操作方法:
例如CRC32 多项式=右移CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1
权值=0xEDB88320 初值=0xFFFFFFFF 出值=0xFFFFFFFF
 
输入:123456 输出:263E56C5 结果:D9C1A93A 碰撞位数(输入的位数):6
 
即:在CRC32下123456(小端)下得到校验和0x263E56C5
点击“还原”,输入不变,因为碰撞位数=6,即就是操作本身。
 
点击“碰撞”,得到碰撞位数=0即要求碰撞的全部长度(输出的总长,权值的整数倍)
点击“还原”,输入得到:26625E59,即:
在CRC32下26625E59(小端)下也得到相同的校验和0x263E56C5
 
故:当输入不为权值的整数倍(CRC32为32位即4个字节)时,本身就会发生1次CRC碰撞。
 
由于 输入字节 mod CRC32字节数 = 3 mod 4 = 1 即1个字节至少发生2^8=256次碰撞
 
由于输入字节小于CRC32字节数,故只能有1次碰撞。
 
若输入为:12345678AB 则会发生至少256次CRC碰撞,改写碰撞位置的数据点击“还原”:
 
输入12345678AB 输出B5F6F1679267786A 结果6D988795
它实际为:
输入1234567869C6CAC0 输出B5F6F1679267786A 结果6D988795
 
碰撞位置 B5F6F1XX9267786A XX=00~FF
例如:
输入89F81CA50EC6CAC0 输出B5F6F1009267786A 结果6D988795
输入C8FE6D7E0FC6CAC0 输出B5F6F1019267786A 结果6D988795
输入4AF28FC80CC6CAC0 输出B5F6F1029267786A 结果6D988795
。。。。。。。。。。。。。。。。。
输入508876AAF1C6CAC0 输出B5F6F1FF9267786A 结果6D988795
 
任意碰撞(清除“碰撞位数”并且输出是权值的倍数以上):
由于输出字节大于权值字节,故可以任意碰撞,碰撞次数=2^(输出字节数-CRCN)
 
输入1234567869C6CAC0 输出B5F6F1679267786A 结果6D988795
碰撞位置                 XXF6F1679267786A XX=00~FF
输入ED10102B69C6CA75 输出00F6F1679267786A 结果6D988795
。。。。。。。。。。。。。。。。
输入0EC318E569C6CA8A 输出FFF6F1679267786A 结果6D988795
 
输入1234567869C6CAC0 输出B5F6F1679267786A 结果6D988795
碰撞位置                 B5XXF1679267786A XX=00~FF
输入F824812869C63CC0 输出B500F1679267786A 结果6D988795
。。。。。。。。。。。。。。。。
输入E99F4C1169C6C3C0 输出B5FFF1679267786A 结果6D988795
 
输入1234567869C6CAC0 输出B5F6F1679267786A 结果6D988795
碰撞位置                 B5F6XX679267786A XX=00~FF
输入710724216937CAC0 输出B5F600679267786A 结果6D988795
。。。。。。。。。。。。。。。。
输入38EAAD4B69C8CAC0 输出B5F6FF679267786A 结果6D988795


 








http://bbs.pediy.com/showthread.php?t=99977
 




引用:
 
像 '1234' 的 CRC32 为 9BE3E0A3
我试过 长度=4 的明文 只有 '1234'
菜农回答:此话是对的,它即为"CRC签名"
 
但长度=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^(12-4)次碰撞!!!
 
输入:0000000000000001CEDD1626
输出:DEBB20E3EDDA1000641C1F5C 结果:9BE3E0A3
攻击位XXXXXXXXXXXXXXXX641C1F5C
菜农开始攻击!
 
输入:FFFFFFFF00000000CECDCCCB
输出:0000000000000000641C1F5C 结果:9BE3E0A3
 
输入:E075C51A0E9B2BF4DFDCDDDA
输出:1111111111111111641C1F5C 结果:9BE3E0A3
 
输入:9D0AD96D9D0AD96D31323334
输出:FFFFFFFFFFFFFFFF641C1F5C 结果:9BE3E0A3
 
现在再选择16位攻击(2^(16-4)次碰撞):
输入:FFFFFFFF0000000000000000CECDCCCB
输出:000000000000000000000000641C1F5C 结果:9BE3E0A3
 
输入:9D0AD96D9D0AD96D9D0AD96D31323334
输出:FFFFFFFFFFFFFFFFFFFFFFFF641C1F5C 结果:9BE3E0A3
 
 
哈哈~~~现在看出来了吧,碰撞次数一定是个“天文数字”~~~

所以,菜农搞得“CRC任意碰撞”是“可以预测的”

当CRC输入位数=CRC权值即多项式时,此CRC将无任何碰撞发生,此时的CRC可用于数字签名。

这样的无碰撞机制的CRC与MD5等号称无碰撞的散列函数最大的不同:

线性,绝对无碰撞而非号称,因为此时全部的数据都在一个CRC编码矩阵中。
可逆,但必须知道权值和初值及出值和方向。

而MD5是由4个特定数据和4种非线性函数组成的,但它已被发现有MD5碰撞,所以签名是不可靠的,
虽然MD5的碰撞概率很小。

而CRC的碰撞概率是已知的,即2^(输入字节数-CRCN字节).

当输入字节数==CRCN字节时,无CRC碰撞,
当输入字节数<CRCN字节时,有1次CRC碰撞(和CRCN等长的必有一个)

故CRC要用于数字签名,只要满足输入字节数==CRCN字节即可,但它的缺点是有CRC密钥(权、方向、出入值)
此种情况下,出值可以恒为0,只要知道权值和初值即可简化CRC密钥。故有“CRC密钥碰撞”。

菜农虽然不知什么原因CRC128被MD5等散列函数所替代,但菜农坚信CRC256,CRC512,CRC1024一定不会比MD5弱~~~
只是计算机位数的限制,实际CRCN可逆算法可以让N为无穷大。

菜农的HotWC3已满足内核任意CRCN变化,因为CRC位域N可以随意调整。

从HotWC3运算器支持位域4即可输入半字节可以看出菜农说的绝非梦话~~~只是俺的知音太少~~~

或用菜农的三点攻击法则,但必须知道特定三组的明文与密文对,或更多的明文与密文对来攻击CRC权值。
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条