crc可以检出奇数个错误_【安全芯片】CRC 循环冗余校验码(一)

    CRC全称为Cyclic redundancy Check, 即循环冗余校验。

    CRC是现在最常见的错误检测码之一,广泛应用于数据通信和存储设备中。CRC码能够很好的检测突发错误这类由外界干扰和环境因素引起的数据变化,但无法应对恶意篡改。CRC是系统码的一种,即计算后的码字为信息码+校验码。

   01      算法原理 

    CRC的核心是多项式除法的计算,多项式每一项的系数代表对应位比特为1或0。CRC使用了GF(2)上的计算,即用异或来代替减法。被除数为信息码在后面补充与生成多项式最高项级数相同个数的0,除数为生成多项式,余数为生成的CRC校验码。下图表示了一个简单的CRC4的计算过程,信息码为1110,生成多项式的二进制表示为10011,最后求得的校验码为0001。

bbf0f04b9dc94cabd056f66aa1d67913.png

    简而言之,CRC的校验码C,就是信息码M补0后除以生成多项式后产生的余数。当信息码发生改变时,除非R-C正好为生成多项式的倍数,否则校验码都会发生改变。更巧妙的是,C={M,校验码} ,即为被除数+余数,故对收到的码字再做一次多项式除法后,得到的余数即CRC校验码应该为0。

    每种CRC码由一个生成多项式定义,一般来说常使用不可约多项式作为生成多项式。对于一个n-bit CRC,它生成的校验码长度为nbit,生成多项式长度为n+1,且最高项次数为n,即最高位系数永远为1。

    最简单的1比特CRC编码,就是最常见的奇偶校验。

    特别的,CRC是一种线性算法,即crc(x^y^z) = crc(x) ^ crc(y) ^ crc(z)。所以当CRC对一些基于异或的流密码的加密数据进行校验时,可以不需要知道相应的流密码。

 02    硬件设计 

串行设计

最常见的串行实现方式有两种,都是基于LFSR (Linear Feedback Shife Register)。这里我们用CRC4 ITU进行举例,其生成多项式为 dbe7b043ba22898a64af5c58c87b301c.png,二进制表示为10011。

9302e414c67c279aa3bce79e1785ce1b.png

    首先,图B的LFSR很好理解,这里简称为LFSR(B)。根据多项式除法的计算原理,可知其计算{信息码,4'b0}的余数时,将信息码从左至右遍历,当比特为1时,将连续5比特数据与生成多项式相异或,剩余的数据接上结果再继续进行遍历。当比特为0时,即没有计算行为,继续比对下一个比特。

    图A的LFSR结构会难以理解一些,这里简称为LFSR(A)。首先我们要明确一点是,多项式除法的被除数是{信息码,4'b0},即如果使用LFSR(B)进行计算时,假设信息码长度为16,则一共进行20次输入,剩下留在寄存器中的数据才是最后的计算结果。

    当生成多项式固定时,最后输入的数据是固定个数的0,且与寄存器个数相同,那么我们是否可以将这个0的输入固定在电路设计中呢?LFSR(A)就是这样的一种设计,它只需要输入16比特数据就可以完成多项式除法的计算。

在这里列一个推导过程,帮助理解LFSR(A)的结构:

    设信息码为c7cdbab2bf1f60ae75df09cbc4b5563b.png,生成多项式二进制表示为d64c51bbf063e07c7e968fa5b973a1d8.png,定义多项式除法取余为%。这里涉及到的加法都为在GF(2)域上的加法,即为异或计算。

    从多项式的角度,CRC计算可以表示为edb839d7ce6cf27405d1a44de4955b3a.png,则7ca9334bfc89c252015bb1f72f9c6185.png可以被a6b0cd3f246da3b5394aa637f9bc75b0.png整除。易知,28059fbfd90d658c54a1ac3d45e5df5b.png也可以被a6b0cd3f246da3b5394aa637f9bc75b0.png整除。

故易推导出,

39948d2b3543dbdac4c4e2fb56442265.png           (1)

    现有76b22ed5acc03165cbe4313e45826547.png

    当信息码为c9aec46124291d2c3a25e2a2be9bb2f8.png时,结合式(1)可得:

a3b01031eb9851bfac1bdbff6f166b4c.png

63c341819e71f8a919fe60c8aa70eb3b.png

3e1995f3310533b700e99a6372bdd5f5.png

0aaf89cecf14cbc6068159e704a9c188.png

1db246b32d600b8c95268815c6db739d.png

    根据多项式除法的计算,

fd36f8450c9052126baa910d31ec05a7.png

    这时候我们回过头来看图ALFSR结构就很好理解了,寄存器的变换由决定,所以输入比特与最高位比特异或后,反馈到各个寄存器,反馈值具体与那几个寄存器进行异或计算取决于生成多项式G

原创 | hzy

撰文 | hzy

编辑 | hzy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值