我可以在 AES-GCM 中发送未加密的随机数吗?

Can I send unencrypted nonce in AES-GCM?

我正在通过简单的聊天实现 AES-GCM。由于 nonce 是 public 没有问题,我需要在每条消息中更改它,我可以发送未加密的消息 nonce 和消息本身吗?

一个例子:

有这样一个函数:

AESGCM(nonce, key, data_to_encrypt, unencrypted_data)

而我是这样使用的:

message = AESGCM(nonce, key, data, nonce)

然后,加密的消息将如下所示:

unencrypted_nonce | encrypted_data | authentication_tag

AES-GCM 文档提到随机数 3 次;

A value that is used only once within a specified context.

The IV is essentially a nonce

AESGCM(nonce, key, data, unencrypted_data)

AES-GCM 在 CTR 操作模式下内部使用 AES,CTR 模式将块密码转换为流密码。对于 AES-GCM 安全和 CTR 模式,每个密钥只能使用一次随机数(使用一次的数字)。 nonce-key 对应该只出现一次。如果随机数重复,这可能会导致

  1. 由于像所有流密码一样的 crib-dragging,保密性失败。
  2. Even a single AES-GCM nonce reuse can be catastrophic.

随机数可以随机生成,但是,基于 counter/LFSR 的解决方案更好,更好的解决方案是 combination

  • 如果您发送 nonce 加密邮件,您希望如何解密邮件。必须以未加密方式发送。