群里有人推了个项目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 的内容特征太明显,也不好看,我就开始想怎么弄得更自然一点,后来增加了两种模式。
具体如何你们自行鉴赏一下:
OK,扯得有点多了,我的 Chisechat 其实一种粗糙且粗暴的一种解决方案,但够用了。
那 WhatsApp 是如何做的呢?不知道。
但是搜索的时候,看到了这个必须拥有姓名的软件 Telegram,也就是 TgWechat 参考的。
Telegram 中文名好像叫做“电报”,很安全的感觉。Telegram 号称"这个世界上没人能监控我"。
Telegram 为一对一的聊天提供端对端加密,加密模式是基于 256 位对称 AES 加密,RSA 2048 的加密和 Diffie-Hellman 的安全密钥交换协议。协议极其优秀,兼具数学和工程之美,不仅加密基础非常完善,在工程上也很出色,Telegram 传递的消息为函数,可扩展性相当强。
Telegram 用的是 RSA-dh+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 是这么做的。
OK,基本就是这样了。
点击原文体验 Chisechat: https://anhkgg.com/Chisechat/
参考:
1
littlespider89 2019-09-28 11:26:30 +08:00 1
感觉非对称加密好一些,万一你们在语音约定暗号的时候被偷听了呢😂
|
2
xixibb 2019-09-28 11:35:48 +08:00
写了这么多,其实发现没卵用 。。。赶紧搬砖才是硬道理。。。
|
3
x86 2019-09-28 11:49:39 +08:00
顶多敏感词检测,人家吃饱了天天看你个搬砖仔,看也是看有背景的,而一般人只有背影...
我要是老大哥,检测到异常(加密这种)直接拘了你不跟你废话 |
4
neroxps 2019-09-28 11:58:56 +08:00 48
人分享个技术文章,为啥要说各种晦气话???
程序员为何要打击程序员的技术激情??? |
5
Raymon111111 2019-09-28 12:09:51 +08:00
端到端加密不合法唉
|
6
ech0x 2019-09-28 12:17:59 +08:00 via iPhone
@Raymon111111 哪里不合法了?
|
7
geelaw 2019-09-28 12:18:59 +08:00 6
您似乎没有弄明白 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。 |
8
Raymon111111 2019-09-28 12:24:31 +08:00
@ech0x 电报是怎么被封的?
|
9
agagega 2019-09-28 12:33:15 +08:00 via iPhone 3
@neroxps
还有,有人贡献时间给什么文档做中文翻译,就会有人出来说不会英语当什么程序员。呵呵呵,这种人真的烦。 |
10
dimlau 2019-09-28 12:38:36 +08:00
密迹搜索好像出过一个输入法,来实现任何地方聊天加密……
|
11
neteroster 2019-09-28 13:03:12 +08:00 via Android
@Raymon111111 Telegram 普通聊天模式可不是端到端加密。
|
12
lidfather 2019-09-28 13:06:31 +08:00 via Android
tls 就行了,搞那么多花里胡哨的
|
13
RiRI 2019-09-28 13:12:13 +08:00
搞着自己玩玩就行了,被别有用心的人利用了到时候技术可不是无罪的。
|
14
JingNi 2019-09-28 13:13:40 +08:00 via iPhone
感觉以后用得上,先收藏了🐷
|
15
ech0x 2019-09-28 13:35:28 +08:00 via iPhone 1
@Raymon111111 电报违法了?封了是贵国的审查。
|
16
qq292382270 2019-09-28 13:37:44 +08:00
... 被别人直接从手机货电脑屏幕上看到聊天内容才尴尬..
至于聊天记录就算在微信或者某些人那里天天被围观,不知道就当没发生.... |
17
cat9life 2019-09-28 14:04:32 +08:00
这个很好啊 以前用过加密键盘 感觉也是个很好的思路
|
18
alphatoad 2019-09-28 14:22:33 +08:00 via iPhone
如果不是科班出身的话,能想出这么多不容易了
思考题:如何在点对点加密的同时保证多设备记录同步呢? |
19
salamanderMH 2019-09-28 14:42:45 +08:00
政策不允许
|
20
WhoCanBeRich 2019-09-28 17:34:41 +08:00
可以 学习了
|
21
signalas1 2019-09-28 17:51:31 +08:00
哈哈哈,我也准备要做一个,准备半个月了。
端对端加密,思路差不多,不过只放出源码,部署肯定是不会部署的,小心违法。 |
22
signalas1 2019-09-28 17:52:50 +08:00 1
一定要放出实现,安全不是靠隐藏实现来实现的,而是靠经过验证的密码学
|
25
Milesy 2019-09-28 20:57:13 +08:00
尽管目前境内的政策不允许这种软件合法使用,但这确实是一个技术上的好想法。
|
26
lydasia 2019-09-28 21:09:36 +08:00 via Android
@littlespider89 线下先交换好密钥。。
|
27
laike9m 2019-09-28 21:15:28 +08:00 via Android
电报默认是不开端到端加密的,这个比较烦
|
28
Owenjia 2019-09-28 22:15:32 +08:00
拿什么举例不好,拿 whatsapp 和 telegram ...
|
29
catror 2019-09-29 00:50:25 +08:00 via Android
想做端到端加密通信可以参考 signal 的文档 https://signal.org/docs/ 。X3DH 算法用于离线的密钥交换;然后 Double Ratchet 用于消息通信,同时支持前向安全和后向安全。
|
31
xiaotuzi 2019-09-29 07:14:38 +08:00 via iPhone
我自己想到的端端加密比较简单。
1 每个人创建账号后,按照一定规则生成 32 位密钥,密钥存储在本地和服务器。 2 聊天的时候根据两人的密钥生成 N 种加密密钥(其实就使用了其中一种,但是生成密钥的结果有 N 种可能),密钥存储在本地和服务器 3 聊天时对聊天内容进行密钥加密解密 就这样吧,这已经很难破解了。不懂密码学,但我觉得这么做已经够安全了。 |
33
sutra 2019-09-29 09:11:55 +08:00
TgWechat 通过微信服务器交换公钥,如何避免交换公钥时的中间人攻击?
|
34
free9fw 2019-09-29 09:13:20 +08:00
没有开源吗,对 LZ 的加密算法感兴趣
|
35
shakoon 2019-09-29 09:41:02 +08:00
下载前看了一下帮助,才发现是 windows 程序啊。我看了半天帖子一直以为是手机 app,还在想切换窗口粘贴来粘贴去和麻烦呢,原来是我想多了
|
36
shepherdlazy 2019-09-29 10:07:09 +08:00
每个人都有一对 [公钥,私钥]
要给对方发消息用对方的公钥加密,对方收到消息后用自己的私钥解密; ========================= 简单概括: 公钥加密 私钥解密 ======================== 但是这东西产品话之后违法。。。 。。。 |
37
zhao305149619 2019-09-29 10:12:37 +08:00
“功能很简单,A 和 B 都用 Chisechat 设置一个一样的密码(私下协商,打电话或者当面定好),A 把要发的内容放到 Chisechat 加密,再用聊天工具把加密内容发给 B,B 拿到密文在 Chisechat 中解密查看。“这样你是不是有机会看到或者解密聊天内容?
|
38
shepherdlazy 2019-09-29 10:14:46 +08:00
@zhao305149619 我觉得应该砍掉协商一个同样密码的步骤,就直接用对方公开的密钥加密
|
39
S9Yh4wIFsBG7jnE4 2019-09-29 10:20:47 +08:00
@laike9m 那群聊天也不是?
|
40
S9Yh4wIFsBG7jnE4 2019-09-29 10:27:50 +08:00
@neteroster 那群聊天也不是?
|
41
wingpui 2019-09-29 10:34:00 +08:00
有人知道 TokQ 的开源地址吗
|
42
vbvcvd 2019-09-29 10:36:21 +08:00
oversec 难道没人用吗?
|
43
airfling 2019-09-29 10:38:49 +08:00
其实本来没事的,你非要自己加密搞出事,如果电信公司分辨不出你这个流量,八成就会让你去喝茶了
|
44
userdhf 2019-09-29 10:42:21 +08:00
给你个眼神,你自己体会
|
45
david2011012 2019-09-29 10:44:31 +08:00
你最多就是实现了 ssh 加密吧?说那么多干嘛?你要是想做好,直接做到微信上,在微信上推广不是更好,直接在微信上发加密内容
|
46
hinot 2019-09-29 10:49:44 +08:00
Facebook 和 WhatsApp 将向英国警方分享加密信息 据彭博社报道,知情人士透露,根据美英两国之间的一项新条约,包括 Facebook 和 WhatsApp 在内的美国社交媒体平台将被迫与英国警察分享用户的加密信息。https://tech.sina.com.cn/i/2019-09-29/doc-iicezueu9040531.shtml?qq-pf-to=pcqq.c2c
|
47
laike9m 2019-09-29 10:54:00 +08:00 via Android
@shayang888 不是
|
48
wang4012055 2019-09-29 11:07:53 +08:00 1
然后发现输入法在监听你
|
49
blankfire 2019-09-29 11:26:52 +08:00
辛亏一些人不是老大哥,真可怕,可以说是本格精神老大哥了
|
50
youngliu 2019-09-29 11:58:07 +08:00
什么时候能 mac、手机、win 同步就 6 了
|
51
shihira 2019-09-29 12:06:31 +08:00 via Android 3
@salamanderMH 这我很想知道是哪条神仙政策不允许了,如果不准加密现在 HTTPS 是不是全都可以禁掉。这是我们公民应得的隐私权,碰壁就碰壁了再说,自我审查自我规限最为致命
|
52
golden0125 2019-09-29 13:36:52 +08:00
挺好一软件,但杀毒报有高危行为,就删了,抱歉我对这方面比较在意
|
53
dangyuluo 2019-09-29 13:41:55 +08:00
其实 我一直无法理解宣称的这种端到端加密安全性。又有谁能够保证第一次密钥交换的过程中不被服务器记录呢?
|
55
delpo 2019-09-29 13:49:26 +08:00
@dangyuluo 公钥被服务器记录没有问题,只要不被篡改就不会被中间人
所以大多数端到端加密软件都提供公钥指纹验证功能,不过用户会不会用这个功能是另一回事 |
56
Puterbuter 2019-09-29 19:24:33 +08:00 via Android
汉克儿,你来了
|
57
geelaw 2019-10-01 02:55:55 +08:00
|
58
fantasynoff 2019-10-01 07:44:41 +08:00
手机上直接做加密输入法就好了,但是目前还没有人做
|
59
bluefountain 2020-01-16 15:38:01 +08:00
@dangyuluo 两个人洗桑拿的时候口头交换的密钥
|