What is Nostr?
ps /
npub10nm…7024
2023-05-18 08:53:23

ps on Nostr: nostr:note14vx4py3xcp7s2ydj00tcf0umtfg228u3wpswp5czpscm0qndvdpqfe4dgu ...

最近摸鱼时间去了解下了和聊天加密相关的协议。

能用的nostr网友应该知道端对端加密(e2ee),也就是只有聊天双方才能解密消息内容,应用服务器管理员也解密不了。能够做到端对端加密的聊天app已经做的不错了,尤其是和国内的聊天app比起来。但是端对端加密也并不是安全性的全部内容。

主要经历了上世纪九十年的PGP (Pretty Good Privacy)协议,本世纪初的OTR (off the record)协议,到201x年的Signal协议。

PGP协议主要用在邮件加密上,但是并没有被大规模使用起来,主要被一群技术极客使用。PGP通过公钥加密,实现了消息的保密性和Authentication(可认证性?,也就是你可以判断对方是你要聊天的人)。PGP也实现了端对端加密,但是它的问题也很明显,当一切没有问题的时候,PGP很不错,一旦出现问题,比如私钥泄漏,过往的历史消息都会被解密出来(也就是没有前向保密),而且这些消息都有数字签名(也就是没有可否认性)。在PGP协议中,身份key和加密key是合二为一的,它既作为身份,有用它来加密消息。它作为身份key就决定了它是一个长期key,一旦时间拉长,私钥被暴露的概率就加大。

后面的OTR协议实现了前向保密,解决了PGP历史消息一直处于危险之中的问题。它的做法很简单,把身份key和加密key做分离,为每一段对话单独生成加密key,而且用完就删掉。

OTR协议也实现了可否认性。比如A使用PGP协议发消息告诉B他做过一些“不合法”事情,如果后面他的私钥泄漏,或者B去举报A,就会出现大麻烦。因为消息有A的数字签名。OTR通过一些密码学设计很不错地解决了这个问题。具有可否认性是OTR协议最大的特色。

一些XMPP的客户端实现了PGP和OTR协议。


接着写。现在Signal即是协议的名字,又是app的名字。

现在全球大约有30亿人在不知不觉中使用Signal协议,Signal 应用本身(大几千万用户?)、WhatsAPP(20亿用户?)、Facebook Messenger(15亿用户?)、Skype、Google to B的聊天软件都是用了signal协议实现的端对端加密。XMPP和Matrix这两个聊天协议也可以说是使用了signal协议实现端对端加密,只是做了自己的代码实现。

可以说Signal协议做出了巨大贡献。

(Telegram没有使用signal协议,用的是他们自己发明的协议,总体来讲不如signal协议透明,学术层面的安全证明审计也少。而且Telegram默认「不使用」端对端加密。)

早期的OTR协议是PC时代的聊天加密协议,对聊天双方同时在线的要求高。Signal可以说是移动手机时代的聊天协议,不需要聊天双方同时在线。

Signal协议可以看作是对OTR的继承和发展。第一版本Signal应用(当时叫做TextSecure)就是用的OTR协议,到了第二个版本才部署他们发展后的Signal协议。

Signal协议主要包括两部分,X3DH协议负责初始的密钥协商,双棘轮算法(Double Ratchet Algorithm)负责后续加密key的派生。Signal协议做到了为每一条消息派生新的加密key。

我把双棘轮算法理解为是对OTR协议原始的通过不断更换公钥来实现更新加密key这一过程的细致化和工程化。实现了更好的前向保密和后向保密(约等于可以从key状态泄漏灾难中恢复过来的能力)。

另外,四年前就有了OTR v4草案,但是好像一直没有被用起来?v4也增加了双棘轮算法。
Author Public Key
npub10nmgk3azkfpaqcezhldk58pyytackwsc6x99eyxz0dv73asj25lqfc7024