由于在修习信息安全基础的同时还修习了现代密码学这门Mooc,因此也和大家分享一下我学习的随想。
1、流密码基本思想
流密码本质上是种序列密码,属于对称密码(对称加密),加密和解密双方使用相同伪随机加密数据流(pseudo-random stream)作为密钥,明文数据每次与密钥数据流顺次对应加密,得到密文数据流。实践中数据通常是一个bit并用xor操作加密。是不是很熟悉?看看上一篇文章吧。
流密码是建立在香农的“一次一密”(cryptographic one-time pad)安全理论上的,香农同时证明了一个无法被破译的密码系统的密钥必须有以下特征:完全随机;不能重复使用;保密;和明文一样长。因此,具有均匀分布的离散无记忆随机数列作为密文理论上是不可破译的。这保证了流密码的安全性。
2、流密码的两大模型
流密码与分组密码最大的差距其一是对于明文的处理方式不同,其二是流密码的加密器中含有记忆元件,而分组密码不存在,也正是由于这个记忆元件,我们可以进一步将流密码分为同步流密码和自同步流密码。
流密码原理入上图所示
我们可以看到,流密码的特点之一就是加解密双方同用一个密钥。密钥k是整个流密码加解密的核心,是唯一不能泄漏的信息,如密文、加密方式等等都可以在公共信道上传播,但是k只能在确保安全的私人信道传输。
其中密钥流生成器需要解释一下工作原理。其一我们需要厘清的概念是,密钥k和密钥流z是不同的,完全不是一个事物。在明确这个前提后,我们来用一条表达式解释密钥流生成器。
密钥流发生器 f:zi=f(k,σi);
其中σi是加密器中的记忆元件(存储器)在时刻i的状态,f是由密钥k和σi产生的函数。
利用不断变化的加密变换对明文消息进行 逐bit的加密。流密码的滚动密钥 z0 = f ( k,σ 0 ) 由函数 f、密钥 k 和指定的初态σ 0 完全确定。此后, 由于输入加密器的明文可能影响加密器中内部记忆元件的存储状态, 因而σ i ( i > 0)可能依赖于 k,σ 0 , x0 , x1 , ⋯, xi - 1 等参数。
设计密码体制的关键问题是设计产生密钥序列的方式,但是因为真正的具有均匀分布的随机序列是不可能重复产生的. 密钥序列长(至少与明文序列一样长), 其管理(存储、分配)难.
为此,我们研究了两种流密码模型,包括:SSC同步流密码以及SSSC自同步流密码,SSC的特点是,产生密钥序列的算法与密文明文无关,而SSSC产生密钥序列的算法却与以前的密文有关。
对于同步流密码而言,只要有同样的种子序列与相同的初始状态就可以产生相同的密钥序列,这就要求着使用同步流密码进行加密的信息收发双方要保持精确的同步才能正确的加解密信息。
同步流密码容易检测插入、删除、重播等主动攻击,没有差错传播。
而自同步流密码(SSSC) 密钥流生成器是一种有记忆变换器,密钥流与明文符号有关:i 时刻的密文不仅取决于i 时刻的明文,而且与i 时刻之前的l个明文符号有关; 具有有限的差错传播; 具有自同步能力; 把明文每个字符扩散在密文多个字符中,强化了抗统计分析的能力。
3、流密码算法
3.1 RC4算法
久负盛名的RC4算法。
首先来简述一下RC4的原理。
RC4是一个简洁的加密方式,要素主要包括初始化算法(KSA)和子密码生成算法(PRGA)两大部分。假设S-box的长度为256,密钥长度为Len。