Bubbly-Bicycle7390 | 1 points | Jun 25 2021 13:06:20

有无技术老嗨说说 Telegram 这种 end-to-end encrytion 一开始双方的密钥是怎么分发的?

怎么才能不经过服务器,或者让服务器看到的是密文?

[-] SirThisWayyy | 4 points | Jun 25 2021 13:56:15

https://core.telegram.org/api/end-to-end

看不懂,密码学老嗨来

[-] wabjtam | 14 points | Jun 25 2021 15:59:29

最重要的其实就是迪菲-赫尔曼密匙交换

说白了有两种加密方法:不对称加密和对称加密。

不对称加密的话加密解密有两把密匙——一把公共密匙(即用来把任何文字加密成密文)和一把私有密匙(既可以把相应的公共钥匙加密的密文解密)。

对称加密的话就加密解密用的一把密匙——即可以加密又可以解密这把密匙加密的密文。

先看双方如何用不对称加密来秘密交流。打比方,我和你妈想在公共频道聊天,且王晶可以在这里看到任何我们发的东西。首先,我和你妈各自生产一对钥匙——叫我的公共钥匙和私有钥匙为PK1 (public key) 和SK1 (secret key),称你妈的为PK2和SK2。

其次,我把PK1在公共频道上发给你妈,你妈把PK2在公共频道上发给我。有了对方公共密匙后,在本地用对方公共密匙对要发的东西加密,然后把密文从公共频道发给对面。因为只有相应的私有密匙才能解密密文,王晶在公共频道看到的公共密匙和密文并没有卵用,从而达到peer to peer encryption。

不对称加密有个问题,就是加密有点慢且对长度不一的文字加密有点问题。

对称加密没有这个缺点,加密快且不限长度。但靠对称加密本身,必须需要双方提前秘密协商好一个密匙才能在公共频道上交流,因为你不能直接把密匙发给对面,不然的话王晶就知道了这个密匙从而可以解密密文。

这个时候就是迪菲-赫尔曼密匙交换解决的问题。

同样我和你妈各自生成(PK1, SK1) 和(PK2, SK2)且在公频交换了PK。然后,我(或者你妈)本地生成一个对称密匙,然后用你妈的PK2对这个对称密匙加密成密文在公频发给你妈。你妈收到后用她的SK2解密即可获得对称密匙。之后的话我们就可以在公频上发这个对称密匙加密的东西了。

[-] _Newdkmf_ | 2 points | Jun 25 2021 17:09:48

密码学老嗨太牛了

[-] [deleted] | 1 points | Jun 25 2021 16:33:25

[removed]

[-] SirThisWayyy | 1 points | Jun 26 2021 08:14:27

这套我懂,关键是

&rt;其次,我把PK1在公共频道上发给你妈,你妈把PK2在公共频道上发给我

这一步密钥分发怎么防中间人攻击,TLS用的是证书,不知道端对端用的是什么

[-] wabjtam | 1 points | Jun 26 2021 17:28:48

虽然算是废话,但在能够保证首先的密匙交换没问题的情况下,其次的都不会有MITM的威胁。telegram提防首次交换的MITM的威胁据我所知只是确保自己的服务器和客户端没有被黑。不过你要想想的话,大部分人首次交换密匙不是天天发生的,所以你能够被MITM所搞到的几率其实很低。当然,这是假设telegram本身不是那个中间人,所以最保险的还是真人见面的时候互相肉眼确认首次交换的密匙

[-] 43212321423 | 3 points | Jun 25 2021 14:55:35

先给你给个不对称密匙,然后生成对称密匙,本质上还是https那套。

还有你说的经过不经过服务器也无所谓

[-] reddit-Umaru_Chan | 3 points | Jun 25 2021 17:06:48

建议看看编程随想的博客里的TLS协议详解系列

[-] [deleted] | 1 points | Jun 25 2021 15:52:47

[deleted]

[-] Tutulangren | 1 points | Jun 26 2021 06:53:53

一眼diffie Hellman。key exchange 技术本来就没几种