在Javascript中可以实现端到端的encryption吗?

我目前正在研究创build一个(peer2peer)消息客户端的encryption方面的可能性,从而安全。 此应用程序将基于Web技术(如果可能)。

我的问题是:只有javascript(client&node.js / peer.js)的端到端encryption是可能的吗? 如果是:查看HMAC(RSA)类encryption技术是否正确? 我已经试着了解一下这些库是如何工作的,但是到目前为止我还没有运气。

lib的我觉得很有趣,但我不(完全)理解和知道如何实现(在这个用例中):

  • http://bitwiseshiftleft.github.io/sjcl/
  • https://github.com/Caligatio/jsSHA
  • https://code.google.com/p/crypto-js/

如果需要,我可以尝试详细说明。

更新:应用程序将成为一个移动应用程序。 networking技术的使用是一个概念validation。

您正在查看安全实现。 如果您不了解这些库背后的安全模型和encryption技术,那么您的解决scheme将会非常确定 – 并不安全。

Artjom是正确的表明,对于点对点encryption你最有可能需要双方authentication。 这不是由普通的SSL / TLS提供的,你需要客户端authentication。 但是,对于客户端和服务器身份validation,您需要build立信任 。 在普通的浏览器上,这是由内部证书存储提供的。 信任客户要困难得多。

所有其他的东西(比如RSA如何不是一个HMAC)是实现的细节。 但是,您现在不应该执行与安全有关的任何事情 。 首先关注你的用例,威胁场景和协议devise。

最多可以在Web浏览器中使用Javascript进行“新颖”的端到端encryption。 也就是说,它会看起来像端到端的encryption,但是实现很可能会被密码学家嘲笑。

主要原因是无论你在前端encryption数据有什么困难,你的客户端最终都取决于服务器发送的数据。

必读:

端到端encryption的目标是即使中央服务器在作弊,用户也可以确定通信的安全性。 有两个主要的挑战需要解决:

(1)用户需要100%确定他们正在与他们认为正在通信的人进行通信。 这是为了防止中间人(MITM)攻击,中间人可能是任何人,包括服务器本身(例如: 苹果iMessage有这个弱点 )。

(2)您需要100%确定客户端代码没有作弊。 例如,它是真的使用其他人的公钥来encryption数据,还是只是将它发送到其他地方的明文中,然后从那里进行encryption。 鉴于任何访问服务器的人都可以随时交换JavaScript,这是一个巨大的挑战。

两个问题似乎都可以解决。

对于(1),用户可以像PGP / GPG那样在带外validation公钥(不幸的是许多人跳过这一步,但是为了真正的端到端的安全性,你需要它)或者keybase.io 。

对于(2),麻省理工学院的一个小组声称已经在他们的Mylardevise中解决了这个问题。 请参阅第6节。应该指出,研究人员已经发现Mylar的安全问题,但据我所知,他们的客户端代码完整性解决scheme并没有受到影响。

所以从理论上说,端到端encryption可以完全用JavaScript来完成(使用哪种服务器语言并不那么相关)。 在实践中…这并不容易。