寻求关于JavaScript RSA加密的建议

6
我需要在客户端对用户在表单中输入的数据进行加密。我的环境没有SSL加密,但我发现在我的情况下,我可以通过RSA加密实现类似的结果。公钥将在客户端使用,私钥的所有者将稍后能够检索和解密数据。
在我开始之前,我想确保我没有忽略任何关键问题。所以这里有几个问题:
- 你能推荐做RSA加密的JavaScript库吗? - 有什么保证它们可靠吗? - 这种技术的缺点是什么?例如,如果用户关闭得太快,会丢失信息吗?
一般而言,我对这种JavaScript RSA加密技术的任何建议都很感兴趣。
更新:到目前为止,我找到的唯一的RSA JavaScript是在这个页面上:http://www.ohdave.com/rsa/。有关它的任何反馈吗?
另外,如果您有其他加密方法要推荐,我也可以接受除RSA之外的其他加密方法,只要是100%的JavaScript解决方案就可以。

虽然你可以这样做,但它并不比未加密的连接更安全。攻击者可以简单地修改客户端接收到的JS,并使用它来拦截机密信息。只信任某些证书是SSL的核心功能,而你无法用JS模拟它。 - CodesInChaos
谢谢指出这一点。我明白,但正如我在问题中所说,它在我的情况下是有效的。我可以接受消息被拦截,但不希望内容被阅读。 - Christophe
我真的不明白为什么你认为它对你有效。一旦攻击者控制了你的js,他可以简单地移除加密并读取现在未加密的内容。中间人攻击可以读取和操纵你场景中的所有内容。你只是阻止被动监听器。 - CodesInChaos
它对我有效,因为加密和解密是在我使用js的安全环境中完成的。只有加密后的消息通过互联网传输。 - Christophe
所以你的程序是用JS编写的客户端应用程序,而不是包含你的程序的网站。因此,你的JS源是可信的。是的,在这种情况下,它应该可以工作。 - CodesInChaos
5个回答

4

这是可能的,但是需要指出的是,这绝不是 TLS 的替代品 - 主要因为像这样的技术没有强制执行的客户端和服务器之间的信任或身份验证;你的脚本无法验证嵌入其中的公钥是否为你自己的公钥,任何能够介入你和你的客户端之间的人都可以替换他们自己的公钥。


你有没有纯JavaScript的推荐? - Christophe
jcryption是我所知道的唯一一个,如果你在SO上搜索它,你可能会得到一些其他的链接。 - Alex K.
@AlexK,密钥可以替换,但一旦这样做,您的消息就无法被接收者阅读。 - antimatter

1

1

看一下asmcrypto.js — 实现了包括RSA在内的很多加密算法,速度真的 非常

顺便说一句,我是作者,如果有任何问题,请给我反馈并回答您的问题。


1
如果您的JavaScript环境是安全的(例如,https),并且没有支持旧浏览器版本的要求,则可以使用Subtle.Crypto创建良好的安全模型。您需要充分了解您正在做什么以及如何在您的环境中实现加密、签名、密钥存储等。自己编写加密算法有许多陷阱。
一个好的起点是考虑是否需要分发单独的AES密钥以进行快速和安全的加密。如果是这样,您可能希望使用RSA加密和传输单独的AES密钥,然后使用AES进行大部分加密。记住签名。在许多情况下,仅对有效载荷进行签名以便验证其完整性就足够了。在静止或传输数据时隐藏数据可能是不必要的。

https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接