狼窝:另一个(端到端)加密聊天的聊天室

2015-03-01 08:04:31 +08:00
 NeoAtlantis

嗯,这是我写的一个端到端的加密聊天网站。名称来自Wolfschanze(狼窝)(我不是纳粹!)

先放地址

地址: https://neoatlantis.info/wolfschanze
另一个说明: http://neoatlantis.org/chat.html
源码地址: https://github.com/neoatlantis/wolfschanze

简介

有时候和几个人聊着聊着,发现有些内容不适合企鹅(你懂的),于是需要临时寻找一种更安全的通信方法。GnuPG是很好的(斯诺登都说好!),也可以配合Windows下的psi或者Linux下的Gajim使用,可惜不是所有的朋友都会用。这时候临时安装也不现实,于是需要一种简单的方案。

于是就出现了这个网站:端到端加密,思想类似GPG(但是库是我自己写的,稍后再说),进入页面首先拿到一个带着#号的网址,之后把这个网址发送给朋友,就能加入聊天。

每个人进入之后都会被程序自动生成一个临时的公钥,这个公钥公布到服务器上。由于我们不太能相信服务器,程序提供“指纹”功能,可以通过线下的电话、微信等语音方式核对所有人的公钥。

在核对完所有人的公钥之后,可以“启用安全模式”,这样可以保证突然闯进来的新成员不会偷偷看到正在进行的聊天。

其他的碎碎念

网页和服务器的通信是通过socket.io完成的,所以网页可以托管在一些比较可靠的服务器上(比如github pages)。这样可以保证网页上的代码不被篡改。socket服务器的作用主要是组织聊天室和负责公布公钥。

以后如果我能更熟悉WebRTC的开发,就可以改用网页内置的语音/视频功能直接进行公钥的确认了。

此外,我对前端的开发没什么经验,虽然知道AngularJS这样的东西应该会很好用,但是还是没放进我的程序,弄得代码各种麻烦。这个以后也是修改的方向……

关于我的加密库

很早之前我就在折腾的一个加密库neoatlantis-crypto-js,提供散列函数、对称加密、不对称加密算法和一些(很多)类似GPG(但是不兼容)的实现。本网站用到的是类似GPG的公钥的“身份公钥”的功能,一个私钥经过推导产生基于curve25519加密用的的私钥和公钥,经过另一种推导产生基于ECDSA的用于签名的私钥和公钥。对称加密用Salsa20/20和ChaCha20/20的复合体。

加密库的代码在 https://github.com/neoatlantis/neoatlantis-crypto-js ,尚不完善。但是能用了(比如这个网站)。

这个加密库并不打算用来处理很大量的数据(太慢)。我是打算用它搞一个独立的硬件设备(类似U盾,但是能加密解密各种消息等等)。不过这方面的进展还是很慢。于是就先弄了个副产品出来。

10711 次点击
所在节点    分享创造
24 条回复
NeoAtlantis
2015-03-01 23:53:01 +08:00
@noli 暂时没这个打算……我也没自己写所有的密码算法。Salsa20是我写的,ChaCha20是我改的,剩下的散列Whirlpool、curve25519和ECDSA就是直接复制的。现在面临的问题是,我得能验证算法是正确的、标准的实现(比如能用一些测试向量来验证)。

Salsa20、ChaCha20和Whirlpool我有信心(已经验证),curve25519信心稍差,但是作者自己有个验证的示例。ECDSA就没啥信心了。ECDSA我倒是比较希望有一个更清晰的javascript的代码来替换掉Tom Wu的乱七八糟的东西(jsbn库),而且速度上也不要太慢(jsbn其实是很快的)。如果不能,我可能打算把ECDSA换成ed25519呢。


以后做成硬件的时候确实可能要把一些功能在某些平台上(比如NodeJS)用C替换掉,但是还要保证替换的部分放进现有的js里面能完全兼容,所以我的设想是只替换基础的算法(比如Whirlpool,比如curve25519,比如Salsa20)。现在还是能找到这些算法的C版本的,比如curve25519的官网http://cr.yp.to/ecdh.html 就有代码。散列什么的更不是问题。
noli
2015-03-02 00:13:21 +08:00
@NeoAtlantis 好的,我明白了。其实是我也在做P2P加密通信的东西,希望以后有机会的话可以合作。我已经在 Github 上面关注你了。
schezuk
2015-03-02 01:26:43 +08:00
@noli 关于/t/170114能提些指导意见吗?
求集思广益,QQ群417216334
pljhonglu
2015-03-02 09:47:47 +08:00
@NeoAtlantis 感谢作者~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/173678

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX