在浏览器中使用javascript进行openssl解密

Tob*_* P. 7 javascript openssl cryptography rsa public-key-encryption

我正在寻找一种方法来客户端解码RSA和openssl编码的消息.

想法:
特殊数据仅在服务器上使用公钥加密存储,以便没有人能够看到真实数据 - 即使在服务器黑客的情况下也是如此.
然后,adminforce中的管理员可以通过将这些文件传输到浏览器来"打开"这些文件,并且一些javascript代码将对数据进行解码,以便它永远不会在服务器上解密,只能在安全的客户端上解密.
我真的需要它在浏览器中使用自定义javascript解码direclty,因为这些数据随后被js中的某些算法客户端使用.

问题:
javascript中似乎没有openssl库,或者我还没找到.虽然RSA有几个纯js实现,但它们只实现了普通的RSA算法,但是普通的RSA不能用作块密码并且有一些攻击如"选择明文攻击".
有没有人知道openssl解码的javascript实现,或firefox/chrome的插件,它将这些功能添加到文档中?或者javascript中内置的任何其他安全的非对称加密?

Bru*_*uno 4

正如我在对您的问题的评论中指出的那样,您设想的攻击向量(受感染的服务器)意味着 JavaScript 也可能受到损害,在这种情况下,客户端上运行的 JavaScript 代码不应受到信任反正。(让 JavaScript 在后台使用异步请求将解密的数据发送回服务器是非常容易的:同样,由于服务器将在攻击者的控制之下,因此不需要任何技巧来规避相同的攻击-那里的原产地政策。)

我建议采用独立应用程序(例如 Java WebStart)的方式,可能进行签名(使用服务器上未保存的私钥)。

如果您仍然愿意继续采用这种架构,请不惜一切代价避免将用户的私钥释放到 JavaScript 中。这可能会危及用户的私钥,而不仅仅是加密的数据。

当您在浏览器中使用私钥进行 SSL/TLS 客户端证书身份验证时,私钥不会暴露给服务器使用的任何代码。浏览器使用它进行握手,服务器获取证书(这是公开的),但私钥与 HTML+JS 代码可以看到的内容相差甚远。(事实上​​,在带有 Safari 的 OSX 中,私钥由底层 SSL/TLS 库使用,甚至不暴露给用户进程。)

我见过的 RSA 的 JavaScript 库需要直接使用私钥,也就是说,它们需要能够直接使用私有指数。如果您处于无法信任服务器的情况,这显然不好。

能够在浏览器中使用私钥进行 RSA 操作,而不让脚本获取私有材料本身,将需要与浏览器更紧密的集成,特别是一些用于签名和解密的 API,这些 API 可以直接在浏览器的安全机制,而不暴露私钥材料(总体而言,与 PKCS#11 为使用它的应用程序提供的方法类似)。

据我所知,当前的Mozilla 加密 JavaScript API不提供使用浏览器进行解密/签名的功能(仅用于证书请求和密钥生成)。不过,似乎有计划这样做:

在IE平台上,CAPICOM应该会引起人们的兴趣,但现在它似乎已被弃用。