【问题标题】:Is there any way to get same encryption key while encrypting a same data?有没有办法在加密相同的数据时获得相同的加密密钥?
【发布时间】:2021-10-20 07:18:29
【问题描述】:

有什么方法可以在加密相同数据的同时获得相同的密钥,

有关例如:如果我有加密文本“熏肉”和加密的数据看起来像“e7b75a472b65bc4a42e7b3f78833a4d00040beba796062bf7c13d9533b149e5ec3784813dc20348fdf248d28a2982df85b83d1109623bce45f08238f6ea9bd9bb5f406427b2a40f969802635b8907a0a57944f2c12f334bd081d5143a357c173a611e1b64a” P>

对于相同的文本“bacon”,此加密数据会发生变化

有没有什么办法可以得到与“bacon”这个词的永久密钥相同的密钥。

【问题讨论】:

  • 每次加密的密文都会发生变化,即使是相同的纯文本,也是非常积极的事情。这可以让您隐藏您多次发送相同内容的事实,这将使攻击者对数据进行一些猜测。你为什么要那个?
  • 您使用的是哪个加密库? ReactJS?
  • npmjs.com/package/cryptr 这是我正在使用的 npm
  • 我知道,但在缩放视频通话中,它允许用户永久设置相同的键。是的,我正在使用 React JS

标签: reactjs encryption password-encryption encryption-symmetric encryption-asymmetric


【解决方案1】:

输入密钥材料(secret)没有改变,但cryptr 是 GitHub 上的一个单人项目,它使用随机盐来派生加密密钥,使用 PBKDF2 和密文的随机 IV。两者都以密文为前缀,密文也包含一个标签,因为它使用 AES-GCM;因此密文很大。

您需要重新编程简单的cryptr 模块以使用相同的盐和 IV 来获得相同的密文,但请注意,如果您使用相同的盐和 IV 加密其他明文消息,您将立即受到许多攻击 -时间填充和重新计算 GMAC 身份验证密钥(GCM 的一部分)。

目前cryptr 使用带有静态迭代计数的 PBKDF2 来计算密钥(可能是也可能不是密码?)。它还使用 16 字节的 IV 而不是 96 位/12 字节。这表明如果您问我,作者本人并不完全了解密码学。不要使用单人密码学,如果您需要特定属性,请自行编程,而不是依赖更高级别的库。

【讨论】:

  • 感谢您的回答,并想解决关于 128 nonce 的部分。我读到,如果它是随机生成的(不是作为计数器),使用 128 位的倍数会比推荐的 96 位 IV 产生更多的可用位。 BouncyCastle 的实现例如当通过 96 位 IV 时,将用固定数字“0x01”填充它,这似乎符合规范。我的理解是否正确,128 位随机数是否允许更多使用同一密钥?
  • 感谢您的快速答复!这件事困扰了我很长一段时间,所以如果你能就这个answer 的脚注给我你的意见,我将不胜感激。
  • 有点太快了,我只是在检查,因为结果似乎是 128 位。
  • 嗯,奇怪,它似乎产生了 128 位的随机性。当然,那么它作为一个计数器,也有重叠的机会,这样问题就比较乱了。
  • 已回复here。对于随机数,128 位更好。不过,我并不完全同意 Poncho 的观点,如果你只有 2^31 左右块的消息,那么 128 位随机比 96 位更不安全,最后 32 位不可能重叠。
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 2012-08-02
  • 2016-10-15
  • 2017-06-02
  • 1970-01-01
  • 2011-01-27
相关资源
最近更新 更多