# 钟控模型与有记忆变换模型

4 min read
Table of Contents

视频

钟控模型

基本思路:使 LFSR 的动作次数未知化

基本模型:

  • 它控
  • 自控
  • 互控

它控模型

用其它(密钥决定初态的) LL' 级本原 LFSR 控制输入 LFSR,也可参与非线性变换干涉乱数生成。

优点:密码性质容易分析

缺点:可穷举控制序列

自控模型

非线性变换不仅产生乱数,还产生控制序列控制输入 LFSR。

优点:抗攻击能力强于它控模型

缺点:密码性质不易分析

互控模型

有许多 LFSR 输入非线性变换,同时每个 LFSR 的控制序列也受其它 LFSR 影响。

优点:更强的抗攻击能力

缺点:密码性质更不易分析

有记忆变换模型

用上一个/几个时刻的计算结果参与当前乱数生成。

设在i时刻输入是x(i),记忆是S(i),输出是y(i)。则i0,有设在 i 时刻输入是 x^{(i)},记忆是 S^{(i)},输出是 y^{(i)}。则 \forall i \ge 0,有

{y(i)=f(x(i),S(i))S(i+1)=g(x(i),S(i))\left\{ \begin{matrix} y^{(i)} = f(x^{(i),S^{(i)}}) \\ S^{(i+1)} = g(x^{(i),S^{(i)}}) \end{matrix} \right.

一般有记忆变换能增大乱数的周期,有更好的扩散效果、更强抗破译能力。

例:存储-对换变换(RC4)

将输入 ai,bia_i, b_i 认为是地址,从预设 s 盒中得到相应内容 S(ai),S(bi)S(a_i), S(b_i);而后将内容命中的区块对换生成新的 s 盒。

缺点:

  1. 变化只有命中的一个区块,ai,bia_i, b_i 相同时对换也相同。弱初始 s 盒也可攻击。
  2. s 盒的密码特性表现为随机 s 盒,不够好。

问题:怎么设置满足双射的初始 s 盒?

RC4 序列密码算法即为这样的模型。有一个 8 进 8 出的 s 盒,输入输出向量均为 8 维二元向量,s 盒初值由密钥和初始化向量 IV 决定。输出记为 S(i)=SiS(i) = S_i

(记忆1)S:{0,1}8{0,1}8(记忆1)S: \{ 0,1 \}^8 \rightarrow \{ 0,1 \}^8

有两个计数器i(时钟),j(记忆)i(时钟), j(记忆),初值均为 0,加密过程中不断修改。

RC4 算法按以下方法产生第 i时刻的乱数字节di,完成对第i个明文字节mi的加密i 时刻的乱数字节 d_i,完成对第 i 个明文字节 m_i 的加密

  1. i=(i+1)mod256i = (i+1) mod 256
  2. j=(j+Si)mod256j = (j + S_i) mod 256
  3. 交换SiSj交换 S_i 和 S_j
  4. t=(Si+Sj)mod256t = (S_i + S_j) mod 256
  5. d=Std = S_t
  6. c=dmc = d \oplus m
  7. 返回第一步,对下一个明文字节加密

s 盒如何生成?

  1. 重复密钥,扩展至256字节,得到 k0,k1,...,k255k_0, k_1, ..., k_{255}
  2. 简单填充 s 盒,Si=iS_i = i,显然这样是双射
  3. j=0j = 0
  4. for ii in range(0,255): j=(j+Si+ki)mod256j = (j + S_i + k_i) mod 256 交换 Si,SjS_i, S_j

RC4 的传递如下。

破译:

  1. 固定的 s 盒并不安全,连续两个时刻至多有两个地址的值不同,推测 s 盒。
  2. 尝试弱 IV 值推测 s 盒。
  3. 线性逼近 s 盒,获得密钥与乱数的相关性,统计求解密钥。(用 iSj逼近ji 和 S_j 逼近 j
My avatar

Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer.


More Posts

Comments