非对称加密算法

非对称加密算法
RSA 基于大素数分解难题的加密算法
取两个大素数p q,N=p*q,则根据欧拉定理的各种延伸,得f(N)=(p-1)(q-1)=pq-p-q+1

利用 定理为:

其中pi为不同的素因子,ei为pi素因子的个数


找到两个数e和d,满足e*d mod(f(N))=1 (可以先确定e,然后用计算乘法逆元的方式计算d)
则RSA加密算法的公钥产生,为(e,N),私钥为(d,N) (难以从公钥推出私钥,因为大素数分解困难,反之亦然)

数据加解密:
对于信息M,加密步骤为C=M^d mod N,解密步骤为 M=C^e mod N

数据签名
对于信息M,签名步骤为C=M^e mod N,验证步骤为 M=C^d mod N

证明RSA算法正确性:


(1) 若M,N互质,则根据欧拉定理,可得正确性
(2) 

Diff-Hellman 加密 基于离散对数难解问题
确定一个数P,并求出P的原根g(原根:如果一个数g的1次方到P-1次方,每一个结果模P形成的集合,与1,2,……,P-1形成的集合相同,则这个数是P的原根)
对于A,B两个用户,分别随机Xa,Xb,范围1~P-1,当作用户的私钥
公钥为Ya,Yb,计算方法为Y=g^X

用户之间交换公钥,则二者可分别计算出K=Yb^Xa=Ya^Xb

这种加密方法可以用于协商密钥,但是容易在公钥交换过程中容易被中间人截获替换,达到攻击的目的,所以这只是一种有启发意义的加密方法

Elgamal 数据加密 受Diff-Hellman 加密 基于离散对数难解问题
与Diff-Hellman 加密类似,需要P,g,计算私钥X,公钥Y

此外,用户再随机一个数K,范围1~P-1,并且gcd(K,P)=1  
计算 Z=Y'^K mod P (Y'为对方公钥)  
加密方法:
设明文为M,则密文包括C1,C2,
C1=g^K mod P
C2=ZM mod P

解密方法:
首先计算Z,
Z=C1^X mod P = g^K*X mod P = Y^K mod P (X为自己的私钥,Y为自己分享出去的公钥,在加密方计算时用到了)
M=(Z^-1) *C2 mod p  (K^-1 为有限域P下的K的乘法逆元)
1
2
3
4
5
6
7
8
9
10
11
Elgamal 数字签名 受Diff-Hellman 加密 基于离散对数难解问题
与Elgamal 数据加密 类似,需要P,g,,K,计算私钥X,公钥Y

签名计算:
r=g^K mod p,
s=(K^-1)(m-Xr) mod (P-1)  (m为需要签名的信息)

验证签名计算:
V1=g^m mod P (因为是验证签名,所以信息m是一起传输过来的,但是不知道m是否为正确信息,所以需要签名验证)
V2=y^r * r^s (mod P)
若V1==V2,则验证通过
————————————————
版权声明:本文为CSDN博主「lqadam」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lqadam/article/details/73744084

你可能感兴趣的:(加解密)