流密码
在密码学中,流密码是一种对称密钥密码,其中明文位与伪随机密码位流(密钥流)使用独占或(xor)操作相结合。在流密码中,明文位一次一个地进行加密,在加密状态下,连续位的变换是不同的。另一个名字是状态密码,因为每个数字的加密取决于当前的状态。在实践中,数字通常是单比特或字节。
流密码代表了一种不同于块密码的对称加密方法。块密码在固定长度的大块上运行。流密码的执行速度通常比块密码高,对硬件的要求也较低。然而,如果使用不当,流密码容易出现严重的安全问题;例如,特别是同一起始状态绝对不能使用两次。
流密码利用一个小得多、方便得多的加密密钥,例如128位密钥。基于这个密钥,它产生一个伪随机的密钥流,它可以与明文数字相结合,类似于一次性垫加密算法。然而,由于密钥流是伪随机的,而不是真正的随机的,所以不能应用一次性垫的相关安全性,流密码完全不安全是很有可能的。
A5/1中密钥流生成器的操作,A5/1是一种基于LFSR的流密码,用于加密手机对话。
流密码器的类型
流密码根据内部状态生成钥匙流的连续元素。这种状态的更新有两种方式。
- 如果状态的变化与明文或密文消息无关,则该密文被归为同步流密文。
- 如果根据之前密文位数的变化更新状态,则该密文被归为自同步流密文。
同步流密码器
在同步流密码中,一个伪随机数字流独立于明文和密文信息生成,然后与明文(加密)或与密文(解密)结合。在最常见的形式中,使用二进制数字(bit),并使用独占或操作(XOR)将密钥流与明文相结合。这被称为二进制加法流密码。
在同步流密码中,发送方和接收方必须同步才能解密成功。如果在传输过程中,信息中的数字被添加或删除,同步就会丢失。为了恢复同步性,可以系统地尝试各种偏移,以获得正确的解密。另一种方法是在输出的有规律的点上用标记标记密文。
但是,如果一个数字在传输过程中损坏,而不是增加或丢失,那么只有明文中的一个数字受到影响,错误不会传播到信息的其他部分。当传输错误率很高时,这种特性是有用的;但是,它使得在没有进一步机制的情况下,错误被发现的可能性较小。此外,由于这一特性,同步流密码器非常容易受到主动攻击--如果攻击者能够改变密文中的一个数字,他可能会对相应的明文位进行可预测的改变;例如,翻转密文中的一个位,会导致明文中相同的位被翻转(Toggled)。
自同步流密码器
自同步流密码器是另一种利用前面N个密文数字的一部分来计算密钥流的技术。这种方案也被称为异步流密码器或密文自同步(CTAK)。自同步的思想在1946年获得了专利,其优点是接收者在接收到N个密文数字后,会自动与密钥流生成器同步,如果数字被丢弃或添加到信息流中,恢复起来比较容易。单位数错误的影响有限,最多只影响N个明文数字。对自同步流密码器进行主动攻击比对同步密码器进行主动攻击要困难一些。
自同步流密码的一个例子是密码反馈模式(CFB)的块密码。
基于线性反馈移位寄存器的流密码器
二进制流密码通常使用线性反馈移位寄存器(LFSRs)来构造,因为它们可以很容易地在硬件中实现,并且可以快速地进行数学分析。然而,仅使用LFSRs不足以提供良好的安全性。为了提高LFSRs的安全性,人们设计了各种方案。
非线性组合函数
由于LFSRs本身是线性的,消除线性的一种技术是将一组并行LFSRs的输出送入一个非线性布尔函数中,形成一个组合发生器。这种组合函数的各种特性对于保证结果方案的安全性非常重要,例如,为了避免相关攻击。
时钟控制的发电机
通常LFSR是有规律地步进的。引入非线性的一种技术是让LFSR不规则地计时,由第二个LFSR的输出控制。这种发生器包括停-走发生器、交替步进发生器和收缩发生器。
停走式发生器(Beth和Piper,1984)由两个LFSR组成。如果第二个LFSR的输出为"1",则其中一个LFSR被计时,否则它重复以前的输出。然后,这个输出(在某些版本中)与第三个LFSR的输出结合起来,以固定的速度计时。
收缩发生器采用的是不同的技术。使用了两个LFSR,两个LFSR都以下列方式有规律地进行计时。
- 如果第一个LFSR的输出为"1",那么第二个LFSR的输出就成为发电机的输出。
- 如果第一个LFSR的输出为"0",则丢弃第二个LFSR的输出,信号发生器不输出任何位。
这种技术受到第二发生器的定时攻击,因为输出的速度是可变的,取决于第二发生器的状态。可以通过缓冲输出来改善这种情况。
过滤器发生器
另一种提高LFSR安全性的方法是将单个LFSR的整个状态传递到一个非线性滤波函数中。
其他设计
人们可以使用非线性更新函数来代替线性驱动装置。例如,Klimov和Shamir提出了对n个位字进行单周期的三角函数(T-Functions)。
安保
为了安全起见,密钥流的周期(密钥流重复之前输出的数字数目)需要足够大。如果序列重复,那么重叠的密文可以"深度"地相互对齐,而且有一些技术允许提取使用这些方法生成的明文形式的密文。
使用方法
流密码通常用于明文以不可知长度的数量出现的应用中,例如在安全的无线连接中。如果在这种类型的应用中使用块密码,设计者需要选择传输效率或实现复杂性,因为块密码不能直接工作在比其块大小更短的块上。例如,如果一个128位的块密码收到单独的32位的明文突发,那么传输数据的四分之三需要填充。块密码必须在密文窃取或剩余块终止模式下使用,以避免填充,而流密码则通过在最小的传输单位(通常是字节)上工作来消除这一问题。
流密码器在军事密码学中的另一个优点是,密码流可以由一个受严格安全措施约束的加密设备生成,然后送入其他设备,例如无线电组,这些设备将执行xor操作作为其功能的一部分。其他设备可以设计成在不太安全的环境中使用。
RC4是软件中使用最广泛的流密码;其他的包括。A5/1、A5/2、Chameleon、FISH、Helix、ISAAC、MUGI、巴拿马、Phelix、Pike、SEAL、SOBER、SOBER-128和WAKE。
RC4是应用最广泛的流密码设计之一。
流密码的比较
流 | 创建 | 速度 | (位数) | 攻击 | |||
有效 | 初始化向量 | 内部 | 最著名的 | 计算 | |||
A5/1 | 1989 | 语音(Wphone) | 54 | 114 | 64 | 活跃的人民军或 | ~2秒 OR239.91 |
A5/2 | 1989 | 语音(Wphone) | 54 | 114 | 64? | 活跃 | 4.6毫秒 |
鱼类 | 1993 | 相当快(Wsoft) | 巨大的 | ? | ? | 已知纯文本攻击 | 211 |
谷物 | 2004年以前 | 迅速 | 80 | 64 | 160 | 钥匙衍生 | 243 |
HC-256 | 2004年以前 | 4(WP4) | 256 | 256 | 65536 | ? | ? |
ISAAC | 1996 | 2.375 (W64-bit) | 8-8288, | 不适用 | 8288 | (2006年)第一轮 | 4.67×101240 (2001) |
MUGI | 1998-2002 | ? | 128 | 128 | 1216 | 不适用(2002年) | ~282 |
巴拿马 | 1998 | 2 | 256 | 128? | 1216? | Hash Collisions(2001年) | 282 |
Phelix | 2004年以前 | 最多 8 个 (Wx86) | 256+一个128位的Nonce | 128? | ? | 差别化(2006年) | 237 |
派克 | 1994 | 0.9 x FISH (Wsoft) | 巨大的 | ? | ? | 不适用(2004年) | 不适用(2004年) |
派 | 2004年以前 | 2.6 | 8-2048? | 64 | 8320 | 密码分析理论(2006年) | 275 |
兔子 | 2003-2月 | 3.7(WP3)-9.7(WARM7) | 128 | 64 | 512 | 不适用(2006年) | 不适用(2006年) |
1987 | 印象深刻 | 8-2048 | 8 | 2064 | Shamir 初始字节密钥分割或 KPA | 213或233 | |
Salsa20 | 2004年以前 | 4.24 (WG4) - | 128+一个64位诺西 | 512 | 512+384(键+IV+索引) | 差别化(2005年) | 不适用(2005年) |
尖叫 | 2002 | 4-5(Wsoft) | 128+一个128位的Nonce | 32? | 64位进位函数 | ? | ? |
海豹号 | 1997 | 非常快(W32位 | ? | 32? | ? | ? | ? |
雪 | 2003年以前 | 非常好(W32-bit) | 128或256 | 32 | ? | ? | ? |
SOBER-128 | 2003 | ? | 至多128 | ? | ? | 留言板 | 2−6 |
SOSEMANUK | 2004年以前 | 非常好(W32-bit) | 128 | 128 | ? | ? | ? |
Trivium | 2004年以前 | 4(Wx86)-8(WLG) | 80 | 80 | 288 | 蛮力攻击(2006年) | 2135 |
图灵 | 2000-2003 | 5.5(Wx86) | ? | 160 | ? | ? | ? |
VEST | 2005 | 42(WASIC) - | 可变, | 可变, | 256 - 800 | 不适用(2006年) | 不适用(2006年) |
WAKE | 1993 | 迅速 | ? | ? | 8192 | CPA和CCA | 脆弱的 |
流 | 创建 | 速度 | (位数) | 攻击 | |||
有效 | 初始化向量 | 内部 | 最著名的 | 计算 |
相关网页
- eSTREAM
问题和答案
问:什么是流密码?答:流密码是一种对称密钥密码,其中明文比特与伪随机密码比特流(密钥流)通过排他性或(xor)操作相结合。
问:它与块状密码有什么不同?
答:流密码的执行速度通常比块密码高,对硬件的要求也低。区块密码对固定长度的大区块进行操作,而流密码则是每次对数字进行加密,在加密状态下,连续的数字的变换是不同的。
问:它使用什么类型的密钥?
答:流密码使用更小、更方便的加密密钥,例如128位密钥。
问:它是如何生成密钥流的?
答:密钥流是根据所使用的加密密钥生成的,其方式与一次性垫加密算法类似。然而,由于密钥流是伪随机的,而不是真正的随机,所以无法应用与一次性密码键盘相关的安全性。
问:为什么你决不能两次使用相同的起始状态?
答:两次使用相同的起始状态会导致严重的安全问题,因为它使攻击者在不知道或无法获得你的加密密钥的情况下更容易解密数据。
问:使用流密码是否有任何风险?
答:是的,如果使用不当或没有采取适当的预防措施,那么使用流密码就有风险,因为如果处理不当,它们可能完全不安全。