【问题标题】:AES GCM manual byte[] concatenation of IV and tag to encrypted informationAES GCM 手动字节 [] 将 IV 和标签连接到加密信息
【发布时间】:2012-07-17 00:00:43
【问题描述】:

我在 GCM 模式下使用 AES 256 加密,使用来自此站点的名为 AuthenticatedAesCng 的类:CLR security

通过加密流写入明文后,我手动连接 IV、TAG 和加密数据,然后返回该值。

cs 是加密流,ms 是内存流

// Write through and retrieve encrypted data.
cs.Write(message, 0, message.Length);
cs.FlushFinalBlock();
byte[] cipherText = ms.ToArray();                   

// Retrieve tag and create array to hold encrypted data.
byte[] authenticationTag = encryptor.GetTag();      
byte[] encrypted = new byte[cipherText.Length + aes.IV.Length + authenticationTag.Length];

// Set needed data in byte array.
aes.IV.CopyTo(encrypted, 0);                       
authenticationTag.CopyTo(encrypted, IV_LENGTH);
cipherText.CopyTo(encrypted, IV_LENGTH + TAG_LENGTH);

// Store encrypted value in base 64.
return Convert.ToBase64String(encrypted);

这是在 GCM 模式下使用 AES 密码的正确方式吗?我应该手动将所有这些值放在一起还是自动完成而我只是错过了它?

【问题讨论】:

  • 这对我来说似乎是一个特定于实现的问题,所以它可能与 crypto.SE 无关。
  • 好的,关于我应该在哪里发帖有什么建议吗?
  • @crawfish,StackOverflow 可能是最好的地方。我现在正在迁移它。
  • 你最好的选择是吸吮它然后看看。在不添加标签的情况下先尝试一下,看看解密端是否因“缺少标签”或类似情况而失败。通过使用密文数组中已更改的非标记字节对其进行测试,确保它正在检查事物。那肯定会因“标签不匹配”或其他原因而失败。
  • Em,不,密文只是数据,但没有标签就不能拥有 GCM 密文:它会破坏 GCM 的全部目的。标签通常附加到密文中。 AAD 数据是可选的,它的全部目的是让它以明文形式发送。 IV 实际上是一个随机数,所以它可以在两边都计算。如果您使用随机 NONCE 或无法预先计算它,则将其添加到密文之前是正常的(但您必须在双方都明确编码)。

标签: c# .net encryption aes encryption-symmetric


【解决方案1】:

密文只是数据,但没有标签就不能拥有 GCM 密文:它会破坏 GCM 的全部目的。标签通常附加到密文中。

AAD 数据是可选的,它的全部目的是让它以明文形式发送。

IV 实际上是一个随机数,所以它可以在两边计算。如果您使用随机 NONCE 或无法预先计算它,则将其作为密文前缀是正常的(但您必须在双方都明确编码)。

【讨论】:

    猜你喜欢
    • 2016-11-14
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2015-10-29
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    相关资源
    最近更新 更多