第五章 公钥密码—用公钥加密,用私钥解密
-
密钥(Yao)配送问题:密钥必须发送,但又不能发送(怕Eve窃听)
-
解决密钥配送问题的方法:
①事先共享密钥
②密钥分配中心
③ diffie-hellman密钥交换
④公钥密码 -
公钥密码中,密钥分为加密密钥(公钥,发送者用来加密)和解密密钥(私钥,接收者用来解密)。
解密密钥从一开始就是接收者自己保管的,因此只要将加密密钥发给发送者即可解决密钥配送问题。
•公钥和私钥是一一对应的,一对公钥和私钥统称为密钥对。
•公钥密码无法解决的问题:
①公钥认证。即需判断所得到的公钥是否正确合法。
②处理速度只有对称密码的几百分之一。 -
时钟运算
①加法
•时钟的指针向右旋转相当于做加法。
•并不是单纯的加法,而是除法求余数(mod)。
②减法
• "减去X "和" 加上Y "这两个运算是等价的。
③乘法
•乘法相当于加法的多次重复
• 7×4mod12 = 28mod12=4
④除法
•除法可看成乘法的逆运算。
•在“以12为模的世界,看谁有倒数:(0、1…11)x 囗 mod 12=1
得到1、5、 7、 11(其中5、7、 11和12的最大公约数是1,即和12互质)
⑤乘方
•乘方是乘法的多次重复,只要先进行一般的乘方运算之后再求余数
• 7 ^4 mod 12= (( 7x7mod12) x(7x7mod2))mod12
⑥对数
•乘方的逆运算称对数
•时钟运算中的对数称离散对数
•能快速求出离散对数的算法还没被发现 -
RSA加密
• RSA是一种公钥密码算法
• RSA可被用于公钥密码和数字签名•密文=明文E mod N ( RSA加密)
• E和N是RSA加密的密钥,即E(encryption)和N(number)的组合就是公钥。一般写成“公钥是(E,N)”或者“公钥是{ E , N } ”补充(离散对数):
离散对数(Discrete logarithm)是一种基于同余运算和原根的一种对数运算。因此先了解同余运算和原根。•同余运算
同余(congruence modulo,符号:≡):当两个整数除以同一个正整数,若得相同余数,则二整数同余。
两个整数 a, b,若它们除以正整数 m所得的余数相等,则称 a, b对于模 m同余,记作 a≡b(mod m),读作 a同余于b模m,或读作 a与 b关于模 m同余。
由对于模 n同余的所有整数组成的这个集合称为同余类。模3有三个同余类[0],[1],[2]•欧拉函数
定义:在数论中,对于正整数N,少于或等于N ([1,N]),且与N互质的正整数(包括1)的个数,记作φ(n)。φ函数的值:φ(x)=x(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))……(1-1/p(n)) 其中p(1),p(2)…p(n)为x的所有质因数;x是正整数; φ(1)=1(唯一和1互质的数,且小于等于1)。注意:每种质因数只有一个。
例如:φ(10)=10×(1-1/2)×(1-1/5)=4; 1 3 7 9 φ(30)=30×(1-1/2)×(1-1/3)×(1-1/5)=8; φ(49)=49×(1-1/7)=42;
欧拉函数的性质:
(1) p^k型欧拉函数:
若N是质数p(即N=p), φ(n)= φ( p )=p-p^(k-1)=p-1。
若N是质数p的k次幂(即N=p^ k),φ(n)=p^ k-p^ (k-1)=(p-1)p^(k-1)。(2)mn型欧拉函数
设n为正整数,以φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值。若m,n互质,φ(mn)=(m-1)(n-1)=φ(m)φ(n)。(3)特殊性质:
若n为奇数时,φ(2n)=φ(n)。
对于任何两个互质 的正整数a,n(n>2)有:a^φ(n)=1 mod n (恒等于)此公式即 欧拉定理
当n=p 且 a与素数p互质(即:gcd(a,p)=1)则上式有: a^(p-1)=1 mod n (恒等于)此公式即 费马小定理•阶
群元素的个数称为群的阶。
对欧拉函数,设m > 1 且 (a, m) = 1, 则使得 a^d≡1(mod m) 成立的最小的正整数d,称为a对模m的阶, 记为δm(a)。
如果m为质数,则 δm(a)=m−1。即群am−1≡1(mod m)的阶为m-1。•原根
对于两个正整数a和m互质,其最大公约数为1,即gcd(a,m)=1,简写为(a,m)=1. 满足 a^d≡1(mod m) 的最小的 d,称为a对m的阶,记为 δm(a),若δm(a)=φ(m),则称a是模 m的原根。
另一种定义,对(a,m)=1,即a,m互质. 如果a是m的原根,那么ai(modm)的结果两两不同,且有 1<a<m,1<i<m. 即,a^ i(mod m)≠a ^j(mod m) (m为质数),其中i≠j且i, j介于1至(m-1)之间,则a为m的原根。
简单的来说,如a是m的原根,那么a的1…(m-1)次幂mod m的结果一定互不相同。
性质:
1.a ^x≡a ^y(mod m) => x≡y(mod δm(a))
2.m(若存在原根)的原根数目为 ϕ(ϕ(m))
求解方式:
从2开始枚举,然后暴力判断a^m−1≡1(mod m)是否当且当指数为m-1的时候成立 而由于原根一般都不大,所以可以暴力得到.
例如: 设m= 7,则φ(7)等于6。φ(7)表示7的欧拉函数。 设a= 2,由于2^3=8≡1(mod 7),而3<6,所以 2 不是模 7 的一个原根。 设a= 3,由于3 ^1≡3(mod 7),3 ^2≡2(mod 7),3 ^3≡6(mod 7),3 ^4≡4(mod 7),3 ^5≡5(mod 7),3 ^6≡1(mod 7),所以 3 是模 7 的一个原根。●离散对数
离散对数(Discrete logarithm)是一种基于同余运算和原根的一种对数运算。而在实数中对数的定义x=logba是指对于给定的 a 和 b,有一个数 x,使得bx=a。相同地在任何群 G中可为所有整数 k定义一个幂数为 bk,而离散对数 logba是指使得 bk≡a(mod m) 整数 k。记为k=Indba定义:当模 m有原根时,设 a为模 m的一个原根,则当ak≡x(mod m)时: Indx≡k(modϕ(m)),此处的 Indx为 x以整数 a为底,模 ϕ(m)时的离散对数值。
示例:对模5,ϕ(5)=5−1=4.有个原根是2. 因为 20≡1,21≡2,22≡4,23≡3(mod5) Ind21=0,Ind22=1,Ind24=2,Ind23=3
-
RSA解密
RSA解密可用公式:明文=密文D mod N表示。
•数D和数N组合起来就是RSA的解密密钥,即私钥。
•D(是解密Decryption的首字母)不是随便什么数都可以的,它和数字E有着相当紧密的联系。
•RSA的加密和解密
|密钥对|公钥|数E和数N|
|:--------😐 -------------😐
| |私钥|数D和数N|
|:--------😐 -------------😐
| 加密 |密文=明文Emod N |
|:--------😐 -------------😐
| 解密 |明文=密文Dmod N | -
生成密钥对
•公钥:E,N 私钥:D,N
•求E、D、N这三个数就是生成密钥对。
•RSA密钥对生成步骤:
①求N
(1)先准备两个很大的质数p和q(由伪随机数生成器得到)
(2)这两个数相乘结果就是N,即N=p x q
②求L(L是仅在生成密钥对过程中使用的数)
L是p-1和q-1的最小公倍数,即L=lcm(p-1,q-1)
③求E
•1<E<L
•gcd(E,L)=1 (E和L的最大公约数为1,即E和L互质)
(1)通过伪随机数生成器在1<E<L的范围内生成E的候选数
(2)判断其是否满足gcd(E,L)=1的条件
④求D
•1<D<L
•E x D mod L=1
要保证存在满足条件的D,就需要保证E和L的最大公约数为1,简单来说,E x D mod L=1保证了对密文进行解密时能得到原来的密文。
8.对RSA的攻击
•通过密文求明文是一个求离散对数的问题,这是非常困难的。
•通过暴力破解来找出D,难度会随着D的长度增加而变大。
•通过E和N求出D。p和q不能被密码破译者知道,①但是N=pxq且公开,因此一旦发现了对大整数进行质因数分解的高效算法,RSA就能被破译;②如果伪随机数生成器的算法很差,破译者可能推测出p和q,进而破译RSA;③也可能有不需要对N进行质因数分解也可以由E和N求出D的方法。
•中间人攻击(主动攻击者Mallory混入发送者和接受者的中间,对发送者伪装成接收者,对接收者伪装成发送者)。虽不能破译RSA,但却是一种针对机密性的有效攻击。这种攻击不仅针对RSA,而是可以针对任何公钥密码。
-
其他公钥密码
•ElGamal方式。RSA利用了质因数分解的难度,ElGamal则利用了mod N下求离散对数的难度,有一缺点是经过加密的密文长度会变成明文的2倍。
•Rabin方式。利用的mod N下求平方根的困难度。
•椭圆曲线密码。通过将椭圆曲线上的特定点进行特殊的乘法运算实现,利用这种乘法的逆运算非常困难的特性。特点是所需的密钥长度比RSA短。 -
小结
•公钥密码能解决密钥配送问题。
•对称密码通过将明文转换为复杂的形式来保证机密性,公钥密码则基于数学上困难的问题来保证机密性。
•公钥密码的运行速度远远低于对称密码,在通信过程中,往往配合使用者两种密码,即用对称密码提高速度,用公钥密码解决密钥配送问题,这样的方式称为混合密码系统。