打印

CRC安全密码通俗说明

[复制链接]
2679|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2009-12-18 23:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hotpower 于 2009-12-19 08:33 编辑

现以CRC8安全密码举例(在已知CRC权值和方向时的例子):
某客人想进入菜农的雁塔菜地,村长交给他256*256=65536把钥匙。其中256把钥匙可以进入菜地大门,
在这256把钥匙里只有一把可以打开“大棚菜地”,其他255把都是进入一些不重要的部门。

客人首先要想如何找到这256把钥匙,其次就是找那把开门之钥。
此密码的晕人之处在于它不是“基于数学难题”或“S盒的混淆和发散”,而是“基于密钥碰撞”。
即256把钥匙都可以进入菜地大门,但只有一把才可以打开“大棚菜地”。
假若各个“大棚”都加以伪装,那么客人可能被误导到其他地方。

此算法最大的好处是“透明而无陷门”,理论上是“不可**的”即只能穷举。
客人拿到65536把钥匙后,一把一把地试着开锁,255次打开大门后的惊喜随之都变为失望~~~
只有那唯一1次才能打开“大棚菜地”~~~估计此时他没有喜悦~~~只有酸痛的手~~~

本例是最简单的CRC8安全密码,若CRC4096不知该复杂到什么地步。

最新版本的HotWC3_V508b以开始支持对CRC初值出值碰撞的逆向。

摘录HotWC3_V508b攻击后自动提供的数据表:

初值和出值发生CRC密钥碰撞:
CRC多项式:左移CRC8=X8+X2+X+1
CRC简 写:CRCL8_07_AD_00
CRC初值出值碰撞对:
碰撞初值:0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F;
碰撞出值:0x4A,0x4D,0x44,0x43,0x56,0x51,0x58,0x5F,0x72,0x75,0x7C,0x7B,0x6E,0x69,0x60,0x67;
碰撞初值:0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F;
碰撞出值:0x3A,0x3D,0x34,0x33,0x26,0x21,0x28,0x2F,0x02,0x05,0x0C,0x0B,0x1E,0x19,0x10,0x17;
碰撞初值:0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F;
碰撞出值:0xAA,0xAD,0xA4,0xA3,0xB6,0xB1,0xB8,0xBF,0x92,0x95,0x9C,0x9B,0x8E,0x89,0x80,0x87;
碰撞初值:0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F;
碰撞出值:0xDA,0xDD,0xD4,0xD3,0xC6,0xC1,0xC8,0xCF,0xE2,0xE5,0xEC,0xEB,0xFE,0xF9,0xF0,0xF7;
碰撞初值:0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F;
碰撞出值:0x8D,0x8A,0x83,0x84,0x91,0x96,0x9F,0x98,0xB5,0xB2,0xBB,0xBC,0xA9,0xAE,0xA7,0xA0;
碰撞初值:0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F;
碰撞出值:0xFD,0xFA,0xF3,0xF4,0xE1,0xE6,0xEF,0xE8,0xC5,0xC2,0xCB,0xCC,0xD9,0xDE,0xD7,0xD0;
碰撞初值:0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F;
碰撞出值:0x6D,0x6A,0x63,0x64,0x71,0x76,0x7F,0x78,0x55,0x52,0x5B,0x5C,0x49,0x4E,0x47,0x40;
碰撞初值:0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F;
碰撞出值:0x1D,0x1A,0x13,0x14,0x01,0x06,0x0F,0x08,0x25,0x22,0x2B,0x2C,0x39,0x3E,0x37,0x30;
碰撞初值:0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F;
碰撞出值:0xC3,0xC4,0xCD,0xCA,0xDF,0xD8,0xD1,0xD6,0xFB,0xFC,0xF5,0xF2,0xE7,0xE0,0xE9,0xEE;
碰撞初值:0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F;
碰撞出值:0xB3,0xB4,0xBD,0xBA,0xAF,0xA8,0xA1,0xA6,0x8B,0x8C,0x85,0x82,0x97,0x90,0x99,0x9E;
碰撞初值:0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF;
碰撞出值:0x23,0x24,0x2D,0x2A,0x3F,0x38,0x31,0x36,0x1B,0x1C,0x15,0x12,0x07,0x00,0x09,0x0E;
碰撞初值:0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF;
碰撞出值:0x53,0x54,0x5D,0x5A,0x4F,0x48,0x41,0x46,0x6B,0x6C,0x65,0x62,0x77,0x70,0x79,0x7E;
碰撞初值:0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF;
碰撞出值:0x04,0x03,0x0A,0x0D,0x18,0x1F,0x16,0x11,0x3C,0x3B,0x32,0x35,0x20,0x27,0x2E,0x29;
碰撞初值:0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF;
碰撞出值:0x74,0x73,0x7A,0x7D,0x68,0x6F,0x66,0x61,0x4C,0x4B,0x42,0x45,0x50,0x57,0x5E,0x59;
碰撞初值:0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF;
碰撞出值:0xE4,0xE3,0xEA,0xED,0xF8,0xFF,0xF6,0xF1,0xDC,0xDB,0xD2,0xD5,0xC0,0xC7,0xCE,0xC9;
碰撞初值:0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF;
碰撞出值:0x94,0x93,0x9A,0x9D,0x88,0x8F,0x86,0x81,0xAC,0xAB,0xA2,0xA5,0xB0,0xB7,0xBE,0xB9;



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

HotPower星期冗余三角HotWC3密码网上在线运算器(V5.08a)
●█〓██▄▄▄▄▄▄ ●●●●●●→ ''''╭WWWW╮
▄▅██████▅▄▃▂ 传播非典灌水四方 ( ●_●)
███天█马█行█空████ '''',,,;,;,;'''/▇\''
◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤ 群魔乱舞见阳光/MMMM\

相关帖子

沙发
huangqi412| | 2009-12-19 01:32 | 只看该作者
:dizzy:

使用特权

评论回复
板凳
hotpower|  楼主 | 2009-12-19 05:49 | 只看该作者
不:dizzy:

使用特权

评论回复
地板
ZRL700424| | 2009-12-19 08:53 | 只看该作者
:dizzy:

使用特权

评论回复
5
arm9-11| | 2009-12-19 10:29 | 只看该作者
:dizzy:

使用特权

评论回复
6
hotpower|  楼主 | 2009-12-19 10:56 | 只看该作者

再给个不晕的~~~

本帖最后由 hotpower 于 2009-12-19 10:58 编辑

n=pq
假若p,q为质数且互质,当p=3,q=5时,n=3*5=15
这个RSA的密钥体系的“数学难度”的“大质数分解问题”。
当p和q都很大且差距也很大时,已知n则很难分解n=p*q.

“很难”但其有“唯一解”。
找到p=3则必对应唯一解q=5.

菜农的是有点晕,说再通俗点。(以n=p*q举例,讲CRC可能有人“呕吐”~~~)
假设p,q各为自然数。(这种假定命题“太可憎”~~~)
当p=3,q=5时,n=3*5=15 或n=1*15
当p=30,q=50时,
n=3*500=1500
n=1*1500=1500
n=300*5=1500
n=15*100=1500
n=.........

但其中只有p=30,q=50是对的~~~

使用特权

评论回复
7
dcp| | 2009-12-23 00:08 | 只看该作者
听课的

使用特权

评论回复
8
gaohq| | 2009-12-23 18:19 | 只看该作者
大叔继续。

使用特权

评论回复
9
hotpower|  楼主 | 2009-12-23 22:53 | 只看该作者
哈哈~~~我认为这是适应于MCU/ARM/DSP最简单和最安全的密码系统之一。

准备用一个月时间论证是否不可**~~~

使用特权

评论回复
10
hotpower|  楼主 | 2009-12-25 21:40 | 只看该作者

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

本帖最后由 hotpower 于 2009-12-25 21:48 编辑

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密钥。

使用特权

评论回复
11
jack.king| | 2009-12-26 08:28 | 只看该作者
呵呵!大叔.请问这个在程序里面怎么用啊?

使用特权

评论回复
12
hotpower|  楼主 | 2011-12-26 12:57 | 只看该作者
顶起来,掀起密码安全教育风暴~~~

使用特权

评论回复
13
hotpower|  楼主 | 2012-10-23 19:00 | 只看该作者
挖墓为2012.10.25菜农个人版《HotWC3密码体系》开版搜索

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21619

帖子

506

粉丝