密码学期中复习笔记

密码学期中复习笔记

Chapter 1 古典密码体制的Shannon理论

对称加密体制:

五元组 ( 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,kK,xP,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,)为单射)

几种经典的古典密码体制:
  1. 移位密码 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)=xk

  2. 仿射密码 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)=a1(yb)

  3. 代换密码: 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)

​ 以上三种密码都是明文密文一对一的密码,因此若明文是文字的话,很容易使用文字的统计规律破译

  1. 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

  2. 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假设),在实践中加密规则也确是容易获取的)

  1. 唯密文分析:仅有密文y
  2. 已知明文分析:有明文串x和对应的密文串y
  3. 选择明文分析:有加密机的访问权:可获得任意明文串x对应的密文串y
  4. 选择密文分析:有解密机的访问权:可获得任意密文串y对应的明文串x

敌手的目标:确定正在使用的密钥是什么

由于古典密码很弱,因此下面均考虑在唯密文分析的条件下进行密码破译

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.

Shannon信息论与完善保密

对于离散加密,如果引入概率,则可以将其视为离散随机变量X到Y的一个映射。那么,据此可以定义完善保密性 ∀ x ∈ P , ∀ y ∈ C , P ( x ∣ y ) = P ( x ) \forall x\in P,\forall y\in C, P(x|y)=P(x) xP,yC,P(xy)=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(KC)=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=limnnH(Pn)(长度为n的语言串的熵平均值)

语言L的冗余度定义为 R L = 1 − H L log ⁡ ∣ P ∣ R_L=1-\frac{H_L}{\log| P|} RL=1logPHL,例如英语的冗余度为0.75

定理:语言L的伪密钥期望个数下界为 s n ˉ ≥ ∣ K ∣ ∣ P ∣ n R L − 1 \bar{s_n}\geq \frac{|K|}{|P|^{nR_L}}-1 snˉPnRLK1

定义:唯一解距离:伪密钥期望下界数恰好等于0时n的值,对英文的代换密码来说则为25

安全性的分类:

计算安全性(计算用时++),可证明安全性(归约到计算复杂问题上),无条件安全性(不可能破译)

Chapter2 分组密码与高级加密标准(AES)

分组算法的结构:

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} w0x,w1g(w0,K1),...,wNrg(wNr1,KNr),ywNr

为了解密,要求轮函数必须为单射,即存在 g − 1 g^{-1} g1 g − 1 ( g ( w , y ) , y ) = w g^{-1}(g(w,y),y)=w g1(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 wNry,wNr1g1(wNr,KNr),...,w0g1(w1,K1),xw0

分组算法:代换-置换网络(SPN)

l , m ∈ Z + l,m\in Z^+ l,mZ+,明文和密文为长为 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}上的置换
密码学期中复习笔记_第1张图片

如上图所示,SPN加密的一轮会经过三层:第一层是和轮密钥的异或,第二层是对字符串切片为m段,分别用S盒代换,最后一层是对各个数字的所在位置用P盒代换;解密则反过来做即可。

SPN的伪代码为:

密码学期中复习笔记_第2张图片

注:在最后两轮中没有再用 π P \pi_P πP,这是因为前面已经足够了

优点:该算法的实现非常简单高效,而且需要的存储空间较少

对SPN的分析

思想:在密文的输入中找到一些概率关系

1. 线性密码分析

分析方法:已知明文分析:给出大量明密对

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} 2k1j=1kϵij

攻击方法:

  1. 对S盒 π S \pi_S πS构造线性逼近表:求出 ∀ a = ( a 1 , . . . , a l ) , b = ( b 1 , . . . , b l ) \forall a=( a_1,...,a_l),b=(b_1,...,b_l) a=(a1,...,al),b=(b1,...,bl) ∀ x 1 , . . , x l , y 1 , . . . , y l = π s ( x 1 , . . , x l ) \forall x_1,..,x_l, y_1,...,y_l=\pi_s(x_1,..,x_l) x1,..,xl,y1,...,yl=πs(x1,..,xl) ( a 1 x 1 ⊕ . . . ⊕ a l x l ) ⊕ ( b 1 y 1 ⊕ . . . ⊕ b l y l ) (a_1x_1\oplus ...\oplus a_lx_l)\oplus (b_1y_1\oplus ...\oplus b_ly_l) (a1x1...alxl)(b1y1...blyl) N L ( a , b ) N_L(a,b) NL(a,b)表(代表所有x1,…,xl中使得结果为0的个数),从而对每个S盒可以取特定的 a , b a,b a,b,使得偏差偏离0
  2. 在代换-置换网络中每一层都寻找恰当的 a , b a,b a,b,使得构成一个相互抵消的活动S-盒的路径,并且偏差不大。
  3. 假设这些路径变量相互独立,则其直和的偏差用堆积引理可以求出(记为 ϵ \epsilon ϵ)。而这些直和由于相互抵消的关系,最后自变量仅涉及到第一层和最后一层的若干变量。
  4. 枚举最后一层变量对应的密钥,统计该直和对应的偏差,则在正确的密钥下,该直和应具有偏差 ϵ \epsilon ϵ,而其他密钥下偏差应为0
  5. 为了区分正确的密钥和其它密钥,根据大数定律,需要统计的明密对数量应接近 c ϵ − 2 c\epsilon^{-2} cϵ2

2. 差分密码分析

分析方法:选择明文分析:可以获得任意明文对应的密文(比线性密码分析要求更高)

对任意的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,xx)},即:输入异或为 x ′ x' x的任意对;定义其输出异或为 π S ( x ) ⊕ π S ( x ⊕ x ′ ) \pi_S(x)\oplus \pi_S(x\oplus x') πS(x)πS(xx)

则:一共 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条件的对。在剩下的里面再计数。

DES简介(1973-1996)

每个状态 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(Li1,Ri1,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=Ri1,Ri=Li1f(Ri1,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(Ri1,Li1)

密码学期中复习笔记_第3张图片

E:扩展函数;S_1,…,S_8:S盒(6bit → \rightarrow 4bit);P:置换

分析:除了S盒以外均为线性部件,因此S盒的选取至关重要。但是S盒中也可能藏有“陷门”。

AES简介(1997-今)

数学基础: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

伪代码:
密码学期中复习笔记_第4张图片

SubBytes:对于state中的每个字节(8个bite)先求 G F ( 2 8 ) GF(2^8) GF(28)中的逆元素 ( x 7 , . . . , x 0 ) (x_7,...,x_0) (x7,...,x0),再做mod2乘法:
密码学期中复习笔记_第5张图片

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=xt0+(x+1)t1+t2+t3u1=xt1+(x+1)t2+t3+t0u2=xt2+(x+1)t3+t0+t1u1=xt3+(x+1)t0+t1+t2
KeyExpansion:将128bit的种子密钥变为11个轮密钥

AddRoundKey: state ⊕ K r \text{state}\oplus K^r stateKr

AES的分析:从设计上是反攻击的,例如有限域取逆的操作使得线性逼近和差分攻击趋于均匀分布,使得这两种攻击很难奏效。Mixcolumn的设计则使得找到包含较少S盒的攻击是不可能的。

Chapter3 序列密码

反馈移位寄存器序列:在GF(2)上,输入 a 0 , . . . , a n − 1 a_0,...,a_{n-1} a0,...,an1,取函数 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+i1,...,ai1)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} XYK S \mathcal{S} S 均为有限集合分别称为明文空间、密文空间、密钥空间和状态集。 τ \tau τ 是带参数的状态转移函数, 即对于任意的 k ∈ K k \in \mathcal{K} kK, τ k : X × S → S ; \tau_{k}: \mathcal{X} \times \mathcal{S} \rightarrow \mathcal{S} ; τk:X×SS; e e e 是带参数的加密函数, 即对于任意的 k ∈ K k \in \mathcal{K} kK e k : X × S → Y ; e_{k}: \mathcal{X} \times \mathcal{S} \rightarrow \mathcal{Y} ; ek:X×SY; d d d 是带参数的脱密函数, 即对于任意的 k ∈ K k \in \mathcal{K} kK d k : Y × S → X , d_{k}: \mathcal{Y} \times \mathcal{S} \rightarrow \mathcal{X} , dk:Y×SX满足 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,si1),si1)=xi,1in.

加密: 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,si1),si=τk(xi,si1) 脱密: 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,si1),si=τk(xi,si1)

在实际使用中, s i = τ k ( s i − 1 ) s_i=\tau_k(s_{i-1}) si=τk(si1) y i = x i ⊕ σ ( s i − 1 ) y_i=x_i\oplus \sigma(s_{i-1}) yi=xiσ(si1),称为伪随机数生成器

线性反馈移位寄存器:(LFSR)

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+n1ai+n2ai+1ai)=c1ai+n1+c2ai+n2+cn1ai+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++cn1xn1+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+c1xn1++cn1x+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+c1an1+...+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++cn1xn1+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=0aixi 满足 f ( x ) ⋅ α ( x ) f(x) \cdot \alpha(x) f(x)α(x) 是多项式, deg ⁡ [ f ( x ) ⋅ α ( x ) ] < n \operatorname{deg}[f(x) \cdot \alpha(x)]deg[f(x)α(x)]<n; 而此时 α ( x ) \alpha(x) α(x) 是周期的 当且仅当 deg ⁡ [ f ( x ) ⋅ α ( x ) ] < deg ⁡ f ( x ) \operatorname{deg}[f(x) \cdot \alpha(x)]<\operatorname{deg} f(x) deg[f(x)α(x)]<degf(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 2n1 的序列当且仅当 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)=2n1

意义:用一个很短的序列生成一个极长序列,加密一段极长密文。

定义:由n次本原多项式生成的序列称为n级的m-序列,下面证明 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 2n1,0 出现的个数是 2 n − 1 − 1 2^{n-1}-1 2n11.

(2)定义一个长为k的0-游程为10…0(k个)1;则:

0-游程和1-游程个数均为 N / 2 = 2 n − 2 N / 2=2^{n-2} N/2=2n2, 游程分布如下:

​ 长度为 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,1in2;

​ 长度为 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,1in2;

​ 长度为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(α)=2n1

B-M算法与线性复杂度

给定一个序列 α = a 0 a 1 ⋯ a n \alpha=a_{0} a_{1} \cdots a_{n} α=a0a1an, 希望求出一个级数为 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} α=a0a1ar1, 并且 r ≥ L + L ′ r \geq L+L^{\prime} rL+L, 则它们其后生成的序列相一致。

Massey 定理:如果序列 α 1 = a 0 a 1 ⋯ a r − 2 \alpha_{1}=a_{0} a_{1} \cdots a_{r-2} α1=a0a1ar2 的线性复杂度是 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=a0a1ar2ar1, 则 α 2 \alpha_{2} α2 的线性复杂度至少是 r − L r-L rL

B-M算法:给定一个序列片段 α = a 0 a 1 ⋯ a N − 1 \alpha=a_{0} a_{1} \cdots a_{N-1} α=a0a1aN1, 求一个多项式多项式 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} α=a0a1aN1
1: n ← 0 , ( f 0 ( x ) , l 0 ) = ( 1 , 0 ) \quad n \leftarrow 0,\left(f_{0}(x), l_{0}\right)=(1,0) n0,(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=anan1c1anlncln;
(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}Im<Im+1=Im+2==In(m<n),
( 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)+xnmfm(x),max{In,n+1In});
3: 若 n < N − 1 , n ← n + 1 nn<N1,nn+1, 转步骤 2 ;
输出: ( 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 INN/2 时, 产生 N N N 长序列 α \alpha α 的最短 L F S R L F S R LFSR 是唯 一的;
(3) 当 I N < N / 2 I_{N}IN<N/2 时, 迭代 2 I N 2 I_{N} 2IN 步已经有 ( f 2 I N ( x ) , l 2 I N ) = ( f N ( x ) , I N ) .  \left(f_{2 I_{N}}(x), l_{2 I_{N}}\right)=\left(f_{N}(x), I_{N}\right) \text {. } (f2IN(x),l2IN)=(fN(x),IN)

Golomb 原则 (1967):称一个序列是安全的(不容易找到规律的),若:

(1) 周期足够大; (2) 一个周期中统计特性好; (3) 自相关函数是一个二值函数;

计算线性复杂度的其他方法:

定理:设 a = a 0 , a 1 , ⋯   , a n − 1 a=a_{0}, a_{1}, \cdots, a_{n-1} a=a0,a1,,an1 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=a0a1a2an1a1a2a3a2a3a4an3an2an1an2an1an1
这里 ∗ * 代表 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,,aN1 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)=a0a1aN1a1a2a0aN1a0aN2

离散傅里叶变换:

( 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,,aN1 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,,AN1 :
( 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,,AN1)=(a0,a1,,aN1)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(α)=1111ααN11α2α2(N1)1αN1α(N1)(N1)

注意到: F ( α ) − 1 = N − 1 F ( α − 1 ) F(\alpha)^{-1}=N^{-1} F\left(\alpha^{-1}\right) F(α)1=N1F(α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)=a0aN1a1a1a0a2aN1aN2a0,DA=A0A1AN1
则:Blahut定理

a ∞ = a 0 , a 1 , ⋯   , a N − 1 ⋯ a^{\infty}=a_{0}, a_{1}, \cdots, a_{N-1} \cdots a=a0,a1,,aN1 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称为是一个伪随机数发生器, 如果满足下列两条:

  1. 扩展性:当输入 s s s长度为 n n n时, 输出 G ( s ) G(s) G(s) 的长度 I ( n ) I(n) I(n) 满足 I ( n ) > n I(n)>n I(n)>n;
  2. 伪随机性: 当输入随机变量 U n U_{n} Un时, 输出随机变量 G ( U n ) G\left(U_{n}\right) G(Un) U I ( n ) U_{I(n)} UI(n) 不可区分。
    事实上, 任一多项式扩展因子 I ( n ) I(n) I(n) 的 PRG 可由扩展因子为 n + 1 n+1 n+1 的 PRG 迭代得到。

Chapter4 RSA公钥密码体制

基础:给定大素数p,q,求n=pq/ 已知n为两个大素数p,q的乘积,求p,q的计算难度完全不同

定义:单向函数:正向求解容易,反向求解困难的函数

限门单向函数:单向函数,但在知道某个秘密参数k后,反向求解容易

基础知识:

Euclid算法:

辗转相除法求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,...,rm1=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=qi1ri1ri2i=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=qi1si1si2i=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=a1(modb),sm=b1(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. xa1(modm1)xa2(modm2)xan(modmn)
都存在整数解, 且若 X , Y X, Y X,Y 都满足该方程组, 则必有 X ≡ Y (   m o d   N ) X \equiv Y(\bmod N) XY(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) xi=1nai×miN×[(miN)1]mi(modN)

Lagrange定理:

( 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=p1 ( Z p ∗ ) 2 (Z_p^*)^2 (Zp)2 p − 1 2 \frac{p-1}{2} 2p1阶子群,称为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) α2p1(modp)

扩展:Jacobi符号:定义 ( α n ) = ∏ ( α p i ) a i \left(\frac{\alpha}{n} \right)=\prod \left(\frac{\alpha}{p_i}\right)^{a_i } (nα)=(piα)ai

二次互反律:
  1. 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)={11n=±1mod8else

    记忆方法:找规律

  2. 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)

  3. 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){+mn1mod4m or n1mod4

    记忆方法: ( 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)2n12m1

mod n的平方根:

p为质数,如果 a ∈ Q R ( p ) a\in QR(p) aQR(p),则 x 2 ≡ a m o d    p x^2\equiv a\mod p x2amodp恰有两个根 ± b ±b ±b

  1. p ≡ 3 m o d    4 p\equiv 3\mod 4 p3mod4,则解为 x ≡ ± a p + 1 4 m o d    p x\equiv \pm a^{\frac{p+1}{4}}\mod p x±a4p+1modp
  2. n = p e n=p^e n=pe,则 x 2 ≡ a m o d    p e x^2\equiv a\mod p^e x2amodpe恰有两解当且仅当 x 2 ≡ a m o d    p x^2\equiv a\mod p x2amodp有解
  3. n = ∏ s p i e i n=\prod_s p_i^{e_i} n=spiei ( a , n ) = 1 (a,n)=1 (a,n)=1,则 x 2 ≡ a m o d    n x^2\equiv a\mod n x2amodn要么无解,要么有 2 s 2^s 2s个解

RSA体制:

参数设置:p,q为两个约有512位的质数, n=pq, φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n)=(p-1)(q-1) φ(n)=(p1)(q1),取 ( e , φ ( n ) ) = 1 (e,\varphi(n))=1 (e,φ(n))=1,求 d ≡ e − 1 ( m o d    φ ( n ) ) d\equiv e^{-1}(\mod \varphi(n)) de1(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 mme,解密过程: m → m d m\rightarrow m^d mmd,因为 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 (cmcm1...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次乘法运算

脱密计算:

  1. 用平方乘算法直接求出 y d ( m o d    n ) y^d(\mod n) yd(modn)
  2. 分别计算出 y p ≡ y ( m o d    p ) , d p ≡ d ( m o d    p − 1 ) , y q , d 1 y_p\equiv y(\mod p), d_p\equiv d(\mod p-1),y_q,d_1 ypy(modp),dpd(modp1)yq,d1,再用中国剩余定理合并两个方程的结果: x p ≡ y p d p ( m o d    p ) , x q ≡ y q d q ( m o d    q ) x_p\equiv y_p^{d_p}(\mod p),x_q\equiv y_q^{d_q}(\mod q) xpypdp(modp)xqyqdq(modq)

判断一个数是否为质数的算法:

事实 ( α p ) \left(\frac{\alpha}{p} \right) (pα)= α p − 1 2 ( m o d    p ) \alpha^{\frac{p-1}{2}}(\mod p) α2p1(modp)只对奇数成立,对n为合数至少有一般的 α \alpha α不成立

S-S算法:

在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}} α2n1则返回n为质数,否则返回合数。

这是一个Monte-Carlo算法:如果n为合数则必定返回合数,如果n为质数则有大于1/2的概率为质数

Miller-Rabin算法:

n − 1 = 2 k m n-1=2^k m n1=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 b1modn,但是由于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 b1modb=n,这会返回n为质数,矛盾!故n为质数必定返回质数,同时可以证明n为合数则至少有1/2概率返回合

因子分解算法:

Pollard p-1算法:

n为合数,分解n:只需要寻找一个质因子

算法思想:假设这个质因子-1的各个准质因子都很小

假设 p − 1 = ∏ q i e i p-1=\prod q_i^{e_i} p1=qiei,且 q i e i ≤ B q_i^{e_i}\leq B qieiB,则 p − 1 ∣ B ! p-1|B! p1B! 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即可

Pollard ρ \rho ρ算法:

算法思想:构造mod n的同余碰撞:生日悖论:碰撞概率的增加速度远高于单次概率的增长速度

例如,任取23个人则有两个人生日相同的概率已经达到1/2

Z n Z_n Zn中任取k个元素,求 ( a i − a j , n ) (a_i-a_j,n) (aiaj,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) pabpf(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

你可能感兴趣的:(课程复习资料,数学,密码学,数论)