參考資料:
②基于HTTP在互聯(lián)網(wǎng)傳輸敏感數(shù)據(jù)的消息摘要都弹、簽名與加密方案
其中比較重要的地方:
①簽名消息(數(shù)字簽名)
RSA除了進行非對稱加密意外计寇,實際應(yīng)用中也可以用來為一個消息署名锣杂,也就是做數(shù)字簽名。假如甲想給乙傳遞一個署名的消息的話番宁,那么她可以為她的消息計算一個散列值(Message digest)元莫,然后用她的密鑰(private key)加密這個散列值并將這個“署名”加在消息的后面。這個消息只有用她的公鑰才能被解密蝶押。乙獲得這個消息后可以用甲的公鑰解密這個散列值踱蠢,然后將這個數(shù)據(jù)與他自己為這個消息計算的散列值相比較。假如兩者相符的話棋电,那么他就可以知道發(fā)信人持有甲的密鑰茎截,以及這個消息在傳播路徑上沒有被篡改過。
②為了速度起見赶盔,https 連接只在建立連接時企锌,使用服務(wù)器的公鑰加密,這個階段是為了交換一個共享密鑰于未。
③通常公開鑰算法用于相互驗證撕攒,之后會建立session key(比如128位AES key)。后續(xù)交互的信息都是用session key和對稱加密算法(比如AES)來加解密的烘浦,已經(jīng)與證書本身和公鑰密鑰無關(guān)抖坪。因為公開密鑰算法比對稱密鑰算法開銷大很多。
根據(jù)以上資料闷叉,自己又整理了一下擦俐,方案如下:
方案一:客戶端的AES密鑰是隨機生成,RSA加密不用于加密數(shù)據(jù)握侧,而是用來加密AES的密鑰捌肴。客戶端與服務(wù)端的交互是短連接藕咏,每次交互都隨機生成AES密鑰状知,數(shù)據(jù)用AES加密,AES密鑰用RSA加密孽查,每次請求同時傳遞密文和加密后的AES密鑰饥悴。
以上僅是個人的思想,如果有不對的地方還請多指摘。