面试题答案
一键面试常见密钥交换算法及实现方式
- RSA密钥交换
- 实现方式:客户端生成一个随机的对称密钥(如AES密钥),使用服务器的RSA公钥对该对称密钥进行加密。然后将加密后的对称密钥发送给服务器。服务器收到后,使用自己的RSA私钥进行解密,从而得到客户端生成的对称密钥。这样双方就共享了一个对称密钥,后续通信可以基于该对称密钥进行对称加密。
- Diffie - Hellman(DH)密钥交换
- 实现方式:客户端和服务器首先协商一组公共参数,包括一个大质数p和一个生成元g。客户端选择一个随机的私钥a,计算A = g^a mod p,并将A发送给服务器。服务器选择一个随机的私钥b,计算B = g^b mod p,并将B发送给客户端。客户端收到B后,计算共享密钥K = B^a mod p;服务器收到A后,计算共享密钥K = A^b mod p。由于g^a^b mod p = g^b^a mod p,所以双方计算出的共享密钥K是相同的,以此完成密钥交换。
- 椭圆曲线Diffie - Hellman(ECDH)密钥交换
- 实现方式:与DH类似,但基于椭圆曲线密码学。客户端和服务器协商一条椭圆曲线及相关参数。客户端选择一个私钥a,计算其公钥A = a * G,其中G是椭圆曲线上的一个基点,并将A发送给服务器。服务器选择一个私钥b,计算其公钥B = b * G,并将B发送给客户端。客户端收到B后,计算共享密钥K = a * B;服务器收到A后,计算共享密钥K = b * A。由于a * b * G = b * a * G,双方得到相同的共享密钥,完成密钥交换。