Encryption 无IV的AES CTR-多条消息的同一密钥-安全?

Encryption 无IV的AES CTR-多条消息的同一密钥-安全?,encryption,cryptography,aes,rijndael,block-cipher,Encryption,Cryptography,Aes,Rijndael,Block Cipher,我想用js制作一个可以加密明文的网页,这样我就可以把它发送给我的朋友,他会用同一个网页来解密它 我们将共享同一密钥,并将其用于多条消息 我知道当使用AES CBC时,每条消息都需要随机iv,但我喜欢使用AES CTR 我将使用256键,而不是密码 我有两个问题: 我可以在CTR和no iv中多次使用同一密码吗 如果我将使用CBC,在发送加密消息的同时发送明文iv是否安全 我使用的是aes js和基本的通用操作模式: 我想要最好的安全措施 我可以在CTR和no IV中多次使用同一密码吗 不,在

我想用js制作一个可以加密明文的网页,这样我就可以把它发送给我的朋友,他会用同一个网页来解密它

我们将共享同一密钥,并将其用于多条消息

我知道当使用AES CBC时,每条消息都需要随机iv,但我喜欢使用AES CTR

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

我有两个问题:

  • 我可以在CTR和no iv中多次使用同一密码吗
  • 如果我将使用CBC,在发送加密消息的同时发送明文iv是否安全
  • 我使用的是aes js和基本的通用操作模式:

    我想要最好的安全措施

  • 我可以在CTR和no IV中多次使用同一密码吗
  • 不,在这种情况下,CTR将作为一个多时间垫,您将失去大部分而不是所有的安全性

  • 如果我将使用CBC,在发送加密消息的同时发送明文IV是否安全
  • 使用CBC也不安全,因为您可能成为oracle攻击的受害者


    使用带有12字节随机IV的GCM,或者更好地使用带有预共享密钥(PSK)的TLS

  • 我可以在CTR和no IV中多次使用同一密码吗
  • 不,在这种情况下,CTR将作为一个多时间垫,您将失去大部分而不是所有的安全性

  • 如果我将使用CBC,在发送加密消息的同时发送明文IV是否安全
  • 使用CBC也不安全,因为您可能成为oracle攻击的受害者



    将GCM与12字节随机IV一起使用,或者更好地使用带有预共享密钥(PSK)的TLS。

    首先,没有CTR或CBC与“无IV”一起使用。您可能只是将所有零用作IV。始终存在IV。(CTR称其IV为nonce。)

    CTR绝对不能重复使用nonce+密钥对。它可以完全破坏加密。这是避免CTR的主要原因,除非你知道自己在做什么。它很难正确使用,并且具有可怕的故障模式。(现在被认为是完全破坏的事实与这个问题密切相关。)我并不是说CTR在正确使用时是不好的;我是说小错误是灾难性的

    CBC永远不应该重复使用IV+密钥,但它没有那么具有破坏性。这是CBC对于非专家来说是一个非常好的选择的一个主要原因。即使使用不当,它也相对安全。但是,重用IV+密钥对会带来两个主要问题:

    • 公开前16个字节进行解密,如果两条消息具有相同的前缀,还将公开更多的块
    • 以相同的方式加密相同的消息(并以相同的方式加密相同的前缀)。这间接地泄露了有关消息的大量信息
    标准结构非常适合非专家,因为工具在许多平台上都很容易获得,并且相对容易正确使用,如下所示:

    Random IV + CBC-ciphertext + HMAC
    
    静脉注射不是秘密。随信息一起发送是标准和正确的。只有攻击者才能预测IV。即使偶尔的重用也会泄漏很少的信息,只要攻击者无法预测(或控制)IV。显然,如果IV始终为零,那么预测它是微不足道的

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

    有关此格式在实践中的示例,请参见格式,包括

    Maarten提到GCM,我同意它是一个优秀的密码学,但我不同意非专家应该使用它。作为计数器模式,它与CTR具有相同的危险。如果使用不当,它将完全崩溃(与CBC相比,CBC的安全性损失要平稳得多)。然而,这是一个非常固执己见的话题,GCM的粉丝们并没有错。我只是不同意“非专家的标准最佳实践”应该是什么


    为了“我想要尽可能最好的安全”,那么你绝对需要安全专家的参与。选择正确的块模式是保护系统最简单的部分,还有许多其他陷阱也同样重要。

    首先,没有CTR或CBC这样的带有“无IV”的东西。您可能只是使用全零作为IV。始终存在IV。(CTR称其IV为nonce。)

    CTR绝对不能重复使用nonce+密钥对。它可以完全破坏加密。这是避免CTR的主要原因,除非你知道自己在做什么。它很难正确使用,并且具有可怕的故障模式。(现在被认为是完全破坏的事实与这个问题密切相关。)我并不是说CTR在正确使用时是不好的;我是说小错误是灾难性的

    CBC永远不应该重复使用IV+密钥,但它没有那么具有破坏性。这是CBC对于非专家来说是一个非常好的选择的一个主要原因。即使使用不当,它也相对安全。但是,重用IV+密钥对会带来两个主要问题:

    • 公开前16个字节进行解密,如果两条消息具有相同的前缀,还将公开更多的块
    • 以相同的方式加密相同的消息(并以相同的方式加密相同的前缀)。这间接地泄露了有关消息的大量信息
    标准结构非常适合非专家,因为工具在许多平台上都很容易获得,并且相对容易正确使用,如下所示:

    Random IV + CBC-ciphertext + HMAC
    
    静脉注射不是秘密。随信息一起发送是标准和正确的。只有攻击者才能预测IV。哪怕是偶尔的一次