嗯,这是我写的一个端到端的加密聊天网站。名称来自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盾,但是能加密解密各种消息等等)。不过这方面的进展还是很慢。于是就先弄了个副产品出来。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.