HotWC3与DES加密算法之比较

2009年07月21日 19:31    发布者:hotpower
本帖最后由 hotpower 于 2009-7-22 21:35 编辑

HotWC3与DES加密算法之比较

DES是上世纪70年代由IBM发明后被作为美国数据加密标准。HotWC3是中国的一位不懂数学的老菜农
的开心之作,以下简称为WC3加密算法。

1.加密体系归属
DES属于分组加密法,WC3属于流加密法。
DES分组为64位,即每次加密需要8个字节。
WC3内核采用CRC8算法,故分组为8位,即每次加密只需要1个字节。
DES为固定分组,WC3可根据内核的变化得到不同的分组数据位数。
例WC3采用CRC64时,分组也随之变为64位. 故WC3的分组位数由CRCn(n=4,8,12,16,32,64,128,...)决定。

2.密钥长度
DES的密钥长度为56位(64-8),WC3的密钥长度与CRCn算法有关。
内核为CRC8的WC3密钥长度为112位。以下所有对比将全部采用CRC8的WC3或WC38。

3.子密钥的产生
DES主密钥为56位,产生16轮每轮48位的子密钥。用以和半组32位明文每轮的混淆。
WC3主密钥为112位,产生结构对称的8对密钥流,其中1对各为32位密钥流,其他都为8位密钥流。
由于流密码的原因,WC3的“轮”即为每次的加密和解密过程。每轮8对密钥流以不同方式和方向环移不同的位数。
每轮参与直接作用的密钥即为本轮的子密钥。WC3每轮的子密钥为72位。

4.算法的f函数
f函数是DES加密法中最重要的部分,其重点就是S盒。其次是扩展及压缩置换。
CRC8正运算函数和CRC8逆运算函数是WC3密码不可缺少的部分,它同时具备了S盒和扩展作用。

DES右半部分明文数据为32位,每轮子密钥的长度为48位,且每个S盒位6入4出,8个S盒共需48位输入,故必须将明文
扩展到48位才能与子密钥混淆,进入S盒进行非线性置换。
DES的32位明文经过扩展置换后为48位,原明文的一半即16位与密钥中的16位作用,原明文的另一半16位要同32位
密钥作用。

DES的S盒实际类同CRC4,它与CRC4同属于0~15全排列表即16!=20922789888000个表。
用矩阵的行列表示为15!行16列,即DES和CRC4的S盒“祖宗”是个1307674368000行16列的矩阵。
每个S盒为4行16列,8个S盒也不过32行16列。
CRC4每个CRC权对应1个S盒,共16个S盒,每个S盒为16*16的矩阵,共256行16列,是DES的S盒的8倍。
WC3的S盒就是CRC8,每个CRC权对应1个S盒,共256个S盒,每个S盒为256*256的矩阵,共65536行256列。

DES的扩展置换实际是明文1个字节扩展半字节即扩展0.5倍,WC3采用明文与初值组合扩展256倍的方法。
DES的压缩置换实际所有S盒4*8=32位出口的32位置换即交换,所谓压缩是指S盒的48位入32位出的结果。
同理WC3在CRC8出入的关系是(8位明文+8位初值+8位权)24入8出(8位密文),实际也是所谓的压缩。
DES的S盒和CRC的S盒的根本区别在于前者是所谓的“非线性”即不好用函数表述及实现,后者可用函数表述和实现。

5.算法的实现过程
DES和WC3都是对称密码体系,即加密和解密共用同一密钥。
DES的加密和解密算法相同,不同的是子密钥每轮次序的不同。
WC3的加密和解密算法不同,子密钥流每轮次序相同。
WC3的加密过程为CRC8的正运算函数即CRC8编码矩阵的查表过程。(对称矩阵)
WC3的解密过程为CRC8的逆运算函数即CRC8解码矩阵的查表过程。(非对称矩阵)

6.安全性
DES设计寿命为10年,但至今还在沿用,说明它设计的合理,虽然S盒之谜留有遗憾。
每个密码设计者都想使自己设计的密码不可破解,当然这都是设计者本人的最大愿望。每个成熟的密码
体系都要承受密码分析学中的各种攻击方法。

WC3的防护设计主要在两个被攻击的部位:密钥流和加密算法。
与DES一样,WC3也有弱密钥和半弱密钥之分。站在流加密法的角度,可认为是密钥流伪周期固定且远远小于
明文流或密文流的长度。弱密钥和半弱密钥会大大降低密码的安全强度。
WC3用适当的初始密钥置换以降低此现象的发生概率,即用三角变换和星期及天干地支变换。故各自密钥流
的命名也随之而生。W(星期)C(CRC)3(三角)也由此而来。

密钥流的设计考虑了软硬件的实现和使用者对结构理解的简洁,只采用了一般简单的环移。为达到密钥流
的伪随机周期最大,采用了各个子密钥流不同的环移互控方式。

在三角密钥流即CRC初值密钥流和CRC权值密钥流设计上,采用交叉反序环移,虽然它和整体一个字(两字节)
环移对密钥的流动一样,但反序会造成逆向分析的难度。
多对密钥流同时保护WC3的重点CRC权以阻止对CRC8内核算法的攻击。即阻止攻击CRC编码表。

日期和用户密钥流各为32位,由天地和星期流控制不同的移位次数,同时它们又反控其他密钥流的移动。
天地和星期流除控制其他密钥流的移动外还监视明文流和密文流的变化。阻止利用差分攻击以及基于明文
和密文的攻击。

扩展密钥流主要隔离明文流和密文流和CRC8内核的直接联系,阻止选择明文的攻击。

总之WC3的安全性在于密钥流的伪随机周期的长度和对CRC权值和方向的混淆。

7.对比总结
DES已应用30多个年头,它是分组密码设计的典范,尤其是其神秘的S盒倾倒了无数个分组密码设计者。
WC3虽然属于流密码,本应该把重点放到密钥流的伪随机周期设计上面。DES的S盒之谜使WC3设计者本人
倍感兴趣,它的左右分组结构非常清晰,故WC3的设计中DES的烙印很深。

从WC3的框架结构可以看出:
选择CRC做WC3的内核算法后大大区别的以往的流密码设计,CRC的初值和权满足了WC3的左右对称结构。
使本应该一路的密钥流分成2个密钥支流,这无形中加倍了密钥的长度,增强了密码体系的安全强度。
同时也了结了拥有S盒的梦想,虽然它是个“线性”的S盒,但它的矩(巨)阵和“多入口参数”可以弥补不是
“非线性”的遗憾,同时CRC的“线性S盒”也虚拟地造就了CRC拥有海量的CRC编解码矩阵表格。

总之HotWC3是个密钥位数及核算法可以随意升降级别的流加密体系,它设计特点独到,不随大流。
HotWC3的设计原则:“各行其道、密钥混淆、算法扩散”。它的安全性需要时间的考验和专家的论证。

8.展望
菜农不图谋什么,只要“曾经拥有”。是的,我做了,做到了。用心了,心用了。
密码就是要被破解的,有人去破解,而且破解了,对于密码的设计者不是遗憾而是“光荣和荣耀”~~~
因为他的“密码”曾有无数人的关注和为之付出的努力,总比没人重视要强百倍~~~

菜农此生在MCU方面不知“扒光”了多少程序设计者的“衣裳”,每次都向他“默默地致敬”~~~
菜农也等着有人向俺“默默地致敬”~~~

菜农HotPower@126.com 2009.7.21 于西安雁塔菜地

点击直接运行: 112位HotWC3/CRC通用网上演算器V2.19

网友评论

宇宙飞船 2009年07月21日
老农还没有醒来?小心把电工们带进胡同里去!俺费了那么多口水,裤子都不给俺穿一条!
宇宙飞船 2009年07月21日
//WC3内核采用CRC8算法,故分组为8位,即每次加密只需要1个字节。
CRC的多项式产生的商只是随机数的一个子集
hotpower 2009年07月21日
晕~~~传统密码只有分组之说,和什么多项式和随机数扯不上。
宇宙飞船 2009年07月22日
老农搞了这么多年的MCU编程,花了那么多的心血研究一些被误认为是很牛皮的东东,竟连一条公式也没能总结出来,还被那些眼高手低的理论家牵着鼻子走!真怀凝老农是否属电工行列!
有时不得不叹惜一下,搞技术还是需要一点天份的!:lol
粉丝 2009年07月22日
//----WC3内核采用CRC8算法,故分组为8位,即每次加密只需要1个字节。
CRC只要初中一年级的数学知识,看来老农至力于研究初级的算法,非把基础打牢不可!
老夫不得不佩服!
卖西瓜 2009年07月22日
楼上你初中一年级的数学也太厉害了吧
潜艇8421 2009年07月22日
多项式除法的确是初中一年级第二学期学的,老农大可以考证一下老版本的初中数学课本(新版的俺不清楚)。
phoenixmy 2009年07月22日
应该出个题目,看看谁能破解了这个算法

光在这里听一些人磨嘴皮子,没啥用处,浪费时间,呵呵
hotpower 2009年07月22日
本帖最后由 hotpower 于 2009-7-22 20:38 编辑

知道“CRC长除法”算是“进步”,可惜“CRC长除法”只是菜农
说的“CRC”初值为0的特例。
俺把CRC已“升华”到CRC编解码矩阵的时代。http://blog.ednchina.com/hotpower/244919/message.aspx#
数学上的CRC和菜农说的有些离谱,不信查些资料去~~~
中学的CRC有4个参数吗???
我记得长除法好像只有2个~~~

http://www.gotop.com.tw/waweb2004/htm/correct/AEB001800/AEB001800.pdf

16181618

用下面的,设置:CRC4,初值=0,权=9,输入=D0F 结果看和上面一样否???
http://www.hotc51.com/HotPower_HotWC3.html

若初值变一个,如何长除法???

估计这个中学老师没教过吧~~~
宇宙飞船 2009年07月22日
取三位CRC余值只有8种不同的数据输出映射,离2^112次方差太远了!
宇宙飞船 2009年07月22日
用CR4 只要用16次扫描就能破解,CRC8也就是扫描256次就能破解!
要么在程序中固定多项式?要么就动态传送多项式?老农说过算法公开,那就是讲多项式已知!
那怎么加密?还有加密的必要吗?
hotpower 2009年07月22日
本帖最后由 hotpower 于 2009-7-22 23:00 编辑

算法公开,多项式却是密钥的一部分。飞船你理解的CRC是现在大家从数学中学的。
菜农说的CRC比其强大的多~~~
宇宙飞船 2009年07月22日
//多项式却是密钥的一部分。
只要是搞MCU的电工,对CRC都不会陌生。多项式选4位--CRC4,别人只要穷举16次就能破解,也就是说要达到穷举2^112次方,多项式必然达到112位。
总共才112位的空间,多项式占完了,那待加密的数据放在哪?
xwj 2009年07月23日
顶!
虽然俺没时间看;P
一朝成名 2009年07月23日
顶!
虽然俺没时间看;P
xwj 发表于 2009-7-23 07:49 http://bbs.eechina.com/images/common/back.gif

丫,老x出现了,不容易阿~
hotpower 2009年07月23日
晕,建议你先看看“流密码”的工作原理。
宇宙飞船 2009年07月24日
老农又想对俺下迷药了,俺是百毒不侵的。:lol
别支开话题了,你还没能自完其说那有可能占据了112位的多项式是怎么传送的????
你最好想清楚再说,别露出马脚让俺有机会攻击!
俺非得把把老农咂得再呕吐多一次不可!
hotpower 2009年07月24日
飞船你实在“无药可医”~~~

好好玩玩“演算器”,把密钥改几位试试便知。

再框图画的很清晰。只要密钥流“无规则滚动”,就可造就千百万个不重复的“密钥流”。
宇宙飞船 2009年07月24日
//---发表于 7 天前 22:25 | 只看该作者 老HOT
//---所以好的密码系统必须要通过基于明文或密文等数十种方法的攻击的~~~
//---算法不公开就不配成为“密码”~~~
老农不要自打嘴吧哟,你看你先前下的迷药多么的牛皮!

那好,俺现在就把“1234”输入到你的算法去,出来的肯定是一般人不能识别的一堆乱码。
假若你是基于CRC4的,俺只要穷举CRC多项式1--->16 次。就能还原出 “1234” 来
假若你是基于CRC4*CRC8 , 俺只要穷举多项式的次数16*256 次就能还原来。
跟2^112 次方差多少了????这么简单的逻辑老农还在钻啊???真搞不懂!!!
hotpower 2009年07月26日
本帖最后由 hotpower 于 2009-7-26 10:59 编辑

拜托了,CRC8密钥为65536个,CRC4密钥为256个

HotWC3弱密钥的解决方案

根据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编解码矩阵对应唯一的阵内元素初值、明文、密文,
反之,给定初值、明文、密文,无法对应唯一的编解码矩阵。