对称密码可分为序列密码和分组密码;
序列密码的基本原理
序列密码单独加密每个位,通过密钥序列中的每个位和每个明文相加实现,同步序列密码的密码序列,仅仅取决于密钥,而异步序列密码的密钥序列则取决于密钥和密文。
序列密码的加密和解密
将每个位与一个密钥序列位相加在使用模数2执行运算
加密:
解密:
1.将加密表达式带入到解密表达式可知,为何加密和解密使用的函数是相同的。
2.为什么mod2加法会是一个很好的加密,函数在执行mod2算术运算时得到的结果只可能是0和1,因为任何数除以二得到的余数只可能为0和1,因此我们可以将魔二的算术运算看作为布尔函数。
3.密钥序列是序列密码安全性的核心问题,实际上序列密码的安全性完全取决于密钥序列密钥序列,密钥序列位的核心要求就是对攻击者而言,他必须看上去是随机的,否则攻击者就可以猜测到密钥序列,进而自行解密。
随机数
1.TRNG
真随机数生成器TRNG突出特点就是它的输出是不可复制的。例如抛100次硬币,并将这100次结果作为100位长的序列,几乎没有人可以产生与这100位相同的序列成功的几率为1/2的100次方,这是一个极小的概率。真随机数生成器都是基于物理过程,主要例子包括抛硬币,掷骰子,半导体声音和放射性衰变。密码学中通常使用TRNG生成会话密钥。
2.PRNG
伪随机数生成器从一个初始种子值开始通过各种计算得到序列,通常为随机数序列是递归执行以下计算得到:
其中最常见的是
其中a,b,m都是整型常量,注意PRNG并不是真正意义上的随机,他们可以计算出来,因此可以称为是计算确定的,对PRNG的一个一般要求就是必须拥有良好的统计属性,意味着他的输出几乎与真随机数序列相同.
3.加密安全的伪随机数生成器GSPRNG
加密安全的伪随机数生成器是PRNG的一个特例,它拥有以下额外的属性CSPRNG是一种不可预测的PRNG,更准确的定义为,给定密钥序列中n个连续位不存在一个时间复杂度为多项式的算法,使得成功预测下一个位的概率超过50%。CSPRNG的一个属性是给出上述序列,计算任何之前位在计算上都是不可行的
一次一密
无条件安全是指如果一个密码体制在无限计算资源的情况下,也不能被破译,则说明是无条件安全或信息理论上安全的。无条件安全基于信息理论,并对攻击者的计算能力没有任何限制,这个定义非常简单和直观,但要求密码到达无条件安全却十分困难,假设一个密钥长度为10 000对称加密算法,可行的攻击只有蛮力攻击,由于攻击者计算资源无限,我们可以简单地假设攻击者有可用计算机每台计算机只检查一个密钥,在一个时间步长内,那我们可以得到一个正确的密钥,当然拥有台可用计算机是不可能的,这个密码只能是计算安全的,但不是无条件安全的
基于移位寄存器的序列密码
反馈移位寄存器
F 为反馈函数或者反馈逻辑。如果 F 为线性函数,那么我们称其为线性反馈移位寄存器(LFSR),否则我们称其为非线性反馈移位寄存器(NFSR)
LFSR线性反馈移位寄存器
一个LFSR由若干时钟存储元件(触发器)和一个反馈路径组成,存储元件的数目给出了LFSR的度,一个拥有M各]个触发器的LFSR可称为“度为m”,反馈网络计算移位寄存器中某些触发器的XOR和并,将其作为上一个触发器的输出
了使得密钥流输出的序列尽可能复杂,会使用非线性反馈移位寄存器,常见的有三种
- 非线性组合生成器,对多个 LFSR 的输出使用一个非线性组合函数
- 非线性滤波生成器,对一个 LFSR 的内容使用一个非线性组合函数
- 钟控生成器,使用一个(或多个)LFSR 的输出来控制另一个(或多个)LFSR 的时钟
非线性组合生成器
非线性组合生成器,对多个 LFSR 的输出使用一个非线性组合函数
非线性滤波生成器,对一个 LFSR 的内容使用一个非线性组合函数
钟控生成器,使用一个(或多个)LFSR 的输出来控制另一个(或多个)LFSR 的时钟
RC4
RC4 算法广泛应用于 SSL/TLS 协议和 WEP/WPA 协议。
基本过程:
初始化 S 和 T 数组:
初始化置换 S。
生成密钥流。
//初始化
for i = 0 to 255 do
S[i] = i
T[i] = K[i mod keylen])
//置换
j = 0
for i = 0 to 255 do
j = (j + S[i] + T[i]) (mod 256)
swap (S[i], S[j])
//流密钥
i = j = 0
for each message byte b
i = (i + 1) (mod 256)
j = (j + S[i]) (mod 256)
swap(S[i], S[j])
t = (S[i] + S[j]) (mod 256)
print S[t]