文章目录
- 流密码加密解密流程
- [Stream Cipher vs. Block Cipher](#Stream Cipher vs. Block Cipher)
- [Synchronous vs. Asynchronous Stream Cipher](#Synchronous vs. Asynchronous Stream Cipher)
- [Random number generators (RNGs)](#Random number generators (RNGs))
-
- [True rng](#True rng)
- [Pseudorandom Number Generator (PRNG)](#Pseudorandom Number Generator (PRNG))
- [Cryptographically Secure Pseudorandom Number Generator (CSPRNG)](#Cryptographically Secure Pseudorandom Number Generator (CSPRNG))
- [One-Time Pad (OTP)](#One-Time Pad (OTP))
- 走向实用流密码
- [Linear feedback shift registers (LFSRs)](#Linear feedback shift registers (LFSRs))
- LFSRs的安全性
- [Practical Stream Cipher -- eSTREAM project](#Practical Stream Cipher – eSTREAM project)
- [A practical stream cipher: Trivium](#A practical stream cipher: Trivium)
流密码属于同步加密中的
流密码在如互联网安全等大多数领域中不如分组密码流行。但也存在例外,例如流行的流密码 RC4。
流密码有时在实现时所需的资源比分组密码少,比如代码大小或芯片面积,并且它们适合用于资源受限的环境,如手机。
流密码加密解密流程
每个比特位进行加密

Stream Cipher vs. Block Cipher

流密码通常比分组密码更快,因为它们逐个比特地处理数据,而不是等待整个块准备好。
这种快速处理能力对于实时通信非常重要,尤其是在移动设备和无线通信中。
Synchronous vs. Asynchronous Stream Cipher

reproducible :发送方和接收方都能生成相同的密钥流
Random number generators (RNGs)

True rng

Pseudorandom Number Generator (PRNG)
Cryptographically Secure Pseudorandom Number Generator (CSPRNG)


One-Time Pad (OTP)

一次性密码本(One-Time Pad, OTP)的无条件安全性依赖于一个关键条件:每个密钥流位只能使用一次。这是确保 OTP 无条件安全性的核心原则
为什么OTP是无条件安全
走向实用流密码
定义
- 计算上安全:一个密码系统是计算上安全的,如果破解它的已知最佳算法至少需要 t 次运算。这意味着对于今天的计算机来说,执行 t 次运算是计算上不可行的。
- 或者说计算上安全:密码系统的安全性基于当前技术无法在合理时间内完成所需的大量运算
问题
这个定义存在几个问题:
-
最佳算法的问题:
- 对于给定的攻击,什么是最佳算法?换句话说,我们如何确定哪种攻击方法是最有效的?
-
复杂度下限的问题:
- 即使知道一种攻击的复杂度下限,是否有可能更强大的攻击?也就是说,即使我们知道某种攻击需要 ( t ) 次运算,是否还存在其他未知的攻击方法,其复杂度更低?
对称加密方案
- 对于对称加密方案,希望没有比穷举密钥搜索复杂度更低的攻击方法。这意味着最坏情况下,攻击者只能通过尝试所有可能的密钥来破解加密。
由于大多数伪随机数生成器的线性特性而导致的不良加密属性。

Linear feedback shift registers (LFSRs)
实例
最大长度是因为各个比特位只有7种情况,所以七种情况过后一定会有重复的,那么后面的就会是一样的
LFSRS多项式
能生成足够长的密钥序列的多项式是原子的
原子多项式是不可拆分多项式的特例
如何判断是否是原子多项式
原子多项式很容易被得到,所以最大长度的 LFSR也很容易找到
实例
LFSRs的安全性

为什么需要2m位输出才能确定LFSR的反馈系数
例子:
假设我们有一个3阶(m=3)的LFSR,其特征多项式为:
x³ + p₁x² + p₂x + p₃
步骤分析:
-
设初始状态为(s₀,s₁,s₂),我们需要求解未知的反馈系数p₁,p₂,p₃
-
LFSR的递推关系为:
sₙ₊₃ = p₁sₙ₊₂ + p₂sₙ₊₁ + p₃sₙ
-
写出前几个方程:
s₃ = p₁s₂ + p₂s₁ + p₃s₀ (方程1)
s₄ = p₁s₃ + p₂s₂ + p₃s₁ (方程2)
s₅ = p₁s₄ + p₂s₃ + p₃s₂ (方程3)
-
为什么需要2m(=6)位输出:
- 我们有3个未知数(p₁,p₂,p₃)需要求解
- 每个方程都需要知道4个连续的输出位
- 为了建立3个独立方程,需要知道从s₀到s₅共6个输出位
-
用矩阵形式表示:
[s₂ s₁ s₀] [p₁] [s₃]
[s₃ s₂ s₁] [p₂] = [s₄]
[s₄ s₃ s₂] [p₃] [s₅]
-
只有当我们知道s₀到s₅这6个输出位(2m=6),才能:
- 构建完整的系数矩阵
- 确保方程组有唯一解
- 求解出p₁,p₂,p₃的值
总结:
- 需要2m位是因为要建立m个独立的线性方程
- 每个方程需要m+1个连续输出位
- 总共需要m+(m-1)=2m位输出来构建完整的方程组
这就解释了为什么需要2m位输出来确定m阶LFSR的反馈系数。
Practical Stream Cipher -- eSTREAM project

Salsa20
QR
四分之一轮函数:四个输入,四个输出
Salsa20 算法完整流程
在最后一步中,将混合数组逐字添加到原始数组中,以获得其64字节的键流块。这一点很重要,因为混合轮本身是可逆的。

A practical stream cipher: Trivium
纠正下,A是IV ,B是key

