COM盾中恒为零和无分支的实现
三个恒为零
1.反篡改中的CRC
可以采用双向CRC初值碰撞计算出两个初值,运行程序后会得到一个恒为零的校验和。crc=0,只要被篡改crc必然非零
2.反跟踪中的时间差
采样初始时间t0,当前时间t1,时间差t,反跟踪时间3秒
有t=(t1-t0) & ~3;
t=0,只要在3秒以内,t恒为零,被跟踪超过3秒t必然非零。
3.CRC三密钥验证
待验证数据abc,设置校验和为0,abc为CRC密钥,逆运算得到d。
正运算必然得到校验和恒为零。crc=0
只要abc有任何错误crc必然非零。
这个也是无分支验证abc是否正确的好方法。
三个无分支(crc正确恒为零)
1.for(i=crc;i<len;i++)
2.for(i=0;i<len-crc;i++)
3.for(i=0;i<len;i+=1+crc)
还有数组无分支
array[(i+crc)&size]
总之,“恒为零”是“天下无贼论”的精华所在。因为有恒为零,才能实现“无分支”,这样必然导致错误扩散。 |