我一直在寻找一种快速、强大和健壮的算法来加密大文件的身份验证。我想在不使用第三方软件的情况下自己实现算法。我使用了不同的AES模式,但是软件实现很容易受到侧通道攻击。此外,最常用的AES 256 GCM有一个加密,认证大小限制为64 GB。我尝试过其他著名的密码,如XChaCha20 20/ XSalsa20和poly1305,但我无法绕过它们各自的大小限制(我只能用XChaCha20- Poly1305 - IETF版本加密256 GB )!
发布于 2020-03-26 17:27:38
您不应该像对大文件只是一条消息一样对它们进行加密;您应该将它们分割成小块,用一个AEAD分别对每个块进行加密,使用如下构造:
原因之一是加密库通常是实现的,因此您需要内存中的整个消息来加密它。另一个原因是,工具的用户通常期望输出将以增量方式产生(这样他们就可以将其输送到其他工具),但是典型的AEAD密码要求您永远不要输出伪造密文的解密,因此,将整个文件加密为一条消息需要在生成任何输出之前对整个文件进行身份验证。(并不是说输出伪造的真确前缀总是安全的。)
请参见:
一旦您采用了这个范例,您所关心的密码中的消息长度和密文大小限制就不再重要了,因为每一个您只对短消息进行加密,如果您超过了单个密钥的密文限制,您就可以按密钥旋转构建。例如,指向上面的i链接提供了以下特性:
因此,如果您只需要统计处理了多少数据,并在库接近极限时指示它rekey,那么正如文档所指出的,“流的总长度没有实际限制”。
https://crypto.stackexchange.com/questions/78466
复制相似问题