打印
[COM盾软件加密锁]

COM盾中的反篡改(无碰撞)机制

[复制链接]
78|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2023-9-18 20:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
COM盾中的反篡改(无碰撞)机制
COM盾的反篡改机制采用双CRC初值正反向保护机制,以CRC8保护为例,数据流如下(XX为正向初值,YY为逆向初值,1234ABCD是需要保护的数据,XXYY位置任意):
1234XXYYABCD
算法:CRC8_PEC=CRC8L_07_00_00
正向数据为1234ABCD,初值XX为8F(运算不包含XXYY),校验和为00。
反向数据为CDAB8F3412,初值YY为65(运算包含XX不包含YY),校验和为00。
12348F65ABCD(正向初值8F,不包括8F65,校验和00)
CDAB658F3412(反向初值65,不包括65校验和00)
安全性检测(根据CRC碰撞原理)
在正向初值8F保持不变时,正向数据流1234ABCD至少要有两个字节的数据同时发生变化,即有可能发生碰撞,即伪造数据。
CRC碰撞次数(不是碰撞概率)是可以准确地给出,即(数据长度-1)*256。
例如数据长度为1时,不会发生碰撞。
数据长度为2时,将会有256次,数据长度为3时,将会有512次。
故CRC碰撞是可以事先预测的,没有网上的“概率论”之说。
参见www.hotcrc.com, 点击“CRC碰撞”,可以任意制造CRC碰撞。

下面对数据12348F65ABCD进行碰撞测试,其中8F65是隐藏的正向初值和逆向初值,用于验证必须放在数据流中。
下面给出三组随机碰撞数据(8F65不变)。
AD388F658243(正向初值8F,不包括8F65,校验和00)
0E0A8F655055(正向初值8F,不包括8F65,校验和00)
7F978F654328(正向初值8F,不包括8F65,校验和00)
因为这些碰撞都是正向运算的,故正向校验和都恒为零。
4382658F38AD(反向初值65,不包括65,校验和65)
5550658F0A0E(反向初值65,不包括65,校验和4E)
2843658F977F(反向初值65,不包括65,校验和21)
上面三个逆向运算校验和都非零全部错误,虽然可以满足正向初值8F制造碰撞,但碰撞后绝对无法同时再满足逆向初值65的再碰撞,即无法满足两次碰撞。
故有结论:
对被保护的数据进行正向和逆向两次CRC运算后,在理论上可以100%阻止碰撞的发生。

所以,COM盾中的反篡改(无碰撞)机制在理论上是无法篡改的。
虽然可以同时修改正向初值和逆向初值,但是是唯一的,即无碰撞的。
例如采用CRC32双初值和CRC64校验和这两种方法比对,前者是无碰撞的,而后者是有碰撞的,虽然位数很多。
即这两种方法存放的位数相同,但安全强度是不同的。

CRC碰撞测试网站:www.hotcrc.com
打开网页,直接点击“CRC碰撞”,显示“CRC逆运算结果=XXXXXXXXXXXXXXXX”,因为菜农采用的是CRC逆运算制造任意CRC碰撞,再点击“运算”可以看到CRC校验和没变,即验证了碰撞的发生。
不信你可以试试看~~~

菜农HotPower@163.com 2022.09.13 于西安雁塔菜地

使用特权

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

本版积分规则

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

1538

主题

21697

帖子

506

粉丝