EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2009/12/25 21:51:23

0

关于投票

对CRC安全密码的攻击及改进和穷举时间

http://www.hotc51.com/HotPower_HotWC3_V508d.html中,CRC安全密码是这样定义的:

将CRC的初值和出值分别作用于明文流和CRC结果流中,CRC本次的结果作为下次的一个初值之一。

假若:

CRC多项式:左移CRC8=X8+X2+X+1

CRC简  写:CRCL8_07_12_34

则:

      CRC运算     CRC安全密码
明文:121212      121212           
密文:007E03      343434

结果:37

可以看出,当选择几组相同的明文组进行攻击时,CRC安全密码会被攻击暴露出CRC的初值和出值。

这种攻击主要依据:

CRC编码矩阵[初值,明文]=0,其中初值=明文。

 

故修改之:http://www.hotc51.com/HotPower_HotWC3.html

CRC安全密码的正运算全部和CRC校验算法相同,差异在于:

CRC校验结果是由最后一次CRC运算的结果与CRC出值相异或后得到CRC的最终校验和。

CRC安全密码规定:

每次CRC的运算结果与CRC出值相异或后得到每次的密文,最后一次为CRC的最终校验和。

这样修改后,MCU具备内置CRC校验功能增加CRC安全密码功能所需的成本最低。

 

对CRC安全密码的攻击

多项式:左移CRC8=X8+X2+X+1
简  写:CRCL8_07_12_34

      CRC运算     CRC安全密码
明文:121212      121212           
密文:007E03      344A37
结果:37

看以看出CRC安全密码修改的必要。

 

多项式:左移CRC8=X8+X2+X+1
简  写:CRCL8_07_12_34

      CRC运算     CRC安全密码
明文:141414      141414           
密文:121212      262626
结果:26(12 ^ 34)

多项式:左移CRC8=X8+X2+X+1
简  写:CRCL8_07_34_12

      CRC运算     CRC安全密码
明文:8B8B8B      8B8B8B           
密文:343434      262626
结果:26(34 ^ 12)


多项式:左移CRC8=X8+X2+X+1
简  写:CRCL8_07_55_AA

      CRC运算     CRC安全密码
明文:909090      909090           
密文:555555      FFFFFF
结果:FF(55 ^ AA)


多项式:左移CRC8=X8+X2+X+1
简  写:CRCL8_07_AA_55

      CRC运算     CRC安全密码
明文:272727      272727           
密文:AAAAAA      FFFFFF
结果:FF(AA ^ 55)

 

从以上对改进后的CRC安全密码的攻击可以看出:

当用两组以上相同的明文攻击时,当密文组也对应相同时,

此时CRC安全密码的密文=初值^出值。故此结果也必须穷举验证,结论还是安全的。

 

以上和以下讨论都是假定CRC权值和方向都是已知时,故CRC安全密码是很安全的。

 

CRC安全密码的穷举时间:

假若可以论证CRC安全密码必须穷举,CRC密钥(权值、方向和初值及出值) 长度列举:

 

例CRC32,那么假若在知道CRC密钥(权值、方向)而CRC密钥(初值及出值)未知时,则:

密钥长度为2^64=18446744073709551616=1844674.4073709551616*10^13

1分钟=60秒=60*10^6uS
1小时=60分钟=60*60秒=3600*10^6uS
1天=24小时=24*60分钟=24*60*60秒=24*3600*10^6uS
1年=365天=365*24小时=365*24*60分钟=365*24*60*60秒=365*24*3600*10^6uS=31536000*10^6uS
   = 3.1536*10^13uS

假定MCU穷举1个密钥需要1uS,即1秒钟可以穷举一百万个CRC32密钥。

则2^64/(3.1536*10^13)=1844674.4073709551616*10^13/(3.1536*10^13)=600000年=60万年,

按50%概率则至少需要30万年破解CRC32密钥。

 

 

 

系统分类: 单片机  |  用户分类: HotCRC逆向世界  |  标签: CRC安全密码  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(267) | 回复(0)

发表于 2009/12/18 3:03:16

0

关于投票

“基于CRC密钥碰撞的CRC密码安全体系”的攻击次数

HotWC3网上CRC超级运算器V5.08开始支持CRC密码并可选择抗击差分攻击,本文数据全部由它提供

“基于CRC密钥碰撞的CRC密码安全体系”的攻击次数

例如:
多项式:左移CRC8=X8+X2+X+1 初值=0x12 出值=0x34
简  写:CRCL8_07_12_34
初值出值碰撞对表:(碰撞对根初值=0xAD,出值=0x00)
碰撞初值:0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
碰撞出值:0x4A, 0x4D, 0x44, 0x43, 0x56, 0x51, 0x58, 0x5F
......................****..............................
碰撞初值:0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17
碰撞出值:0x3A, 0x3D, 0x34, 0x33, 0x26, 0x21, 0x28, 0x2F
......................****..............++++............
碰撞初值:0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF
碰撞出值:0x1B, 0x1C, 0x15, 0x12, 0x07, 0x00, 0x09, 0x0E
........................................++++............
碰撞初值:0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
碰撞出值:0xAC, 0xAB, 0xA2, 0xA5, 0xB0, 0xB7, 0xBE, 0xB9

从表中可以看出(只有知道CRC权值及方向才可能得到此初值出值碰撞表):
初值和出值对共有256*256对,其中256对发生“初值出值碰撞”,概率为1/256对。

现以CRCL8_07_12_34的两组明文进行攻击以验证其“安全密码体系”之称号。
论证待菜农12月20日下午拜见王育民教授被肯定后将论据在网上展现~~~

已知:
明文=123456
密文=34C63F

开始(穷举)攻击:
选择CRCL8_07_00_4A攻击(表中第00组初值出值碰撞对)
明文=123456
密文=34BB36
可以看出只有第1组明文密文对攻击正确(密文34)

选择CRCL8_07_01_4D攻击(表中第01组初值出值碰撞对)
明文=123456
密文=34AE48
可以看出只有第1组明文密文对攻击正确(密文34)

选择CRCL8_07_11_3D攻击(表中第11组初值出值碰撞对)
明文=123456
密文=34F9BD
可以看出只有第1组明文密文对攻击正确(密文34)

选择CRCL8_07_12_34攻击(表中第12组初值出值碰撞对)
明文=123456
密文=34C63F
可以看出全部明文密文对攻击正确,因为初值出值1234就是CRC密钥的一部分。


已知:
明文=000000
密文=4A3743

开始(穷举)攻击:
选择CRCL8_07_00_4A攻击(表中第00组初值出值碰撞对)
明文=000000
密文=4A4A4A (004A应该是弱密钥)
可以看出只有第1组明文密文对攻击正确(密文4A)

选择CRCL8_07_01_4D攻击(表中第01组初值出值碰撞对)
明文=000000
密文=4A5F34
可以看出只有第1组明文密文对攻击正确(密文4A)

选择CRCL8_07_11_3D攻击(表中第11组初值出值碰撞对)
明文=000000
密文=4A08C1
可以看出只有第1组明文密文对攻击正确(密文4A)

选择CRCL8_07_12_34攻击(表中第12组初值出值碰撞对)
明文=000000
密文=4A3743
可以看出全部明文密文对攻击正确,因为初值出值1234就是CRC密钥的一部分。

基于CRC密钥碰撞的CRC密码安全体系的攻击次数:
由于CRC密钥碰撞,迫使必须穷举且至少攻击2个分组。
以CRC8为例,2个分组即明文密文流中的2对,在知道权值及方向和根初值时,
需要攻击概率为256组初值出值对的一半即128组初值出值对。

随着CRCn的增大,穷举次数将会倍增更大。

本加密算法不是以基于数学难题或“S盒N轮”,而是巧用“密钥碰撞”使其变为“理论上无法破解”,
故其加密体系是一种“理想的安全密码体系”。

为何安全请参见菜农的《对“基于CRC密钥碰撞的CRC对称密码安全体系”攻击结果》等文章。

 

菜农HotPower@126.com  2009.12.18 2:38 于雁塔菜地

 

●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\

系统分类: 单片机  |  用户分类: HotCRC逆向世界  |  标签: 安全密码  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(170) | 回复(0)

发表于 2009/12/16 22:52:13

0

关于投票

对“基于CRC密钥碰撞的CRC对称密码安全体系”攻击结果

HotWC3网上CRC超级运算器V5.08开始支持CRC密码并可选择抗击差分攻击,本文数据全部由它提供

在“菜农成功创建基于CRC密钥碰撞的CRC对称密码安全体系”一文中,对CRC改进如下:

基于CRC密钥碰撞的CRC对称密码安全体系:

该“密码安全体系”继承CRC算法的风格,改进如下:

1.初值将单独与每个明文异或而非“第1个明文”。

2.出值将单独与每个密文异或而非“最后1个密文”。

3.本次与出值异或前的密文与原始初值作为下次明文的输入初值。

  此“输入初值”都将同时得到原始初值和出值的保护。

现在先给出一些攻击数据:(以CRCL16_1021_1234_5678 为例)

1.攻击出“初值出值碰撞”的根初值

disCRCL16_1021_1234_5678[0x0000]=0xE4C4 即CRCL16_1021_E4C4_0000

2.攻击左权

   CRCL16_1021_1234_5678[0xE4C5]=0x1021

或 CRC[n]^CRC[n + 1]=0x1021

3.攻击初值出值数据表

随机抽取3组攻击数据表

   CRCL16_1021_E4C4_0000[0x4321]=0x2962 即CRCL16_1021_4321_2962

   CRCL16_1021_E4C4_0000[0x5678]=0x1E38 即CRCL16_1021_5678_1E38

   CRCL16_1021_E4C4_0000[0x8765]=0xFBB2 即CRCL16_1021_8765_FBB2

对5组数据表进行攻击:

密文=CRC编码矩阵[初值,明文]^出值=编码^出值

明文=CRC解码矩阵[出值,密文]^初值=解码^初值

-----------------------------------------------------------------------------

______ CRC_E4C4_0000 CRC_1234_5678 CRC_4321_2962 CRC_5678_1E38 CRC_8765_FBB2

-----------------------------------------------------------------------------

 明文   编码   密文   编码   密文   编码   密文   编码   密文   编码   密文

-----------------------------------------------------------------------------

0x0000 0x45BE,0x45BE 0x13C6,0x45BE 0x6CDC,0x45BE 0x5B86,0x45BE 0xBE0C,0x45BE

0xE4C4 0x0000,0x0000 0x5678,0x0000 0x2962,0x0000 0x1E38,0x0000 0xFBB2,0x0000

0x1234 0x5678,0x5678 0x0000,0x5678 0x7F1A,0x5678 0x4840,0x5678 0xADCA,0x5678

0x4321 0x2962,0x2962 0x7F1A,0x2962 0x0000,0x2962 0x375A,0x2962 0xD2D0,0x2962

0x5678 0x1E38,0x1E38 0x4840,0x1E38 0x375A,0x1E38 0x0000,0x1E38 0xE58A,0x1E38

0x8765 0xFBB2,0xFBB2 0xADCA,0xFBB2 0xD2D0,0xFBB2 0xE58A,0xFBB2 0x0000,0xFBB2

------------------------------------------------------------------------------

3.攻击结果分析

从攻击结果表中可以看出:

对于初值_出值 E4C4_0000,1234_5678,4321_2962,5678_1E38,8765_FBB2

明文0x0000都会得到相同的密文0x45BE。

明文0xE4C4都会得到相同的密文0x0000。

明文0x1234都会得到相同的密文0x5678。

明文0x4321都会得到相同的密文0x2962。

明文0x5678都会得到相同的密文0x1E38。

明文0x8765都会得到相同的密文0xFBB2。

这就是所谓的“CRC初值出值碰撞”,即不同的初值出值,相同的明文得到对应的相同的密文。

 

其中“编码”是CRC密码经过CRC正运算即CRC编码矩阵中的输出“编码”值,它和出值相异或后产生密文。

它是运算产生的中间结果并作为下次初值的一部分,故此编码是不公开即无法得到的。

由于此CRC密码是在CRC运算的基础上只是将初值和出值的管辖范围增大,并未做相应处理,主要是想突出

说明“CRC初值出值碰撞”。故它的CRC权值实际是暴露的,参见菜农的CRC三点/四点攻击方法

 

由于“编码”无任何方法可以求出,故即使破解出了正确的明文与密文组合派对也无法知道正确的初值和

出值组合派对。

即:只能破解CRC密钥的一部分(CRC权值和方向),但不能全部破解(无法找出初值和出值)。

 

可以用军事密码来形容:被俘了可以给敌方看未销毁的译码后的明文,但绝不交出“密电码”~~~

 

菜农HotPower@126.com  2009.12.16 雁塔菜地

 

●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\

 

 

 

 

把 HotPage网址之家 设为首页 欢迎访问HotPower的农家乐

 

系统分类: 单片机  |  用户分类: HotCRC逆向世界  |  标签: CRC密码  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(228) | 回复(0)

发表于 2009/12/16 7:07:55

0

关于投票

CRC密码体系的设计理念和菜农的思维方法

在正常的密码设计思维中,“混淆和扩散”占有极其重要之地位。

传统密码即对称密码体系的主流是基于“S盒”的设计理念,它的鼻祖非DES莫属。

公开密钥密码即非对称密码体系的主流是基于“数学难题”的设计理念,它的鼻祖非RSA莫属。

 

前者的“S魔盒”肯定具有潜在的“陷门”,可能至今未被人们发现,但它们都和CRC编解码矩阵都归属于

某个特定序列的全排列集合之中,区别只是“S盒”号称的“非线性”而CRC编解码矩阵符合查表的“线性”。

 

后者的“数学难题”只能相对某个时代或某些攻击手段之下。“难题”同时归属于编码和解码者。

虽然编码者拥有某些“陷门”可使问题简化,但解码者一样可以借助于“陷门”。

 

两者都有一个共同的理想:“随意拥有任意长度的密钥且总比明文流长”

 

菜农在“广义域陷门三角密码体系”中已解决了“此理想”,现在带来的烦恼:“如何缩减密钥长度与密文流等长”

 

“烦恼”先放在一边~~~看看“CRC密码体系的设计理念”:

首先CRC可看成是“线性的S盒”,其次是“抛开数学难题的限制”,直接从《密码分析学》来看《密码学》。

一个完善的对称密码体系的安全应该只依赖密钥而与其他算法等无关。它可以抗击除穷举之外的任意攻击方法。

那么我们是否可以这样思维:密钥只能穷举,即使给出全部的明文与密文的正确配对。

即能否设计一种基于密钥碰撞的密码安全体系。这样就可以逼近Sannon在1949年提出的“安全密码”的定义。

 

“基于CRC密钥碰撞的CRC对称密码体系”的设计理念:

CRC的密钥包含四大元素:权值、方向、初值和出值。

其中CRC权值和CRC方向共同锁定一张“CRC编解码表”即“CRC编解码矩阵”。

再:CRC权值和初值及出值的位数等长,即CRCn可看成是2^n个位分组。

当明文与CRC权值等长时,由于“CRC初值出值碰撞”的原因,即使破解了CRC权值,经过穷举初值和出值获得正确的密文,也无法知道正确的CRC初值和出值。

因为此时有2^n个初值和出值配对可以得到正确的密文,还有2^(2n)-2^n个不正确的初值和出值配对。

 

当明文长度大于权值长度时,2^n次穷举中的一对初值和出值只能破解明文的前2^n位,其后的全部明文流

必须在那个唯一正确的即2^n中唯一正确的初值和出值配对才能得到正确的2^n后的密文流。

 

故“基于CRC密钥碰撞的CRC对称密码体系”的设计理念是正确的,唯一遗憾的是前2^n位容易受到穷举的攻击。

但这必须在破解CRC权值及方向后才会发生。

 

以CRC16为例(参见《关于CRC实际密钥位长度计算问题》):

CRC16实际密钥位=3*2^(3*16-1)=3*2^47>2^48。即CRC16的密钥长度3*2^47比自己的3倍48位还长点。

 

我们可以简化认为CRC16的密钥是由16位CRC权值和方向,16位的初值和16位的出值共48位密钥。

首先当16位的CRC权值和方向被穷举破解后,对于16位的明文将会每65536个初值和出值组合得到同样的16位密文。

而这65536个初值和出值组合中只有一个是正确的,必须知道它才能得到16位以外的明文对应的密文。

 

菜农的思维方法就是如此的发散,无法“收敛”。王育民教授让俺将此“收敛”写出,实在是“苦恼”!!!

 

此方法及设计理念已在最新版的HotWC3网上在线CRC运算器V5.08中得到验证,暂不发布,等菜农自己先攻击

自己几天~~~

 

菜农HotPower@126.com  2009.12.16 于雁塔菜地

 

●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\

 

 

 

把 HotPage网址之家 设为首页 欢迎访问HotPower的农家乐

 

 

 

 

 

 

系统分类: 单片机  |  用户分类: HotCRC逆向世界  |  标签: CRC密码体系  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(141) | 回复(0)

发表于 2009/12/16 3:32:27

0

关于投票

CRC不可逆的“真谛”

在正常的密码设计思维中,“混淆和扩散”占有极其重要之地位。

传统密码即对称密码体系的主流是基于“S盒”的设计理念,它的鼻祖非DES莫属。

公开密钥密码即非对称密码体系的主流是基于“数学难题”的设计理念,它的鼻祖非RSA莫属。

 

前者的“S魔盒”肯定具有潜在的“陷门”,可能至今未被人们发现,但它们都和CRC编解码矩阵都归属于

某个特定序列的全排列集合之中,区别只是“S盒”号称的“非线性”而CRC编解码矩阵符合查表的“线性”。

 

后者的“数学难题”只能相对某个时代或某些攻击手段之下。“难题”同时归属于编码和解码者。

虽然编码者拥有某些“陷门”可使问题简化,但解码者一样可以借助于“陷门”。

 

两者都有一个共同的理想:“随意拥有任意长度的密钥且总比明文流长”

 

菜农在“广义域陷门三角密码体系”中已解决了“此理想”,现在带来的烦恼:“如何缩减密钥长度与密文流等长”

 

“烦恼”先放在一边~~~看看“CRC密码体系的设计理念”:

首先CRC可看成是“线性的S盒”,其次是“抛开数学难题的限制”,直接从《密码分析学》来看《密码学》。

一个完善的对称密码体系的安全应该只依赖密钥而与其他算法等无关。它可以抗击除穷举之外的任意攻击方法。

那么我们是否可以这样思维:密钥只能穷举,即使给出全部的明文与密文的正确配对。

即能否设计一种基于密钥碰撞的密码安全体系。这样就可以逼近Sannon在1949年提出的“安全密码”的定义。

 

“基于CRC密钥碰撞的CRC对称密码体系”的设计理念:

CRC的密钥包含四大元素:权值、方向、初值和出值。

其中CRC权值和CRC方向共同锁定一张“CRC编解码表”即“CRC编解码矩阵”。

再:CRC权值和初值及出值的位数等长,即CRCn可看成是2^n个位分组。

当明文与CRC权值等长时,由于“CRC初值出值碰撞”的原因,即使破解了CRC权值,经过穷举初值和出值获得正确的密文,也无法知道正确的CRC初值和出值。

因为此时有2^n个初值和出值配对可以得到正确的密文,还有2^(2n)-2^n个不正确的初值和出值配对。

 

当明文长度大于权值长度时,2^n次穷举中的一对初值和出值只能破解明文的前2^n位,其后的全部明文流

必须在那个唯一正确的即2^n中唯一正确的初值和出值配对才能得到正确的2^n后的密文流。

 

故“基于CRC密钥碰撞的CRC对称密码体系”的设计理念是正确的,唯一遗憾的是前2^n位容易受到穷举的攻击。

但这必须在破解CRC权值及方向后才会发生。

 

以CRC16为例(参见《关于CRC实际密钥位长度计算问题》):

CRC16实际密钥位=3*2^(3*16-1)=3*2^47>2^48。即CRC16的密钥长度3*2^47比自己的3倍48位还长点。

 

我们可以简化认为CRC16的密钥是由16位CRC权值和方向,16位的初值和16位的出值共48位密钥。

首先当16位的CRC权值和方向被穷举破解后,对于16位的明文将会每65536个初值和出值组合得到同样的16位密文。

而这65536个初值和出值组合中只有一个是正确的,必须知道它才能得到16位以外的明文对应的密文。

 

菜农的思维方法就是如此的发散,无法“收敛”。王育民教授让俺将此“收敛”写出,实在是“苦恼”!!!

 

此方法及设计理念已在最新版的HotWC3网上在线CRC运算器V5.08中得到验证,暂不发布,等菜农自己先攻击

自己几天~~~

 

菜农HotPower@126.com  2009.12.16 于雁塔菜地

 

●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\

 

 

 

把 HotPage网址之家 设为首页 欢迎访问HotPower的农家乐

 

 

 

 

 

 

系统分类: 单片机  |  用户分类: HotCRC逆向世界  |  标签: 菜农CRC可逆定理  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(175) | 回复(0)

发表于 2009/12/16 2:08:19

0

关于投票

关于CRC实际密钥位长度计算问题

根据《菜农CRC可逆定理》:

在任意CRC多项式对应的CRC算法中,当CRC多项式满足一定条件时,该CRC移动方向上
可能存在CRC的逆向算法,CRC逆向算法确保从CRC正向算法的运算结果即CRC校验值中
逆算出原始输入时的待校验信息。

任意CRC多项式字符串可逆条件判别:
CRC多项式字符串内出现“+1”时存在CRC逆向算法,不出现“+1”时不存在CRC逆向算法。

任意CRC多项式数字权值可逆条件判别:
若将CRC多项式对应的数字值称为CRC权值,则有具体CRC移动方向的判别:
对于左移CRC运算,CRC权值为奇数时存在CRC逆向算法,偶数时不存在CRC逆向算法。
对于右移CRC运算,CRC权值为负数时存在CRC逆向算法,正数时不存在CRC逆向算法。

 

则CRC实际密钥位长度:

设CRCn,对于左移或右移CRC,CRC权值实际密钥位=2^n-2^(n-2).

合计CRC权值实际密钥位=2^(n+1)-2^(n-1)=3*2^(n-1)。

加上初值和出值各2^n,故CRC实际密钥位长度=3*2^(n-1)*2^n*2^n=3*2^(3n-1)>2^(3n)。

 

例如CRC8:

CRC8实际密钥位=3*2^(3*8-1)=3*2^23>2^24。即CRC8的密钥长度3*2^23比自己的3倍24位还长点。

 

例如CRC16:

CRC16实际密钥位=3*2^(3*16-1)=3*2^47>2^48。即CRC16的密钥长度3*2^47比自己的3倍48位还长点。

 

例如CRC32:

CRC32实际密钥位=3*2^(3*32-1)=3*2^95>2^96。即CRC32的密钥长度3*2^95比自己的3倍96位还长点。

 

例如CRC64:

CRC64实际密钥位=3*2^(3*64-1)=3*2^191>2^192。即CRC64的密钥长度3*2^191比自己的3倍192位还长点。

 

例如CRC128:

CRC128实际密钥位=3*2^(3*128-1)=3*2^383>2^384。即CRC128的密钥长度3*2^383比自己的3倍384位还长点。

 

可以看出CRC128与同档次的MD5“单向函数”相比,做为密码(陷门)要强大的多,不知为何人们要抛弃CRC128~~~

菜农一直百思不解...

 

HotPower@126.com  2009.12.15 雁塔菜地

 

●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\

 

把 HotPage网址之家 设为首页 欢迎访问HotPower的农家乐
 

系统分类: 单片机  |  用户分类: HotCRC逆向世界  |  标签: CRC密钥  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(217) | 回复(0)

发表于 2009/12/16 0:58:02

0

关于投票

菜农成功创建基于CRC密钥碰撞的CRC对称密码安全体系

HotWC3网上CRC超级运算器V5.08开始支持CRC密码并可选择抗击差分攻击,本文数据全部由它提供

CRC密钥:

1.CRC多项式的数学表达即CRC权值.

2.CRC算法移位的方向即左移CRC或右移CRC。

3.CRC初值即与明文的初始异或值。

4.CRC出值即与密文的终止异或值。

CRC密钥碰撞:

对于不同的CRC密钥,相同的明文经过CRC运算得到相同的密文。

 

从CRC编码矩阵的角度分析:

每个CRC编码矩阵对应的明文排列都会得到唯一不重复的密文排列,每个权值对应一个CRC矩阵。

即:

密文=CRC编码矩阵[初值,明文]^出值。

其中:

初值只对第1个明文有效,其它明文的初值为上次的密文。

出值只对最后1个明文有效。它和最后1个密文的异或值即为CRC的最终校验和。

 

相应的CRC解码矩阵有下列关系:

明文=CRC解码矩阵[初值,密文^出值】。

其中初值和出值的解释如上所述。

 

可以看出CRC运算即CRC编解码矩阵不能作为密码体系的主要原因:

本次的密文作为下次的初值。且初值和出值都只用1次。

 

这样采用菜农的三点或四点攻击,CRC的密钥即可告破

但要特别注意是当初值和出值非“0”或非“1”时,将会发生“CRC初值出值碰撞”,

即:

初值和出值非“0”或非“1”都将被化简为初值不定出值恒为“0”。

在此初值的作用下,CRC运算得到的明文和密文配对就是此权值下的初值和出值配对。

即用此所有初值和出值配对经过CRC运算,相同的明文都会得到相对应的相同密文配对。

 

即“任意初值和出值配对都会散列为相同的明文和密文配对”。故无法证实初值和出值的真伪。

 

基于CRC密钥碰撞的CRC对称密码安全体系:

该“密码安全体系”继承CRC算法的风格,改进如下:

1.初值将单独与每个明文异或而非“第1个明文”。

2.出值将单独与每个密文异或而非“最后1个密文”。

3.本次与出值异或前的密文与原始初值作为下次明文的输入初值。

  此“输入初值”都将同时得到原始初值和出值的保护。

 

基于CRC密钥碰撞的CRC对称密码安全体系已在新版的HotWC3运算器V5.08上通过测试通过。

菜农个人认为:

此CRC密码体系算法透明,可以用用CRC编解码矩阵进行分析,无任何“陷门”。可以抵抗目前的

任何攻击手段,因为它的设计思想是将明文和密文流全部提供给破解者也无法攻击出CRC密钥。

这主要归功于“基于CRC密钥碰撞的思想”,使CRC初值和出值只能通过穷举而且是首先破解CRC权值

和CRC方向后才会有此机会。

 

这样CRC密钥就真正地变为“四要素”即CRC权值和方向及初值和出值。

 

以CRC8为例,则其CRC密钥为3*8=24位,即2^24

以CRC64为例,则其CRC密钥为3*64=192位,即2^192

以CRCn为例,则其CRC密钥为3*n位,即2^(3*n)

 

可以看出该密码体系是“积木式组合”的,故菜农认为:

该对称密码体系是目前地球上最朴实和最强大的密码体系~~~而且很适应于小资源的计算机系统如MCU.

 

下午经过攻击验证后,首先打电话给王育民教授,和他探讨了很长时间,由于他近日很忙无法腾出时间。

但我们约好了在菜农“全球征婚”截止日期2009.12.26前见个面,讨论菜农近期在密码领域的“大动作”。

 

菜农坚信“红色脑浆”绝不会输给“白色脑浆”~~~

 

HotPower@126.com  2009.12.15 于雁塔菜地

 

●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\

 

把 HotPage网址之家 设为首页 欢迎访问HotPower的农家乐

 

 

 

 

 

系统分类: 单片机  |  用户分类: HotCRC逆向世界  |  标签: 菜农CRC密钥碰撞 菜农CRC密码 菜农CRC可逆定理  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(132) | 回复(0)

发表于 2009/3/5 18:23:16

0

关于投票

HotC51汇编数组V1.08开始支持C语言的函数

HotC51 发表于 2009-3-5 18:25 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

楼主: HotC51汇编数组V1.08开始支持C语言的函数~~~

/*----------------------------------------------------------------------------
        HotC51汇编数组定义头文件(HotAsm.h V1.08)
最初建立时间: 2009.2.18
最近修改时间: 2009.3.5    (放弃“PK”MCS51汇编指令集)
增  添原  因: 为全面支持裸奔式实时操作系统HotTask51做准备
              HotWC3发布并正式参战汇编数组,逆向世界开始昏暗。
              “宏C”计划开始, 支持带参数输入输出的"数组函数"。
              继续增添HotC51汇编数组扩展指令集
应        用: 可以用COM接口技术对HotC51汇编数组进行封装
              封装后的代码将如同穿上铁甲的“战士”~~~
            //unsigned int TRIANGLE(unsigned char val);
            HotASMU16 (__HotASMU8_TRIANGLE__)//
            {//DPTR保存的是汇编数组函数的首地址__HotASM_TRIANGLE__
            //#define TriangleTable
                asm_MOV_A_R7(),//取unsigned char val
                asm_CPL_A(),
                asm_MOV_R7_A(),
                asm_SWAP_A(),
                asm_MOV_R6_A(),
                asm_RETU16(0x1234),//返回0x1234
            //    asm_RETU16_DPTR(),//返回dptr
            //    asm_RETU16_AB(),//返回AB
            //    asm_RETU16_BA(),//返回BA
            //    asm_RET(),//返回R6R7
            //TriangleTable:
                asm_DW(0x1234), asm_DW(0x5678)
            };
未  来计  划: 首先将HotC51汇编数组做成比宏汇编更好用的接近C习惯.
              逐步完善,最终全面到达“宏C”之目标。
菜农HotPower@126.com 2008.3.5 10:58 于西安大雁塔村农会
-----------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------------------------
                HotASM51汇编数组指令集与MCS51汇编指令集对照表
  DB(x)   DB(0~0xff)  //伪指令    asm_DB(250),asm_DB('1'),                  db 250;
  DW(x)   DW(0~0xffff)//伪指令    asm_DW(0x1234),//大端                     dw 0x1234;
  dw(x)   dw(0~0xffff)//伪指令    asm_dw(0x1234),//小端                     dw 0x3412;
  Rn(x)   Rn(0~7)                  asm_MOV_A_R0(), asm_MOV_A_Rn(5),              mov a,r0;mov a,r5;
@ iRn(x)  iRn(0~1)                  asm_MOV_A_iR1(), asm_MOVX_iRn_A(0),         mov a,@r1;movx @r0,a;
! BIT(x)  BIT(0~0x7f, 0x80~0xff)  asm_CLR_BIT(0x30),asm_SETB_P0_0(),          clr 30h;setb p0.0;
& REG(x)  REG(0~0x7f, 0x80~0xff)  asm_MOV_REG_A(HotASM_B),asm_MOV_B_A(),    mov b,a;
//建议不要采用DATA(),由于HotASM的庞大,随时将可能被取缔
# DATA(x) DATA(0~0xff, 0~0xffff)  asm_MOV_DPTR(0x250),asm_MOV_A(250)          mov dptr,#0x250;mov a,#250;
-------------------------------------------------------------------------------------------------------*/

void main()
{
unsigned int crc;
unsigned char crc8;
//HotC51汇编数组开始支持带参数输入输出的"数组函数"
    crc = wc3Function.Vtbl.TRIANGLE(0x5a);
    crc8 = wc3Function.Vtbl.CRCR8(0x55, 0xaa);
、、。。。。。。。。。。。。。

系统分类: 单片机  |  用户分类: HotCRC逆向世界  |  标签: HotWC3发布  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(436) | 回复(0)

Total , Page /