数据加密 三种密钥交换算法详解(RSA& DHE& ECDHE)

一、RSA密钥交换算法

RSA算法流程文字描述如下:

(1)任意客户端对服务器发起请求,服务器首先发回复自己的公钥到客户端(公钥明文传输)。

(2)客户端使用随机数算法,生成一个密钥S,使用收到的公钥进行加密,生成C,把C发送到服务器。

(3)服务器收到C,使用公钥对应的私钥进行解密,得到S。

(4)上述交换步骤后,客户端和服务器都得到了S,S为密钥(预主密钥)。

图示如下:

        SSL协议中,服务器发送的公钥在SSL中是通过certificate报文发送的,certificate中的包含了公钥。C是通过Client key exchange报文发送的。

二、DHE密钥交换算法

DHE算法流程文字描述如下:

(1)客户端计算一个随机值Xa,使用Xa作为指数,即计算Pa = q^Xa mod p,其中q和p是全世界公认的一对值。客户端把Pa发送至服务器,Xa作为自己私钥,仅且自己知道。

(2)服务器和客户端计算流程一样,生成一个随机值Xb,使用Xb作为指数,计算

Pb = q^Xb mod p,将结果Pb发送至客户端,Xb仅自己保存。

(3)客户端收到Pb后计算Sa = Pb ^Xa mod p;服务器收到Pa后计算Sb = Pa^Xb mod p

(4)算法保证了Sa = Sb = S,故密钥交换成功,S为密钥(预主密钥)。

图示如下:

        SSL协议中,上图中DHE参数和Pb都是通过server key exchange发送给客户端,Pa通过client key exchange发送给服务器。server key exchange的结尾处需要使用服务器私钥对该报文本身进行签名,以表明自己拥有私钥(图中为了表明私钥没有参与密钥计算,没有画出,但不影响理解DHE算法)。

三、ECDHE密钥交换算

ECDHE算法流程文字描述如下:

(1)客户端随机生成随机值Ra,计算Pa(x, y) = Ra * Q(x, y),Q(x, y)为全世界公认的某个椭圆曲线算法的基点。将Pa(x, y)发送至服务器。

(2)服务器随机生成随机值Rb,计算Pb(x,y) = Rb * Q(x, y)。将Pb(x, y)发送至客户端。

(3)客户端计算Sa(x, y) = Ra * Pb(x, y);服务器计算Sb(x, y) = Rb *Pa(x, y)

(4)算法保证了Sa = Sb = S,提取其中的S的x向量作为密钥(预主密钥)。

图示如下:

        SSL协议中,上图中椭圆曲线名和Pb通过server key exchange报文发送;Pa通过client key exchange报文发送。

参考:TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别

————————————————
版权声明:本文为CSDN博主「阿湯哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ttyy1112/article/details/107770123

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一般情况下,使用RSA加密对称密钥AES的方式是: 1. 生成RSA公钥和私钥; 2. 使用RSA公钥来加密AES密钥k,得到密文c; 3. 将密文c和使用AES加密数据一起发送给接收方; 4. 接收方使用RSA私钥来解密密文c,得到AES密钥k; 5. 使用AES密钥k来解密数据。 具体操作流程如下: 1. 生成RSA公钥和私钥 在使用RSA加密前,需要先生成RSA公钥和私钥。一般情况下,可以使用openssl命令来生成RSA公钥和私钥,具体命令如下: ``` openssl genrsa -out private_key.pem 2048 openssl rsa -in private_key.pem -pubout -out public_key.pem ``` 其中,2048表示生成的RSA密钥长度,private_key.pem表示私钥文件名,public_key.pem表示公钥文件名。 2. 使用RSA公钥来加密AES密钥k 在使用RSA加密AES密钥k前,需要将AES密钥k转换成RSA加密的格式。一般情况下,可以使用PKCS#1 v1.5标准来进行转换,具体操作如下: ``` openssl rsautl -encrypt -inkey public_key.pem -pubin -in aes_key.txt -out aes_key.enc ``` 其中,public_key.pem表示RSA公钥文件名,aes_key.txt表示AES密钥k所在的文件名,aes_key.enc表示加密后的AES密钥k所在的文件名。 3. 将密文和使用AES加密数据一起发送给接收方 在将密文和使用AES加密数据一起发送给接收方前,需要先将密文和使用AES加密数据进行组合。一般情况下,可以使用tar命令来进行组合,具体命令如下: ``` tar -cvf data.tar aes_data.enc aes_key.enc ``` 其中,aes_data.enc表示使用AES加密后的数据所在的文件名,aes_key.enc表示使用RSA加密后的AES密钥k所在的文件名,data.tar表示组合后的文件名。 4. 接收方使用RSA私钥来解密密文c,得到AES密钥k 在接收方接收到数据后,需要先将密文和使用AES加密数据进行拆分。一般情况下,可以使用tar命令来进行拆分,具体命令如下: ``` tar -xvf data.tar ``` 其中,data.tar表示组合后的文件名。 接着,使用RSA私钥来解密密文c,得到AES密钥k。具体操作如下: ``` openssl rsautl -decrypt -inkey private_key.pem -in aes_key.enc -out aes_key.txt ``` 其中,private_key.pem表示RSA私钥文件名,aes_key.enc表示加密后的AES密钥k所在的文件名,aes_key.txt表示解密后的AES密钥k所在的文件名。 5. 使用AES密钥k来解密数据 在得到AES密钥k后,就可以使用该密钥来解密数据了。具体操作流程与普通的使用AES解密数据一样,这里不再赘述。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值