0x01 流密码概念
流密码在很多地方又被称为流加密,流加密在百科中给出的定义为:
“是对称加密算法的一种,加密和解密双方使用相同伪随机加密数据流(pseudo-randomstream)作为密钥,明文数据每次与密钥数据流顺次对应加密,得到密文数据流。实践中数据通常是一个位(bit)并用异或(xor)操作加密。”
总结一下就是流密码是一个对称加密算法,密钥为伪随机加密数据流,加密是通常对位操作,并且一次加密 1 位或 1 字节的明文。
流密码是线性的,因此相同的密钥可以加密和解密消息。伪随机密钥流通常是使用数字移位寄存器从随机种子值串行生成,种子值用作解密密文流的密钥。
流密码代表了一种不同于分组密码的对称加密方法。流密码通常以比分组密码更高的速度执行并且具有更低的硬件复杂性。
流密码有哪些
RC4,(Rivest Cipher 4)是所有流密码中使用最广泛的,特别是在软件中。RC4 已用于各种协议,如 WEP 和 WPA以及 TLS。
流密码优点
- 速度快,这种加密形式通常比其他加密形式更快
- 低复杂度,开发人员不需要复杂的硬件来实现它
- 流密码是对称加密
- 密钥越长,安全性越强,通过包含更多数量的 1 和 0,提高安全性
0x02 一次性密码
为了方便理解,我们可以理解流密码相当于从一次性密码演变而来,先回顾一下一次性密码。
一次性密码和本身含义一样,为只能使用一次的密码,也称为动态密码或单次有效密码,简称OTP。OTP不容易遭到重放攻击,需要使用到大于自身长度的密钥流,密钥流必须完全随机生成,并且密钥不能重复使用。因此,密钥生成、分发和管理对于这些应用程序至关重要。
流密码使用更小更方便的密钥,例如 128 位。基于此密钥,它生成一个伪随机密钥流,该密钥流可以与一次性密码类似的方式与明文数字组合。
0x03 流密码分类
流密码根据工作方式,可以分为:同步流密码和自同步流密码。
同步流密码
同步流密码的密钥流通过独立于明文和密文消息生成的伪随机数字流,通常使用二进制的形式,通过异或(XOR)的方法加解密明文和密文。
需要注意的是,在同步流密码中,发送者和接收者必须完全同步才能成功解密,如果在传输过程中出现消息错误的添加或删除数字,则会失去同步性,但我们之前说过,是使用异或(XOR)进行每位的运算,所以如果一个数字在传输过程中被破坏,明文中只有一个数字会受到影响,并且错误不会传播到消息的其他部分。
自同步流密码
自同步流密码是使用前面的N个密文数字中的几个来计算密钥流。接收器在接收到N个密文数字后会自动与密钥流生成器同步,如果数字丢失或添加到消息流中,则更容易恢复。
0x04 依赖于线性反馈移位寄存器
二进制流密码通常使用线性反馈移位寄存器(LFSR) 构建,由于 LFSR 本质上是线性的,因此消除线性的一种技术是将多个并行 LFSR 的输出馈送到非线性布尔函数中以形成组合生成器,这些系统消除了所用数学的线性性质,使代码更难破解。
为了实现非线性,可以采用使 LFSR 不规则地计时,由第二个 LFSR 的输出控制,因为LFSR 是定期步进的所有实现非线性需要一定的方法。
交替步进式发生器
一个交替步进式发生器包括三个LFSR,例如,我们将其称为 LFSR0、LFSR1 和 LFSR2。其中一个寄存器的输出决定使用另外两个寄存器中的哪一个;例如,如果 LFSR2 输出 0,则为 LFSR0 提供时钟,如果它输出 1,则为 LFSR1 提供时钟。输出是 LFSR0 和 LFSR1 产生的最后一位的异或。三个LFSR的初始状态是关键。
停走式发生器
由两个 LFSR 组成,一秒的输出为 1,则为一个 LFSR 计时,否则重复其先前的输出。然后此输出与以常规速率计时的第三个 LFSR 的输出相结合。
收缩式发生器
使用了两个 LFSR,都定期计时。如果第一个 LFSR 的输出为 1,则第二个 LFSR 的输出成为生成器的输出。但是,如果第一个 LFSR 输出 0,则第二个的输出被丢弃,并且生成器不输出任何位。
0x05 加密过程
明文和密钥流产生密文
例如明文000101101000101010001010进行
加密:
解密:
0x0 流密码安全性
流密码可能容易受到安全漏洞的影响;例如,当相同的起始状态(种子)被使用两次时。要使流密码安全,它的密钥流必须有一个很大的周期,并且必须不可能从密钥流中恢复密码的密钥或内部状态。
由于流密码是同步的,为提高安全性,不应该在使用后再次使用密钥流,也就是每个密钥流只满足一次调用。并且较短的明文对应的较短的密钥非常容易被破解,也是一个非常实际的问题,较短的密钥可以在较短的时间被破解。
版权归原作者 lmn_ 所有, 如有侵权,请联系我们删除。