能力值:
( LV2,RANK:10 )
|
-
-
2 楼
实际很简单,这要和CRC运算的规则有关系:
CRC运算由初值,权值,明文流和密文流四部分组成。
每次一个完整的CRC运算由初值,权值,一组对应的明文和密文。
特别注意:
CRC运算的结果即密文将作为下次CRC运算的初值或整个CRC运算的校验和。
为了完成“CRC碰撞”,就至少需要2对明文和密文。
最后1对中的密文就是我们要求碰撞的校验和。
例如(左移CRC4,权=D,想碰撞A):
第1步设想的模板:
初值:0 输入:YZ
权值:D 输出:XA
根据CRC的性质,输出中的密文X就是我们准备的“碰撞种子”。
密文X的初值=0,而且又是明文Z的初值。
第2步任选一个“碰撞种子”,如X=8.
初值:0 输入:YZ
权值:D 输出:8A
从下图中的CRC解码矩阵(CRC逆运算),可以查表:
明文Y=左移CRC解码矩阵D[初值0,密文8]=E
初值:0 输入:EZ
权值:D 输出:8A
第3步用密文8做为明文Z和密文A和CRC初值得到明文Z
初值:8 输入:Z
权值:D 输出:A
从下图中的CRC解码矩阵(CRC逆运算),可以查表:
明文Z=左移CRC解码矩阵D[初值8,密文A]=B
初值:8 输入:B
权值:D 输出:A
经过3次运算就得到了X=8,Y=E,Z=B:
填入
初值:0 输入:YZ
权值:D 输出:XA
得到
初值:0 输入:EB
权值:D 输出:8A
即第1个“碰撞种子”X=8得到明文EB,校验和=A
同理再任选一个“碰撞种子”X=9,得到:
初值:0 输入:6A
权值:D 输出:9A
故EB和6A后会得到同一个校验和A,即发生了“CRC碰撞”。
以上分解了“CRC碰撞”的过程,用工具只要填入不同的“碰撞种子”,
点击“还原”即可得到相同的校验和及对应的明文流。
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
等我学好了,再来拜读。
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
建议菜农去弄个嘉宾版主当当。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
|
能力值:
( LV9,RANK:180 )
|
-
-
6 楼
请问你的流程图+一些文字注解是用什么画的?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
CRC编码矩阵与CRC编码表之间的关系如下:(其中:初值为上次的密文)
密文=CRC编码矩阵[初值,明文]=CRC编码矩阵[上次的密文,明文]
密文=CRC编码矩阵[0, 初值 xor 明文]=CRC编码表[初值 xor 明文]
密文=CRC编码矩阵[0, 上次的密文 xor 明文]=CRC编码表[上次的密文 xor 明文]
明文=CRC解码矩阵[初值,密文] = CRC解码矩阵[上次的密文,密文]
明文=初值 xor CRC解码矩阵[0, 密文] = 初值 xor CRC解码表[密文]
目前教科书和网上流传的CRC查表法可归纳为:(注一般为左移CRCN)
密文=CRC编码表[((初值 >> (N-k)) ^ 明文) & (2 ** k - 1)] ^ (初值 << k)
其中N为CRCN,即CRC4,CRC8,CRC16,....k=4,8,16,... **表示乘方运算 ^表示异或运算 >> <<表示移位
N >= 4,一般取N>=16,k=8,即256个数据一个CRC表。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
请问你的流程图+一些文字注解是用什么画的?
Visio的“文本工具”。
本想上传这个框图的源文件HotWC3.vsd,可惜本论坛在vista下不允许
|
能力值:
( LV2,RANK:15 )
|
-
-
9 楼
多谢LZ。不错的工具。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
|
|
|