程序员对私密聊天的乱想

2019-09-28 10:52:41 +08:00
 anhkgg

唠叨

群里有人推了个项目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. 后来觉得选的字太简单也不好看,就灵光一闪想到粤语。是的,粤语词看起来非常炫酷,非常好玩。

具体如何你们自行鉴赏一下:

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. TgWechataa
10189 次点击
所在节点    程序员
59 条回复
littlespider89
2019-09-28 11:26:30 +08:00
感觉非对称加密好一些,万一你们在语音约定暗号的时候被偷听了呢😂
xixibb
2019-09-28 11:35:48 +08:00
写了这么多,其实发现没卵用 。。。赶紧搬砖才是硬道理。。。
x86
2019-09-28 11:49:39 +08:00
顶多敏感词检测,人家吃饱了天天看你个搬砖仔,看也是看有背景的,而一般人只有背影...
我要是老大哥,检测到异常(加密这种)直接拘了你不跟你废话
neroxps
2019-09-28 11:58:56 +08:00
人分享个技术文章,为啥要说各种晦气话???

程序员为何要打击程序员的技术激情???
Raymon111111
2019-09-28 12:09:51 +08:00
端到端加密不合法唉
ech0x
2019-09-28 12:17:59 +08:00
@Raymon111111 哪里不合法了?
geelaw
2019-09-28 12:18:59 +08:00
您似乎没有弄明白 RSA 和 DH 的关系。

您链接文章里似乎暗示 Z_p^* 里 decisional Diffie-Hellman 成立——这是不对的,在 Z_p^* 里 DDH 不成立,用整数取模计算的时候应该选择安全质数 p=2q+1,并使用 Z_p^* 的 q 阶子群(因此使用 23、5 作为例子也是误导性的)。以及对困难性的理解也不太对,因为计算 a、b 没有什么用,攻击者需要考虑的是如何计算 g^(ab)——这并不非要计算 a、b。

另外您也没有公布您使用的是什么(对称)加密算法,通常来说这样默认安全性是 0。
Raymon111111
2019-09-28 12:24:31 +08:00
@ech0x 电报是怎么被封的?
agagega
2019-09-28 12:33:15 +08:00
@neroxps
还有,有人贡献时间给什么文档做中文翻译,就会有人出来说不会英语当什么程序员。呵呵呵,这种人真的烦。
dimlau
2019-09-28 12:38:36 +08:00
密迹搜索好像出过一个输入法,来实现任何地方聊天加密……
neteroster
2019-09-28 13:03:12 +08:00
@Raymon111111 Telegram 普通聊天模式可不是端到端加密。
lidfather
2019-09-28 13:06:31 +08:00
tls 就行了,搞那么多花里胡哨的
RiRI
2019-09-28 13:12:13 +08:00
搞着自己玩玩就行了,被别有用心的人利用了到时候技术可不是无罪的。
JingNi
2019-09-28 13:13:40 +08:00
感觉以后用得上,先收藏了🐷
ech0x
2019-09-28 13:35:28 +08:00
@Raymon111111 电报违法了?封了是贵国的审查。
qq292382270
2019-09-28 13:37:44 +08:00
... 被别人直接从手机货电脑屏幕上看到聊天内容才尴尬..
至于聊天记录就算在微信或者某些人那里天天被围观,不知道就当没发生....
cat9life
2019-09-28 14:04:32 +08:00
这个很好啊 以前用过加密键盘 感觉也是个很好的思路
alphatoad
2019-09-28 14:22:33 +08:00
如果不是科班出身的话,能想出这么多不容易了
思考题:如何在点对点加密的同时保证多设备记录同步呢?
salamanderMH
2019-09-28 14:42:45 +08:00
政策不允许
WhoCanBeRich
2019-09-28 17:34:41 +08:00
可以 学习了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/605042

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX