11

是否有任何加密的 javascript 实现,包括似是而非的否认?

我想要展示这里描述的功能的东西:http ://en.wikipedia.org/wiki/Deniable_encryption

可拒绝加密允许加密消息的发送者拒绝发送该消息。这需要一个受信任的第三方。一个可能的情况是这样的:

  1. 爱丽丝是鲍勃的妻子,鲍勃怀疑他的妻子通奸。她想和她的秘密情人卡尔交流。她创造了两把钥匙,一把用于保密,另一把用于牺牲。她将密钥(或两者)传递给卡尔。
  2. 爱丽丝为卡尔构建了一条无害的消息 M1(打算在被发现时向鲍勃透露)和一封给卡尔的有罪情书 M2。她从消息 M1、M2 中构造了一个密文 C,并将其通过电子邮件发送给 Carl。
  3. Carl 使用他的密钥来解密 M2(也可能是 M1,以读取假消息)。
  4. Bob 发现了发给 Carl 的电子邮件,变得可疑并强迫 Alice 解密该消息。
  5. Alice 使用牺牲密钥向 Bob 透露无害的消息 M1。由于 Bob 不知道另一个密钥,他必须假设没有其他消息 M2。
4

2 回答 2

0

有很多提供加密原语的 Javascript 库,但我从未听说过任何包含合理否认的库。

您可以实施类似于 TrueCrypt 使用的加密方案。它仅限于 2 组加密数据:诱饵数据和真正的秘密数据。但它的设计非常简单,所以如果你不需要超过 2 组数据 - 去吧。您可以修改它以允许超过 2 组,但它不能是“动态的”。

TrueCrypt 文档页面上有详细说明,但基本原理是加密数据包含每个数据集的固定宽度标头。标头包含有关其数据集的信息。在大多数基本场景中,这将只是整个加密块中数据集开始的偏移量、该数据集的长度以及用于检查标头是否成功解密的一些金丝雀值。当用户提供密码时,系统会尝试解密第一个标头,如果失败则尝试下一个标头,直到成功或没有标头。如果成功,则解密标头中指定的字节。

这个方案是为文件系统加密而设计的,所以在你的系统中使用它会有一个很大的缺陷——当对手强迫你透露诱饵数据的密钥时,他会问为什么它的大小小于整个加密块的大小。

于 2014-04-27T18:08:52.800 回答
-1

有趣的问题。这里这里都有 Javascript 加密库,但您的用例不需要您在 Javascript 中实现它,您最好使用不同的语言。

为什么?可否认加密是一种安全形式,根据定义,它需要隐蔽的安全性,因此使用脚本语言实现它可能不是最好的方法(任何人和每个人都可以看到您的实现细节)。用一种强大的、计算能力强的语言编写它,并将其锁定在某个服务器上。

于 2013-09-24T00:18:32.753 回答