İçeriğe geç

Statik IV (ARCH5114)

Anahtar go.security.static-iv · Önem error · Kategori security · CWE CWE-329

Sabit veya sıfır bir IV/nonce kullanmak, aynı anahtarla şifrelenen aynı düz metinlerin aynı şifreli metni üretmesine yol açarak CBC/CTR/GCM’in anlamsal güvenliğini yok eder.

func encrypt(block cipher.Block, plaintext []byte) []byte {
iv := make([]byte, block.BlockSize()) // sürekli sıfır
stream := cipher.NewCTR(block, iv)
out := make([]byte, len(plaintext))
stream.XORKeyStream(out, plaintext)
return out
}
func encrypt(block cipher.Block, plaintext []byte) ([]byte, error) {
iv := make([]byte, block.BlockSize())
if _, err := rand.Read(iv); err != nil {
return nil, err
}
stream := cipher.NewCTR(block, iv)
out := make([]byte, len(plaintext))
stream.XORKeyStream(out, plaintext)
return append(iv, out...), nil // IV'yi başa ekle
}

Her şifreleme için crypto/rand ile benzersiz, rastgele bir IV/nonce üretin ve şifreli metinle birlikte saklayın.