В соответствии с CWE-329 NON-Random IV допускают возможность атаки по словарю. Однако in the AES crypto example, golang документы используют неслучайный IV:Почему в примере golang crypto не используется случайный IV?
ciphertext := make([]byte, aes.BlockSize+len(plaintext))
iv := ciphertext[:aes.BlockSize]
Является ли это реализация безопасной или я должен использовать случайную функцию, чтобы получить мой IV?
Вы ошибаетесь. В случае шифрования используется случайный IV. В случае дешифрования используется сообщение IV из сообщения. Не позволяйте факту, что ИВ инициализируется как фрагмент зашифрованного текста, обманите вас; следующая вещь, которую он делает, - это считывание случайных байтов в этот фрагмент из [сильного случайного источника] (http://golang.org/pkg/crypto/rand/#pkg-variables). – hobbs
Благодарим вас за разъяснения относительно примера GO, который действительно рандомизирует IV, выполнив 'io.ReadFull (rand.Reader, iv)'. Я думаю, что это немного вводит в заблуждение. Выполнение 'iv: = make ([] byte, [: aes.BlockSize])' назначение будет более четким. – Vinzent
это даже не действительный синтаксис. – hobbs