【密码学】一文读懂线性反馈移位寄存器

简介: 在正式介绍线性反馈移位寄存器(LFSR)之前,先来看一个小故事,相传在遥远的古代,住着4个奇怪的人。

线性反馈移位寄存器


DB_}PH5SMUFMM{7~}BTE[)C.jpg线性反馈移位寄存器

在正式介绍线性反馈移位寄存器(LFSR)之前,先来看一个小故事,相传在遥远的古代,住着4个奇怪的人。

AX$9VDI[F`M`%[[]5J6V3BK.jpg四个奇怪的人

上图表示了他们居住的相对的位置,上面说到他们是奇怪的人,这里来简单说一下,他们每天出门的人有一个简单的规律:

  1. 李四明天是否出门取决于张三昨天是否出门
  2. 王五明天是否出门取决于李四昨天有没有出门
  3. 赵六明天是否出门取决于王五有没有出门
  4. 张三明天是否出门呢? 可不是取决于赵六有没有出门,而是有王五和赵六共同决定的,如果王五和赵六其中有且只有一个人昨天出门了,张三才出门,也就是说只有王五昨天出门而赵六不出门,或者,赵六昨天出门而王五昨天没出门,张三才出门。

于是,咱们假设王五昨天出门了,来看一下接下来几天这四个人的出门情况。

NVTB@Z(J~XFKM%N[WMM]@)V.png出门情况

简单解释一下前面几天的出门情况,后面类似就不挨个去描述一遍了。

  • 第一天: 这个是基本的假设,只有王五出门,这个就是假设,没有原因,任性
  • 第二天: 由于昨天王五出门了,所以第二天赵六出门,并且根据第四条, 王五出门并且赵六没出门,因此张三这一天出门
  • 第三天: 由于张三昨天出门了,因此今天李四出门,而由于赵六昨天出门了,并且王五昨天没出门,因此张三今天依然出门
  • 第四天: 由于张三昨天出门了,因此李四今天出门,而由于李四昨天也出门了,所以王五今天出门

好了,后面几天读者自行推导一下吧,这里我就不描述了,规则是一致的。

接下来,我们来看一下,赵六这几天的出门情况。

image.gifwatermark

好了,故事讲完了,在这里问一下各位读者,有没有发现赵六出门有什么规律呢?

这个问题,等我讲完这一篇文章之后再做解答,大家也可以暂停思考一下。


反馈移位寄存器(FSR)

FSR的构造比较简单,包含一个指定大小的寄存器,里面有一些比特构成,以及一个更新反馈函数(f), 每次执行,通过f函数并产生一个新的比特。假设FSR的初始状态是, 它的下一个状态是由左移一个比特之后,最后侧空位有f()补充得到,这里左移出去的那一个比特就是输出的比特,通用公式如下:

@ZCL~6F%O}UBFQ[MOSZ13ET.png

这么描述,可能读者不太理解,来看一个具体的例子吧,假设咱们有一个初始的4bit的寄存器, 然后f函数就定义为每个bit进行异或,也就是, 然后下一个输出状态也就是1000, 下一个周期, 接下来的状态输出为0001, 然后重复上述的步骤,整体过程如下:

  1. 1100
  2. 1000
  3. 0001
  4. 0011
  5. 0110
  6. 1100

我们发现,经过5次迭代更新,这个状态又回到了最原始的状态,这就接下来,这个也就会按照5为周期来重复这个操作。

FT~RFSFEBYV$0Z_N`NMHN%6.pngFRS图示

这里FSR就基本介绍完了,接下来介绍一下本篇文章的主角LFSR(线性反馈移位寄存器)了。


线性反馈移位寄存器(LFSR)

线性反馈移位寄存器是具有线性反馈函数的FSR, 也就是说,反馈函数仅仅是当前状态的某些比特位异或,上面介绍的那个FSR实际上就是一个线性反馈移位寄存器,通过数学可以证明,LFSR是会有周期的,影响LFSR周期的关键因素是那些比特进行了异或,这里采用线性反馈移位寄存器的好处是可以通过数学的方法去挑选特殊的比特位置进行异或,使得寄存器的周期达到最大也就是。

你们看这个寄存器只有0/1这两种状态的长度组合,它像不像之前我们提到的有限域GF(), 因此我们可以用域当中的多项式来表示反馈函数,假设最右边比特的位置记为1, 最左边比特的位置记为n, 将位置信息可以转换为多项式其中项存在当且仅当该比特参与反馈函数的计算,如果要想使得LFSR出现它的最大周期,这要求这个多项式是本原的,在这里不过多介绍本原多项式的概念了,有兴趣的读者可以自行查阅相关资料。

好了,简单介绍了LFSR的概念,我们来回到文章刚开始所介绍的小故事,实际上这4个人实际上构成了一个4位的LFSR。

image.gif文章开始的例子

8MNF{R5M{XFTJN0Q$XQ971G.png

这里参与异或的实际上也就是后面两个比特,然后到了现在,就可以回答在文章故事结束之后提出的问题了,赵六的出行规律是什么,这里上图这个反馈寄存器的周期实际上是15, 因此在15以内,实际上赵六出行是没有规律的,哈哈。


总结

本文简单介绍了一下线性反馈移位寄存器的相关知识,由于这个产生的随机比特是具有周期性的,因此在密码学当中并不安全,输出序列和寄存器状态之间可以建立简单的方程,从而利用线性代数的知识求解,但是如果多个不同长度的线性反馈移位寄存器组合或者在里面添加非线性反馈移位寄存器,那么这个安全性就会达到要求,不少密码体制也是这么设计的。

个人水平有限,讲解过程当中如果有哪些疏漏或者错误的地方,还请各位读者指正。


相关文章
|
编译器 异构计算 内存技术
【FPGA】高云FPGA之科学的FPGA开发流程(三)
【FPGA】高云FPGA之科学的FPGA开发流程
635 0
【FPGA】高云FPGA之科学的FPGA开发流程(三)
|
JavaScript 物联网 开发者
NB-IoT 之 CoAP 开源 libcoap 服务器客户端的安装使用 | 学习笔记
快速学习 NB-IoT 之 CoAP 开源 libcoap 服务器客户端的安装使用
NB-IoT 之 CoAP 开源 libcoap 服务器客户端的安装使用 | 学习笔记
|
4月前
|
数据可视化 大数据 数据挖掘
基于python大数据的招聘数据可视化分析系统
本系统基于Python开发,整合多渠道招聘数据,利用数据分析与可视化技术,助力企业高效决策。核心功能包括数据采集、智能分析、可视化展示及权限管理,提升招聘效率与人才管理水平,推动人力资源管理数字化转型。
|
11月前
|
安全 Android开发 iOS开发
escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
escrcpy 是一款基于 Scrcpy 的开源项目,使用 Electron 构建,提供图形化界面来显示和控制 Android 设备。它支持 USB 和 Wi-Fi 连接,帧率可达 30-120fps,延迟低至 35-70ms,启动迅速且画质清晰。escrcpy 拥有丰富的功能,包括自动化任务、多设备管理、反向网络共享、批量操作等,无需注册账号或广告干扰。适用于游戏直播、办公协作和教育演示等多种场景,是一款轻量级、高性能的 Android 控制工具。
877 1
|
机器学习/深度学习 数据可视化 数据处理
Python vs R:机器学习项目中的实用性与生态系统比较
【8月更文第6天】Python 和 R 是数据科学和机器学习领域中最受欢迎的两种编程语言。两者都有各自的优点和适用场景,选择哪种语言取决于项目的具体需求、团队的技能水平以及个人偏好。本文将从实用性和生态系统两个方面进行比较,并提供代码示例来展示这两种语言在典型机器学习任务中的应用。
627 1
|
监控 安全 网络协议
MITM攻击以及如何预防?
【8月更文挑战第31天】
344 1
|
算法 安全 网络安全
真实世界的密码学(一)(1)
真实世界的密码学(一)
291 0
|
安全 前端开发 JavaScript
详细解读CSRF漏洞详解
详细解读CSRF漏洞详解
398 0
|
小程序 前端开发 JavaScript
微信小程序|基于微信小程序的高校就业招聘系统
微信小程序|基于微信小程序的高校就业招聘系统
367 0