打印
[CRC可逆]

用HotWC3/CRC网上演算器任意制造CRC碰撞

[复制链接]
2010|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2012-11-1 22:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原帖出处:http://bbs.pediy.com/showthread.php?t=93139

一. 用HotWC3/CRC网上演算器任意制造CRC碰撞

CRC碰撞对菜农来说实际是个"CRC的逆运算"~~~没网上帖子搞得如此复杂。

以下计算工具皆来自"HotWC3/CRC网上演算器"(采用小端模式)

假设选定CRC8=X8+X2+X1+1,即初值=0,权=0x07,左移
若明文即需要校验的数据为0x12,0x34
则CRC8和校验和为0xf1.

要制造“CRC碰撞”,即用另一明文流再做CRC8运算且校验和也为0xf1.

我们可以操作"HotWC3/CRC网上演算器"的“计算钮”后发现:

“密文流”此时为“7EF1”,即0x7e,0xf1.注意它尾部的“密文”0xf1实际也是CRC校验和。

在CRC密钥即初值、权及方向一定时,我们可以改写密文流且尾部的“校验和”保留制造“碰撞”

这样,密文流只要改写0x7e为任意值即可,假如改写为0x88.即密文流为"88F1"

操作"HotWC3/CRC网上演算器"“还原钮”后发现:

明文变为"59C2",即0x59,0xc2和0x12,0x34得到的CRC8的“校验和”都为0xf1~~~

不信可对明文"59C2"进行“计算”看看~~~

同理,还有其他254个“CRC碰撞”在等着你~~~

假若明文流长度加大,那麽“CRC碰撞”会迅速增加。

例如:明文流:“12345678”,CRC和为0x1c.
那么会产生2^56组“CRC碰撞”~~~

如:“12345363”,“12345476”,“12345571”,“1234577F”,“12345852”,...“06AD9D52”,“17CBFB25”....

所以,"HotWC3/CRC网上演算器"是很好的“CRC碰撞”即"CRC逆向"工具~~~

“CRC碰撞”好像“选择密文攻击”吧~~~

可惜CRC运算不能作为CRC密码~~~

二. 如何“人造”CRC碰撞???

还以明文“1234”和“12345678”为例,菜农来讲解如何“人造碰撞”。

可惜本坛的网页在vista下不能上传图片,十分之郁闷~~~

就模拟HotWC3密码网上在线演算器

初值:00  输入:1234   CRC:F1
加权:07  输出:7EF1

点击“CRC表”,可以从第2行看到:70 77 7E 79...

它表示输入为10时,对应输出为70,11对应77,12对应7E,13对应79

故有:

初值:00  输入:103A   CRC:F1
加权:07  输出:70F1

初值:00  输入:113D  CRC:F1
加权:07  输出:77F1

初值:00  输入:103A   CRC:F1
加权:07  输出:70F1

初值:00  输入:1234   CRC:F1
加权:07  输出:7EF1

初值:00  输入:1333   CRC:F1
加权:07  输出:79F1

这个例子估计有人明白了~~~“人造碰撞”实际很简单,不过下面的有点难度。


初值:00  输入:12345678   CRC:1C
加权:07  输出:7EF17C1C

如果我们想“碰撞”最小,即保留明文流不变的位数最小,“水平最高”也只有“12345XXX”了。

由于CRC“上次的密文是本次的权”,故保留:

初值:00  输入:12345XXX   CRC:1C
加权:07  输出:7EF1XX1C

又CRC是“流加密”,故(注意初值的变化,此时和上例就一样了):

初值:F1  输入:5XXX   CRC:1C
加权:07  输出:XX1C

点击“CRC表”,可以从第6行看到:6E,69,60,67,72,75,7C,7B...

它表示输入为50时,对应输出为6E,51对应69,52对应60,...56对应7C,57对应7B

故有:
初值:F1  输入:506A   CRC:1C
加权:07  输出:6E1C

初值:F1  输入:516D   CRC:1C
加权:07  输出:691C

初值:F1  输入:5264  CRC:1C
加权:07  输出:601C

初值:F1  输入:5678  CRC:1C  (就是例子)
加权:07  输出:7C1C


初值:F1  输入:577F  CRC:1C
加权:07  输出:7B1C

也就是:

初值:00  输入:1234506A   CRC:1C
加权:07  输出:7EF16E1C

初值:00  输入:1234516D   CRC:1C
加权:07  输出:7EF1691C

初值:00  输入:12345264  CRC:1C
加权:07  输出:7EF1601C

初值:00  输入:12345678  CRC:1C  (就是例子)
加权:07  输出:7EF17C1C


初值:00  输入:1234577F  CRC:1C
加权:07  输出:7EF17B1C

三.  CRC碰撞带来的灾难及预防

在数据通信中,特别是无线或单总线通讯中,由于外部各种干扰,可能会使CRC校验失误。

还以上例为例子:

初值:00  输入:12345678   CRC:1C
加权:07  输出:7EF17C1C

假若干扰的原因,数据被“插入”了8个比特位,即“12345X678”

由于一般协议以“块”为单位,就造成:

初值:00  输入:12345X67   CRC:1C
加权:07  输出:7EF1XX1C

如何消除这种灾难呢???

答案:可以在每个通讯包后加发CRC结果一个字节。

因为CRC有个“性质”,密文流的最后一个字节即为CRC结果,若在明文流尾再加入此字节(上一密文)。
则CRC结果恒为0.

即正常时:
初值:00  输入:123456781C   CRC:00
加权:07  输出:7EF17C1C00

当“插入干扰”来临时,即“12345X6781C”
有:

初值:00  输入:12345X6781   CRC:XX 肯定不为0
加权:07  输出:7EF17XXXXX

当然这种方法不能阻止“人造干扰”即逆向活动,但在通讯中是很有效果的~~~

相关帖子

沙发
xlhtracy| | 2012-11-2 11:12 | 只看该作者
菜农大叔  **里面的链接都打不开了

使用特权

评论回复
板凳
hotpower|  楼主 | 2012-11-2 11:30 | 只看该作者
回来改,第一个可以。

使用特权

评论回复
地板
xyz549040622| | 2012-11-2 13:05 | 只看该作者
给菜农顶贴!好久没来园地了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:[url=http://www.21ic.com/tools/HotWC3_V1.23.html]

1460

主题

21619

帖子

506

粉丝