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

【密码学】3. 流密码

目录

  • 流密码
    • 流密码(序列密码)的基本概念
    • 线性反馈移位寄存器(LFSR)
    • 线性移位寄存器的一元多项式表示
    • m 序列的伪随机性
    • m 序列密码的破译
    • 非线性序列
    • 序列密码设计原则
    • 重点总结

流密码

流密码(序列密码)的基本概念

  1. 核心要素

    • 明文:记为xix_ixi(二元序列,取值 0 或 1),是待加密的原始数据。

    • 密钥:记为ziz_izi(二元序列),由滚动密钥生成器产生,称为 “滚动密钥” 或 “密钥流”。

    • 密文:记为yiy_iyi(二元序列),是加密后的结果。

    • 加密变换:在 GF (2)(二元域)上,加密通过加法(即异或运算)实现:yi=xi⊕ziy_i = x_i \oplus z_iyi=xizi

    • 解密变换:同理,解密为xi=yi⊕zix_i = y_i \oplus z_ixi=yizi(因zi⊕zi=0z_i \oplus z_i = 0zizi=0)。

  2. 加法流密码体制模型

    • 核心结构:包含 “安全信道”(传输初始密钥)、“滚动密钥生成器”(生成密钥流ziz_izi)、加密 / 解密模块(异或运算)。

    • 密钥流生成器是流密码安全性的关键,需生成具有良好伪随机性的序列。

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

  1. 基本结构

    • nnn个二元存储器(存储 0 或 1)和一个反馈函数f(a1,a2,…,an)f(a_1,a_2,\dots,a_n)f(a1,a2,,an)组成,是生成密钥流的核心部件。

    • 状态:任一时刻nnn个存储器的内容构成nnn维向量(a1,a2,…,an)(a_1,a_2,\dots,a_n)(a1,a2,,an),共2n2^n2n种可能状态(排除全 0 状态时为2n−12^n - 12n1种)。

    • 反馈函数nnn元布尔函数(输入输出均为 0 或 1),线性反馈移位寄存器(LFSR)的反馈函数为线性函数:f(a1,…,an)=c1a1⊕c2a2⊕⋯⊕cnanf(a_1,\dots,a_n) = c_1a_1 \oplus c_2a_2 \oplus \dots \oplus c_na_nf(a1,,an)=c1a1c2a2cnanci∈{0,1}c_i \in \{0,1\}ci{0,1},且至少一个ci≠0c_i \neq 0ci=0,通常设cn=1c_n = 1cn=1)。

  2. 输出序列特性

    • 输出序列{at}\{a_t\}{at}由初始状态和反馈函数决定,满足线性递推关系:an+k=c1an+k−1⊕c2an+k−2⊕⋯⊕cnaka_{n+k} = c_1a_{n+k-1} \oplus c_2a_{n+k-2} \oplus \dots \oplus c_na_kan+k=c1an+k1c2an+k2cnak

    • 周期:状态周期与输出序列周期一致,最大周期为2n−12^n - 12n1(此时序列称为mmm序列)。

  3. 示例

    • 3 级 LFSR:初始状态(1,0,1)(1,0,1)(1,0,1),反馈函数f=a1⊕a3f = a_1 \oplus a_3f=a1a3,输出序列为1011101110…1011101110\dots1011101110,周期为 4。

    • 5 级 LFSR:初始状态(1,0,0,1,1)(1,0,0,1,1)(1,0,0,1,1),输出序列周期为 31(达到25−12^5 - 1251,即mmm序列)。

线性移位寄存器的一元多项式表示

  1. 特征多项式

    • 对于满足递推关系an+k=c1an+k−1⊕⋯⊕cnaka_{n+k} = c_1a_{n+k-1} \oplus \dots \oplus c_na_kan+k=c1an+k1cnak的 LFSR,其特征多项式定义为:p(x)=1+c1x+c2x2+⋯+cnxnp(x) = 1 + c_1x + c_2x^2 + \dots + c_nx^np(x)=1+c1x+c2x2++cnxncn=1c_n = 1cn=1)。
  2. 生成函数

    • 序列{ai}\{a_i\}{ai}的生成函数为幂级数:A(x)=a1+a2x+a3x2+…A(x) = a_1 + a_2x + a_3x^2 + \dotsA(x)=a1+a2x+a3x2+

    • 生成函数与特征多项式满足A(x)=ϕ(x)p(x)A(x) = \frac{\phi(x)}{p(x)}A(x)=p(x)ϕ(x),其中ϕ(x)\phi(x)ϕ(x)是次数≤n−1n-1n1的多项式(由初始状态决定)。

  3. 多项式与序列的关系

    • p(x)∣q(x)p(x) \mid q(x)p(x)q(x),则G(p(x))⊆G(q(x))G(p(x)) \subseteq G(q(x))G(p(x))G(q(x))G(p(x))G(p(x))G(p(x))是由p(x)p(x)p(x)生成的所有非零序列集合),即低阶 LFSR 生成的序列可由高阶 LFSR 生成。

    • 多项式的周期:使p(x)∣(xp−1)p(x) \mid (x^p - 1)p(x)(xp1)的最小ppp称为p(x)p(x)p(x)的周期。

    • 序列周期r∣pr \mid prpppp是特征多项式周期)。

  4. m 序列与本原多项式

    • m 序列:周期达到2n−12^n - 12n1的 LFSR 序列。

    • 本原多项式nnn次不可约多项式,且周期为2n−12^n - 12n1

    • 序列{ai}\{a_i\}{ai}mmm序列的充要条件是其特征多项式为nnn次本原多项式。

    • 本原多项式的个数为ϕ(2n−1)/n\phi(2^n - 1)/nϕ(2n1)/nϕ\phiϕ为欧拉函数),对任意nnn至少存在一个。

m 序列的伪随机性

  1. 伪随机序列的必要性

    • 密钥流需具有伪随机性:截获部分序列无法预测后续,满足 “不可预测性”。
  2. Golomb 随机性公设

    • ① 周期内 0 与 1 的个数相差至多 1;

    • ② 长为iii的游程占总游程的1/2i1/2^i1/2i,且等长游程中 0 和 1 的游程数相等;

    • ③ 异相自相关函数为常数。

  3. m 序列的伪随机性质

    • ① 周期T=2n−1T = 2^n - 1T=2n1内,0 的个数为2n−1−12^{n-1} - 12n11,1 的个数为2n−12^{n-1}2n1

    • ② 总游程数为2n−12^{n-1}2n1;长为iii1≤i≤n−21 \leq i \leq n-21in2)的游程有2n−i−12^{n-i-1}2ni1个(0 和 1 各半);1 个长为n−1n-1n1的 0 游程和 1 个长为nnn的 1 游程;

    • ③ 自相关函数:R(τ)={1τ=0modT−1/Tτ≠0modTR(\tau) = \begin{cases} 1 & \tau = 0 \mod T \\ -1/T & \tau \neq 0 \mod T \end{cases}R(τ)={11/Tτ=0modTτ=0modT,满足公设③。

m 序列密码的破译

  1. 破译原理

    • 针对由 LFSR 生成的mmm序列密钥流,已知长为2n2n2n的明文 - 密文对(即密钥流片段z1,z2,…,z2nz_1, z_2, \dots, z_{2n}z1,z2,,z2n),可求解 LFSR 的反馈系数c1,…,cnc_1, \dots, c_nc1,,cn
  2. 步骤

    • 由密钥流片段构造nnn个连续状态:Sh=(zh,zh+1,…,zh+n−1)S_h = (z_h, z_{h+1}, \dots, z_{h+n-1})Sh=(zh,zh+1,,zh+n1)h=1,2,…,n+1h = 1, 2, \dots, n+1h=1,2,,n+1);

    • 建立线性方程组:zh+n=c1zh+n−1⊕⋯⊕cnzhz_{h+n} = c_1z_{h+n-1} \oplus \dots \oplus c_nz_hzh+n=c1zh+n1cnzh

    • 用矩阵求解反馈系数:(cn,cn−1,…,c1)=(zn+1,…,z2n)⋅X−1(c_n, c_{n-1}, \dots, c_1) = (z_{n+1}, \dots, z_{2n}) \cdot X^{-1}(cn,cn1,,c1)=(zn+1,,z2n)X1XXX为状态矩阵)。

  3. 示例

    • 已知密文101101011110010101101011110010101101011110010和明文011001111111001011001111111001011001111111001,求得密钥流110100100001011110100100001011110100100001011,通过 5 级 LFSR 的方程组求解,得反馈系数(c5,c4,c3,c2,c1)=(1,0,0,1,0)(c_5, c_4, c_3, c_2, c_1) = (1,0,0,1,0)(c5,c4,c3,c2,c1)=(1,0,0,1,0),递推关系为ai+5=ai⊕ai+3a_{i+5} = a_i \oplus a_{i+3}ai+5=aiai+3

非线性序列

为克服 LFSR 的线性性缺陷(易破译),需构造非线性序列生成器,核心是提高线性复杂度和周期。

  1. Geffe 序列生成器

    • 结构:3 个 LFSR(LFSR2 为控制器),输出bk=a1(k)a2(k)⊕a3(k)(1⊕a2(k))b_k = a_1^{(k)}a_2^{(k)} \oplus a_3^{(k)}(1 \oplus a_2^{(k)})bk=a1(k)a2(k)a3(k)(1a2(k))ai(k)a_i^{(k)}ai(k)为第iii个 LFSR 的输出);

    • 周期:若 LFSRiii的特征多项式为nin_ini次本原多项式且nin_ini互素,则周期为∏i=13(2ni−1)\prod_{i=1}^3 (2^{n_i} - 1)i=13(2ni1)

    • 线性复杂度:(n1+n3)n2+n3(n_1 + n_3)n_2 + n_3(n1+n3)n2+n3

  2. J-K 触发器

    • 输出公式:ck=(x1⊕x2)ck−1⊕x1c_k = (x_1 \oplus x_2)c_{k-1} \oplus x_1ck=(x1x2)ck1x1x1,x2x_1, x_2x1,x2为输入,ck−1c_{k-1}ck1为前一输出);

    • 真值表:根据J=x1,K=x2J=x_1, K=x_2J=x1,K=x2,输出ckc_kckck−1c_{k-1}ck1和输入决定;

    • 生成器:由 2 个 LFSR(mmm级和nnnmmm序列)驱动,周期为(2m−1)(2n−1)(2^m - 1)(2^n - 1)(2m1)(2n1)(当mmmnnn互素且a0⊕b0=1a_0 \oplus b_0 = 1a0b0=1时)。

  3. Pless 生成器

    • 结构:8 个 LFSR、4 个 J-K 触发器、1 个循环计数器(控制输出选通);

    • 输出序列:按计数器周期选取 4 个 J-K 触发器的输出(如a0b1c2d3a4b5…a_0b_1c_2d_3a_4b_5\dotsa0b1c2d3a4b5),提高复杂性。

  4. 钟控序列生成器

    • 结构:LFSR1 控制 LFSR2 的时钟(LFSR1 输出 1 时,LFSR2 移位;输出 0 时,保持);

    • 周期:若 LFSR1(mmm级,周期p1=2m−1p_1=2^m - 1p1=2m1)和 LFSR2(nnn级,周期p2=2n−1p_2=2^n - 1p2=2n1),且gcd⁡(p1,p2)=1\gcd(p_1, p_2)=1gcd(p1,p2)=1,则周期为p1p2p_1p_2p1p2

    • 线性复杂度:n(2m−1)n(2^m - 1)n(2m1),极小特征多项式为f2(x2m−1)f_2(x^{2^m - 1})f2(x2m1)f2f_2f2为 LFSR2 的特征多项式)。

序列密码设计原则

  1. 长周期:避免密钥流重复导致的安全性缺陷。
  2. 高线性复杂度:抵抗线性分析攻击。
  3. 良好统计性能:满足 Golomb 公设,0-1 分布平衡、游程特性合理。
  4. 混乱与扩散:使明文与密钥流的关系复杂,掩盖统计特性。
  5. 抗攻击性:能抵抗已知明文、选择明文等多种攻击方式。

重点总结

  • 流密码核心是通过密钥流与明文的模 2 加实现加密,密钥流生成是关键。
  • LFSR 是生成密钥流的基础部件,m序列是其最优线性序列(周期最大、伪随机性好),但线性特性易被破译。
  • 非线性序列生成器(如 Geffe、J-K 触发器等)通过引入非线性变换提升安全性,需兼顾周期、线性复杂度和实现效率。
  • 破译m序列密码的核心是利用线性递推关系,通过足够长的密钥流片段求解反馈系数。
http://www.lryc.cn/news/602850.html

相关文章:

  • 互信息:理论框架、跨学科应用与前沿进展
  • 【实时Linux实战系列】实时运动分析系统的构建
  • 表征学习:机器认知世界的核心能力与前沿突破
  • 组件化(一):重新思考“组件”:状态、视图和逻辑的“最佳”分离实践
  • 11. 若依参数验证 Validated
  • Linux DNS解析3 -- DNS解析代理配置使用
  • 机器学习基础-matplotlib
  • Python Pandas.merge函数解析与实战教程
  • 解决Echarts设置宽度为100%发现宽度变为100px的问题
  • Revo Uninstaller Pro专业版领取:2025最佳Windows软件卸载工具
  • 【历史人物】【韩愈】简历与生平
  • 解决访问 nginx 首页报错 404
  • 【LeetCode 热题 100】35. 搜索插入位置——二分查找(闭区间)
  • XCF32PVOG48C Xilinx Platform Flash PROM
  • 【计算机网络】计算机网络中光猫、交换机、路由器、网关、MAC地址是什么?两台电脑是如何联通的?
  • PTX指令集基础以及warp级矩阵乘累加指令介绍
  • 进程间通信性能测试于VPS服务器环境的实践方案
  • Java HashMap中的compute及相关方法详解:从基础到Kafka Stream应用
  • 【esp32s3】7 - VSCode + PlatformIO + Arduino + 构建项目
  • Jenkins流水线部署+webhook2.0
  • 【Kubernetes 指南】基础入门——Kubernetes 101(二)
  • Java 笔记 transient 用法
  • C语言操作符详解:从基础到进阶
  • linux find命令使用教程
  • 【数学建模论文学习笔记】基于历史数据的蔬菜类商品定价与补货决策模型
  • 1688 item_search_shop 接口参数说明与测试指南
  • 源代码管理工具有哪些?有哪些管理场景?
  • MGER综合实验
  • 椭圆曲线加密(ECC)实战:从原理到区块链应用
  • 机器学习(重学版)基础篇(算法与模型一)