Javascript中是否可以进行端到端加密?

Dom*_*que 14 javascript encryption p2p end-to-end node.js

我目前正在研究在加密方面创建(peer2peer)消息传递客户端的可能性,从而确保安全性.此应用程序将基于Web技术(如果可能).

我的问题是:只有javascript(client&node.js/peer.js)才能实现端到端加密?如果是:查看HMAC(RSA)类加密技术是否正确?我已经尝试了解这些库如何工作,但到目前为止我没有运气:)

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

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

更新:该应用程序将成为一个移动应用程序.Web技术的使用是一个概念验证.

The*_*ini 6

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

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

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

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

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

对于(2),麻省理工学院的一个小组声称已经在他们的Mylar设计中解决了这个问题。参见第 6 节。应该说明的是,研究人员已经发现了 Mylar 的安全问题,但据我所知,他们对客户端代码完整性的解决方案并未受到损害。

所以理论上,端到端加密完全可以在 JavaScript 中完成(使用什么服务器语言并不那么重要)。在实践中......这并不容易。


Maa*_*wes 5

您目前正在研究安全实施。如果您不了解这些库背后的安全模型和密码学,您的解决方案将 - 非常肯定 - 不安全。

Artjom 正确地指出,对于点对点加密,您很可能需要双方的身份验证。这不是普通 SSL/TLS 提供的,您需要客户端身份验证。但是对于客户端和服务器身份验证,您需要建立信任。在普通浏览器上,这是由内部证书存储提供的。然而,信任客户要困难得多。

所有其他的东西(比如 RSA 如何不是 HMAC)都是实现细节。但是,您现在不应该实施与安全相关的任何事情。首先关注您的用例、威胁场景和协议设计。