2017-08-01 51 views
1

鑑於這種代碼:AES-128-GCM在節點V6上驗證IV嗎?

const bufIV = Buffer.alloc(16); 
const cipher = crypto.createCipheriv(CIPHER, mykey, crypto.randomFillSync(bufIV)); 
let encrypted = cipher.update(doc, 'utf8', ENCODING); 
encrypted += cipher.final(ENCODING); 

請問IV也被驗證? this article的結尾似乎表明它需要,但我並不真正瞭解它是如何工作的。

使用良好的IV並不意味着您的密碼是安全的。你也必須認證你的密文。當你這樣做時,不要忘記驗證IV。

+0

您所指的文章不是關於GCM模式,因此它不能完全適用。 IV只需要對具有相同密鑰的每次加密都是唯一的。他們所指的身份驗證除CTR/CBC模式外還有一個MAC。 –

+0

因此,我不需要擔心它的一次性密鑰? –

+0

請注意,IV應該是12個字節;不是16.不同大小的IV由GCM算法支持,但它們可能不太安全,並且NIST不鼓勵它們(所以它們可能不被所有平臺支持)。 –

回答

1

是的,AES-GCM會自動驗證IV,驗證IV包含在驗證標籤的計算中。

現在的壞消息:因爲你需要使用setAuthTag沒有會在你向我們展示的代碼進行驗證明確設定了的NodeJS接收到的認證標籤。

+0

有關setAuthTag的好消息。我馬上就遇到了這個問題:) –