lyricat/mornin.fm

有个设想,有关端到端加密如何实现

Opened this issue · 2 comments

不知道发在这里是否合适,看了介绍mornin.fm的文章,但是不知道有什么反馈渠道……

大致了解了mornin.fm的方案,既然是使用了webrtc,通信本身是经过dtls端到端加密的。我记得在建立通话的时候需要交换ICE握手的包,这个包里有用来进行dtls而生成的临时证书的指纹。换句话说,只要端到端加密额外做到"确认握手包的确来自对方"(而不是中间人攻击时发来的包")就可以了,不需要尝试自己实现额外的数据流加密。

如果上述分析正确,有很多方案可选。如果能设法追踪到ICE握手的包里面的指纹,可以结合本地与对方握手包的指纹,经由散列函数生成一个简短的数字,大概4-8位十进制就够了,要求双方通话开始在语音里互相确认。如果无法确定唯一的指纹(比如握手包里有好几个备选的?)至少可以使用openpgp.js等库,在握手包发出以前用本地临时生成的身份公钥进行签名,然后用前面说的办法核对自己和对方的pgp临时公钥。

前端能实现端到端加密,但是不可用。

不可用是什么原因?性能?政策?

我的意思是不需要自己造端到端加密的轮子,webrtc本身已经几乎自带这个特性(就是实现了端到端加密,但是不保证中间人攻击)。

还差的环节不是加密,而是保证这个加密不被中间人攻击。只要做到这一点就安全了。而为了做到这一点,只要在密码学上保证「让ICE握手的过程发生于能确认的通话双方」这一点就可以了。