非对称加密过程详解(基于RSA非对称加密算法实现)

⾮对称加密过程详解(基于RSA⾮对称加密算法实现)
1、⾮对称加密过程:
假如现实世界中存在A和B进⾏通讯,为了实现在⾮安全的通讯通道上实现信息的保密性、完整性、可⽤性(即信息安全的三个性质),A和B约定使⽤⾮对称加密通道进⾏通讯,具体过程如下:
说明:
国内⽬前使⽤双证书体系,即⽤户同时拥有签名证书、加密证书两张证书。签名证书是⽤户的⾝份认证,是和CA协商的结果,可⽤于对⽤户A的⾝份验证;加密证书是⽤来对信息进⾏加密,是⽤户和秘钥管理系统⽣成。我们在这⾥假设都适合CA进⾏交互。
①:此过程是⽣成公钥私钥的过程,我们这⾥基于RSA算法实现,RSA算法的详细说明在后⾯讲解。
②:此过程是CA对⽤户的⾝份进⾏签名,⽬的验证A的⾝份。这样在A与B通讯的过程中,A可以把⾃⼰的数字签名发给B,B得到此数字签名后就可以通过CA的公钥对其进⾏解密并进⾏⾝份验证,具体过程在后⾯讲解。
③④同理。
⑤:A对要传输的信息进⾏加密并传输,B接受到以后进⾏解密的过程。
2、RSA算法:
RSA原理:RSA算法基于⼀个⼗分简单的数论事实:将两个⼤素数相乘⼗分容易,但是想要对其乘积进⾏因式分解却极其困难,因此可以将乘积公开作为加密密钥。
算法:
(1)选择两个不同的⼤素数p和q;
(2)计算乘积n=pq和Φ(n)=(p-1)(q-1);
(3)选择⼤于1⼩于Φ(n)的随机整数e,使得gcd(e,Φ(n))=1;注:gcd即最⼤公约数。
(4)计算d使得d*e=1mod Φ(n);注:即d*e mod Φ(n) =1。
(5)对每⼀个密钥k=(n,p,q,d,e),定义加密变换为Ek(x)=xe mod n,解密变换为Dk(x)=yd mod n,这⾥x,y∈Zn;
(6)p,q销毁,以{e,n}为公开密钥,{d,n}为私有密钥。
实例:
1. 假设p = 3、q = 11(p,q都是素数即可。),则N = pq = 33;
2. r =Φ(n)= (p-1)(q-1) = (3-1)(11-1) = 20;
3. 根据gcd(e,Φ(n))=1,即gcd(e,20)=1,令e=3,则,d = 7。(两个数交换⼀下也可以。)  到这⾥,公钥和密钥已经确定。公钥为(N, e) = (33, 3),密钥为(N, d) = (33, 7)。
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38public class SimpleRSA {
/**
* 加密、解密算法
* key 公钥或密钥
* message 数据
*
*/
public static long rsa(int baseNum, int key, long message){
if(baseNum < 1|| key < 1){
return0L;
}
//加密或者解密之后的数据
long rsaMessage = 0L;
//加密核⼼算法
rsaMessage = und(Math.pow(message, key)) % baseNum;        return rsaMessage;
}
public static void main(String[] args){
//基数
int baseNum = 3* 11;
/
/公钥
int keyE = 3;
//密钥
int keyD = 7;
//未加密的数据
long msg = 24L;
//加密后的数据
long encodeMsg = rsa(baseNum, keyE, msg);
//解密后的数据
long decodeMsg = rsa(baseNum, keyD, encodeMsg);
System.out.println("加密前:"+ msg);
System.out.println("加密后:"+ encodeMsg);
System.out.println("解密后:"+ decodeMsg);
}
}
结果:这样CA就保存了⽤户的公钥,其他任何⼈想法送给此⽤户信息,只需查询词公钥,加密发送即可,⽽此⽤户⽤只有⾃⼰知道的秘钥解密。
3、签名证书:
签名证书的⽤途:加⼊有A⽤户向B⽤户发送了信息“A love you”,B接收到之后怎么确定就是A发送的呢(因为中间⼈攻击中,假如C截获了A发送的信息后,改成“C love you”,B是⽆法确定这两个信息的发送者,因他她们都同样⽤B的⼯要加密),于是产⽣了签名证书技术。
签名证书是由CA⽤⾃⼰的私钥对⽤户的信息进⾏加密,并把发给⽤户的,⽤户可以在发送信息的过程中附加上⾃⼰的签名证书,让接受者验证信息的来源。当接受者接受到发送者的签名证书后即可⽤ca的公钥解密验证发送者的⾝份信息。
4、信息传输:
  过程:
A. Alice 准备好要传送的数字信息(明⽂)。
B. Alice 对数字信息进⾏哈希(hash)运算,得到⼀个信息摘要。
C. Alice ⽤⾃⼰的私钥(SK)对信息摘要进⾏加密得到Alice 的数字签名,并将其附在数字信息上。
D. Alice ⽤Bob 的公钥(PK)对刚才随机产⽣的加密密钥进⾏加密,将加密后的密⽂传送给Bob
E. Bob 收到Alice 传送过来的密⽂,⽤⾃⼰的私钥(SK)对密⽂解密。
F. Bob ⽤Alice 的公钥(PK)对Alice 的数字签名进⾏解密,得到信息摘要。
G. Bob ⽤相同的hash 算法对收到的明⽂再进⾏⼀次hash 运算,得到⼀个新的信息摘要。
H. Bob 将收到的信息摘要和新产⽣的信息摘要进⾏⽐较,如果⼀致,说明收到的信息没有被修改过。
采⽤数字签名,能完成这些功能:
(1)确认信息是由签名者发送的;
(2)确认信息⾃签名后到收到为⽌,未被修改过;
(3)签名者⽆法否认信息是由⾃⼰发送的。
但是上述过程存在问题,例如有⽤户C窃取A的电脑信息,把B的公钥修改成了⾃⼰的公钥,A⽤此公钥加密信息发给B,C在中间截获这个数据就可以获取这些私密信息。怎么应对这种情况呢?签名证书就派上⽤场了。
证书中⼼⽤⾃⼰的私钥,对每⼀个⽤户的、的公钥和⼀些相关信息⼀起加密,⽣成"数字证书"(Digital Certificate)。发送者在发送信息之前如果想核对接受者的公钥,只需⽤CA的公钥对B的签名证书进⾏解密确认即可。

本文发布于:2024-09-21 00:46:34,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/91012.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信息   加密   证书
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议