3

我正在搜索一个提供安全加密的 javascript 库。客户端必须生成一个密钥,所有上传到服务器的数据都被加密,所有下载的数据都被解密。我需要一个经过身份验证的加密方案,仅 CTR 或 CBC 是不够的。

我听说过 sjcl,但似乎 sjcl 只能一次加密整个数据。我没有找到一种方法来逐块加密数据。因为上传的文件可能非常大,这种方法是不可行的。我需要类似 java 加密接口的东西,它有两个方法 update() 和 final()。

我发现 nodeJS 加密库似乎可以满足我的需要,但我不知道如何在浏览器端使用它。

我找到了 google crypto-js,但是这个库似乎不提供经过身份验证的加密,而只提供标准模式。

有没有办法用 sjcl 逐块加密数据?在浏览器端使用 nodeJS 加密库?将经过身份验证的加密与 crypto-js 一起使用?或者是否有另一个安全的 javascript 库可以提供我需要的东西?

4

3 回答 3

3

简短的回答
恐怕这不是不可能的。

长答案
因为你不能保证 Javascript 库的完整性,所以你不能依赖它来做你期望它做的事情。因此,您无法保证任何安全性。

这个问题已经被广泛讨论并且总是以相同的结论结束:没有任何双向身份验证和安全通道,您的客户端无法验证库的正确性。如果任何中间人更改了加密程序,您的客户不会知道,更不用说您会发现。

因此,为了保证安全,您将需要 SSL 和客户端证书。
(当然,非保证安全确实不存在)

于 2012-06-29T10:32:46.990 回答
2

SJCL 部署的来自 CCM 的 Appart 是一种流密码模式,我会仔细查看它,而不仅仅是查看便利包装器。它是开源的,所以无论如何都应该在某个地方实现原始密码。

请注意,这不是最终应受信任的代码。当我尝试为它编写 Java 包装器时,我很快发现了身份验证失败的错误。似乎便利库根本没有对关联的身份验证数据进行身份验证。由于它没有使用其他库进行测试,因此我敦促您注意不要出现一些遗留的错误。

于 2012-06-30T00:01:30.383 回答
0

是否有任何理由需要从客户端推送到不受信任的服务器?

如果提供您网站的服务器是受信任的,那么您应该能够将您的数据发送回受信任的服务器,让受信任的服务器加密,然后受信任的服务器可以将数据发送到不受信任的服务器进行存储。

于 2012-06-29T17:46:17.787 回答