数据处理方法(LFSR)

一、线性反馈移位寄存器(LFSR)编码概述

        线性反馈移位寄存器(LFSR):通常由移位寄存器和异或门逻辑组成。其主要应用在: 伪随机数,伪噪声序列,计数器,BIST,数据的加密和 CRC 校验等。

        一个反馈移位寄存器(feedback shift register)由两部分组成:移位寄存器和反馈 函数(feedback function)。移位寄存器是位序列,具有 n 位长的移位寄存器称为 n 位移 位寄存器。每次输出一位,移位寄存器中所有位右移一个位。新的最左端的位根据寄存器中 其他位计算得到。移位寄存器输出的一个位常常是最低有效的位。移位寄存器的周期是指输 出序列从开始到重复时的长度。

数据处理方法(LFSR)_第1张图片

图 1 反馈移位寄存器

        密码设计者喜欢用移位寄存器构造序列密码,因为这容易通过数字硬件实现。最简单的反馈移位寄存器是线性反馈移位寄存器(Linear Feedback Shift Register,LFSR)。反馈函数跟寄存器中某些位简单异或,这些位叫做抽头序列(tap sequence),有时也叫 Fibonacci配置(Fibonacci configuration)。因为这是一个简单的反馈序列,因此大量的数学理论都能用于分析 LFSR。密码设计者喜欢分析序列确保它们是随机并充分安全的。

二、线性反馈移位寄存器(LFSR)编码过程
        LFSR 的反馈函数就是简单地对移位寄存器中的某些位进行异或,并将异或的结果填充到 LFSR 的最左端。对于 LFSR 中每一位的数据,可以参与异或,也可以不参与异或。其中,我们把参与异或的位称为抽头。
        如下图所示,如果移位寄存器中的值为{b1, b2, ...., bn},则第 n+1 位的值可以表示为 bn+1=c1b1⊕c2b2...⊕cnbn,其中 bi,i∈[1,n]表示移位寄存器的数据(0 或 1);ci,i∈[1,n]表示第 i 位是否是抽头,如果是,则 ci=1,表示该位将参与运算;如果不是,则 ci=0,表示该位将不参与运算。上式表示了 LFSR 的一种递推关系,在这个式子中,可以明显看出,ci将抽头位选出并留下来参与运算,并且将不是抽头的位剔除掉。

数据处理方法(LFSR)_第2张图片

图 2 线性反馈移位寄存器

LFSR 也具有周期。由于一个 n 级 LFSR 最多只能遍历一种状态,因此,当 LFSR 移位到一定程度时,一定会出现重复的状态。而相同状态生成的反馈函数结果总是相同的,因此,LFSR 会陷入一种循环,即 LFSR 存在周期。为了能够产生足够安全的密钥,我们通常要求LFSR 的周期能够足够大。一个 n 级 LFSR 最多只能遍历 2n-1 个状态,也就是说,一个 n 级LFSR 的最大周期就是 2
n-1,我们把周期为 2n-1 的 LFSR 所生成的序列称为 m 序列。m 序列LFSR 反馈函数对应的特征多项式被称为本原多项式。
        产生一个给定阶数的本原多项式最简单的方法是选择一个随机的多项式,然后测试它是否本 原。下表 列 举 了一些 不 同 阶 数的 本 原 多项式 , 例如(32,7,5,3,2,1,0 ) 是指,这样很容易把它转变成最大周期 LFSR。第一个数是 LFSR 的长度,最后
一个数为常数 0,可以忽略,除 0 以外的所有数字指明了抽头序列,这些抽头从移位寄存器的左边开始计数。当移位寄存器比计算机的字还要长时,这个程序的计算时间会无限延长。因此,本题所列举的本原多项式只包含 32 位寄存器及以内,公式如下表所示:

数据处理方法(LFSR)_第3张图片

        根据值{b1, b2, ...., bn},循环 n 位 LFSR,然后从前往后取前 48 位,得到的六个字节就是烽火台开启码。

 三、线性反馈移位寄存器(LFSR)编码示例
1. 从二维码(1)中提取的原始数据位{1,1,1,1},可得到寄存器的初始值为 1111。
2. 从二维码(2)提取本原多项式{1,0,0,1},查表可知本原多项式的(反馈函数)抽头位置在第 1 位和第 4 位。
3. 因寄存器 n 的位数为 4,可得不重复消息为 15,直至消息重复之前能够产生下列内部状态序列表: 数据处理方法(LFSR)_第4张图片

数据处理方法(LFSR)_第5张图片

 4. 将输出数据重复生成至满足 6 字节报警码,输出序列最低有效位串为:
11110101 10010001 11101011 00100011 11010110 01000111
5. 最后得到 6 字节开启码为:0xF5、0x91、0xEB、0x23、0xD6、0x47

例:

如:
	A{1,1,1,1}	CX = 0X0F  
	B{1,0,0,1}	GX = 0X09
	开启码:0xF5、0x91、0xEB、0x23、0xD6、0x47
如:
	A{1,1,0,1,1,0,1,1} 高位在后 低位在前	CX = 0XDB
	B{0,1,1,1,0,0,0,1} 高位在后 低位在前	GX = 0X8E
	开启码:0xDB、0xFA、0x8D、0x81、0xF2、0xD0
如:
	A{1,0,0,1,1,0,1,1} 高位在后 低位在前	CX = 0XD9
	B{0,1,1,1,0,0,0,1} 高位在后 低位在前	GX = 0X8E
	开启码:0x9B、0x03、0xE5、0xA0、0x85、0xDC

运行效果: 

数据处理方法(LFSR)_第6张图片

源码下载链接:

(2条消息) 线性反馈移位寄存器(LFSR):通常由移位寄存器和异或门逻辑组成资源-CSDN文库

你可能感兴趣的:(C语言基础,LFSR,数据处理方法,线性反馈移位寄存器)