文章目录
伪随机性
计算安全方案,|K|<<|m| ≤ \leq ≤|c|。也就是密钥长度过小。两种思路,一是拉长密钥(流密码),二是明文分组(分组密码)。
一、加密算法设计的两种基本策略
- 流密码(序列密码)
- 将密钥扩展到与密文等长(映射不变,即拉长密钥)
- 加密算法一般为异或操作
- 其安全性主要在于密钥扩展后的随机性(伪随机性)
- 分组密码
- 将明文分成等长的分组(比如64位、128位)
- 对每个分组采用相同的加密算法进行加密
- 算法一般是交替使用混乱和扩散技术
(即代换和置换,对二进制的位01进行操作,混乱如16进制,用0->a,e->3,扩散即置换位置)
二、流密码
如何将密钥扩展后具有随机性,即伪随机性?使用伪随机数发生器
1 伪随机数发生器PRG(Pseudorandom Generator )
一个确定性的多项式算法
G
:
{
0
,
1
}
n
G:\left\{0,1\right\}^n
G:{0,1}n→
{
0
,
1
}
l
(
n
)
\left\{0,1\right\}^{l(n)}
{0,1}l(n)
为一个伪随机数发生器,满足两个性质:
1.扩展性:
l
(
n
)
>
n
l(n)>n
l(n)>n。(
l
(
n
)
l(n)
l(n)称为扩展因子)
2.伪随机性:对任意PPT算法D,
即区分出输入来自随机数r还是伪随机数生成器
G
(
k
)
G(k)
G(k)的概率小于
n
e
g
l
(
n
)
negl(n)
negl(n)。
注:
- n为安全参数
- l(n)为扩展因子,n的多项式
- k为密钥,长度为n
- G(k)为确定性多项式时间算法,即伪随机数发生器,k->l(n)
- 确定性指的是,对于同一个输入,输出相同(不能抵抗选择明文攻击)
加密方案:
与理想加密算法(即一次一密形式的完善保密)区别仅为用随机数代替了伪随机数。
2 选择明文攻击实验 P r i v K A , Π c p a ( n ) PrivK^{cpa}_{A,Π}(n) PrivKA,Πcpa(n)
任何确定性加密算法在选择明文攻击下都不是安全的。
3 随机加密
由于流密码是确定算法,在选择明文攻击下并不安全,因此需要改进,引入随机加密。
三、反馈移位寄存器
- 移位寄存器(Shift Register,SR)曾在SM4中提到过,是指有若干个寄存器排成一行,每个寄存器中都存储着一个二进制数(0或1)。移位寄存器每次把最右端(末端)的数字输出,然后整体向右移动一位。
- 反馈移位寄存器(Feedback Shift Register,FSR):在移位寄存器向右移位一位以后,左边就会空出一位(如上图所示),这时如果采用一个反馈函数,以寄存器中已有的某些序列作为反馈函数的输入,在函数中经过一定的运算后,将反馈函数输出的结果填充到移位寄存器的最左端,那么这样的移位寄存器就会有源源不断的输出。这样的,拥有反馈函数的移位寄存器称为反馈移位寄存器。
- 线性反馈移位寄存器(Linear Feedback Shift Register,LFSR):反馈移位寄存器的反馈函数是线性函数(即只进行简单线性运算的函数)
假设一个3位反馈移位寄存器中存储着数据101,则不断移位、输出的效果如图所示:
在线性反馈移位寄存器中假定(c1,c2,…,cn)中至少一个不为0,且cn=1,n级的输出序列周期即状态周期
≤
\leq
≤
2
n
−
1
2^n-1
2n−1。周期达到最大值的序列称为m序列。
线性反馈移位寄存器:
以线性反馈移位寄存器的输出序列作为密钥流容易被代数方法攻击,需要引入非线性。
- 非线性反馈移位寄存器
对(多个)LFSR的输出进行非线性组合。
- 组合方式不能与任意一个LFSR有太高的相关性。
- 最终输出必须无偏差,即0和1的个数相同。
其他非线性方式:
- 反馈函数采用非线性布尔函数
- 输出采用寄存器比特的非线性组合(而非输出最右侧的比特)
四、祖冲之密码算法ZUC
序列密码的国际加密标准
(其他:SM2->公钥加密 SM3->Hash SM4->分组加密 SM9->身份认证,签名)
- 基于字设计的同步序列密码算法
- 种子密钥SK和初始向量IV长度均为128比特
- 每拍输出一个32比特的密钥字