javascript加密实现,包括可信否认

javascript implementation of encryption including plausible deniability

本文关键字:否认 包括可 加密 实现 javascript      更新时间:2023-09-26

是否有任何javascript加密实现,包括可信的否认?

我想要一些展示此处所述功能的东西:http://en.wikipedia.org/wiki/Deniable_encryption

可拒绝加密允许加密消息的发送者拒绝发送该消息。这需要一个值得信赖的第三方。一个可能的场景是这样的:

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

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

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

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

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

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

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