Encryption 如果每次更换IV,则重复使用钥匙

Encryption 如果每次更换IV,则重复使用钥匙,encryption,cryptography,aes,aes-gcm,Encryption,Cryptography,Aes,Aes Gcm,我正在创建一个程序,该程序将加密文件夹中的文件,并允许我稍后解密它们 我现在正在使用AES-GCM,我想知道使用相同的密钥但每次加密都更改IV是否是正确的方法 我使用mBedTLS来实现这一点,并且我能够使用AES-GCM和硬编码密钥以及IV成功地加密/解密文件。但是出于安全原因,我希望确保我正在更改需要更改的内容,并且出于性能原因,没有更改不需要更改的内容。是的 即使使用相同的静态密钥,单个AES-GCM nonce重用也可能是灾难性的 一次临时重用泄露了明文的异或,因此如果一个明文已知,对手

我正在创建一个程序,该程序将加密文件夹中的文件,并允许我稍后解密它们

我现在正在使用AES-GCM,我想知道使用相同的密钥但每次加密都更改IV是否是正确的方法

我使用mBedTLS来实现这一点,并且我能够使用AES-GCM和硬编码密钥以及IV成功地加密/解密文件。但是出于安全原因,我希望确保我正在更改需要更改的内容,并且出于性能原因,没有更改不需要更改的内容。

是的

即使使用相同的静态密钥,单个AES-GCM nonce重用也可能是灾难性的

一次临时重用泄露了明文的异或,因此如果一个明文已知,对手可以完全解密另一个明文

因此,您只能在每条消息中使用相同的
[nonce(IV),key]
元组

使用新的nonce/IV和相同的
静态键是非常好的

AES-GCM使用
32位
计数器运行,因此不幸的是,使用相同的密钥、nonce(IV)对,您只能安全地加密数据
(2^39-256位)


如果您想使用更安全的密码,我建议使用XSalsa20或XChaCha20,它们提供了
192位的
nonce大小,有效地允许使用相同的密钥、nonce对加密几乎“无限”数量的消息。

另一种方法是使用诸如HKDF之类的KBKDF为每个文件派生另一个密钥,通过组合主密钥和
信息
,可以是任何内容,只要每个文件都是唯一的。然后甚至可以将nonce设置为所有零字节。这样做的好处是,您可以选择任何加密方案/模式(尽管使用大密钥大小(如256位)可能对此类方案有利)。