探討一下IM加密聊天的實現方案
在此之前引入“對稱加密”和“非對稱加密的概念”
【對稱加密】,簡單來講 只需要一個祕鑰就可以對數據進行加密,對稱加密相對非對稱加密的速度非常快。
若userA給userB發送一斷數據,若用對稱加密方案,即爲
即實現了簡單的對稱加密,
但是若在傳輸過程中收到了攻擊,且破解了key那麼跟明文傳輸就沒有什麼區別了。
那怎麼辦呢?我們先看下非對稱加密
【非對稱加密】需要一堆公私鑰,由公鑰加密,私鑰解密,私鑰加簽,公鑰驗籤。但是加密效率遠遠低於對稱加密,所以並不適合連續的且對數據量大信息進行加密。
所以一般採用非對稱加密結合對稱加密的形式
大致流程
1、userA 得到userB的公鑰 b_pub,隨機對稱祕鑰key
2、用b_pub加密key + key加密原文,作爲密文傳輸給userB
3、userB將密文截取,用b_pri對對應密文進行解密,得到userA隨機生成的key
4、用key解密出對應密文得到原文
但是,若一個攻擊者C,劫持了A與B之間的通信,且有B_pub,就可以把自己僞裝了一個A,給B發送數據。
因爲是用B_pub加密的,所以B不知道是誰發來的。所以還是有風險的。
那麼怎麼辦呢?非對稱加密還有一個加簽驗證籤功能
我們在發送的過程中,用userA的a_pri對整體數據進行加簽。證明是userA發送的。B收到的時候用a_pub進行驗籤。若驗籤通過,則說明是A發送的。在非對稱加密過程中 私鑰是永遠不會對外開放的,只是本地擁有。
屆此,我們做了一個比較安全的加密傳輸方案。有興趣的可瞭解https的加密策略,與之有類似。