没有IV的AES CTR-用于多个消息的相同密钥-安全吗?

时间:2018-07-01 16:18:25

标签: encryption cryptography aes rijndael block-cipher

我想用js制作一个可以加密纯文本的网页,因此我可以将其发送给朋友,后者将使用同一网页对其进行解密。

我们将共享相同的密钥,并将其用于多封邮件。

我知道使用AES CBC-时,每条消息都必须随机使用iv,但我想使用AES CTR。

我将使用256键而不是密码。

我有2个问题:

  1. 我可以在CTR中多次使用相同的密码,并且没有iv吗?
  2. 如果我要使用CBC,可以安全地以明文形式发送iv和加密的消息吗?

我正在使用aes-js和基本的常见操作模式:

https://github.com/ricmoo/aes-js#ctr---counter-recommended

https://github.com/ricmoo/aes-js#cbc---cipher-block-chaining-recommended

我想要最好的安全性。

2 个答案:

答案 0 :(得分:3)

首先,没有CTR或CBC之类的“没有IV”。您可能只使用全零作为IV。总有一个IV。 (点击率将其IV称为随机数。)

点击率必须<永远>永远不要重用一个随机数+密钥对。它可以完全破坏加密。这是避免点击率的主要原因,除非您知道自己在做什么。难以正确使用且故障模式可怕。 (WEP现在被认为已完全损坏这一事实与该问题密切相关。)我并不是说正确使用CTR不好;我是说小错误是灾难性的。

CBC 不应永远不要重复使用IV + Key,但这并不是破坏性的。这是CBC对于非专家而言非常好的选择的主要原因。即使使用不当,它也是相对安全的。但是,重用IV + Key对会带来两个主要问题:

  • 将前16个字节暴露给解密,如果两条消息具有相同的前缀,则将进一步阻止。
  • 对相同的消息进行相同的加密(对相同的前缀进行相同的加密)。这样会间接泄漏有关消息的大量信息。

标准结构非常适合非专家,因为该工具可在许多平台上轻松获得并且相对易于正确使用,如下所示:

Random IV + CBC-ciphertext + HMAC

IV不是秘密。将其与消息一起发送是标准且正确的。 IV只能是攻击者无法预测的。只要攻击者无法预测(或控制)IV,即使是偶尔的重用也会泄漏很少的信息。显然,如果始终为零,则可以认为它是微不足道的。

CBC(以及CTR)不提供该消息的任何身份验证。在运输过程中可能会对其进行修改。如果攻击者知道明文消息,则在某些情况下他们可以修改加密的消息,以便以已知方式解密。例如,如果我知道(或可以猜测)该消息显示为“ To Bob:$ 100”,则可以修改该消息而无需知道密码为“ To Eve:$ 100”。身份验证可以防止这种情况。验证CBC的方法是使用HMAC(首先加密,然后是散列)。

有关实际使用的这种格式的示例,请参见RNCryptor格式,包括RNCryptor-js

Maarten提到了GCM,我同意这是一种出色的加密技术,但我不同意非专家应该使用它。作为对抗模式,它具有与点击率相同的危险。如果使用不当,它将完全崩塌(与CBC相比,CBC的安全损失要平滑得多)。但是,这是一个非常有主见的主题,而且GCM爱好者也没有错。我只是对“非专家的标准最佳实践”应该是什么持不同意见。

要“我想要最好的安全性”,那么您绝对需要让安全专家参与。选择正确的阻止模式是保护系统最简单的部分,并且还有许多其他陷阱同样重要。

答案 1 :(得分:2)

  
      
  1. 我可以通过CTR多次使用相同的密码,并且没有IV吗?
  2.   

否,在这种情况下,点击率会充当很多时间限制,您将失去大部分(并非全部)安全性。

  
      
  1. 如果我要使用CBC,可以安全地以明文形式发送IV和加密的消息吗?
  2.   

使用CBC也不安全,因为您可能会成为填充oracle攻击的受害者。


使用具有12字节随机IV的GCM,或者-更好的做法是-将TLS与预共享密钥(PSK)结合使用。