当前位置: 首页 > news >正文

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

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

  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),它们通过线性反馈规则更新状态。驱动部分的主要目标是生成一系列统计特性良好的伪随机比特序列,这些序列随后会被馈送到非线性组合部分。

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

三、总结

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

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

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

相关文章:

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

本文是对流密码内容的拓展,在流密码中种子密钥通过一个伪随机数生成器产生一个与明文等长的伪随机密钥流。而本文的内容就是在回答这样两个问题: 伪随机密钥流是如何生成的?流密码、流密钥生成器和有限状态自动机之间是什么关系?…...

3.相机标定原理及代码实现(opencv)

1.相机标定原理 相机参数的确定过程就叫做相机标定。 1.1 四大坐标系及关系 (1)像素坐标系(单位:像素(pixel)) 像素坐标系是指相机拍到的图片的坐标系,以图片的左上角为坐标原点&a…...

Centos7 安装Docker步骤及报错信息(不敢说最全,但是很全)

一、操作系统要求: 要安装Docker Engine,您需要CentOS 7及以上的维护版本。存档版本不受支持或测试。必须启用centos临时存储库。默认情况下,此存储库已启用,但如果已禁用,则需要重新启用它。建议使用overlay2存储驱动…...

【C语言】符号优先级详解

C语言符号优先级详细解析 在C语言中,不同的运算符具有不同的优先级和结合性,这决定了在表达式中运算符的计算顺序。理解这些优先级和结合性是正确编写和理解C语言程序的基础。本文将详细解析C语言中的符号优先级,包括各类运算符的优先级、结…...

天翼云高级运维工程师202407回忆题库 最新出炉

备考天翼云高级运维工程师 必须备考天翼云 之前觉得外企牛批 然后民企,拔地而起,民企也不错,工资高,有钱途 现在看来看去,还是国企好,体制内的,有保障,树大根深 有必要备考下天…...

在Python中什么是上下文管理器以及如何使用with语句来管理资源

什么是上下文管理器? 在Python中,上下文管理器(Context Manager)是一种支持with语句的协议,允许对象管理资源,如文件、线程锁的获取和释放、数据库连接等。上下文管理器负责资源的分配和释放,确…...

(四)、python程序--贪吃蛇游戏

一、绪论 贪吃蛇游戏。 已实现功能: 1、上下左右移动; 2、吃食物,随机生成食物; 3、碰撞检测,判断是否游戏结束。 二、代码分享 1、main.py import pygame import sys import food as c_food import snake as c…...

什么是DNS欺骗

DNS欺骗(DNS Spoofing),也称为DNS缓存中毒(DNS Cache Poisoning),是一种网络攻击形式,攻击者通过操纵DNS记录,将用户重定向到一个伪造的、恶意的网站。这些恶意网站可能看起来与用户…...

C++实现对结构体信息排序

思路解读: 定义结构体 Student: 结构体 Student 用来表示学生信息,包含两个成员变量:name(学生姓名)和 score(学生分数)。Student 结构体定义了一个构造函数,用于初始化 name 和 sco…...

[CTF]-PWN:House of Cat堆题型综合解析

原理: 调用顺序: exit->_IO_wfile_jumps->_IO_wfile_seekoff->_IO_switch_to_wget_mode _IO_wfile_seekoff源码: off64_t _IO_wfile_seekoff (FILE *fp, off64_t offset, int dir, int mode) {off64_t result;off64_t delta, new…...

18.按键消抖模块设计(使用状态机,独热码编码)

(1)设计意义:按键消抖主要针对的时机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子就断开。因而在闭合以及断开的瞬…...

【Hec-HMS】第一期:模型简介及软件安装

HEC-HMS模型简介及软件安装 HEC-HMS模型简介建模思路 HEC-HMS软件安装步骤1:安装InstallShield Wizard步骤2:安装HEC-HMS 参考 HEC-HMS模型简介 HEC-HMS(The Hydrologic Engineering Center’s-Hydrologic Modelimng System),美国陆军工程兵…...

逻辑回归不是回归吗?那为什么叫回归?

RNN 逻辑回归不是回归吗?那为什么叫回归?逻辑回归的基本原理逻辑函数(Sigmoid函数)二元分类 为什么叫做“回归”?逻辑回归的应用场景总结 逻辑回归不是回归吗?那为什么叫回归? 逻辑回归&#x…...

Activity对象的部分常见成员变量

在Android开发中,Activity 类是一个非常重要的类,它代表了应用程序中的一个屏幕。每个Activity都有一系列的成员变量和方法,这些成员变量通常用于控制和管理活动生命周期、UI界面元素、应用资源等。虽然具体的成员变量会根据Android的不同版本…...

量化交易策略:赌徒在股市会运用凯利公式(附python代码)

一、凯利公式的历史 凯利公式(Kelly Criterion)是由美国贝尔实验室物理学家约翰拉里凯利(John Larry Kelly)于1956年提出的,用于计算最优投资比例的一种数学公式。凯利公式的核心思想是:在期望收益和风险之间找到一个平衡点,使得投资者在承担一定风险的情况下,能够获得…...

信息系统项目管理师【一】英文选择题词汇大全(1)

一、计算机相关词汇 数据挖掘 Data Mining分布式计算 Distributed Computing云计算 Cloud Computing物联网 IOT Internet of Things大数据 Big Data人工智能 artificial intelligence互联网 Internet plus区块链 Blockchain5G 5th-Generation感知层 sensing layer机器学习 mac…...

怎么判断自己是否适合学习PMP?

判断自己是否适合学习PMP项目管理专业人士认证,可以从以下几个方面进行考量: 1、职业发展需求: 如果您在项目管理领域工作,或计划未来从事相关工作,PMP认证能显著提升您的竞争力。 对于项目经理、产品经理、技术领导…...

最新的数据防泄密方案来袭!

沙箱技术作为一种先进的数据安全解决方案,在数据防泄密领域发挥着日益重要的作用。它通过构建一个隔离的虚拟环境,使得应用程序在该环境中运行,从而隔离了应用程序对系统资源的直接访问,有效防止了数据泄露的风险。 一、沙箱技术在…...

Python数据处理之高效校验各种空值技巧详解

概要 在编程中,处理空值是一个常见且重要的任务。空值可能会导致程序异常,因此在进行数据处理时,必须确保数据的有效性。Python 提供了多种方法来处理不同数据对象的空值校验。本文将详细介绍如何对Python中的各种数据对象进行空值校验,并包含相应的示例代码,帮助全面掌握…...

Spring Boot与RSocket的集成

Spring Boot与RSocket的集成 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 一、引言 RSocket是一个基于异步、消息驱动的网络协议,旨在解决微服…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理&#xff1a…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...