首页
社区
课程
招聘
[原创]程序员对私密聊天的乱想
发表于: 2019-9-3 09:32 11363

[原创]程序员对私密聊天的乱想

2019-9-3 09:32
11363

唠叨

群里有人推了个项目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. TgWechat

欢迎关注:汉客儿


[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 2
支持
分享
最新回复 (11)
雪    币: 12848
活跃值: (9108)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
与佛论禅?
2019-9-3 10:23
0
雪    币: 10072
活跃值: (2963)
能力值: ( LV15,RANK:515 )
在线值:
发帖
回帖
粉丝
3
哈哈,搜了下,第一次听说,准备加上,3q
2019-9-3 10:40
0
雪    币: 931
活跃值: (199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
tox了解下
2019-9-3 12:19
0
雪    币: 13904
活跃值: (17017)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
5
需要这么麻烦么??我寻思着,直接租个VPS然后搭一个IRC不完事儿了么。。。
2019-9-3 14:08
0
雪    币: 459
活跃值: (657)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
除非你算法NB,否则总有些网络BT狂偷偷暗笑。。。
2019-9-3 20:58
0
雪    币: 608
活跃值: (643)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
有个App名字叫ChatSecure,你自己买个VPS,上面随便搭建一个XMPP服务端就可以实现自建加密通信服务了。
2019-9-3 23:14
0
雪    币: 6971
活跃值: (2936)
能力值: ( LV4,RANK:52 )
在线值:
发帖
回帖
粉丝
9
理论上讲想法是不错,但是如果相同的pq,那么每次生成公私钥是一样的,所以你每次的AES秘钥应该也是一样,总之用RSA来生成AES是比较浪费
不如,,,
1. 自己生成一个公私钥,公钥发给对方
2. 对方生成一个公私钥,公钥用你给的公钥加密,并发给你
3. 自己解密对方的公钥,并开始交互
4. 发送消息的一端每次发送都生成一个内容加密秘钥,并加密数据,秘钥被公钥加密,并拼接发给对方
5. 接收消息的一端每次接收都通过私钥解密出加密秘钥,并解密被加密的内容
2019-9-4 10:42
0
雪    币: 204
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
你好冒昧留言
寻求帮助
我愿意为您付出的时间付费

事件背景是这样:
我在打一个借款官司
我的证据是微信聊天记录和转账记录
我向法庭提交了证据
证据同时也给了被告
一个月后开庭
对方居然拿出了另外一份聊天记录

下面是一些关键信息:
一:
对方是我的微信好友
他有两个微信号在我的微信里3年多了

二:
我只跟他的A微信交流
对方伪造的是我与其B微信的聊天记录

我并没有与其B微信交流过
现场我验证了他的手机
聊天内容居然真实的存在在对话框内

三:
现场我拿着对方手机点开微信
点开我的微信号是可以给我发信息的

四:对方是苹果手机

我寻求的帮助是:
这种情况下我该如何证伪?
我问过腾讯
腾讯不提供聊天记录
数据鉴定中心也说很难
再次感谢
2019-9-6 00:31
0
雪    币: 0
活跃值: (963)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
 其实可以使用ecdh+aes也是一样的
2019-9-6 09:21
0
雪    币: 5482
活跃值: (3272)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
莫大虾 你好冒昧留言 寻求帮助 我愿意为您付出的时间付费 事件背景是这样: 我在打一个借款官司 我的证据是微信聊天记录和转账记录 我向法庭提交了证据 证据同时也给了被告 一个月后开庭 对 ...
怕是只有腾讯能证伪了 或者你再伪造另一份证据?
2019-9-6 17:04
0
游客
登录 | 注册 方可回帖
返回
//