五元组 ( P , C , K , E , D ) (P,C,K,E,D) (P,C,K,E,D):明文空间,密文空间,密钥空间,加密变换,脱密变换
s.t. ∀ k , k ∈ K , x ∈ P , D ( k , E ( k , x ) ) = x \forall k,k\in K,x\in P,D(k,E(k,x))=x ∀k,k∈K,x∈P,D(k,E(k,x))=x(显然要求 d k = D ( k , ⋅ ) d_k=D(k,·) dk=D(k,⋅)为满射, e k = E ( k , ⋅ ) e_k=E(k,·) ek=E(k,⋅)为单射)
移位密码: P = C = K = Z 26 P=C=K=Z_{26} P=C=K=Z26, e k ( x ) = x + k , d k ( x ) = x − k e_k(x)=x+k,d_k(x)=x-k ek(x)=x+k,dk(x)=x−k
仿射密码: P = C = Z 26 , K = Z 26 × × Z 26 P=C=Z_{26},K=Z_{26}^\times \times Z_{26} P=C=Z26,K=Z26××Z26, e k ( x ) = a x + b e_k(x)=ax+b ek(x)=ax+b, d k ( x ) = a − 1 ( y − b ) d_k(x)=a^{-1}(y-b) dk(x)=a−1(y−b)
代换密码: P = C = Z 26 , K = S 26 P=C=Z_{26},K=S_{26} P=C=Z26,K=S26, e π ( x ) = π ( x ) e_\pi(x)=\pi(x) eπ(x)=π(x), d k ( x ) = π − 1 ( x ) d_k(x)=\pi^{-1}(x) dk(x)=π−1(x)
以上三种密码都是明文密文一对一的密码,因此若明文是文字的话,很容易使用文字的统计规律破译
Vignere密码: P = C = K = Z 26 m P=C=K=Z_{26}^m P=C=K=Z26m, e k ( x ⃗ ) = x ⃗ + k ⃗ , d k ( x ⃗ ) = x ⃗ − k ⃗ e_{k}(\vec{x})=\vec{x}+\vec{k},d_{k}(\vec{x})=\vec{x}-\vec{k} ek(x)=x+k,dk(x)=x−k
Hill密码: P = C = Z 26 m P=C=Z_{26}^m P=C=Z26m, K = g l m ( Z 26 ) K=gl_m(Z_{26}) K=glm(Z26)( Z 26 Z_{26} Z26上的m阶可逆矩阵集)
以上两种密码对明文做m个一组的分组,故称为分组密码
(均默认已知加密规则(Kerckhoff假设),在实践中加密规则也确是容易获取的)
敌手的目标:确定正在使用的密钥是什么
由于古典密码很弱,因此下面均考虑在唯密文分析的条件下进行密码破译
eg1:对仿射/代换密码的密码分析:使用英文单个字母/相邻单词的统计规律进行分析
eg2:对Vignere密码的密码分析:重合指数法
思想:提取恰当m时英文文本串的统计规律:
定义一个含有n个字符的字符串x的重合指数 I C ( x ) I_C(x) IC(x)为x中两个随机元素相同的概率
英文文本的重合指数根据统计为0.065;随机生成的文本的重合指数则为0.038,因此:
若将Vignere密码的密文从左到右,从上到下排布至m列,则当m与分组的组数重合时,每一列都是若干英文文本的平移,从而重合指数应该和英文文本接近;否则则近似于随机文本。这样可以通过枚举的方式破解出m值。
进一步,通过互重合指数可以求出每组文本的平移量:对于给定的英文平移文本x,y,其互重合指数定义为 ∑ i x i y i + k / n m \sum_i x_iy_{i+k}/nm ∑ixiyi+k/nm,其中 x i x_i xi为字母i的出现次数,则当且仅当k等于y的平移量和x的平移量之差时,互重合指数接近0.065.
对于离散加密,如果引入概率,则可以将其视为离散随机变量X到Y的一个映射。那么,据此可以定义完善保密性, ∀ x ∈ P , ∀ y ∈ C , P ( x ∣ y ) = P ( x ) \forall x\in P,\forall y\in C, P(x|y)=P(x) ∀x∈P,∀y∈C,P(x∣y)=P(x)(知道密文对于了解明文完全没有用)
定理:移位密码当且仅当密钥在 Z 26 Z_{26} Z26中等概率取值时完善保密
推广:一次一密加密体制: P = C = K = ( Z 2 ) n , e k ( x ) = k + x , d k ( y ) = y + k P=C=K=(Z_2)^n, e_k(x)=k+x,d_k(y)=y+k P=C=K=(Z2)n,ek(x)=k+x,dk(y)=y+k,保证了完善保密(在唯密文分析下不可能破译),但是密钥和明文必须等长,不可复用,效率很低。
引入:Shannon信息熵: − ∑ i p i log p i -\sum_i p_i\log{p_i} −∑ipilogpi
定理: H ( K ∣ C ) = H ( P ) + H ( K ) − H ( C ) H(K|C)=H(P)+H(K)-H(C) H(K∣C)=H(P)+H(K)−H(C)
在对自然语言进行加密和解密时,可能对于同一个密文存在多个有意义的对应明文,例如river和arena的距离为3。我们希望推导伪密钥的期望个数下界。
定义自然语言熵为 H L = lim n → ∞ H ( P n ) n H_L=\lim_{n\rightarrow \infty} \frac{H(P^n)}{n} HL=limn→∞nH(Pn)(长度为n的语言串的熵平均值)
语言L的冗余度定义为 R L = 1 − H L log ∣ P ∣ R_L=1-\frac{H_L}{\log| P|} RL=1−log∣P∣HL,例如英语的冗余度为0.75
定理:语言L的伪密钥期望个数下界为 s n ˉ ≥ ∣ K ∣ ∣ P ∣ n R L − 1 \bar{s_n}\geq \frac{|K|}{|P|^{nR_L}}-1 snˉ≥∣P∣nRL∣K∣−1
定义:唯一解距离:伪密钥期望下界数恰好等于0时n的值,对英文的代换密码来说则为25
计算安全性(计算用时++),可证明安全性(归约到计算复杂问题上),无条件安全性(不可能破译)
K为一给定长度的二元密钥,以某种固定公开算法生成Nr个轮密钥 ( K 1 , . . . , K N r ) (K_1,...,K_{Nr}) (K1,...,KNr),轮函数g以轮密钥和当前状态作为输入:即:
w 0 ← x , w 1 ← g ( w 0 , K 1 ) , . . . , w N r ← g ( w N r − 1 , K N r ) , y ← w N r w_0\leftarrow x, w_1\leftarrow g(w_0,K_1),...,w_{Nr}\leftarrow g(w_{Nr-1},K_{Nr}),y\leftarrow w_{Nr} w0←x,w1←g(w0,K1),...,wNr←g(wNr−1,KNr),y←wNr
为了解密,要求轮函数必须为单射,即存在 g − 1 g^{-1} g−1: g − 1 ( g ( w , y ) , y ) = w g^{-1}(g(w,y),y)=w g−1(g(w,y),y)=w
解密过程: w N r ← y , w N r − 1 ← g − 1 ( w N r , K N r ) , . . . , w 0 ← g − 1 ( w 1 , K 1 ) , x ← w 0 w_{Nr}\leftarrow y, w_{Nr-1}\leftarrow g^{-1}(w_{Nr},K_{Nr}),...,w_{0}\leftarrow g^{-1}(w_{1},K_{1}), x\leftarrow w_0 wNr←y,wNr−1←g−1(wNr,KNr),...,w0←g−1(w1,K1),x←w0
l , m ∈ Z + l,m\in Z^+ l,m∈Z+,明文和密文为长为 l m lm lm的二元向量。一个SPN的基本构成为两个置换: π S : { 0 , 1 } l \pi_S:\{0,1\}^l πS:{0,1}l上的置换(S盒), π P : { 1 , . . . , l m } \pi_P:\{1,...,lm\} πP:{1,...,lm}上的置换
如上图所示,SPN加密的一轮会经过三层:第一层是和轮密钥的异或,第二层是对字符串切片为m段,分别用S盒代换,最后一层是对各个数字的所在位置用P盒代换;解密则反过来做即可。
SPN的伪代码为:
注:在最后两轮中没有再用 π P \pi_P πP,这是因为前面已经足够了
优点:该算法的实现非常简单高效,而且需要的存储空间较少
思想:在密文的输入中找到一些概率关系
分析方法:已知明文分析:给出大量明密对
SPN为线性密码,从而有性质: S P N ( u ) = l ( u ) + A 0 SPN(u)=l(u)+A_0 SPN(u)=l(u)+A0, l ( u ) = ∏ ( a i 1 x 1 ⊕ . . . ⊕ a i n x n ) l(u)=\prod (a_i^1 x_1\oplus ...\oplus a_i^nx_n) l(u)=∏(ai1x1⊕...⊕ainxn)
定义:一个0/1随机变量的偏差: ϵ = p ( x = 0 ) − 1 2 \epsilon=p(x=0)-\frac{1}{2} ϵ=p(x=0)−21
堆积引理:若 X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn的偏差为 ϵ 1 , . . . , ϵ n \epsilon_1,...,\epsilon_n ϵ1,...,ϵn,则 X 1 ⊕ . . . ⊕ X n X_1\oplus ...\oplus X_n X1⊕...⊕Xn的偏差为 2 k − 1 ∏ j = 1 k ϵ i j 2^{k-1}\prod_{j=1}^k\epsilon_{i_j} 2k−1∏j=1kϵij
攻击方法:
分析方法:选择明文分析:可以获得任意明文对应的密文(比线性密码分析要求更高)
对任意的S盒 π S : { 0 , 1 } m → { 0 , 1 } n \pi_S:\{0,1\}^m\rightarrow \{0,1\}^n πS:{0,1}m→{0,1}n
定义: Δ ( x ′ ) = { ( x , x ⊕ x ′ ) } \Delta (x')=\{(x,x\oplus x')\} Δ(x′)={(x,x⊕x′)},即:输入异或为 x ′ x' x′的任意对;定义其输出异或为 π S ( x ) ⊕ π S ( x ⊕ x ′ ) \pi_S(x)\oplus \pi_S(x\oplus x') πS(x)⊕πS(x⊕x′)
则:一共 2 m 2^m 2m个可能的输出异或分布在 2 n 2^n 2n个值上。同样的,可以对输出异或的分布建立列表:用 N D ( x , y ) N_D(x,y) ND(x,y)表示输入异或为x,输出异或为y的对数,对 x , y x,y x,y的所有可能取值,构造差分分布表
注意到,在SPN中,异或对同时异或一个密钥并不会对其异或产生影响,因此和线性密码分析一样,可以通过构造若干假设独立的差分链来得到差分链的一个扩散率 r r r,从而同理可以通过枚举密钥的形式来分辨出正确的密钥(扩散率为 r r r,即输入为链输入时,输出为链输出的概率为 r r r),而其余密钥的概率接近0
加速算法:过滤:预先筛除一些不满足x,y条件的对。在剩下的里面再计数。
每个状态 u i u^i ui被分为相同长度的两部分 L i , R i L^i,R^i Li,Ri,轮函数g: g ( L i − 1 , R i − 1 , K i ) = ( L i , R i ) g(L^{i-1},R^{i-1},K^i)=(L^i,R^i) g(Li−1,Ri−1,Ki)=(Li,Ri)
其中, L i = R i − 1 , R i = L i − 1 ⊕ f ( R i − 1 , K ) L^i=R^{i-1},R^i=L^{i-1}\oplus f(R^{i-1},K) Li=Ri−1,Ri=Li−1⊕f(Ri−1,K)
特性:这样的函数一定可逆: g ( R i , L i , K i ) = g ( R i − 1 , L i − 1 ) g(R^i,L^i,K^i)=g(R^{i-1},L^{i-1}) g(Ri,Li,Ki)=g(Ri−1,Li−1)
E:扩展函数;S_1,…,S_8:S盒(6bit → \rightarrow → 4bit);P:置换
分析:除了S盒以外均为线性部件,因此S盒的选取至关重要。但是S盒中也可能藏有“陷门”。
数学基础:Galois Field G F ( 2 8 ) GF(2^8) GF(28)上的运算: G F ( 2 8 ) ∼ F 2 [ x ] / m ( x ) = x 8 + x 4 + x 3 + x 2 + 1 GF(2^8)\sim F_2[x]/m(x)=x^8+x^4+x^3+x^2+1 GF(28)∼F2[x]/m(x)=x8+x4+x3+x2+1
G F ( 2 8 ) GF(2^8) GF(28)中恰有 2 8 2^8 28个元素,且按照多项式各位的系数可以表示为 b 7 x 7 + . . . + b 0 b_7x^7+...+b_0 b7x7+...+b0,构成一个8元组 ( b 7 , . . . b 0 ) (b_7,...b_0) (b7,...b0),并且按照多项式运算任意非零元素都有逆
AES:三种可选密钥长度128,192,256, Nr分别为10,12,14
SubBytes:对于state中的每个字节(8个bite)先求 G F ( 2 8 ) GF(2^8) GF(28)中的逆元素 ( x 7 , . . . , x 0 ) (x_7,...,x_0) (x7,...,x0),再做mod2乘法:
Shiftrows:行移位:将状态矩阵的第i行向左移动i位
MixColumns:列混合:对每一列做 G F ( 2 8 ) GF(2^8) GF(28)上的乘法:原来的列为 ( t 0 , t 1 , t 2 , t 3 ) T (t_0,t_1,t_2,t_3)^T (t0,t1,t2,t3)T,则得到的新列:
u 0 = x ∗ t 0 + ( x + 1 ) ∗ t 1 + t 2 + t 3 u 1 = x ∗ t 1 + ( x + 1 ) ∗ t 2 + t 3 + t 0 u 2 = x ∗ t 2 + ( x + 1 ) ∗ t 3 + t 0 + t 1 u 1 = x ∗ t 3 + ( x + 1 ) ∗ t 0 + t 1 + t 2 u_0=x*t_0+(x+1)*t_1+t_2+t_3\\ u_1=x*t_1+(x+1)*t_2+t_3+t_0\\ u_2=x*t_2+(x+1)*t_3+t_0+t_1\\ u_1=x*t_3+(x+1)*t_0+t_1+t_2\\ u0=x∗t0+(x+1)∗t1+t2+t3u1=x∗t1+(x+1)∗t2+t3+t0u2=x∗t2+(x+1)∗t3+t0+t1u1=x∗t3+(x+1)∗t0+t1+t2
KeyExpansion:将128bit的种子密钥变为11个轮密钥
AddRoundKey: state ⊕ K r \text{state}\oplus K^r state⊕Kr
AES的分析:从设计上是反攻击的,例如有限域取逆的操作使得线性逼近和差分攻击趋于均匀分布,使得这两种攻击很难奏效。Mixcolumn的设计则使得找到包含较少S盒的攻击是不可能的。
反馈移位寄存器序列:在GF(2)上,输入 a 0 , . . . , a n − 1 a_0,...,a_{n-1} a0,...,an−1,取函数 a n + i = f ( a n + i − 1 , . . . , a i − 1 ) i = 1 , 2 , . . . a_{n+i}=f(a_{n+i-1},...,a_{i-1}) i=1,2,... an+i=f(an+i−1,...,ai−1)i=1,2,...,则称序列 { a n } \{a_n\} {an}为以f为反馈多项式的反馈移位寄存器序列。
定理:任意一个 G F ( 2 n ) → G f ( 2 ) GF(2^n)\rightarrow Gf(2) GF(2n)→Gf(2)的函数均可用多项式表示
序列密码:序列密码是一个七元组 ( X , Y , K , S , τ , e , d ) (\mathcal{X}, \mathcal{Y}, \mathcal{K}, \mathcal{S}, \tau, e, d) (X,Y,K,S,τ,e,d) 。其中 X 、 Y 、 K \mathcal{X} 、 \mathcal{Y} 、 \mathcal{K} X、Y、K 和 S \mathcal{S} S 均为有限集合分别称为明文空间、密文空间、密钥空间和状态集。 τ \tau τ 是带参数的状态转移函数, 即对于任意的 k ∈ K k \in \mathcal{K} k∈K, τ k : X × S → S ; \tau_{k}: \mathcal{X} \times \mathcal{S} \rightarrow \mathcal{S} ; τk:X×S→S; e e e 是带参数的加密函数, 即对于任意的 k ∈ K k \in \mathcal{K} k∈K, e k : X × S → Y ; e_{k}: \mathcal{X} \times \mathcal{S} \rightarrow \mathcal{Y} ; ek:X×S→Y; d d d 是带参数的脱密函数, 即对于任意的 k ∈ K k \in \mathcal{K} k∈K, d k : Y × S → X , d_{k}: \mathcal{Y} \times \mathcal{S} \rightarrow \mathcal{X} , dk:Y×S→X,满足 d k ( e k ( x i , s i − 1 ) , s i − 1 ) = x i , 1 ≤ i ≤ n d_{k}\left(e_{k}\left(x_{i}, s_{i-1}\right), s_{i-1}\right)=x_{i}, \quad 1 \leq i \leq n dk(ek(xi,si−1),si−1)=xi,1≤i≤n.
加密: y i = e k ( x i , s i − 1 ) , s i = τ k ( x i , s i − 1 ) y_i=e_k(x_i,s_{i-1}),s_i=\tau_k(x_i,s_{i-1}) yi=ek(xi,si−1),si=τk(xi,si−1) 脱密: x i = d k ( x i , s i − 1 ) , s i = τ k ( x i , s i − 1 ) x_i=d_k(x_i,s_{i-1}),s_i=\tau_k(x_i,s_{i-1}) xi=dk(xi,si−1),si=τk(xi,si−1)
在实际使用中, s i = τ k ( s i − 1 ) s_i=\tau_k(s_{i-1}) si=τk(si−1), y i = x i ⊕ σ ( s i − 1 ) y_i=x_i\oplus \sigma(s_{i-1}) yi=xi⊕σ(si−1),称为伪随机数生成器
a n + i = F ( a i + n − 1 a i + n − 2 ⋯ a i + 1 a i ) = c 1 a i + n − 1 + c 2 a i + n − 2 + ⋯ c n − 1 a i + 1 + c n a i a_{n+i}=F\left(a_{i+n-1} a_{i+n-2} \cdots a_{i+1} a_{i}\right)=c_{1} a_{i+n-1}+c_{2} a_{i+n-2}+\cdots c_{n-1} a_{i+1}+c_{n} a_{i} an+i=F(ai+n−1ai+n−2⋯ai+1ai)=c1ai+n−1+c2ai+n−2+⋯cn−1ai+1+cnai
其联结多项式为: f ( x ) = 1 + c 1 x + ⋯ + c n − 1 x n − 1 + c n x n f(x)=1+c_{1} x+\cdots+c_{n-1} x^{n-1}+c_{n} x^{n} f(x)=1+c1x+⋯+cn−1xn−1+cnxn;
特征多项式为: f ˉ ( x ) = x n + c 1 x n − 1 + ⋯ + c n − 1 x + c n \bar{f}(x)=x^{n}+c_{1} x^{n-1}+\cdots+c_{n-1} x+c_{n} fˉ(x)=xn+c1xn−1+⋯+cn−1x+cn
记忆方法:特征多项式就是平时求数列的通项公式时使用的多项式,联结多项式就是它反过来;或者联结多项式可以看做是逆向递推式的参数: a 0 = a n + c 1 a n − 1 + . . . + c n a 1 a_0=a_n+c_1a_{n-1}+...+c_na_1 a0=an+c1an−1+...+cna1,如果非退化
若 c n ≠ 0 c_n\neq 0 cn=0,则称为非退化的。我们只研究非退化的情形。
注:显然,LFSR是终归周期的,非退化LFSR是周期的(参考下面的定理)
定理:对于一个多项式 f ( x ) = 1 + c 1 x + ⋯ + c n − 1 x n − 1 + c n x n f(x)=1+c_{1} x+\cdots+c_{n-1} x^{n-1}+c_{n} x^{n} f(x)=1+c1x+⋯+cn−1xn−1+cnxn 和一个 半无限序列 α = a 0 a 1 a 2 ⋯ , α \alpha=a_{0} a_{1} a_{2} \cdots, \alpha α=a0a1a2⋯,α 是以 f ( x ) f(x) f(x) 为联结多项式的 LFSR 序列的充分必要条件是形式幂级数 α ( x ) = ∑ i = 0 ∞ a i x i \alpha(x)=\sum_{i=0}^{\infty} a_{i} x^{i} α(x)=∑i=0∞aixi 满足 f ( x ) ⋅ α ( x ) f(x) \cdot \alpha(x) f(x)⋅α(x) 是多项式, deg [ f ( x ) ⋅ α ( x ) ] < n \operatorname{deg}[f(x) \cdot \alpha(x)]
特别地,若 c n = 1 c_n=1 cn=1,则 deg f ( x ) = n > d e g [ f ( x ) α ( x ) ] \deg f(x)=n>deg[f(x)\alpha( x)] degf(x)=n>deg[f(x)α(x)]
对给定的序列 α = a 0 a 1 a 2 ⋯ \alpha=a_{0} a_{1} a_{2} \cdots α=a0a1a2⋯, 把满足 f ( x ) ⋅ α ( x ) ∈ F 2 [ x ] f(x) \cdot \alpha(x) \in F_{2}[x] f(x)⋅α(x)∈F2[x] 的多项式的集合记为 J ( α ) J(\alpha) J(α)
则: J ( α ) J(\alpha) J(α) 是 F 2 [ x ] F_{2}[x] F2[x] 的理想
定义:极小多项式
称生成 J ( α ) J(\alpha) J(α) 的多项式为极小多项式,记为 m α ( x ) m_{\alpha}(x) mα(x). 显然当 m α ( x ) ≠ 0 m_{\alpha}(x) \neq 0 mα(x)=0 时, m α ( 0 ) = 1 m_{\alpha}(0)=1 mα(0)=1.
对满足 g ( 0 ) = 1 g(0)=1 g(0)=1 的 g ( x ) ∈ F 2 [ x ] g(x) \in F_{2}[x] g(x)∈F2[x], 称使得 g ( x ) ∣ 1 + x L g(x) \mid 1+x^{L} g(x)∣1+xL 的最小正整数 L \mathrm{L} L 为 g ( x ) g(x) g(x) 的周期, 记为 p ( g ) p(g) p(g).
定理:若 α \alpha α 是周期序列, 则 p ( α ) p(\alpha) p(α)( α \alpha α的周期) = p ( m α ( x ) ) =p\left(m_{\alpha}(x)\right) =p(mα(x)).
定理:如果 f ( x ) ∈ F 2 [ x ] f(x) \in F_{2}[x] f(x)∈F2[x] 是不可约的, 且 f ( 0 ) = 1 , α ≠ 0 f(0)=1, \alpha \neq 0 f(0)=1,α=0 为以 f ( x ) f(x) f(x) 为联结多项式的任一输出周期序列, 则 m α ( x ) = f ( x ) m_{\alpha}(x)=f(x) mα(x)=f(x), 从而 p ( α ) = p ( f ( x ) ) . p(\alpha)=p(f(x)) . p(α)=p(f(x)).
定理:如果 f ( x ) ∈ F 2 [ x ] f(x) \in F_{2}[x] f(x)∈F2[x] 是 n n n 级LFSR 的联结多项式,用 G ( f ) G(f) G(f) 表示由此多项式产生的全部序列。则 G ( f ) G(f) G(f) 有一个是周期为 2 n − 1 2^{n}-1 2n−1 的序列当且仅当 f ( x ) f(x) f(x) 是一个次数为 n n n 的本原多项式。(定义: f ( 0 ) = 1 , f f(0)=1,f f(0)=1,f不可约, p ( f ) = 2 n − 1 p(f)=2^n-1 p(f)=2n−1)
意义:用一个很短的序列生成一个极长序列,加密一段极长密文。
定义:由n次本原多项式生成的序列称为n级的m-序列,下面证明 m − m- m−序列的一些良好性质
定义:如果 α = a 0 a 1 ⋯ \alpha=a_{0} a_{1} \cdots α=a0a1⋯ 是 F 2 F_{2} F2 上的周期为 p ( α ) p(\alpha) p(α) 的周期序列, 称
C α ( τ ) = 1 p ( α ) Σ k = 0 p ( α ) − 1 ( − 1 ) a k + a k + τ , ( 0 ≤ τ ≤ p ( a ) − 1 ) . C_{\alpha}(\tau)=\frac{1}{p(\alpha)} \Sigma_{k=0}^{p(\alpha)-1}(-1)^{a_{k}+a_{k+\tau}}, \quad(0 \leq \tau \leq p(a)-1) . Cα(τ)=p(α)1Σk=0p(α)−1(−1)ak+ak+τ,(0≤τ≤p(a)−1).
为 α \alpha α 的自相关函数.
定理:设 α \alpha α 是如果 F 2 F_{2} F2 上是的 n n n 级 m m m-序列, 则:
(1) α \alpha α 的一个周期中 1 出现的个数是 2 n − 1 , 0 2^{n-1}, 0 2n−1,0 出现的个数是 2 n − 1 − 1 2^{n-1}-1 2n−1−1.
(2)定义一个长为k的0-游程为10…0(k个)1;则:
0-游程和1-游程个数均为 N / 2 = 2 n − 2 N / 2=2^{n-2} N/2=2n−2, 游程分布如下:
长度为 i i i的0 -游程 N / 2 i + 1 , 1 ≤ i ≤ n − 2 N / 2^{i+1}, 1 \leq i \leq n-2 N/2i+1,1≤i≤n−2;
长度为 i i i的1-游程 N / 2 i + 1 , 1 ≤ i ≤ n − 2 N / 2^{i+1}, 1 \leq i \leq n-2 N/2i+1,1≤i≤n−2;
长度为n-1的0-游程1个;
长度为n的1-游程1个
(3) α \alpha α 的自相关函数是二值的:
C α ( τ ) = { 1 , 当 τ = 0 ; − 1 p ( α ) , 当 0 < τ ≤ p ( α ) − 1. C_{\alpha}(\tau)= \begin{cases}1, & \text { 当 } \tau=0 ; \\ -\frac{1}{p(\alpha)}, & \text { 当 } 0<\tau \leq p(\alpha)-1 .\end{cases} Cα(τ)={1,−p(α)1, 当 τ=0; 当 0<τ≤p(α)−1.
从而: α \alpha α的自相关程度是极低的( p ( α ) = 2 n − 1 p(\alpha)=2^{n}-1 p(α)=2n−1)
给定一个序列 α = a 0 a 1 ⋯ a n \alpha=a_{0} a_{1} \cdots a_{n} α=a0a1⋯an, 希望求出一个级数为 I I I 的线性移位寄存器, 使得 α \alpha α 可以由其生成, 且这样的 I I I 最小。称 I I I 为 α \alpha α的线性复杂度。
一致性定理:如果次数分别为 L L L 和 L ′ L^{\prime} L′ 的两个联结多项式均可生成序列 α = a 0 a 1 ⋯ a r − 1 \alpha=a_{0} a_{1} \cdots a_{r-1} α=a0a1⋯ar−1, 并且 r ≥ L + L ′ r \geq L+L^{\prime} r≥L+L′, 则它们其后生成的序列相一致。
Massey 定理:如果序列 α 1 = a 0 a 1 ⋯ a r − 2 \alpha_{1}=a_{0} a_{1} \cdots a_{r-2} α1=a0a1⋯ar−2 的线性复杂度是 L L L, 且产生 α 1 \alpha_{1} α1 的 L L L 级移位寄存器均不能产生 α 2 = a 0 a 1 ⋯ a r − 2 a r − 1 \alpha_{2}=a_{0} a_{1} \cdots a_{r-2} a_{r-1} α2=a0a1⋯ar−2ar−1, 则 α 2 \alpha_{2} α2 的线性复杂度至少是 r − L r-L r−L 。
B-M算法:给定一个序列片段 α = a 0 a 1 ⋯ a N − 1 \alpha=a_{0} a_{1} \cdots a_{N-1} α=a0a1⋯aN−1, 求一个多项式多项式 f ( x ) f(x) f(x) 和级数 I I I, 使得它可由以 f ( x ) f(x) f(x) 为联结多项式的 I I I级LFSR生成
Berlekamp-Massey 算法
输入: α = a 0 a 1 ⋯ a N − 1 \alpha=a_{0} a_{1} \cdots a_{N-1} α=a0a1⋯aN−1 ;
1: n ← 0 , ( f 0 ( x ) , l 0 ) = ( 1 , 0 ) \quad n \leftarrow 0,\left(f_{0}(x), l_{0}\right)=(1,0) n←0,(f0(x),l0)=(1,0);
2: 计算 d n = a n − a n − 1 c 1 − ⋯ − a n − l n c l n d_{n}=a_{n}-a_{n-1} c_{1}-\cdots-a_{n-l_{n}} c_{l_{n}} dn=an−an−1c1−⋯−an−lncln;
(1) 若 d n = 0 d_{n}=0 dn=0,
( f n + 1 ( x ) , I n + 1 ) ← ( f n ( x ) , I n ) \left(f_{n+1}(x), I_{n+1}\right) \leftarrow\left(f_{n}(x), I_{n}\right) (fn+1(x),In+1)←(fn(x),In), 转步骤 3 ;
(2) 若 d n = 1 d_{n}=1 dn=1 且 l 0 = I 1 = ⋯ = I n = 0 l_{0}=I_{1}=\cdots=I_{n}=0 l0=I1=⋯=In=0,
( f n + 1 ( x ) , I n + 1 ) ← ( 1 + x n , n + 1 ) \left(f_{n+1}(x), I_{n+1}\right) \leftarrow\left(1+x^{n}, n+1\right) (fn+1(x),In+1)←(1+xn,n+1), 转步骤 3 ;
(3) 若 d n = 1 d_{n}=1 dn=1 且 I m < I m + 1 = I m + 2 = ⋯ = I n ( m < n ) I_{m}
( f n + 1 ( x ) , I n + 1 ) ← ( f n ( x ) + x n − m f m ( x ) , max { I n , n + 1 − I n } ) \left(f_{n+1}(x), I_{n+1}\right) \leftarrow\left(f_{n}(x)+x^{n-m} f_{m}(x), \max \left\{I_{n}, n+1-I_{n}\right\}\right) (fn+1(x),In+1)←(fn(x)+xn−mfm(x),max{In,n+1−In});
3: 若 n < N − 1 , n ← n + 1 n
输出: ( f N ( x ) , I N ) \left(f_{N}(x), I_{N}\right) (fN(x),IN).
容易证明该算法输入的是一个以 α \alpha α为输出的联结多项式
定理:(1) I N I_{N} IN 是产生 α \alpha α 的 LFSR 的最小级数;
(2) 当且仅当 I N ≤ N / 2 I_{N} \leq N / 2 IN≤N/2 时, 产生 N N N 长序列 α \alpha α 的最短 L F S R L F S R LFSR 是唯 一的;
(3) 当 I N < N / 2 I_{N}
(1) 周期足够大; (2) 一个周期中统计特性好; (3) 自相关函数是一个二值函数;
定理:设 a = a 0 , a 1 , ⋯ , a n − 1 a=a_{0}, a_{1}, \cdots, a_{n-1} a=a0,a1,⋯,an−1 是 F q F_{q} Fq 上的一个 n n n 长序列, 则 a a a的线性复 杂度是下列矩阵的最小秩:
A a = ( a 0 a 1 a 2 ⋯ a n − 3 a n − 2 a n − 1 a 1 a 2 a 3 ⋯ a n − 2 a n − 1 ∗ a 2 a 3 a 4 ⋯ a n − 1 ∗ ∗ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ a n − 1 ∗ ∗ ∗ ∗ ∗ ∗ ) A_{a}=\left(\begin{array}{ccccccc} a_{0} & a_{1} & a_{2} & \cdots & a_{n-3} & a_{n-2} & a_{n-1} \\ a_{1} & a_{2} & a_{3} & \cdots & a_{n-2} & a_{n-1} & * \\ a_{2} & a_{3} & a_{4} & \cdots & a_{n-1} & * & * \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ a_{n-1} & * & * & * & * & * & * \end{array}\right) Aa=⎝⎜⎜⎜⎜⎜⎛a0a1a2⋮an−1a1a2a3⋮∗a2a3a4⋮∗⋯⋯⋯⋮∗an−3an−2an−1⋮∗an−2an−1∗⋮∗an−1∗∗⋮∗⎠⎟⎟⎟⎟⎟⎞
这里 ∗ * ∗代表 F q F_{q} Fq中的任意元素, 最小秩是指对这些 ∗ * ∗ 的所有可能取值得到的。
定理:设 a = a 0 , a 1 , ⋯ , a N − 1 ⋯ a=a_{0}, a_{1}, \cdots, a_{N-1} \cdots a=a0,a1,⋯,aN−1⋯ 是 F q F_{q} Fq 上的一个周期为N的序列, 则 a a a 的线性复杂度是下列矩阵的秩:
C l ( a ) = ( a 0 a 1 ⋯ a N − 1 a 1 a 2 ⋯ a 0 ⋮ ⋮ ⋯ ⋮ a N − 1 a 0 ⋯ a N − 2 ) C_{l}(a)=\left(\begin{array}{cccc} a_{0} & a_{1} & \cdots & a_{N-1} \\ a_{1} & a_{2} & \cdots & a_{0} \\ \vdots & \vdots & \cdots & \vdots \\ a_{N-1} & a_{0} & \cdots & a_{N-2} \end{array}\right) Cl(a)=⎝⎜⎜⎜⎛a0a1⋮aN−1a1a2⋮a0⋯⋯⋯⋯aN−1a0⋮aN−2⎠⎟⎟⎟⎞
设 ( N , q ) = 1 (N, q)=1 (N,q)=1, 则 存在 m m m 使得 F q m F_{q^{m}} Fqm 中存在 N N N 阶元。设 a N = a 0 , a 1 , ⋯ , a N − 1 a^{N}=a_{0}, a_{1}, \cdots, a_{N-1} aN=a0,a1,⋯,aN−1 是 F q F_{q} Fq 上的一个长为 N N N 的序列, 它的离散傅立叶变换是 F q m F_{q^{m}} Fqm 上的序 列 A N = A 0 , A 1 , … , A N − 1 A^{N}=A_{0}, A_{1}, \ldots, A_{N-1} AN=A0,A1,…,AN−1 :
( A 0 , A 1 , ⋯ , A N − 1 ) = ( a 0 , a 1 , ⋯ , a N − 1 ) F ( α ) \left(A_{0}, A_{1}, \cdots, A_{N-1}\right)=\left(a_{0}, a_{1}, \cdots, a_{N-1}\right) F(\alpha) (A0,A1,⋯,AN−1)=(a0,a1,⋯,aN−1)F(α)
F ( α ) = ( 1 1 1 ⋯ 1 1 α α 2 ⋯ α N − 1 ⋮ ⋮ ⋮ ⋯ ⋮ 1 α N − 1 α 2 ( N − 1 ) ⋯ α ( N − 1 ) ( N − 1 ) ) F(\alpha)=\left(\begin{array}{ccccc} 1 & 1 & 1 & \cdots & 1 \\ 1 & \alpha & \alpha^{2} & \cdots & \alpha^{N-1} \\ \vdots & \vdots & \vdots & \cdots & \vdots \\ 1 & \alpha^{N-1} & \alpha^{2(N-1)} & \cdots & \alpha^{(N-1)(N-1)} \end{array}\right) F(α)=⎝⎜⎜⎜⎛11⋮11α⋮αN−11α2⋮α2(N−1)⋯⋯⋯⋯1αN−1⋮α(N−1)(N−1)⎠⎟⎟⎟⎞
注意到: F ( α ) − 1 = N − 1 F ( α − 1 ) F(\alpha)^{-1}=N^{-1} F\left(\alpha^{-1}\right) F(α)−1=N−1F(α−1),令:
C r ( a ) = ( a 0 a 1 ⋯ a N − 1 a N − 1 a 0 ⋯ a N − 2 ⋮ ⋮ ⋯ ⋮ a 1 a 2 ⋯ a 0 ) , D A = ( A 0 A 1 ⋱ A N − 1 ) C_{r}(a)=\left(\begin{array}{cccc}a_{0} & a_{1} & \cdots & a_{N-1} \\ a_{N-1} & a_{0} & \cdots & a_{N-2} \\ \vdots & \vdots & \cdots & \vdots \\ a_{1} & a_{2} & \cdots & a_{0}\end{array}\right), D_{A}=\left(\begin{array}{cccc}A_{0} & & & \\ & A_{1} & & \\ & & \ddots & \\ & & & A_{N-1}\end{array}\right) Cr(a)=⎝⎜⎜⎜⎛a0aN−1⋮a1a1a0⋮a2⋯⋯⋯⋯aN−1aN−2⋮a0⎠⎟⎟⎟⎞,DA=⎝⎜⎜⎛A0A1⋱AN−1⎠⎟⎟⎞
则:Blahut定理:
设 a ∞ = a 0 , a 1 , ⋯ , a N − 1 ⋯ a^{\infty}=a_{0}, a_{1}, \cdots, a_{N-1} \cdots a∞=a0,a1,⋯,aN−1⋯ 是 F q F_{q} Fq 上的一个周期为 N N N 的序列, 则 L ( a ∞ ) = W H ( A N ) , L ( A ∞ ) = W H ( a N ) L\left(a^{\infty}\right)=W_{H}\left(A^{N}\right), L\left(A^{\infty}\right)=W_{H}\left(a^{N}\right) L(a∞)=WH(AN),L(A∞)=WH(aN)( W H W_H WH:非零分量个数)
对于任意的正整数 n n n, 我们设 U n U_{n} Un 是一个取值在 Z 2 n \mathbb{Z}_{2}^{n} Z2n 上的均匀分布 的随机变量, G G G 是一个确定的多项式时间算法。G称为是一个伪随机数发生器, 如果满足下列两条:
基础:给定大素数p,q,求n=pq/ 已知n为两个大素数p,q的乘积,求p,q的计算难度完全不同
定义:单向函数:正向求解容易,反向求解困难的函数
限门单向函数:单向函数,但在知道某个秘密参数k后,反向求解容易
辗转相除法求a和b的公因数:不妨设a>b,则:
a = r 0 , b = r 1 , r 0 = q 1 r 1 + r 2 , r 1 = q 2 r 2 + r 3 , . . . , r m − 1 = q m r m + 0 a=r_0, b=r_1, r_0=q_1r_1+r_2,r_1=q_2r_2+r_3,...,r_{m-1}=q_mr_m+0 a=r0,b=r1,r0=q1r1+r2,r1=q2r2+r3,...,rm−1=qmrm+0,则 g c d ( a , b ) = r m gcd(a,b)=r_m gcd(a,b)=rm
将满足该组关系的 ( r 0 , r 1 , . . . , r m ) (r_0,r_1,...,r_m) (r0,r1,...,rm)的集合看做一个空间,显然其为线性空间,秩为2,一组生成元为: ( r 0 = 1 , r 1 = 0 , r i = q i − 1 r i − 1 − r i − 2 , i = 2 , . . . , m ) (r_0=1,r_1=0, r_i=q_{i-1}r_{i-1}-r_{i-2},i=2,...,m) (r0=1,r1=0,ri=qi−1ri−1−ri−2,i=2,...,m)和 ( s 0 = 0 , s 1 = 1 , s i = q i − 1 s i − 1 − s i − 2 , i = 2 , . . . , m ) (s_0=0,s_1=1, s_i=q_{i-1}s_{i-1}-s_{i-2},i=2,...,m) (s0=0,s1=1,si=qi−1si−1−si−2,i=2,...,m)
推论:对任意 ( x 0 = a , x 1 = b ) (x_0=a,x_1=b) (x0=a,x1=b),其构成的序列 ( x 0 , x 1 , . . , x m ) (x_0,x_1,..,x_m) (x0,x1,..,xm)满足: x ⃗ = a r ⃗ + b s ⃗ \vec{x}=a\vec{r}+b\vec{s} x=ar+bs
若 ( a , b ) = 1 (a,b)=1 (a,b)=1,则 x m = 1 x_m=1 xm=1,则 a r m + b r m = 1 ar_m+br_m=1 arm+brm=1,则 r m = a − 1 ( m o d b ) , s m = b − 1 ( m o d a ) r_m=a^{-1}(\mod b),s_m=b^{-1}(\mod a) rm=a−1(modb),sm=b−1(moda)
记忆:求小的数mod大的数的逆:取 r 0 = 0 , r 1 = 1 r_0=0,r_1=1 r0=0,r1=1,和辗转相除法同步进行即可,到 x m = 1 x_m=1 xm=1时停止
中国剩余定理:
假设整数 m 1 , m 2 , … , m n m_{1}, m_{2}, \ldots, m_{n} m1,m2,…,mn 两两互素, 则对于任意的整数 a 1 , a 2 , … , a n a_{1}, a_{2}, \ldots, a_{n} a1,a2,…,an, 方程组
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) ⋯ x ≡ a n ( m o d m n ) \left\{\begin{array}{l} x \equiv a_{1}\left(\bmod m_{1}\right) \\ x \equiv a_{2}\left(\bmod m_{2}\right) \\ \cdots \\ x \equiv a_{n}\left(\bmod m_{n}\right) \end{array}\right. ⎩⎪⎪⎨⎪⎪⎧x≡a1(modm1)x≡a2(modm2)⋯x≡an(modmn)
都存在整数解, 且若 X , Y X, Y X,Y 都满足该方程组, 则必有 X ≡ Y ( m o d N ) X \equiv Y(\bmod N) X≡Y(modN), 其中 N = ∏ i = 1 n m i N=\prod_{i=1}^{n} m_{i} N=∏i=1nmi 。
具体而言, x ≡ ∑ i = 1 n a i × N m i × [ ( N m i ) − 1 ] m i ( m o d N ) \quad x \equiv \sum_{i=1}^{n} a_{i} \times \frac{N}{m_{i}} \times\left[\left(\frac{N}{m_{i}}\right)^{-1}\right]_{m_{i}} \quad(\bmod N) x≡∑i=1nai×miN×[(miN)−1]mi(modN)
( b , n ) = 1 (b,n)=1 (b,n)=1,则 b φ ( n ) = 1 ( m o d n ) b^{\varphi(n)}=1(\mod n) bφ(n)=1(modn)
设p为奇质数,则 ∣ Z p ∗ ∣ = p − 1 |Z_p^*|=p-1 ∣Zp∗∣=p−1, ( Z p ∗ ) 2 (Z_p^*)^2 (Zp∗)2为 p − 1 2 \frac{p-1}{2} 2p−1阶子群,称为mod p的二次剩余(QR§), Z p ∗ Z_p^* Zp∗中的其余元素则称为mod p的非二次剩余。
定义:Legendre符号: ( α p ) \left(\frac{\alpha}{p} \right) (pα): =1,若 α \alpha α为mod p的二次剩余,=-1,若为非二次剩余,=0,若为0
显然, ( α p ) \left(\frac{\alpha}{p} \right) (pα)= α p − 1 2 ( m o d p ) \alpha^{\frac{p-1}{2}}(\mod p) α2p−1(modp)
扩展:Jacobi符号:定义 ( α n ) = ∏ ( α p i ) a i \left(\frac{\alpha}{n} \right)=\prod \left(\frac{\alpha}{p_i}\right)^{a_i } (nα)=∏(piα)ai
n为奇数: ( 2 n ) = { 1 n = ± 1 m o d 8 − 1 e l s e \left(\frac{2}{n} \right)= \left\{ \begin{aligned} 1 & \quad n=±1 mod 8\\-1 &\quad else\end{aligned}\right. (n2)={1−1n=±1mod8else
记忆方法:找规律
n为奇数: ( m 1 m 2 n ) = ( m 1 n ) ( m 2 n ) \left(\frac{m_1m_2}{n} \right)=\left(\frac{m_1}{n} \right)\left(\frac{m_2}{n} \right) (nm1m2)=(nm1)(nm2)
m,n为奇数: ( m n ) = ± ( n m ) { − m ≡ n ≡ − 1 m o d 4 + m or n ≡ 1 m o d 4 \left(\frac{m}{n} \right)=±\left(\frac{n}{m} \right)\left\{ \begin{aligned} - \quad& m\equiv n\equiv -1\mod 4 \\ + \quad&m\text{ or }n \equiv 1 \mod 4\end{aligned} \right . (nm)=±(mn){−+m≡n≡−1mod4m or n≡1mod4
记忆方法: ( m n ) ( n m ) = ( − 1 ) n − 1 2 m − 1 2 \left(\frac{m}{n} \right)\left(\frac{n}{m} \right)=(-1)^{\frac{n-1}{2}\frac{m-1}{2}} (nm)(mn)=(−1)2n−12m−1
p为质数,如果 a ∈ Q R ( p ) a\in QR(p) a∈QR(p),则 x 2 ≡ a m o d p x^2\equiv a\mod p x2≡amodp恰有两个根 ± b ±b ±b
参数设置:p,q为两个约有512位的质数, n=pq, φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n)=(p-1)(q-1) φ(n)=(p−1)(q−1),取 ( e , φ ( n ) ) = 1 (e,\varphi(n))=1 (e,φ(n))=1,求 d ≡ e − 1 ( m o d φ ( n ) ) d\equiv e^{-1}(\mod \varphi(n)) d≡e−1(modφ(n)),则e和n为公钥,d为私钥, φ ( n ) \varphi(n) φ(n)为限门
如果只有n,则由于大整数分解的困难性,很难求出 φ ( n ) \varphi(n) φ(n),故无法求出 d d d;但是若有了 φ ( n ) \varphi(n) φ(n),则进行简单求逆即可求出 d d d
加密过程: m → m e m\rightarrow m^e m→me,解密过程: m → m d m\rightarrow m^d m→md,因为 m e d = m m^{ed}=m med=m(均为mod n运算)
求解 x e ( m o d n ) x^e(\mod n) xe(modn)的算法:平方乘算法
设e的二进制展开为 ( c m c m − 1 . . . c 0 ) 2 (c_mc_{m-1}...c_0)_2 (cmcm−1...c0)2,则 x e = x c 0 ( x [ c m . . c 1 ] ) 2 x^e=x^{c_0} (x^{[c_m..c_1]})^2 xe=xc0(x[cm..c1])2,递归即可,至多进行2m+1次乘法运算
脱密计算:
事实: ( α p ) \left(\frac{\alpha}{p} \right) (pα)= α p − 1 2 ( m o d p ) \alpha^{\frac{p-1}{2}}(\mod p) α2p−1(modp)只对奇数成立,对n为合数至少有一般的 α \alpha α不成立
在1~n-1中随机选取一个数a,令 x = ( a n ) x=\left(\frac{a}{n} \right) x=(na),若x为0或 α n − 1 2 \alpha^{\frac{n-1}{2}} α2n−1则返回n为质数,否则返回合数。
这是一个Monte-Carlo算法:如果n为合数则必定返回合数,如果n为质数则有大于1/2的概率为质数
设 n − 1 = 2 k m n-1=2^k m n−1=2km,其中m为奇数。在1~n-1中随机选取一个数a,令 b = a m m o d n b=a^m \mod n b=ammodn,如果 b = 1 m o d n b=1 \mod n b=1modn,则返回n为质数,否则,
对i=0~k-1,若 b = − 1 m o d n b=-1 \mod n b=−1modn,则返回n为质数,否则 b = b 2 b=b^2 b=b2
否则,返回n为合数
分析:若n为质数,且返回了n为合数,则要求对i=0~k-1, b ≢ − 1 m o d n b\not \equiv -1\mod n b≡−1modn,但是由于n为质数时完全平方数 x 2 = 1 m o d n x^2=1\mod n x2=1modn必须 x = ± 1 m o d n x=±1\mod n x=±1modn,因此必须 b ≡ 1 m o d b = n b\equiv 1 \mod b=n b≡1modb=n,这会返回n为质数,矛盾!故n为质数必定返回质数,同时可以证明n为合数则至少有1/2概率返回合
n为合数,分解n:只需要寻找一个质因子
算法思想:假设这个质因子-1的各个准质因子都很小
假设 p − 1 = ∏ q i e i p-1=\prod q_i^{e_i} p−1=∏qiei,且 q i e i ≤ B q_i^{e_i}\leq B qiei≤B,则 p − 1 ∣ B ! p-1|B! p−1∣B!, a B ! ≡ 1 m o d p a^{B!}\equiv 1\mod p aB!≡1modp,从而 ( a B ! − 1 , n ) (a^{B!}-1,n) (aB!−1,n)>1
实际:枚举若干个B即可
算法思想:构造mod n的同余碰撞:生日悖论:碰撞概率的增加速度远高于单次概率的增长速度
例如,任取23个人则有两个人生日相同的概率已经达到1/2
在 Z n Z_n Zn中任取k个元素,求 ( a i − a j , n ) (a_i-a_j,n) (ai−aj,n),则碰撞概率为 1 / p 1/p 1/p,只要搜索1.17 p \sqrt{p} p个元素即可
但是两两碰撞的存储空间过大,故改进:
构造函数f,使得 p ∣ a − b ⇒ p ∣ f ( a ) − f ( b ) p|a-b\Rightarrow p|f(a)-f(b) p∣a−b⇒p∣f(a)−f(b),并且依次迭代比较 f ( x 1 ) f(x_1) f(x1)和 f ( f ( x 2 ) ) f(f(x_2)) f(f(x2)),这样在进入 { x n = f n ( x 0 ) } \{x_n=f^n(x_0)\} {xn=fn(x0)}mod p的周期之后必定可以在周期中找到碰撞。
好处:存储空间很小,而且时间复杂度在 n 4 \sqrt[4]{n} 4n