为什么golang加密示例不使用随机IV?

时间:2015-09-17 15:03:39

标签: encryption go initialization-vector

根据CWE-329 NON-Random IV允许字典攻击的可能性。 但是,in the AES crypto example,golang文档使用非随机IV:

ciphertext := make([]byte, aes.BlockSize+len(plaintext))
iv := ciphertext[:aes.BlockSize]

这个实现是安全的,还是应该使用随机函数来获取我的IV?

1 个答案:

答案 0 :(得分:1)

它是安全的,因为IV是由密码安全的伪随机数发生器(CSPRNG)填充的,默认情况下/dev/urandom并且从OS提供。来自ExampleNewCBCEncrypter函数:

iv := ciphertext[:aes.BlockSize]
if _, err := io.ReadFull(rand.Reader, iv); err != nil {
    panic(err)
}