根據CWE-329非隨機IV允許字典攻擊的可能性。 然而,in the AES crypto example,golang文檔使用非隨機IV:爲什麼golang crypto示例不使用隨機IV?
ciphertext := make([]byte, aes.BlockSize+len(plaintext))
iv := ciphertext[:aes.BlockSize]
這是實現安全的,或者我應該使用一個隨機函數來獲取我的IV?
根據CWE-329非隨機IV允許字典攻擊的可能性。 然而,in the AES crypto example,golang文檔使用非隨機IV:爲什麼golang crypto示例不使用隨機IV?
ciphertext := make([]byte, aes.BlockSize+len(plaintext))
iv := ciphertext[:aes.BlockSize]
這是實現安全的,或者我應該使用一個隨機函數來獲取我的IV?
這是安全的,因爲IV是由密碼安全僞隨機數發生器(CSPRNG)填充的,默認爲/dev/urandom
,由OS提供。來自ExampleNewCBCEncrypter
功能:
iv := ciphertext[:aes.BlockSize]
if _, err := io.ReadFull(rand.Reader, iv); err != nil {
panic(err)
}
你錯了。在加密的情況下,它使用隨機IV。在解密的情況下,它使用消息中的IV。不要讓IV作爲密文的一部分被初始化的事實騙過你;它所做的下一件事是從[強隨機源](http://golang.org/pkg/crypto/rand/#pkg-variables)將隨機字節讀入該片段。 – hobbs
感謝您澄清GO示例,它確實通過執行'io.ReadFull(rand.Reader,iv)'來隨機化IV。我認爲這有點誤導。做'iv:= make([]字節,[:aes.BlockSize])'分配會更清楚。 – Vinzent
甚至沒有有效的語法。 – hobbs