【发布时间】:2011-04-17 01:29:10
【问题描述】:
我正在制作一个使用 AES 加密的数据包(即不是流)的协议。我决定使用 GCM(基于 CTR),因为它提供集成身份验证并且是 NSA 套件 B 的一部分。AES 密钥是使用 ECDH 协商的,其中公钥由受信任的联系人签名,作为网络的一部分-使用 ECDSA 之类的信任。 我相信我需要一个用于 GCM 的 128 位随机数/初始化向量,因为即使我为 AES 使用 256 位密钥,它始终是一个 128 位块密码(对吗?)读取 BC 代码后使用 96 位 IV。
我绝对没有实现我自己的算法(只是协议——我的加密提供者是 BouncyCastle),但我仍然需要知道如何使用这个随机数而不是自找麻烦。使用相同 DH 密钥的两个人之间使用的 AES 密钥将保持不变,因此我知道不应将相同的 nonce 用于多个数据包。
我可以简单地在数据包中添加一个 96 位的伪随机数并让接收者将其用作随机数吗?这是点对点软件,可以随时发送数据包(例如,即时消息、文件传输请求等),速度是一个大问题,因此最好不必使用安全的随机数来源。随机数根本不必保密,对吧?还是必须像“加密安全”的 PNRG 一样随机?维基百科说它应该是随机的,否则它很容易受到选择的明文攻击——但在这两种说法旁边都有一个“需要引用”,我不确定这是否适用于分组密码。我真的可以使用一个计数器来计算从 1 开始的给定 AES 密钥发送的数据包数量(与 128 位块数量的计数器分开)吗?显然,这将使随机数可预测。考虑到 GCM 会进行身份验证和加密,这会损害其身份验证功能吗?
【问题讨论】:
-
请注意 - security.stackexchange.com/questions 可能更适合回答此类问题。
-
@Eugene Mayevski 'EldoS Corp 他刚刚从更大的社区中得到了更好的答案。
-
@Eugene Mayevski 'EldoS Corp 看,没什么好担心的。所以回答了他的问题。
-
@Rook 你是对的,但重点完全不同。 security.stackexchange.com 是针对与安全相关的问题而创建的,您肯定知道 StackOverflow 和姊妹站点的创建是为了组织类似于 wiki 的问题和答案知识库。并且将有关某个主题的所有问题集中在一个地方要比将它们分散在多个站点上要好得多。因此,虽然 OP 的短期目标是获得最广泛的曝光,但社区的兴趣可能是将编程安全问题和理论安全问题分开。
-
@ugene Mayevski 'EldoS Corp 那么你是建议人们继续在两个网站之间交叉发帖吗? Secuirty.se 会很有用,但目前有近十几个用户定期回答问题,这不是很有趣。
标签: security cryptography aes block-cipher