文章目录
公钥密码基本概念
多对一加密模式
双钥密码体制(公钥密码体制)的基本原理是陷门单向函数。
陷门单向函数:设f是一个函数,t是一个与f有关的参数,对任意给定的输入x,计算y=f(x)是容易的。如果当不知道参数t时,计算f的逆函数是困难的,即计算x使得y=f(x)是困难的;但当知道参数t时,计算f的逆函数是容易的,则称f是一个陷门单向函数,参数t称为陷门。
用途:密钥交换、数据加解密、签名认证。
公钥密码RSA
RSA的密钥生成
选择两个大的素数p和q。
选择两个正整数e和d,满足:ed是(p-1)(q-1)的倍数加1,即e·d=1(mod (p-1)(q-1))
计算n=p·q。
Bob的公钥是(n,e),对外公布。私钥是d ,自己私藏。
(p,q),可以是Bob的另一部分私钥,也可以是对所有人(包括Bob )都保密的。
基本RSA的加密过程
Alice欲发送明文m给Bob,其中0<m<n 。Alice用Bob的公钥(n,e),计算密文c=me(mod n)。
基本RSA的解密过程
Bob 收到密文c后,用自己的公钥(n,e)和私钥d,计算
cd(mod n)=med(mod n)=m。
基本RSA的安全性
攻击者Eve已经知道了Bob的公钥是(n,e)。
如果Eve还知道(p,q),则他容易知道Bob的私钥d。此时Eve只需要用推广的辗转相除法寻找d,满足e·d=1(mod (p-1)(q-1))。
由n的值求解(p,q)的值,即求解n的大整数分解n=pq,是一个公认的数学难题(虽然至今并没有证明),暂时还没有有效的算法。
基本RSA的一个安全性漏洞
设攻击者Eve获得了两组明文/密文对(m1,c1),(m2,c2)。
如果新截获了一个密文c,并发现:
•c=c1·c2 (mod n),则c所对应的明文一定是m=m1·m2 (mod n);
•c=c1/c2 (mod n),则c所对应的明文一定是m=m1/m2 (mod n);
•c=c2/c1 (mod n),则c所对应的明文一定是m=m2/m1 (mod n)。
基本RSA的这个安全性漏洞称为可传递性
。
为了解决这个问题,后面引入了Hash函数。
公钥密码Rabin
Rabin的密钥生成
选择两个大的素数p和q,要求p和q都是4的倍数加3。
计算n=p·q。
Bob的公钥是n,对外公布。私钥是(p,q),自己私藏。
Rabin的加密过程
Alice欲发送明文m给Bob,其中0<m<n
Alice用Bob的公钥n,计算:c=m2(mod n)
c为密文。
Rabin的解密过程
PS:这部分我看PPT上写的有些玄乎,便自己查找总结了。建议对着PPT再过一过,防止我总结的有问题。
Bob收到密文c后,需要求出明文m。
此时有m2 = c mod n ,可以拆为m2 = c mod p 和m2 = c mod q 。
根据等式构造出:
1、r2 = m2 = c mod p ,即r = m = c1/2 mod p
2、s2 = m2 = c mod q ,即s = m = c1/2 mod q
联立上述两个等式,得到:m = r mod p,m = s mod q。
这两个式子用中国剩余定理可以解出唯一解。
计算r = ± c(p+1)/4 mod p,s = ± c(p+1)/4 mod q。
依次代入r、s的四个解,即可得到m。
最后,要判断哪一个根是真正的明文。一般,真正的明文都具有语言含义,而其它的根则是没有语言含义的“乱码课文”。
Rabin的安全性原理
即使截获密文c,已知n,也知道明文满足的方程,但仍然无法求出。
因为不知道n=p·q,无法计算四个根。
换句话说,求n的分解n=p·q是大数分解问题,和RSA类似。
公钥密码ElGamal
ElGamal的密钥生成
选择一个大的素数p。
选择g,1<g<p。
选择x,1<x<p-1。
计算y=gxmod p。
Bob的公钥是(p, g, y),对外公布。
Bob的私钥是x,自己私藏。
ElGamal的加密过程
PS:这块和解密两部分同样是PPT玄乎,所以我从信安密码实验的ElGamal部分总结了。
Alice随机选取一个整数k,1<k<p-2。
计算C1 = gk (mod p),C2 = m·(gx)k (mod p)
将密文(C1,C2)发送给Bob。
ElGamal的解密过程
Bob计算V = C1x (mod p),则m = C2·V-1 (mod p)。
ElGamal的加密性原理
特点:密文由明文和所选随机数k来定,因而是非确定性加密,一般称之为随机化加密,对同一明文由于不同时刻的随机数k不同而给出不同的密文。代价是使数据扩展一倍。
安全性: 基于离散对数的困难性。
椭圆曲线上加法的计算
椭圆曲线的一般方程为:
E: = {(x, y)|y2 + a1·x·y + a3y = x3 + a2·x2 + a4·x + a6}
设P1 = (x1, y1)为曲线上的点,则-P1 = (x1, -y1-a1·x1-a3)。
设P1 = (x1, y1),P2 = (x2, y2)为曲线上的点,计算P3 = P1 + P2,公式如下:
x3 = λ2 + a1·λ -a2 -x1 -x2
y3 = λ·(x1 - x3) - a1·x3 - y1 - a3
其中λ计算如下:
当x1≠x2时,λ = (y2-y1) / (x2-x1);
当x1=x2时,λ = (3·x2+2·a2·x+a4-a1·y1) / (2·y1+a1·x+a3)