Cryptography 我可以在AES-GCM中发送未加密的nonce吗?

Cryptography 我可以在AES-GCM中发送未加密的nonce吗?,cryptography,aes-gcm,python-cryptography,Cryptography,Aes Gcm,Python Cryptography,我正在一个简单的聊天中实现AES-GCM。既然nonce是公共的没有问题,并且我需要在每条消息中更改它,那么我可以在未加密消息本身的情况下发送消息nonce吗 例如: 有这样一个函数: AESGCM(nonce, key, data_to_encrypt, unencrypted_data) unencrypted_nonce | encrypted_data | authentication_tag 我用这种方式: message = AESGCM(nonce, key, data, no

我正在一个简单的聊天中实现AES-GCM。既然nonce是公共的没有问题,并且我需要在每条消息中更改它,那么我可以在未加密消息本身的情况下发送消息nonce吗

例如:

有这样一个函数:

AESGCM(nonce, key, data_to_encrypt, unencrypted_data)
unencrypted_nonce | encrypted_data | authentication_tag
我用这种方式:

message = AESGCM(nonce, key, data, nonce)
然后,加密消息将如下所示:

AESGCM(nonce, key, data_to_encrypt, unencrypted_data)
unencrypted_nonce | encrypted_data | authentication_tag

AES-GCM文件中提到了3次nonce

在指定上下文中仅使用一次的值

IV基本上是一个暂时的

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

  • 与所有流密码一样,由于crib拖拽,保密性失败
  • nonce可以随机生成,但是,基于计数器/LFSR的解决方案更好,更好的解决方案是

    • 如果发送
      nonce
      加密的邮件,您希望如何解密该邮件。它必须未加密发送

    我的疑问是,我是否可以用加密数据发送未加密的nonce,这就是问题所在。那么为什么不加密用来加密旧IV的IV呢?如前所述(攻击者可以在不破坏安全性的情况下知道IV。)()您不会增加安全性。