嘮叨
群里有人推了個(gè)項(xiàng)目TgWechat,微信端對(duì)端加密插件双仍,還特意@了我表示感謝枢希,受寵若驚。
隱私問(wèn)題其實(shí)說(shuō)了很久朱沃,有人說(shuō)微信其實(shí)一直看著我們聊天苞轿,具體是怎么樣的,咱也不知道逗物,咱也不敢問(wèn)吖...
誰(shuí)沒(méi)個(gè)秘密呢搬卒,或者和朋友開個(gè)玩笑,或者和伴侶聊點(diǎn)"家常"翎卓,如果這些內(nèi)容暴露在別人眼中契邀,確實(shí)有點(diǎn)尷尬,但畢竟咱也沒(méi)亂說(shuō)啥吖...
不過(guò)加密聊天也可有能會(huì)給某些人提供某些庇護(hù)失暴,導(dǎo)致出現(xiàn)一些安全問(wèn)題坯门,這也是一個(gè)大問(wèn)題...
所以你讓我說(shuō)微信到底要不要、能不能看我們聊天內(nèi)容逗扒,我確實(shí)也說(shuō)不好...
所以這里不討論這種問(wèn)題古戴,我只聊技術(shù)。
不是廣告~~
端對(duì)端加密( end-to-end encryption)矩肩,按我的簡(jiǎn)單理解就是A和B聊天现恼,A說(shuō)出去的話加密后,只有B能夠解開密文蛮拔,拿到明文述暂,這個(gè)過(guò)程中網(wǎng)絡(luò)傳輸過(guò)程全是加密的痹升。
2017年8月建炫,WhatsApp宣布對(duì)所有通訊信息進(jìn)行端到端加密,WhatsApp超過(guò)10億用戶的所有信息(包括文字疼蛾、照片肛跌、視頻、文件和語(yǔ)音信息)在默認(rèn)下都會(huì)進(jìn)行端到端加密,包括群聊衍慎。
“我們的想法很簡(jiǎn)單:當(dāng)你發(fā)送一條消息转唉,只有接收你消息的人或群組可以讀取,”WhatsApp創(chuàng)始人Jan Koum和Brian Acton表示稳捆,“沒(méi)有人可以看到這些消息赠法,網(wǎng)絡(luò)罪犯、黑客乔夯、政府人員甚至我們都不能看到這些消息砖织。端到端加密可確保WhatsApp通訊的隱私性,這有點(diǎn)像面對(duì)面的談話末荐〔啻浚”
看了這個(gè)新聞,知道我沒(méi)理解錯(cuò)甲脏。
其實(shí)我很早就寫了個(gè)小工具眶熬,就實(shí)現(xiàn)了端對(duì)端加密,而且還是對(duì)聊天工具透明的块请,也就是說(shuō)任何工具都能用娜氏。
哈哈,有點(diǎn)吹了...
小工具叫做Chisechat负乡,slogn是“獨(dú)屬于你和我的心靈密令”牍白,本來(lái)是我自用的小玩意,后來(lái)改了幾版之后才分享出來(lái)的抖棘。
功能很簡(jiǎn)單茂腥,A和B都用Chisechat設(shè)置一個(gè)一樣的密碼(私下協(xié)商,打電話或者當(dāng)面定好)切省,A把要發(fā)的內(nèi)容放到Chisechat加密最岗,再用聊天工具把加密內(nèi)容發(fā)給B,B拿到密文在Chisechat中解密查看朝捆。
看起來(lái)操作是不是挺麻煩般渡,其實(shí)還好,因?yàn)槲裔槍?duì)操作做了優(yōu)化芙盘,基本不影響聊天體驗(yàn)驯用,具體不說(shuō)了,感興趣的自行下載試用儒老,地址:https://anhkgg.com/Chisechat/蝴乔。
唯一讓我拿出來(lái)分享的原因是,我覺(jué)得自己做的挺好玩驮樊,讓我啰嗦說(shuō)道一下薇正。
Chisechat剛開始加密就是簡(jiǎn)單的xx算法+base64片酝,然后base64的內(nèi)容特征太明顯,也不好看挖腰,我就開始想怎么弄得更自然一點(diǎn)雕沿,后來(lái)增加了兩種模式。
- 增加base64中文版算法猴仑,也就是那些xx字符全換成我選的一些中文审轮,這樣編碼結(jié)果看起來(lái)自然多了
- 后來(lái)覺(jué)得選的字太簡(jiǎn)單也不好看,就靈光一閃想到粵語(yǔ)辽俗。是的断国,粵語(yǔ)詞看起來(lái)非常炫酷,非常好玩榆苞。
具體如何你們自行鑒賞一下:
OK稳衬,扯得有點(diǎn)多了,我的Chisechat其實(shí)一種粗糙且粗暴的一種解決方案坐漏,但夠用了薄疚。
研究
那WhatsApp是如何做的呢?不知道赊琳。
但是搜索的時(shí)候街夭,看到了這個(gè)必須擁有姓名的軟件Telegram,也就是TgWechat參考的躏筏。
Telegram中文名好像叫做“電報(bào)”板丽,很安全的感覺(jué)。Telegram號(hào)稱"這個(gè)世界上沒(méi)人能監(jiān)控我"趁尼。
Telegram 為一對(duì)一的聊天提供端對(duì)端加密埃碱,加密模式是基于256位對(duì)稱AES 加密,RSA 2048 的加密和Diffie-Hellman 的安全密鑰交換協(xié)議酥泞。協(xié)議極其優(yōu)秀砚殿,兼具數(shù)學(xué)和工程之美,不僅加密基礎(chǔ)非常完善芝囤,在工程上也很出色似炎,Telegram傳遞的消息為函數(shù),可擴(kuò)展性相當(dāng)強(qiáng)悯姊。
Telegram用的是RSA-dh+AES來(lái)完成的端對(duì)端加密羡藐。
按我一個(gè)密碼學(xué)渣的粗淺理解就是:
- A和B擁有相同的p、q悯许,通過(guò)RSA生成各自公鑰和私鑰仆嗦。
- 私鑰自行保存,公鑰通過(guò)網(wǎng)絡(luò)發(fā)送給對(duì)方岸晦。
- 互相拿到公鑰后欧啤,和自己的私鑰一起算出一個(gè)共享密鑰
- A和B算出密鑰是一樣的,這樣就是可以互相AES加密解密了启上。
具體算法大家自行查看其他更詳細(xì)的分享邢隧,比如對(duì)抗中間人攻擊(RSA簽名),爆破(p冈在、q很大)倒慧。
看一下這個(gè)實(shí)例更好理解:
//https://blog.csdn.net/andylau00j/article/details/82178351
1.愛(ài)麗絲與鮑伯協(xié)定使用p=23以及g=5.
2.愛(ài)麗絲選擇一個(gè)秘密整數(shù)a=6, 計(jì)算A = g^a mod p并發(fā)送給鮑伯。
A = 5^6 mod 23 = 8.
3.鮑伯選擇一個(gè)秘密整數(shù)b=15, 計(jì)算B = g^b mod p并發(fā)送給愛(ài)麗絲包券。
B = 5^15 mod 23 = 19.
4.愛(ài)麗絲計(jì)算s = B a mod p
19^6 mod 23 = 2.
5.鮑伯計(jì)算s = A b mod p
8^15 mod 23 = 2.
總的來(lái)說(shuō)纫谅,Telegram通過(guò)很牛逼的密鑰交換算法讓兩方擁有了一樣的密碼,然后別人不知道溅固,也找不到付秕,這樣子聊天內(nèi)容一加密,就只有對(duì)方能夠看到侍郭,如此完成了一個(gè)端對(duì)端加密的安全聊天通道询吴。
再扯一句,Telegram是通過(guò)協(xié)議和算法來(lái)完成協(xié)商密鑰亮元,而我的Chisechat是人工通過(guò)其他通道協(xié)商的密鑰猛计,殊途同歸,嘎嘎爆捞。
猜測(cè)
理論搞明白了奉瘤,現(xiàn)在想想TgWechat是怎么做的呢(這玩意加的vm太多了...別想逆了)?
其實(shí)也有兩種方式煮甥,一種類似于Chisechat的思路盗温,自行設(shè)置密碼,然后加密聊天成肘,一種就是像Telegram一樣通過(guò)協(xié)議和算法完成肌访。
這前面密碼的事都沒(méi)啥好說(shuō)的,關(guān)鍵在Wechat不是你自己的軟件艇劫,要怎么插入一些自己的東西進(jìn)去吼驶。
這里我也只是給出思路,猜測(cè)TgWechat是這么做的店煞。
- hook sendmsg蟹演、recvmsg。
- 密鑰協(xié)商階段顷蟀,檢查發(fā)送內(nèi)容和接收內(nèi)容是不是特定內(nèi)容酒请,是則通過(guò)算法生成公私鑰,公鑰sendmsg發(fā)送出去鸣个。
- recvmsg收到公鑰羞反,算出共享密鑰布朦。
- 后續(xù)發(fā)送和接收到內(nèi)容時(shí),通過(guò)加密算法先加解密昼窗,再發(fā)送出去或者顯示是趴。
OK,基本就是這樣了澄惊。
點(diǎn)擊原文體驗(yàn)Chisechat:https://anhkgg.com/Chisechat/
參考: