程序員對私密聊天的亂想

嘮叨

羣裏有人推了個項目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的內容特徵太明顯,也不好看,我就開始想怎麼弄得更自然一點,後來增加了兩種模式。

  1. 增加base64中文版算法,也就是那些xx字符全換成我選的一些中文,這樣編碼結果看起來自然多了
  2. 後來覺得選的字太簡單也不好看,就靈光一閃想到粵語。是的,粵語詞看起來非常炫酷,非常好玩。

具體如何你們自行鑑賞一下:

1.png

OK,扯得有點多了,我的Chisechat其實一種粗糙且粗暴的一種解決方案,但夠用了。

研究

那WhatsApp是如何做的呢?不知道。

但是搜索的時候,看到了這個必須擁有姓名的軟件Telegram,也就是TgWechat參考的。

Telegram中文名好像叫做“電報”,很安全的感覺。Telegram號稱"這個世界上沒人能監控我"。

Telegram 爲一對一的聊天提供端對端加密,加密模式是基於256位對稱AES 加密,RSA 2048 的加密和Diffie-Hellman 的安全密鑰交換協議。協議極其優秀,兼具數學和工程之美,不僅加密基礎非常完善,在工程上也很出色,Telegram傳遞的消息爲函數,可擴展性相當強。

Telegram用的是RSA-dh+AES來完成的端對端加密。

按我一個密碼學渣的粗淺理解就是:

  1. A和B擁有相同的p、q,通過RSA生成各自公鑰和私鑰。
  2. 私鑰自行保存,公鑰通過網絡發送給對方。
  3. 互相拿到公鑰後,和自己的私鑰一起算出一個共享密鑰
  4. 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是這麼做的。

  1. hook sendmsg、recvmsg。
  2. 密鑰協商階段,檢查發送內容和接收內容是不是特定內容,是則通過算法生成公私鑰,公鑰sendmsg發送出去。
  3. recvmsg收到公鑰,算出共享密鑰。
  4. 後續發送和接收到內容時,通過加密算法先加解密,再發送出去或者顯示。

OK,基本就是這樣了。

點擊原文體驗Chisechat:https://anhkgg.com/Chisechat/

參考:

  1. WhatsApp宣佈對所有通訊信息進行端到端加密
  2. 全球沒人能監控的聊天軟件也要死了 — Telegram
  3. DH祕鑰交換算法
  4. TgWechat
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章