RSA与 Diffie-Hellman密钥交换 的区别

3 篇文章 0 订阅

前言

最近查看jsch源码时,在理解DH密钥交换算法时,与RSA傻傻的分不清。

当时看源码犯了迷糊:既然已经有更先进的RSA,为什么还要使用DH密钥交换算法。

之后,看了一位日本人写的《图解密码技术》这本书时,才有所顿悟。

这里我做个笔记;

因为是笔记,所以估计只有我能看懂!哈哈

RSA

看到这个RSA,我第一时间想到的就是,经常在gitlabgithub或者码云上使用到的公钥私钥啦!

我以前只是知道id_rsaid_rsa.pub是利用这种算法生成的,具体的原理,并不清楚。

在这里,我不会去讲解什么原理,因为我觉得《图解密码技术》这本书,已经讲的很好了,我再讲会误导人。
RSA在那本书的第五章节)

id_rsa.pub是公钥里面到底存的是什么信息呢?私钥id_rsa存的又是什么?

看完那本书后,才知道,公钥id_rsa.pub里面其实主要存的就是两个数字E 和 N
当然书中并没有这样的话语,书中提到只有RSA加密和解密。
而私钥id_rsa里面存的是数字D 和 N

说明:

EEncryption(加密)的首字母,N是数字(Number)的首字母
D是解密(Decryption)的首字母。

而公钥和私钥具体有什么作用呢?

在此之前,我脑海的想法就是:

把代码放到GitHub上,所以我要把公钥放到它那里,这样就能上传代码啦!
所以觉得公钥和私钥 是认证功能。就类似于登录密码;只不过有了这个就不需要输入密码。

上面是我以前(没有看这本书之前)的理解。

其实上面理解只理解对了一部分,我先说下ssh公钥登录的流程。

1、客户端生成RSA公钥和私钥

2、客户端将自己的公钥存放到服务器

3、客户端请求连接服务器,服务器将一个随机字符串发送给客户端

4、客户端根据自己的私钥加密这个随机字符串之后再发送给服务器

5、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。

可以看出,公钥和私钥,最主要的作用其实是加密和解密!

RSA加密的原理是啥呢?

密文 = 明文E mod N

上面的意思就是:将明文和自己做E次乘法,然后将其结果除以N,求余数。这个余数就是密文。

解密原理:

明文 = 密文D mod N

上面的意思就是:将密文和自己做D次乘法,再对其结果除以N求余数,就可以得到明文。

所以我们平时用到的id_rsaid_rsa.pub就是用来加密和解密的!

注意:

细心点,我们打开这两个文件,会发现文件都是一堆很长的字符;
我个人的猜测,应该是对数字E和N,和数字D和N进行了加密!

生成密钥对步骤

1、求N

准备两个很大的质数p和q(目前是512比特大小的数,相当于155位十进制数字。)。

N = p * q.

2、求 L (只出现在,求E和D的过程中)
L是p-1和q-1的最小公倍数

3、求E

1<E < L
gcd(E,L)=1 E和L的最大公约数为1E和L互质)

4、求D

1<D<L
E * D mod L =1 要保证这个式子成立,就要保证EmodL=1成立。也就是步骤3

这样就求出了E,D,N。

Diffie-Hellman密钥交换

这一块的迷惑是,既然我们已经可以公钥密码算法RSA来达到我们的目的,为什么还要DH密钥交换

个人理解:

类似于答案不止一个这样的解题思路;我们可以使用公钥和私钥来解决密钥配送的问题;
通过DH密钥交换产生的共享密钥也可以解决密钥配送问题;

密钥配送问题:发送方,通过密钥加密明文后,接收方也需要该密钥来对密文进行解密。
RSA的解决思路是:公钥加密,私钥解密。

而DH密钥交换,是双方生成相同的密钥 — 即:共享密钥

虽然名字上叫密钥交换,但实际上,双方并没有真正交换密钥,而是通过计算生成出一个相同的共享密钥。因此,更确切叫法应该是Diffie-Hellman密钥协商

步骤:

1、Alice 像 Bob 发送两个质数P和G 。
p是非常大的质数,g是生成元。

2、Alice生成一个随机数A
A是1~p-2之间的整数。这个数只能Alice知道。

3、Bob生成一个随机数B
B是一个1~p-2之间的整数。这个是只能Bob知道。

4、Alice将G^A mod P 发送给B

5、Bob将G^B mod P 发送给A

6、Alice用Bob发过来的数计算A次方,并求mod P

G^A*B mod P

7、Bob用Alice发过来的数计算B次方并求mod P

G^A*B mod P

这样就计算出来共享密钥

说明:

上面的步骤中,A向B发送的是G^A mod P,这个为什么不直接发送G^A,而要mod P呢?
这是因为通过G^A 推算出A来是非常容易的,但是要根据G^A mod P推算出A则是非常难的。
这个问题称为有限群的离散对数问题。假设未来有快速计算出A的方法,那么这种方法将不可靠。目前是安全的!

总结

可以看出,RSA中的公钥和私钥DH密钥协商都是用来解决密钥配送问题的!

RSA 利用 最大公约数(互质)来求出 公钥和私钥。

DH密钥协商则是利用生成元来得到共享密钥

参考地址:

https://www.cnblogs.com/scofi/p/6617394.html

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
为了综合运用密码学机制设计和实现安全Diffie-Hellman密钥交换协议,可以采用以下步骤: 1. 确定密钥交换算法 在实现Diffie-Hellman密钥交换协议时,可以选择使用RSA、AES等常见的加密算法来保证通信的安全性。在选择加密算法时,需要考虑到算法的安全性和效率,并根据实际需求确定密钥长度等参数。 2. 生成公私钥 在进行密钥交换之前,需要生成公私钥对。对于RSA算法而言,可以通过openssl库进行公私钥的生成。在生成公私钥时,需要指定密钥长度、加密算法等参数。 3. 安全交换公钥 为了保证公钥的安全性,需要采用一定的加密机制对公钥进行加密。可以选择使用TLS/SSL等协议进行加密传输,或者使用对称加密算法对公钥进行加密。 4. 计算共享密钥 当双方都已经获得对方的公钥后,就可以开始计算共享密钥。双方分别使用自己的私钥和对方的公钥进行计算,得到相同的共享密钥。 5. 加密通信 在得到共享密钥后,可以使用对称加密算法对通信进行加密。可以选择使用AES等算法进行通信加密,确保通信的安全性。 综合运用密码学机制设计和实现安全Diffie-Hellman密钥交换协议需要综合考虑算法的安全性、效率和可靠性等因素,同时需要使用合适的加密算法和密钥长度等参数。在实现过程中,需要对加密机制进行充分测试,确保通信的安全性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鬼谣me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值