首页 > 其他分享 >【密码学】从有限状态自动机到密钥流生成器

【密码学】从有限状态自动机到密钥流生成器

时间:2024-07-10 13:56:57浏览次数:20  
标签:输出 状态 密钥流 生成器 FSM 自动机 密码学

        本文是对流密码内容的拓展,在流密码中种子密钥通过一个伪随机数生成器产生一个与明文等长的伪随机密钥流。而本文的内容就是在回答这样两个问题:

  1. 伪随机密钥流是如何生成的?
  2. 流密码、流密钥生成器和有限状态自动机之间是什么关系?

一、什么是有限状态自动机?

(1)定义

        有限状态自动机(Finite State Machine,FSM)是具有离散输入和输出(输入集合与输出集合均有限)一种数学模型。用于描述和分析系统的行为,特别是那些可以根据输入信号在不同状态之间切换的系统。由以下三个部分组成:

① 有限状态集

状态集:一组有限的状态,表示系统可能处于的条件或模式。每个状态代表系统的一个特定配置。

S=\{ s_i | i=1,2,3,...,l\} 

② 有限输入字符集和有限输出字符集

输入集:一组有限的输入符号,这些符号可以触发状态的转换。

A_1 = \{ A^{(1)}_j | j=1,2,3,...,m\}

输出集:一组可能的输出符号,这些符号由自动机根据当前状态和输入产生。

A_2 = \{ A^{(2)}_k | k=1,2,3,...,n\}

③ 转移函数

状态转移函数:定义了在给定当前状态和输入的情况下,自动机会转移到哪个新状态。这个函数是自动机行为的核心。

s_h = f_2(s_i,A_j^{(1)})

输出函数:在某些FSM模型中,还定义了一个输出函数,它根据当前状态(和可能的输入)决定自动机的输出。

A_k^{(2)} = f_1(s_i,A_j^{(1)})

公式代表的含义是在状态为s_i,输入为A_j^{(1)}时,输出为A_k^{(2)},而状态转移为s_h

(2)表现形式一:转移图

        有限状态自动机(FSM)经常用有向图来表示,这种图形化的表示方法被称为转移图或状态图。转移图提供了一种直观的方式来展示FSM的结构和行为,便于理解和分析。

有限状态自动机的转移图表示
  1. 节点:转移图中的每个节点代表FSM中的一个状态。通常,节点会被标记以表示其状态名称或编号。

  2. 有向边:边表示从一个状态到另一个状态的转移。每条有向边都关联有一个或多个输入符号,这些输入符号触发从源状态到目标状态的转移。边上的标签通常包含触发转移的输入符号。

  3. 初始状态:转移图中通常会明确标出一个初始状态,表示FSM启动时的默认状态。初始状态通常用一个箭头指向或特殊形状的节点来表示。

  4. 终止状态:在某些FSM中,特定的状态被标记为终止状态或接受状态,表示自动机完成了一个特定任务或识别了一个特定输入序列。这些状态通常用双圆圈或类似标记来表示。

  5. 循环:转移图中可能存在从一个状态回到自身的边,这表示在特定输入下状态不会改变,形成一个循环。

  6. 分支:对于非确定性有限状态自动机(NFA),一个状态可能有多条边指向同一个或不同的状态,表示对于同一输入可能有多种响应。

(2)表现形式二:矩阵

        除了使用转移图直观地表示有限状态自动机(FSM)的状态和转移外,我们还可以使用矩阵来数学化地描述FSM的行为。

上半部分为输出矩阵,下半部分为状态转移矩阵

        有限状态自动机的矩阵表示主要有两种类型的矩阵:

  1. 状态转移矩阵:这是最常见的一种矩阵表示法,它描述了当前状态和输入组合下的下一个状态。如果FSM有n个状态,并且输入符号集合大小为m,则状态转移矩阵将是一个n×(m×n)的矩阵。每一行对应于一个当前状态,每一列对应于一个特定的输入,而矩阵中的元素则表示该输入下从当前状态转移到的下一个状态。如果FSM是非确定性的,那么矩阵中的元素可以是一个状态集,表示从当前状态出发,给定输入后可能达到的多个状态。

  2. 输出矩阵(对于带有输出的FSM):在带有输出功能的FSM中,每个状态转移不仅涉及状态的变化,还可能伴随有输出。输出矩阵描述了在给定状态和输入的情况下,FSM产生的输出。如果FSM有n个状态,m个输入符号,k个可能的输出,则输出矩阵将是n×(m×k)的矩阵,其中矩阵中的每个元素表示在特定状态和输入下产生的输出。

二、密钥流生成器

(1)有限状态自动机怎么转换成密钥流生成器?

        将有限状态自动机(FSM)转换成密钥流生成器通常是在设计密码系统时的一个步骤,尤其是对称加密中流密码的设计。流密码使用密钥流与明文进行逐位异或操作,以产生密文。密钥流生成器可以认为就是一个参数为k的有限状态自动机。如下图:

由一个输出符号集Z、一个状态集\sum、两个函数\varphi\psi以及一个初始状态\sigma _0组成。 

状态转移函数\varphi:将当前状态\sigma _i变为一个新状态\sigma _{i+1}

输出函数\psi:将当前状态\sigma _i变为输出符号集中的一个元素z_i

(2)密钥流生成器设计的关键

        密钥流的生成需要满足两个关键要求:随机性和不可预测性,确保攻击者无法轻易推断出密钥流的后续部分。

        密钥流生成器设计的关键在于找出适当的状态转移函数和输出函数。使得输出序列满足密钥流序列应该满足的随机性条件,并且要求在设备上是节省的和容易实现的。

        一般采样线性的状态转移函数和非线性的输出函数,这样能够进行深入的分析并可以得到好的生成器。所以密钥流生成器可以分成两个部分:驱动部分(包含线性组件)和非线性组合部分

  • 驱动部分:负责控制生成器的状态转移过程。这通常涉及到一种或多种线性反馈移位寄存器(LFSRs),它们通过线性反馈规则更新状态。驱动部分的主要目标是生成一系列统计特性良好的伪随机比特序列,这些序列随后会被馈送到非线性组合部分。

  • 非线性组合部分:任务是接收来自驱动部分的序列,并通过非线性变换将其转化为最终的密钥流输出。增加了输出序列的不可预测性,提高了生成器的整体安全性。

三、总结

        流密码作为密码学领域中的一个重要分支,它采用了一种动态的、逐位加密的技术,通过将明文与一个同长度的密钥流进行异或运算,实现了数据的安全传输和存储。这里的“逐位”加密,意味着每一个明文字符或比特位都会与相应的密钥流位进行一对一的加密操作。

        然而,直接使用与明文相同长度的密钥流在实际应用中面临着严峻的挑战,尤其是密钥分发和存储方面的问题。为了解决这一难题,密码学家们设计出了密钥流生成器——一种能够从一个较短的种子密钥出发,生成足够长、看似随机的密钥流的算法。这种生成的密钥流,虽然源自于简短的种子,但经过精心设计后,其长度可轻松匹配任何规模的明文,从而解决了密钥长度受限的问题。

        密钥流生成器的设计灵感来源于有限状态自动机,这是一种数学模型,用于描述系统如何基于当前状态和输入信号,在一组预定义状态之间进行转换的过程。在流密码的背景下,有限状态自动机被巧妙地运用,通过一系列复杂的内部状态变化,将种子密钥作为初始状态,逐步演进生成所需的密钥流。这一过程不仅保证了密钥流的不可预测性和随机性,同时也确保了生成器的高效性和实用性。

标签:输出,状态,密钥流,生成器,FSM,自动机,密码学
From: https://blog.csdn.net/qq_39780701/article/details/140321016

相关文章

  • 【Python迭代器探秘】:揭秘迭代器与生成器的魔法,掌握高效循环的艺术
    文章目录一、迭代器的基本概念1.1迭代器优点1.2迭代器的编写方法1.3python内置迭代器函数1.4小结1.5迭代器对象与迭代对象1.5.1区别1.迭代对象2.迭代器对象3.小结1.5.2方法区分二、生成器基本概念1.生成器函数2.生成器表达式一、迭代器的基本概念......
  • ML.NET-模型生成器工具(一)-图片分类教程
    1、创建一个图片分类模型2、配置训练环境  可以是CPU或者GPU3、添加训练数据  有个博主训练了一个检测奥特曼的模型,我找资料时参考了他的文章;所以这里和他保持一致,也训练一个识别奥特曼的模型验证一样。 注意事项:注意文件夹结构要求;注意每种数据的图片个数最好保持......
  • 【MyBatis-Plus】 代码生成器使用指南——快速上手最好用的代码生成器!
    MyBatis-Plus代码生成器使用指南1.简介2.环境准备3.项目结构4.引入依赖5.编写代码生成器配置类6.配置解释6.1全局配置6.2数据源配置6.3包配置6.4模板配置6.5策略配置7.运行代码生成器8.生成的代码结构9.总结1.简介MyBatis-Plus是一个MyBatis......
  • 算法金 | 推导式、生成器、向量化、map、filter、reduce、itertools,再见 for 循环
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」不要轻易使用For循环For循环,老铁们在编程中经常用到的一个基本结构,特别是在处理列表、字典这类数据结构时。但是,这东西真的是个双刃剑。虽然看起来挺直白,一用就上手,但是......
  • 密码学复习
    目录基础欧拉函数欧拉函数φ(n)定义计算方法的技巧当a=a_1*a_2*……*a_n时欧拉定理剩余系一些超简单密码维吉尼亚密钥fox凯撒(直接偏移)凯特巴氏(颠倒字母表)摩斯密码(字母对应电荷线)希尔(hill)密码一些攻击RSA求uf+vg=1快速幂模m^e==?modn孙子定里平方剩余欧......
  • 迭代器和生成器
    1、迭代器定义:访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象。迭代器对象从第一个元素开始访问,直到所有元素被访问。运用的场景:迭代器是一个对象,它能够在遍历数据集合时按需生成值,而不是一次性将所有值存储在内存中。这使得迭代器特别适合处理大数据集合或者......
  • java高仿真数据生成器-需要的拿去
    java高仿真数据生成器源码-需要的拿去nit-random-tools介绍:高仿真数据生成器逆天开源java证号码,姓名,职业,日期,手机号生成器功能列表编号功能描述class1号生成器NitIdcardGenerator2姓名生成器NitChineseNameGenerator3职业生成器NitJobGenerator4日期生成器N......
  • 迭代器&&生成器&&可迭代对象
    迭代器定义:1.当类中定义了__iter__和__next__两个方法。2.__iter__方法需要返回对象本身,即:self3.__next__方法,返回下一个数据,如果没有数据了(不返回数据了),则需要抛出一个StopIteration的异常。接下来,通过代码来认识它classIT(object):def__init__(self):......
  • 迭代器协议、可迭代对象(迭代器)、三元表达式、生成器
    今天说的这老几位可是老牛逼了,认真看,咱们挨个介绍哈。1、迭代器协议(1)有一个next()方法(2)只能往后走不能往前退2、可迭代对象可迭代对象又叫做迭代器,什么是可迭代对象呢?很简单,满足迭代器协议的对象就是可迭代对象。说白了,就是满足前面那两条:有一个next()方法,只能往后走不能往......
  • 网络安全&密码学—python中的各种加密算法
    网络安全&密码学—python中的各种加密算法一、简介数据加密是一种保护数据安全的技术,通过将数据(明文)转换为不易被未经授权的人理解的形式(密文),以防止数据泄露、篡改或滥用。加密后的数据(密文)可以通过解密过程恢复成原始数据(明文)。数据加密的核心是密码学,它是研究密码系统或通信安......