嘮叨
群裡有人推了個專案TgWechat,微信端對端加密外掛,還特意@了我表示感謝,受寵若驚。
隱私問題其實說了很久,有人說微信其實一直看著我們聊天,具體是怎麼樣的,我們也不知道,我們也不敢問吖...
誰沒個祕密呢,或者和朋友開個玩笑,或者和伴侶聊點"家常",如果這些內容暴露在別人眼中,確實有點尷尬,但畢竟我們也沒亂說啥吖...
不過加密聊天也可有能會給某些人提供某些庇護,導致出現一些安全問題,這也是一個大問題...
所以你讓我說微信到底要不要、能不能看我們聊天內容,我確實也說不好...
所以這裡不討論這種問題,我只聊技術。
不是廣告~~
端對端加密( end-to-end encryption),按我的簡單理解就是A和B聊天,A說出去的話加密後,只有B能夠解開密文,拿到明文,這個過程中網路傳輸過程全是加密的。
2017年8月,WhatsApp宣佈對所有通訊資訊進行端到端加密,WhatsApp超過10億使用者的所有資訊(包括文字、照片、視訊、檔案和語音資訊)在預設下都會進行端到端加密,包括群聊。
“我們的想法很簡單:當你傳送一條訊息,只有接收你訊息的人或群組可以讀取,”WhatsApp創始人Jan Koum和Brian Acton表示,“沒有人可以看到這些訊息,網路罪犯、黑客、政府人員甚至我們都不能看到這些訊息。端到端加密可確保WhatsApp通訊的隱私性,這有點像面對面的談話。”
看了這個新聞,知道我沒理解錯。
其實我很早就寫了個小工具,就實現了端對端加密,而且還是對聊天工具透明的,也就是說任何工具都能用。
哈哈,有點吹了...
小工具叫做Chisechat,slogn是“獨屬於你和我的心靈密令”,本來是我自用的小玩意,後來改了幾版之後才分享出來的。
功能很簡單,A和B都用Chisechat設定一個一樣的密碼(私下協商,打電話或者當面定好),A把要發的內容放到Chisechat加密,再用聊天工具把加密內容發給B,B拿到密文在Chisechat中解密檢視。
看起來操作是不是挺麻煩,其實還好,因為我針對操作做了優化,基本不影響聊天體驗,具體不說了,感興趣的自行下載試用,地址:https://anhkgg.com/Chisechat/。
唯一讓我拿出來分享的原因是,我覺得自己做的挺好玩,讓我囉嗦說道一下。
Chisechat剛開始加密就是簡單的xx演算法+base64,然後base64的內容特徵太明顯,也不好看,我就開始想怎麼弄得更自然一點,後來增加了兩種模式。
- 增加base64中文版演算法,也就是那些xx字元全換成我選的一些中文,這樣編碼結果看起來自然多了
- 後來覺得選的字太簡單也不好看,就靈光一閃想到粵語。是的,粵語詞看起來非常炫酷,非常好玩。
具體如何你們自行鑑賞一下:
OK,扯得有點多了,我的Chisechat其實一種粗糙且粗暴的一種解決方案,但夠用了。
研究
那WhatsApp是如何做的呢?不知道。
但是搜尋的時候,看到了這個必須擁有姓名的軟體Telegram,也就是TgWechat參考的。
Telegram中文名好像叫做“電報”,很安全的感覺。Telegram號稱"這個世界上沒人能監控我"。
Telegram 為一對一的聊天提供端對端加密,加密模式是基於256位對稱AES 加密,RSA 2048 的加密和Diffie-Hellman 的安全金鑰交換協議。協議極其優秀,兼具數學和工程之美,不僅加密基礎非常完善,在工程上也很出色,Telegram傳遞的訊息為函式,可擴充套件性相當強。
Telegram用的是RSA-dh+AES來完成的端對端加密。
按我一個密碼學渣的粗淺理解就是:
- A和B擁有相同的p、q,通過RSA生成各自公鑰和私鑰。
- 私鑰自行儲存,公鑰通過網路傳送給對方。
- 互相拿到公鑰後,和自己的私鑰一起算出一個共享金鑰
- A和B算出金鑰是一樣的,這樣就是可以互相AES加密解密了。
具體演算法大家自行檢視其他更詳細的分享,比如對抗中間人攻擊(RSA簽名),爆破(p、q很大)。
看一下這個例項更好理解:
//https://blog.csdn.net/andylau00j/article/details/82178351
1.愛麗絲與鮑伯協定使用p=23以及g=5.
2.愛麗絲選擇一個祕密整數a=6, 計算A = g^a mod p併傳送給鮑伯。
A = 5^6 mod 23 = 8.
3.鮑伯選擇一個祕密整數b=15, 計算B = g^b mod p併傳送給愛麗絲。
B = 5^15 mod 23 = 19.
4.愛麗絲計算s = B a mod p
19^6 mod 23 = 2.
5.鮑伯計算s = A b mod p
8^15 mod 23 = 2.
總的來說,Telegram通過很牛逼的金鑰交換演算法讓兩方擁有了一樣的密碼,然後別人不知道,也找不到,這樣子聊天內容一加密,就只有對方能夠看到,如此完成了一個端對端加密的安全聊天通道。
再扯一句,Telegram是通過協議和演算法來完成協商金鑰,而我的Chisechat是人工通過其他通道協商的金鑰,殊途同歸,嘎嘎。
猜測
理論搞明白了,現在想想TgWechat是怎麼做的呢(這玩意加的vm太多了...別想逆了)?
其實也有兩種方式,一種類似於Chisechat的思路,自行設定密碼,然後加密聊天,一種就是像Telegram一樣通過協議和演算法完成。
這前面密碼的事都沒啥好說的,關鍵在Wechat不是你自己的軟體,要怎麼插入一些自己的東西進去。
這裡我也只是給出思路,猜測TgWechat是這麼做的。
- hook sendmsg、recvmsg。
- 金鑰協商階段,檢查傳送內容和接收內容是不是特定內容,是則通過演算法生成公私鑰,公鑰sendmsg傳送出去。
- recvmsg收到公鑰,算出共享金鑰。
- 後續傳送和接收到內容時,通過加密演算法先加解密,再傳送出去或者顯示。
OK,基本就是這樣了。
體驗Chisechat:https://anhkgg.com/Chisechat/
參考:
- WhatsApp宣佈對所有通訊資訊進行端到端加密
- 全球沒人能監控的聊天軟體也要死了 — Telegram。
- DH祕鑰交換演算法
- TgWechat
歡迎關注:漢客兒
2020安全開發者峰會(2020 SDC)議題徵集 中國.北京 7月!