DH+RSA签名,解决内网向IDC单向通讯,交换密钥的问题(IDC密钥不落地,可以内置公钥)。
如果过程中有中间人,server使用私钥加密,发送给client,假设中间人拦截了,和server协商密钥,则client没有该密钥,
下面我们以Alice和Bob为例叙述Diffie-Hellman密钥交换的原理。
1,Diffie-Hellman交换过程中涉及到的所有参与者定义一个组,在这个组中定义一个大质数p,底数g。
2,Diffie-Hellman密钥交换是一个两部分的过程,Alice和Bob都需要一个私有的数字a,b。
下面是DH交换的过程图:
本图片来自wiki
下面我们进行一个实例
1.爱丽丝与鲍伯协定使用p=23以及g=5.
2.爱丽丝选择一个秘密整数a=6, 计算A = g^a mod p并发送给鲍伯。
A = 5^6 mod 23 = 8.
3.鲍伯选择一个秘密整数b=15, 计算B = g^b mod p并发送给爱丽丝。
B = 5^15 mod 23 = 19.
4.爱丽丝计算s = B a mod p
19^6 mod 23 = 2.
5.鲍伯计算s = A b mod p
8^15 mod 23 = 2.
一、理论化的表达方式
1、Alice与Bob确定两个大素数p和g,这两个数不用保密
2、Alice选择另一个大随机数a,并计算A如下:A=ga mod p
3、Alice将A发给Bob
4、Bob 选择另一个大随机数b,并计算B如下:B=gb mod p
5、Bob将B发给Alice
6、计算秘密密钥K1如下:K1=Ba mod p
7、计算秘密密钥K2如下:K2=Ab mod p
K1=K2,因此Alice和Bob可以用其进行加解密
二、数字化的表达方式
1、通信方Alice和通信方Bob约定g=5,p=23,g和p是公开的
2、Alice生成一个随机数a,a是保密的,如a=6
3、Alice计算g^a%p发送给Bob,g^a%p=5^6%23=8
4、Bob生成一个随机数b,b是保密的,如b=15
5、Bob计算g^b%p发送给Alice,g^b%p=5^15%23=19
6、Alice接收到g^b%p后,再使用保密的a,计算(g^b%p)^a%p=19^6%23=2
7、Bob接收到g^a%p后,再使用保密的b,计算(g^a%p)^b%p=8^15%23=2
8、这样通信方Alice和Bob得到一个相同的密钥:2
三、实践化的表达方式
1、Server Key Exchange消息
server端:用DH算法产生整数p,g,pubkey(即A=ga mod p),将这三个参数放到Server Key Exchange消息中。为了防止消息被恶意篡改,Server Key exchange消息中还要包含一个对公钥参数的签名signature。
Client端:收到此消息后,会把消息中的 p,g,pubkey(即A=ga mod p) 三个参数记录下来,有了这些,可以依据pubkey(即A=ga mod p)和 private(即b)计算出 pre-master。
2、Client Key Exchange消息
Client端:把产生的pubkey(即B=gb mod p) 放入Client Key Exchange消息中发给 server 。
server端:收到此消息后,会把消息中的pubkey(即B=gb mod p) 记录下来,可以依据pubkey(即B=gb mod p)和 private(即a)计算出 pre-master。
四、图形化表达方式
五,其他
RSA密钥交换
RSA密钥交换的过程十分直截了当。客户端生成预主密钥(46字节随机数),使用服务器公钥对其加密,将其包含在ClientKeyExchange消息中,最后发送出去。服务器只需要解密这条消息就能取出预主密钥。TLS使用的是RFC 3447定义的RSAES-PKCS-v1_5加密方案。
注意 因为RSA算法可以同时用于加密和数字签名,所以RSA密钥交换可以按照这种方式工作。其他流行的密钥类型,比如DSA(DSS)和ECDSA,只能用于签名。
RSA密钥交换的简单性也是它最大的弱点。用于加密主密钥的服务器公钥,一般会保持多年不变。任何能够接触到对应私钥的人都可以恢复主密钥,并构建相同的主密钥,从而危害到会哈安全性。
对目标的攻击并不需要实时进行,强大的对手可以制定长期行动。攻击者会揭露所有加密的流量,耐心等待有朝一日可以得到密钥。比如,计算机能力的进步使暴力破解成为可能;也可以通过法律强制力、政治高压、贿赂或强行进入使用该密钥的服务器取得密钥。只要密钥泄漏,就可以解密之前记录的所有流量了。
TLS中其他常见的密钥交换方式都不受这个问题的影响,被称为支持前向保密。使用那些密钥交换时,每个连接使用的主密钥相互独立。泄漏的服务器密钥可以用于冒充服务器,但不能用于追溯解密任何流量。
参考 :
https://blog.csdn.net/zbw18297786698/article/details/53609794
https: https://www.jianshu.com/p/39ad3e40f7af
密钥交换 https://www.jianshu.com/p/8837640221af
取模:https://blog.csdn.net/weixin_41679015/article/details/81093244