代码之家  ›  专栏  ›  技术社区  ›  bobo

是否可以在ECB模式下使用带有IV的AES?

  •  4
  • bobo  · 技术社区  · 15 年前

    http://php.net/manual/en/function.mcrypt-encrypt.php ,我看到以下代码在ECB模式下使用带有IV的AES,

    <?php
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $key = "This is a very secret key";
        $text = "Meet me at 11 o'clock behind the monument.";
        echo strlen($text) . "\n";
    
        $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
        echo strlen($crypttext) . "\n";
    ?>
    

    但来自维基 http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation 它表示,欧洲央行不需要静脉注射。 在ECB模式下,是否真的可以使用带有IV的AES?在这种ECB模式下,与不使用的情况相比,附加的IV是否会提供更多的安全性?

    4 回复  |  直到 14 年前
        1
  •  10
  •   ZZ Coder    15 年前

    ECB不执行块之间的链接,因此无法使用IV。mcrypt对所有模块使用相同的API。对于欧洲中央银行而言,IV只是被忽略了,因为欧洲中央银行模块具有以下定义的功能:

    int _has_iv() { return 0; }
    
        2
  •  17
  •   Nick Johnson    15 年前

    在欧洲央行模式下,没有办法使用IV。不过,这有点像你应该做的那样。

    永远不要为任何事情使用ECB模式。

    一般来说,您可能不应该直接使用加密原语,而应该使用类似于 keyczar 这就把这些决定抽象化了。

    **实际上,ECB有一些非常专门的用途,例如“安全”的伪随机排列-但您当然不应该将ECB用于与加密数据相关的任何事情。

        3
  •  6
  •   Kris    15 年前

    首先,你没有任何地方可以把这四个。欧洲央行的工作是,一个接一个的明文块,然后用密钥加密,以生成相应的密文。没有使用静脉输液的地方,这就是理论所说的。

    我不知道mcrypt_加密如何工作的细节,但我怀疑在使用ecb时,它只是不使用iv.通过在提供不同ivs的ecb中加密来尝试。如果结果相同,函数就不使用IV。

        4
  •  0
  •   swooby    14 年前

    ECB完全可以接受计数器(CTR)模式的加密/解密: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29

    注意,ctr解密 CTR加密。