首页 > 解决方案 > 使用相同的密钥加密多个缓冲区

问题描述

我有一个由许多块组成的大型数据集(比如 1GB),有些大小约为 100 字节,有些大约 1 兆字节。每个块都由 AES-GCM 加密,使用相同的128b 密钥(当然也有不同的 IV)。我有一个结构,可以保留每个加密块的偏移量和长度,以及它的 IV 和 GCM 标签。

问题:如果我加密结构(从而隐藏每个加密块的开头、长度和 IV/标签),它会使我的数据更安全吗?或者可以将所有数千个加密块公开,以便任何人查看每个块的开始和结束位置,以及它的 IV/标签是什么?块大小是相当标准的,并没有透露太多关于数据的信息。我担心的是对密钥和数据的直接攻击(有数千个可用的加密样本) - 或其他间接攻击。

标签: securityencryptionaesaes-gcm

解决方案


我相信您已经回答了您自己的大部分问题的评论。如果问题是“我需要加密结构吗?” 那么下一个问题(正如 YAHsaves 所指出的)是“结构本身是敏感信息吗?” 如果答案是否定的,那么这就是你的答案。如果结构本身是敏感的,它应该受到保护。

如果由于重复使用唯一的 IV 而导致您的密钥受到攻击,那么这表明 GCM 使用不正确,应该解决。如果使用正确,GCM 旨在支持密钥重用。NIST 为如何在NIST 800-38d中设计 GCM 系统提供了良好而明确的指导。特别是,您想阅读第 8 节,尤其是关于推荐的 IV 构造的 8.2.1(如果您不使用推荐的 IV 构造,则阅读 8.3)。

NIST 的大部分指导可以总结为“确保 Key+IV 永远不会被重复使用,如果你不能 100% 保证它,那么保证它至少 2^-31 (99.9999999%),不认真,我们不是在开玩笑,不要重复使用 Key+IV,一次也不要。”


推荐阅读