根据CWE-329 NON-Random IV允许字典攻击的可能性。 但是,in the AES crypto example,golang文档使用非随机IV:
ciphertext := make([]byte, aes.BlockSize+len(plaintext))
iv := ciphertext[:aes.BlockSize]
这个实现是安全的,还是应该使用随机函数来获取我的IV?
答案 0 :(得分:1)
它是安全的,因为IV是由密码安全的伪随机数发生器(CSPRNG)填充的,默认情况下/dev/urandom
并且从OS提供。来自ExampleNewCBCEncrypter
函数:
iv := ciphertext[:aes.BlockSize]
if _, err := io.ReadFull(rand.Reader, iv); err != nil {
panic(err)
}