点击直接运行:
112位HotWC3/CRC通用网上演算器V2.18
在密码学中,混淆与扩散是密码中最基本和最精华的一部分。
混淆可以使解密者无法从明文与密文的对应关系中寻找不出它们与密钥之间的联系。
扩散就是明文或密钥某一位发生变化则对应的密文将引发“雪崩现象”即“面目全非”。
一般常用的是将密钥置换为子密钥再与明文混乱置换、结构交叉互换等各种方法以达到
混淆与扩散的目的。
HotWC3密码采用“各行其道、密钥混淆、随机扩散”的原则:
1.用可逆的核算法CRC8在结构上分为三部分,即CRC密钥、明文流及密文流。
2.在结构上几乎完全对称地化为左右两部分。
从框图上看明文与密文之间几乎无任何关系,唯一的关系就是它们之间的XOR后对天地
和星期两个子密钥的变动。
那么HotWC3如何实现混淆与扩散呢???
在CRC算法中,当CRC密钥确定时,CRC8实际是一张0~255不重复数据的表格。
此时明文对应于唯一确定的一个密文。
故CRC8只是256!(=8*10^506)全排列表中其中的2^16个表格。
那么只要保证每次明文输入时密钥是随机变化的,也就确定了一个随机变化的密文。
注意:
在CRC初值=0时,且权=0,或左移CRC权=1,右移CRC权=0x80时,将发生明文=初值
由于CRC的冗余,即“多对一的关系”,每个密文将对应2^16表格中的某个明文,这种
关系是不可逆的,故不同的密钥就达到了“混淆”的目的。
CRC8密钥碰撞有2^8=256次,即确定的一对明文与密文对应256个不同的密钥(初值、权及方向)。
HotWC3的扩散是随机的。它实际与混淆表格的位置有关。
故HotWC3密码要达到混淆与扩散的目的,只要做到每次加密解密CRC的密钥随机即可。
从框图上看HotWC3是有几个“弱密钥”的,如全部子密钥为0,上部分的子密钥为0x55
0xaa等,因为这些可能使CRC密钥就循环重复几次,即CRC表只有几个。
当然框图是最简洁的,这主要考虑硬件的实现。而且子密钥要先经过内部的初始置换以保证
子密钥的“弱密钥”现象的发生最少。
改进方法可能要加入反馈交叉等方法,使密钥伪随机周期加大。
等和教授们探讨后找出不足而定。
举3个HotWC3混淆和扩散的数据实例(
测试工具):
昨日数据:
日期密钥:20090718,用户密钥:12345678,扩展密钥:0000
明文:00000000000000000000000000000000
密文:D5096821C4FBBF51E9CA20F97A54BCE5
今日数据:
日期密钥:20090719,用户密钥:12345678,扩展密钥:0000
明文:00000000000000000000000000000000
密文:E93212BB9FA455524E0D51A9AFDAD49F
明日数据:
日期密钥:20090720,用户密钥:12345678,扩展密钥:0000
明文:00000000000000000000000000000000
密文:2232731E57D89A030444F0D86564DD1F
从以上3组数据可以看出:
1.明文全0,从密文与明文之间的关系很难反推出密钥,即“混淆”---晕
2.密钥之间差一位,3组密文流“面目全非”,即“扩散”---更晕
3.从今日数据和明日数据密文流的第2个数据32可以看出发生了“密文碰撞”。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)