密码学
1 密码学的基本概念
1.1 密码学的基本原理及流程
密码学的基本属性:机密性、完整性、不可否认性、认证。
密码算法的安全性仅依赖于对密钥的保密。
密码学中的对象包含:明文、密文、密钥、加密算法、解密算法。
1.2 两类重要密码体制
私钥密码体制:私钥密码体制又称对称密码体制,加密密钥和解密密钥相同,包括了流密码、分组密码。
公钥密码体制:公钥密码体制又称非对称密码体制,加密密钥和解密密钥不同。在加密领域,用公钥加密数据,用私钥解密数据。在数字签名领域,用私钥签名,用公钥解密认证。
1.3 流密码的基本思想
流密码的基本思想是利用密钥 k k k产生一个密钥流 z z z,并利用相应的规则对明文串 x x x进行加密,所得到的密文为 y y y。
2 分组密码体制
2.1 DES
分组长度:64比特
密文长度:64比特
密钥长度:64比特(56+8),56比特有效长度、8比特奇偶校验
循环次数:16轮
DES主体由初始置换、Feistel网络、逆初始置换组成。
圈变换包括扩展变换、异或运算、S盒代替、P盒置换、异或运算。
2.2 AES
分组长度:128比特
(Rijndael算法的分组长度为128比特、192比特、256比特)
密文长度:128比特
密钥长度:128比特、192比特、256比特
循环次数依据密钥长度的不同而不同,分别为10轮(128比特)、12轮(192比特)、14轮(256比特)。
圈变换包含字节代换、行移位、列混合、圈密钥加。最后一个圈变换不包含列混合。
2.3 SM4
分组长度:128比特
密文长度:128比特
密钥长度:128比特(解密密钥是加密密钥的逆序)
循环次数:32轮
轮变换:
X i + 4 = F ( X i , X i + 1 , X i + 2 , X i + 3 , r k i ) = X i ⊕ T ( X i + 1 ⊕ X i + 2 ⊕ X i + 3 ⊕ r k i ) , i = 0 , 1 , ⋯ , 31 X_{i+4}=F\left(X_{i}, X_{i+1}, X_{i+2}, X_{i+3}, r k_{i}\right)=X_{i} \oplus T\left(X_{i+1} \oplus X_{i+2} \oplus X_{i+3} \oplus r k_{i}\right), \quad i=0,1, \cdots, 31 Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,rki)=Xi⊕T(Xi+1⊕Xi+2⊕Xi+3⊕rki),i=0,1,⋯,31
其中T称为合成置换,是一个由非线性变换(S盒)和一个线性变换(循环移位、异或运算)复合而成的可逆变换。算法中非线性变换由4个S盒并行组成,但为同一个S盒。
2.3 DES、AES、SM4的优缺点及安全强度
DES密钥长度短,运算速度较快,但安全性低。AES密钥长度可变,计算效率高,安全性高,能抗各种攻击,但算法实现复杂。SM4密钥长度固定为128比特,且解密算法与加密算法一致,解密密钥和加密密钥互为逆序,算法实现简单快速,安全性高。
3 公钥密码体制
3.1 公钥密码体系
(1)基于大数分解(大整数素因子分解)问题的公钥密码体制,其中包括RSA密码体制;
(2)基于有限乘法群上离散对数问题的公钥密码体制,其中包括EIGamal密码体制;
(3)基于椭圆曲线加法群上的离散对数问题的公钥密码体制,其中包括椭圆曲线密码体制。
3.2 公钥加密算法步骤
(1)接收方生成密钥对(公钥 P K PK PK,私钥 S K SK SK);
(2)公开公钥 P K PK PK,私密保存私钥 S K SK SK;
(3)发送方将消息 m m m通过公钥 P K PK PK加密,产生密文 c = E ( P K , m ) c=E(P K, m) c=E(PK,m);
(4)接收方收到密文 c c c后通过私钥 S K SK SK解密,获得明文 m = D ( S K , m ) m=D(S K, m) m=D(SK,m)。
3.3 RSA公钥加密体制
3.3.1 密钥的产生
(1)取不同的大素数 p , q p, q p,q;
(2)计算 n = p × q n=p \times q n=p×q; φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n)=(p-1)(q-1) φ(n)=(p−1)(q−1);
(3)取 1 < e < φ ( n ) 1<e<\varphi(n) 1<e<φ(n),且 e e e与 φ ( n ) \varphi(n) φ(n)互素;
(4)计算 d d d, d e mod φ ( n ) = 1 de\operatorname{mod} \varphi(n)=1 demodφ(n)=1,即 d e = k φ ( n ) + 1 d e=k \varphi(n)+1 de=kφ(n)+1;
(5)公钥 { e , n } \{e, n\} {e,n},私钥 { d , n } \{d, n\} {d,n}。
3.3.2 加密
(1)明文 0 ≤ M < n 0 \leq M<n 0≤M<n;
(2)密文 C = M e m o d n C=M^{e} \bmod n C=Memodn。
3.3.3 解密
(1)密文 0 ≤ C < n 0 \leq C<n 0≤C<n;
(2)明文 M = C d m o d n M=C^{d} \bmod n M=Cdmodn。
3.4 ElGamal公钥加密体制
3.4.1 密钥的产生
(1)取大素数 p p p, q q q为乘法群 Z p ∗ \mathbb{Z}_{p}^{*} Zp∗的生成元;
(2)取随机数 1 < x < p − 1 1<x<p-1 1<x<p−1作为私钥;
(3)计算 y = g x m o d p y=g^{x} \bmod p y=gxmodp作为公钥。
3.4.2 加密
(1)明文 m ∈ Z p ∗ m \in \mathbb{Z}_{p}^{*} m∈Zp∗,取随机数 1 < k < p − 1 1<k<p-1 1<k<p−1;
(2)密文 c 1 = g k m o d p c_{1}=g^{k} \bmod p c1=gkmodp, c 2 = m y k m o d p \quad c_{2}=m y^{k} \bmod p c2=mykmodp。
3.4.3 解密
(1)密文 c = ( c 1 , c 2 ) c=\left(c_{1}, c_{2}\right) c=(c1,c2);
(2)密文 m = c 2 c 1 x m o d p m=\frac{c_{2}}{c_{1}^{x}} \bmod p m=c1xc2modp。
3.5 ECC公钥加密体制
3.5.1 密钥的产生
(1)有限域 F P F_{P} FP上的椭圆曲线 E E E,基点 G G G具有较大素数阶 n n n;
(2)取随机数 d : 2 ≤ d ≤ n − 1 d: 2 \leq d \leq n-1 d:2≤d≤n−1作为私钥;
(3)计算 P : P = d G P: P=d G P:P=dG作为公钥。
3.5.2 加密
(1)取随机数 k : 1 ≤ k ≤ n − 1 k: 1 \leq k \leq n-1 k:1≤k≤n−1, k P = ( x , y ) \quad k P=(x, y) kP=(x,y);
(2)密文 C 0 = k G C_{0}=kG C0=kG, c 1 = m 1 x m o d p \quad c_{1}=m_{1} x \bmod p c1=m1xmodp, c 2 = m 2 y m o d p c_{2}=m_{2} y \bmod p c2=m2ymodp。
3.5.3 解密
(1)密文 c = ( C 0 , c 1 , c 2 ) c=\left(C_{0}, c_{1}, c_{2}\right) c=(C0,c1,c2);
(2)计算 d C 0 = ( x , y ) d C_{0}=(x, y) dC0=(x,y);
(3)明文 m 1 = c 1 x m o d p m_{1}=\frac{c_{1}}{x} \bmod p m1=xc1modp, m 2 = c 2 y m o d p \quad m_{2}=\frac{c_{2}}{y} \bmod p m2=yc2modp。
3.6 基于身份的公钥密码算法
基于身份的公钥密码算法思想就是简化公钥基础设施对证书的管理,即把用户的身份和公钥结合在一起。因为用户的公钥就是用户的身份,故而加密方不需要验证公钥证书。用户把自己的身份提交给可信密钥生成中心,可信密钥生成直行返回给用户私钥,不用证书机构CA来授权,这是基于身份加密体制的最大优点。
3.7 对称密码算法和公钥加密算法
3.7.1 共同点
均有加密算法、解密算法、加密密钥、解密密钥。
3.7.2 不同点
(1)对称密码算法加密密钥和解密密钥相同。公钥加密算法加密密钥和解密密钥不同,分为公钥和私钥。
(2)假设系统中有 n n n个用户,使用对称加密体制实现保密通信,系统共需要管理 n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n−1)个密钥;使用公钥加密体制,需要管理 2 n 2n 2n个密钥。
4 数字签名
4.1 数字签名的概念与基本特性
数字签名是手写签名的数字化形式,与所签信息绑定在一起。包含下列基本特性:签名可信性、不可抵赖性、不可复制性、不可伪造性、数据完整性。
4.2 数字签名的步骤
(1)参数建立(产生用户的公私钥对);
(2)签名生成(产生消息的签名);
(3)签名验证(验证消息的签名是否合法)。
4.3 RSA数字签名
4.3.1 参数建立(同RSA加密)
(1)取不同的大素数 p , q p, q p,q;
(2)计算 n = p × q n=p \times q n=p×q; φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi(n)=(p-1)(q-1) φ(n)=(p−1)(q−1);
(3)取 1 < e < φ ( n ) 1<e<\varphi(n) 1<e<φ(n),且 e e e与 φ ( n ) \varphi(n) φ(n)互素;
(4)计算 d d d, d e mod φ ( n ) = 1 de\operatorname{mod} \varphi(n)=1 demodφ(n)=1,即 d e = k φ ( n ) + 1 d e=k \varphi(n)+1 de=kφ(n)+1;
(5)公钥 { e , n } \{e, n\} {e,n},私钥 { d , n } \{d, n\} {d,n}。
4.3.2 签名生成
消息 m ∈ Z n m \in \mathbb{Z}_{n} m∈Zn, s = m d m o d n s=m^{d} \bmod n s=mdmodn, s s s是对消息的签名。
4.3.3 签名验证
获取公钥 { e , n } \{e, n\} {e,n}后,验证 m = s e m o d n m=s^{e} \bmod n m=semodn是否成立。
4.4 ECC数字签名
4.4.1 参数建立(同ECC加密)
(1)有限域 F P F_{P} FP上的椭圆曲线 E E E,基点 G G G具有较大素数阶 n n n;
(2)取随机数 d : 2 ≤ d ≤ n − 1 d: 2 \leq d \leq n-1 d:2≤d≤n−1作为私钥;
(3)计算 P : P = d G P: P=d G P:P=dG作为公钥;
(4)确定哈希函数 h h h。
4.4.2 签名生成
(1)对于消息 m ∈ Z p ∗ m \in \mathbb{Z}_{p}^{*} m∈Zp∗,取随机整数 k : 1 ≤ k < n k: 1 \leq k<n k:1≤k<n,计算 k G = ( x , y ) k G=(x, y) kG=(x,y);
(2)计算 r = x m o d n r=x \bmod n r=xmodn, s = h ( m ) + d r k m o d n s=\frac{h(m)+d r}{k} \bmod n s=kh(m)+drmodn;
(3) ( r , s ) (r, s) (r,s)即为消息的签名。
4.4.3 签名验证
(1)计算 w = 1 s m o d n w=\frac{1}{s} \bmod n w=s1modn;
(2)计算 u 1 = h ( m ) w m o d n u_{1}=h(m) w \bmod n u1=h(m)wmodn, u 2 = r w m o d n u_{2}=r w \bmod n u2=rwmodn;
(4)计算 R = u 1 G + u 2 P R=u_{1} G+u_{2} P R=u1G+u2P,如果 R R R为无穷远点,则签名无效;
(5)否则令 v = R x m o d n v=R_{x} \bmod n v=Rxmodn( R x R_{x} Rx为的横坐标);
(6)若 v = r v=r v=r,则签名有效,若 v ≠ r v \neq r v=r,则签名无效。
4.5 公钥密码算法用于加密与签名的不同
加密时,发送方需要用对方的公钥进行加密,接收方收到密文后用私钥解密。签名时,信息由发送方用自己的私钥进行签名,接收方收到后,用公钥进行验证。
加密提供可靠信息传输的功能,签名提供认证服务。
5 哈希函数
5.1 Hash函数的概念和基本性质
Hash函数是一种将任意长度的输入变换为固定长度的输出且不可逆的单向密码体制。Hash函数有下列性质:(1)单向性、(2)弱抗碰撞性、(3)强抗碰撞性。强抗碰撞包含弱抗碰撞、单向性。
5.2 MD5
分组长度:512比特
消息摘要长度:128比特
基本算法步骤:
(1)填充消息:首先对消息进行填充处理,使得填充后的消息总长度为 512 k + 448 512 k+448 512k+448。填充的方法是在最后添加一位“1”,后续都是“0”。
(2)添加原消息长度:在填充后的消息后面再添加一个64比特的二进制数表示填充前原始消息的长度。
(3)初始化缓冲区:MD5中有四个32位缓冲区,用A、B、C、D表示,用来存储散列计算的中间结果和最终结果。
(4)循环散列计算:以512比特为单位,将消息分成N个分组,对每个分组进行散列处理,每一轮的处理会对缓冲区(A、B、C、D)进行更新。压缩函数有4轮,每轮对缓冲区进行16步迭代。
(5)输出散列值:所有的N个分组消息都处理完后,最后一轮得到的四个缓冲区的值即为整个消息的散列值。
5.3 SHA-1
分组长度:512比特
消息摘要长度:160比特
基本算法步骤:
(1)填充消息:首先对消息进行填充处理,使得填充后的消息总长度为 512 k + 448 512k+448 512k+448。填充的方法是在最后添加一位“1”,后续都是“0”。
(2)添加原消息长度:在填充后的消息后面再添加一个64比特的二进制数表示填充前原始消息的长度。
(3)初始化缓冲区:SHA-1中有五个32位缓冲区,用A、B、C、D、E表示,用来存储散列计算的中间结果和最终结果。
(4)循环散列计算:以512比特为单位,将消息分成N个分组,对每个分组进行散列处理,每一轮的处理会对缓冲区(A、B、C、D、E)进行更新。压缩函数有4轮,每轮对缓冲区进行20步迭代。
(5)输出散列值:所有的N个分组消息都处理完后,最后一轮得到的五个缓冲区的值即为整个消息的散列值。
6 密钥交换协议
6.1 Diffie-Hellman密钥交换协议
(1)假设Alice与Bob要在他们之间建立一个共享的密钥。Alice与Bob首先选定一个大素数 p p p,并选取 g g g为乘法群 F p ∗ F_{p}^{*} Fp∗中一个生成元;
(2)Alice秘密选定一个整数 a : 1 ≤ a ≤ p − 2 a: 1 \leq a \leq p-2 a:1≤a≤p−2,并计算 A = g a m o d p A=g^{a} \bmod p A=gamodp。发送 A A A给Bob;
(3)Bob秘密选定一个整数 b : 1 ≤ b ≤ p − 2 b: 1 \leq b \leq p-2 b:1≤b≤p−2,并计算 B = g b m o d p B=g^{b} \bmod p B=gbmodp。发送 B B B给Alice;
(4)Alice计算 k = B a m o d p k=B^{a} \bmod p k=Bamodp;
(5)Bob计算 k = A b m o d p k=A^{b} \bmod p k=Abmodp。
因为 B a m o d p = A b m o d p B^{a} \bmod p=A^{b} \bmod p Bamodp=Abmodp,Alice与Bob计算得到 k k k的是相同的。 k k k可以作为他们以后通信的共享会话密钥。
6.2 X.509证书标准
证书包括公钥和有关证书授予的人员或实体的信息、有关证书的信息以及有关颁发证书的认证机构(CA,Certification Authority)的可选信息。接收证书的实体是证书的主体。证书的颁发者和签名者是CA。
7 密码学的实际应用
云计算拥有强大的计算能力,可以帮助人们执行复杂的计算。但是,保护用户数据私密性是必须解决的关键问题,因为数据一旦加密后,用户是不能对加密结果做任何操作的,只能进行存储、传输。同态加密提供了一种对加密数据进行处理的功能,意味着先计算再加密与先加密再运算所得到的结果是一样的,即存在加密算法E,使得 E ( f ( a , b ) ) = f ( E ( a ) , E ( b ) ) E(f(a, b))=f(E(a), E(b)) E(f(a,b))=f(E(a),E(b))。它允许用户通过加密保护数据的私密性,同时允许云服务器对密文执行任意可计算的运算,得到的结果是对相应明文执行相应运算结果的有效密文。同态加密现在最需要解决的问题在于:效率。效率一词包含两个方面,一个是加密数据的处理速度,一个是这个加密方案的数据存储量。全同态加密的实现,可以为隐私数据在云平台上的分析带来方便,例如同态加密应用机器学习中,可以实现在云服务器的强大算力帮助下进行隐私数据的机器学习。
8 计算题例题
8.1 RSA计算
已知 p = 5 , q = 11 , e = 7 p=5, q=11, e=7 p=5,q=11,e=7。
(1)求私钥。
d e = 1 m o d φ ( n ) d e=1 \bmod \varphi(n) de=1modφ(n), d e = k φ ( n ) + 1 d e=\mathrm{k} \varphi(n)+1 de=kφ(n)+1
φ ( n ) = ( p − 1 ) ( q − 1 ) = 40 \varphi(n)=(p-1)(q-1)=40 φ(n)=(p−1)(q−1)=40, d e = 40 k + 1 \quad d e=40 k+1 de=40k+1
k = 4 k=4 k=4, d = 23 \quad d=23 d=23
(2)明文,求密文,并从密文还原出明文。
c = m e m o d n = 1 0 7 m o d 55 = 10 c=m^{e} \bmod n=10^{7} \bmod 55=10 c=memodn=107mod55=10
m = c d m o d n = 1 0 23 m o d 55 = 10 m=c^{d} \bmod n=10^{23} \bmod 55=10 m=cdmodn=1023mod55=10
(3)在消息生成签名,然后验证该签名。
s = m d m o d n = 1 0 23 m o d 55 = 10 s=m^{d} \bmod n=10^{23} \bmod 55=10 s=mdmodn=1023mod55=10
m = s e m o d n = 1 0 7 m o d 55 = 10 m=s^{e} \bmod n=10^{7} \bmod 55=10 m=semodn=107mod55=10
8.2 ECC计算
已知 E ( y 2 = x 3 − x − 2 ) E\left(y^{2}=x^{3}-x-2\right) E(y2=x3−x−2)是在有限域 F 11 F_{11} F11上的椭圆曲线。
(1)证明 P ( 1 , 3 ) P(1,3) P(1,3)、 Q ( 2 , 2 ) Q(2,2) Q(2,2)在该椭圆曲线上。
x 3 − x − 2 = 1 3 − 1 − 2 = − 2 m o d 11 = 9 x^{3}-x-2=1^{3}-1-2=-2 \bmod 11=9 x3−x−2=13−1−2=−2mod11=9,
y 2 = 3 2 = 9 y^{2}=3^{2}=9 y2=32=9,因此在椭圆曲线上;
x 3 − x − 2 = 2 3 − 2 − 2 = 4 x^{3}-x-2=2^{3}-2-2=4 x3−x−2=23−2−2=4,
y 2 = 2 2 = 4 y^{2}=2^{2}=4 y2=22=4,因此在椭圆曲线上。
(2)计算 P + Q P+Q P+Q。
λ = { y 2 − y 1 x 2 − x 1 , P ≠ Q 3 x 1 2 + a 2 y 1 , P = Q \lambda=\left\{\begin{array}{l}\frac{y_{2}-y_{1}}{x_{2}-x_{1}}, \quad P \neq Q \\ \frac{3 x_{1}^{2}+a}{2 y_{1}}, \quad P=Q\end{array}\right. λ={x2−x1y2−y1,P=Q2y13x12+a,P=Q, λ = y 2 − y 1 x 2 − x 1 = 2 − 3 2 − 1 = − 1 m o d 11 = 10 \lambda=\frac{y_{2}-y_{1}}{x_{2}-x_{1}}=\frac{2-3}{2-1}=-1 \bmod 11=10 λ=x2−x1y2−y1=2−12−3=−1mod11=10,
{ x 3 = λ 2 − x 1 − x 2 = 100 − 1 − 2 = 97 m o d 11 = 9 y 3 = λ ( x 1 − x 3 ) − y 1 = 10 ( 1 − 9 ) = − 80 m o d 11 = 8 \left\{\begin{array}{c}x_{3}=\lambda^{2}-x_{1}-x_{2}=100-1-2=97 \bmod 11=9 \\ y_{3}=\lambda\left(x_{1}-x_{3}\right)-y_{1}=10(1-9)=-80 \bmod 11=8\end{array}\right. {x3=λ2−x1−x2=100−1−2=97mod11=9y3=λ(x1−x3)−y1=10(1−9)=−80mod11=8, P + Q = ( 9 , 8 ) P+Q=(9,8) P+Q=(9,8)。
(3)计算 7 P 7P 7P。
7 P = 2 P + 2 P + ( 2 P + P ) 7 P=2 P+2 P+(2 P+P) 7P=2P+2P+(2P+P),
λ 1 = 3 x 1 2 + a 2 v 1 = 3 − 1 6 = 1 3 m o d 11 = 4 \lambda_{1}=\frac{3 x_{1}^{2}+a}{2 v_{1}}=\frac{3-1}{6}=\frac{1}{3} \bmod 11=4 λ1=2v13x12+a=63−1=31mod11=4, 2 P = P + P = ( 3 , 0 ) 2 P=P+P=(3,0) 2P=P+P=(3,0),
λ 2 = y 2 − y 1 x 2 − x 1 = 0 − 3 3 − 1 = − 3 2 m o d 11 = 4 \lambda_{2}=\frac{y_{2}-y_{1}}{x_{2}-x_{1}}=\frac{0-3}{3-1}=\frac{-3}{2} \bmod 11=4 λ2=x2−x1y2−y1=3−10−3=2−3mod11=4, 2 P + P = ( 1 , 8 ) 2 P+P=(1,8) 2P+P=(1,8),
λ 3 = y 2 − y 1 x 2 − x 1 = 8 − 0 1 − 3 = 8 − 2 m o d 11 = 7 \lambda_{3}=\frac{y_{2}-y_{1}}{x_{2}-x_{1}}=\frac{8-0}{1-3}=\frac{8}{-2} \bmod 11=7 λ3=x2−x1y2−y1=1−38−0=−28mod11=7, 2 P + ( 2 P + P ) = ( 1 , 3 ) 2 P+(2 P+P)=(1,3) 2P+(2P+P)=(1,3),
7 P = 2 P + 2 P + ( 2 P + P ) = ( 1 , 8 ) 7 P=2 P+2 P+(2 P+P)=(1,8) 7P=2P+2P+(2P+P)=(1,8)。