参考资料:
②基于HTTP在互联网传输敏感数据的消息摘要、签名与加密方案
其中比较重要的地方:
①签名消息(数字签名)
RSA除了进行非对称加密意外,实际应用中也可以用来为一个消息署名,也就是做数字签名。假如甲想给乙传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message digest),然后用她的密钥(private key)加密这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。乙获得这个消息后可以用甲的公钥解密这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么他就可以知道发信人持有甲的密钥,以及这个消息在传播路径上没有被篡改过。
②为了速度起见,https 连接只在建立连接时,使用服务器的公钥加密,这个阶段是为了交换一个共享密钥。
③通常公开钥算法用于相互验证,之后会建立session key(比如128位AES key)。后续交互的信息都是用session key和对称加密算法(比如AES)来加解密的,已经与证书本身和公钥密钥无关。因为公开密钥算法比对称密钥算法开销大很多。
根据以上资料,自己又整理了一下,方案如下:
方案一:客户端的AES密钥是随机生成,RSA加密不用于加密数据,而是用来加密AES的密钥。客户端与服务端的交互是短连接,每次交互都随机生成AES密钥,数据用AES加密,AES密钥用RSA加密,每次请求同时传递密文和加密后的AES密钥。
以上仅是个人的思想,如果有不对的地方还请多指摘。