繁体   English   中英

AES 加密大文件的最佳方式(约 5GB)

[英]Best way to AES Encrypt large files (Approx. 5GB)

我的要求:

我有一个 Azure 存储帐户,其中包含两个名为 Normal 和 Encrypted 的容器。

现在 zip 文件将上传到“普通”容器中,我需要对其进行加密并将其放入“加密”容器中。

文件可以在 3GB 到 5GB 之间的任何位置。

目前,我使用了带有填充 PKCS7 的 AES CBC(我没有使用 HMAC)。 这很好用。 但是基于一些安全问题,我们发现 AES CBC 不提供完整性。

挑战:

由于 AES GCM 更安全,我正在探索如何使用 AES GCM 加密更大的文件。 如果我们以块的形式进行加密,那么对于每个块都会生成不同的 Auth Tag。 如何解决这个问题? 因为我需要为解密团队提供密钥、IV 和授权标签来解密它。

是否很好,是否可以使用 AES GCM 加密 5GB 文件? 如果是这样,任何人都可以通过 C# 中的一些示例代码或链接来帮助我吗?

如果 AES GCM 对此不利,那么我如何将 HMAC 实施到我的 AES CBC 代码中。 当我在处理 Azure Blob 时,我正在使用 CryptoStream 加密内容并将其写入“加密”容器。

AES-GCM 将提供内置身份验证(完整性)机制。 但是通过这种模式,我们只能加密有限的内容(比如说最多 1GB)。

AES-CBC 将支持通过 CryptoStream class 进行流式传输,并且可以分块加密较大的文件而不会出现任何问题。 AES-CBC 的唯一问题是它不提供完整性。 为此,我们可以添加一些额外的逻辑来实现 HMAC,尽管我们可以实现完整性。

HMAC - 创建加密内容的 SHA256 hash 并将其传递给解密团队。 解密团队需要验证这个 hash。 只有当 Hash 匹配时,解密团队才能继续对加密内容进行解密。 通过这个,解密团队可以确保加密内容不被篡改。

这里提到的重点之一是:

GCM (GHASH) 的身份验证部分比 HMAC 弱,GHASH 提供最大 128 位身份验证标签,而 HMAC 允许更长的标签(HMAC-SHA-256 将允许 256 位身份验证标签)。 此外,在某些情况下,伪造 GHASH 标签比 HMAC 更容易

因此,我选择了带有 HMAC 加密的 AES-CBC。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM