打印
[CRC可逆]

用CRC编解码矩阵的概念任意制造CRC碰撞

[复制链接]
1536|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2012-11-1 22:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CRC编解码矩阵见:http://bbs.pediy.com/showthread.php?t=93844
可以看到用CRC编解码矩阵的概念更容易实现“CRC碰撞”

网上的一个求助帖:求生成的CRC64编码完全相同的两个串

我们可以做2个CRC64(左移):
设CRC64权(左移)=0x42F0E1EBA9EA3693  CRC64校验和=0x012345678ABCDEF
要求:
CRC64明文1=0x1122334455667788
CRC64明文2=0x8877665544332211

那么CRC64的2个初值为多少???
因为CRC64的初值我们无法立即得到,但我们可以间接得到:

在CRC正运算即CRC编码(对称)矩阵中,初值和明文可以相互交换。
在CRC逆运算即CRC解码(非对称)矩阵中,密文和初值锁定明文,密文和明文锁定初值。

故CRC64的初值1:
CRC64权=0x42F0E1EBA9EA3693
CRC64初值1=0x1122334455667788(先用明文1替代)
CRC64校验和=0x012345678ABCDEF(就是密文1或密文2)
求CRC64的逆运算即查CRC64的解码表,得到
CRC64明文1=0x2D6FD3ADE7D797FD(此时是逆运算时的明文)

故CRC64初值1=0x2D6FD3ADE7D797FD和CRC64明文1=0x1122334455667788
在CRC64权=0x42F0E1EBA9EA3693时的校验和=0x012345678ABCDEF

同理:
CRC64初值2=0xB43A86BCF682C264和CRC64明文2=0x8877665544332211
在CRC64权=0x42F0E1EBA9EA3693时的校验和=0x012345678ABCDEF

从以上2个例子可以看出:
CRC密码的密钥虽然由初值、权及方向组成,一旦权和方向确定后,初值、明文即密文
三者的关系只要知道两者即可求解出第三者。

故CRC密码的安全之关键在于对CRC权及方向的保护,即对CRC编解码矩阵的保护。

以上问题都归为一般的“CRC碰撞”,即权确定时的CRC碰撞。

若用其它CRC元素求解CRC权,则属于“CRC密钥碰撞”。

以CRC8密钥为例,它有2^16,其中初值2^8,(权+方向)为2^8.

(权+方向)对应1个矩阵,故有2^8次“CRC密钥碰撞”。

但是CRC密钥不确定时,最多只能发生一次“CRC密钥碰撞”。

即其它CRC元素所对应的权即编解码矩阵就不存在。

相关帖子

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

本版积分规则

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

1460

主题

21619

帖子

506

粉丝