打印
[抢楼250]

菜地公告:即日起创建《菜农Cortex-M0助学园地》(盖楼入口)

[复制链接]
楼主: hotpower
手机看帖
扫描二维码
随时随地手机跟帖
2801
murex| | 2011-4-9 00:20 | 只看该作者 回帖奖励 |倒序浏览
HRESULT CVIFUNC I2C_WriteByte (unsigned char value)
{
    HRESULT __result = S_FALSE;
    I2C_ReadWriteByte (value);//写数据,SDA=SCL=0
    __result = I2C_GetAck();//取从机ACK信号
    if (__result == S_OK)
    {
        Hot_I2CErrorState = I2C_MT_DATA_ACK;//已发送I2DAT 中的数据字节,且已接收ACK
    }
    else
    {
        Hot_I2CErrorState = I2C_MT_DATA_NACK;//已发送I2DAT 中的数据字节,且未接收ACK
        I2C_Stop();
    }
    return __result;
}

使用特权

评论回复
2802
murex| | 2011-4-9 00:20 | 只看该作者
HRESULT CVIFUNC I2C_WriteWord (unsigned short value)
{
    HRESULT __result = S_FALSE;
    unsigned char ch, cl;
    ch = value  >> 8;
    cl = value & 0xff;
    __result = I2C_WriteByte (cl);
    if (__result == S_OK)
    {
        __result = I2C_WriteByte (ch);
    }
    return __result;
}

使用特权

评论回复
2803
murex| | 2011-4-9 00:20 | 只看该作者
HRESULT CVIFUNC I2C_WriteBlock (unsigned char *str, int size)
{
    HRESULT __result = S_FALSE;
    int i;
    for (i = 0; i < size; i ++)
    {
        __result = I2C_WriteByte(str[i]);
        if (__result != S_OK) break;
    }
    return __result;
}

使用特权

评论回复
2804
murex| | 2011-4-9 00:21 | 只看该作者
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密钥。

使用特权

评论回复
2805
murex| | 2011-4-9 00:21 | 只看该作者
不再转贴了

使用特权

评论回复
2806
murex| | 2011-4-9 00:22 | 只看该作者
菜农的程序好多被我复制过来了

使用特权

评论回复
2807
murex| | 2011-4-9 00:22 | 只看该作者
反正不然太单调了

使用特权

评论回复
2808
murex| | 2011-4-9 00:22 | 只看该作者
牛楼,高楼

使用特权

评论回复
2809
murex| | 2011-4-9 00:22 | 只看该作者
就这么被盖出来的

使用特权

评论回复
2810
murex| | 2011-4-9 00:22 | 只看该作者
看你们咋整

使用特权

评论回复
2811
murex| | 2011-4-9 00:23 | 只看该作者
还真是有点不服就进行试试

使用特权

评论回复
2812
murex| | 2011-4-9 00:23 | 只看该作者
3124

使用特权

评论回复
2813
murex| | 2011-4-9 00:23 | 只看该作者
快咯,赶紧了

使用特权

评论回复
2814
murex| | 2011-4-9 00:23 | 只看该作者
3126

使用特权

评论回复
2815
murex| | 2011-4-9 00:23 | 只看该作者
没有搞不定的楼

使用特权

评论回复
2816
murex| | 2011-4-9 00:23 | 只看该作者
也没有搞不定的东西

使用特权

评论回复
2817
murex| | 2011-4-9 00:24 | 只看该作者

使用特权

评论回复
2818
murex| | 2011-4-9 00:24 | 只看该作者
杀出重围

使用特权

评论回复
2819
murex| | 2011-4-9 00:24 | 只看该作者
又是一楼

使用特权

评论回复
2820
murex| | 2011-4-9 00:24 | 只看该作者
新年新楼

使用特权

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

本版积分规则