http://bbs.pediy.com/showthread.php?p=661009#post661009
根据CRC可逆性质,CRC权值必须满足:
右移CRC时,最高位为1,左移CRC时,最低位为1.
这在CRC的(本原)多项式中肯定是满足的,但要作为CRC密钥的一部分可能不会满足。
因为CRC密钥流是伪随机在发生变化的,不能保证其可逆之条件。
列出CRC4权值及变换后的结果:
权值:0 1 2 3 4 5 6 7 8 9 A B C D E F(未变换前)
右移:8 9 A B C D E F 8 9 A B C D E F
左移:1 1 3 3 5 5 7 7 9 9 B B D D F F
可以看出:
0, 2, 4, 6从未用过,即最高位和最低位全为0的4个数据从未使用过。
而与之对应的最高位和最低位全为1的4个数据:
0+9=9,2+9=B,4+9=D,6+9=F在运算中替代了它们的作用。
其他数据在每个方向只用2次,而9,B,D,F却用了4次。且同时出现在两个矩阵中。
CRC权变换类似于DES的S盒入口前的扩展变换,但是在CRC运算前做压缩置换。
压缩置换是单向不可逆的,即权只使用了12个数,无法方向推出原先的数。
从CRC4编解码矩阵中可以看出:
CRC编码矩阵(权和方向已确定)为对称矩阵,即行(初值)列(明文)可以交换。
其主对角线上的元素为0,即矩阵行列相等时元素为0,
也就是CRC最常用的一个特性---初值=明文时,密文=0.
再有一个很有趣的现象:
当右移CRC4,权值=0或8,或左移CRC4,权值=0或1时,CRC4编解码矩阵相等。
即都是对称矩阵。
在CRC编码中,行=初值,列=明文,元素=密文,行列可以交换。即密文=[初值,明文]=[明文,初值]
在CRC解码中,行=初值,列=密文,元素=明文,行列可以交换。即明文=[初值,密文]=[密文,初值]
此时初值、明文、密文的关系可以随意转换,即:
初值=[明文,密文]=[密文,明文]
明文=[初值,密文]=[密文,初值]
密文=[初值,明文]=[明文,初值]
故HotWC3有三个弱密钥0x00,0x01,0x80,它们公用一个CRC编解码矩阵。
初值、明文、密文的关系很清晰,但无法知道哪个矩阵是真的矩阵。
所以CRC编解码矩阵是单向不可逆的,即:
一对CRC编解码矩阵对应唯一的阵内元素初值、明文、密文,
反之,给定初值、明文、密文,无法对应唯一的编解码矩阵。
文章评论(0条评论)
登录后参与讨论