仅基于数据使用 AESCCM 仅生成和验证 MAC 用于身份验证目的
Generate and verify only MAC using AESCCM for authentication purpose only based on adata
我需要从仅使用具有 32 字节密钥和 Nonce 的 AES-CCM 进行身份验证的数据中生成并验证 4 字节 MAC。
我尝试使用“CcmBlockCipher(new AesEngine())”对象,但它希望对数据进行加密或解密。但是,我得到的数据未加密,但其中包含纯文本数据 + MAC,这仅意味着使用 AES-CCM 进行身份验证。
如何使用 BouncyCastle C# 库以便仅使用 AES-CCM 在纯文本数据上生成 MAC 并从收到的 MAC 中验证相同内容?
这种类型的数据通常称为“附加身份验证数据”(AAD)。它将包含在身份验证标记的计算中,但不会加密(resp. 解密)。
您可以使用 ProcessAadBytes
(还有 ProcessAadByte
)方法向 CcmBlockCipher
提供此类输入。请注意,这些方法没有输出缓冲区,因为密码不将 AAD 视为其“流”的一部分。
因此,在您的情况下,对于“加密”,没有要加密的实际数据,您只需使用 ProcessAadBytes
添加所有明文,然后调用 DoFinal
获取输出,其中包括只有身份验证标签。如果你还需要发送明文,你必须自己安排。
与解密类似,CcmBlockCipher
不将 AAD 视为其通常输入的一部分;它应该使用 ProcessAadBytes
添加,然后是 DoFinal
,它只包含您的情况下的标签。
我需要从仅使用具有 32 字节密钥和 Nonce 的 AES-CCM 进行身份验证的数据中生成并验证 4 字节 MAC。
我尝试使用“CcmBlockCipher(new AesEngine())”对象,但它希望对数据进行加密或解密。但是,我得到的数据未加密,但其中包含纯文本数据 + MAC,这仅意味着使用 AES-CCM 进行身份验证。
如何使用 BouncyCastle C# 库以便仅使用 AES-CCM 在纯文本数据上生成 MAC 并从收到的 MAC 中验证相同内容?
这种类型的数据通常称为“附加身份验证数据”(AAD)。它将包含在身份验证标记的计算中,但不会加密(resp. 解密)。
您可以使用 ProcessAadBytes
(还有 ProcessAadByte
)方法向 CcmBlockCipher
提供此类输入。请注意,这些方法没有输出缓冲区,因为密码不将 AAD 视为其“流”的一部分。
因此,在您的情况下,对于“加密”,没有要加密的实际数据,您只需使用 ProcessAadBytes
添加所有明文,然后调用 DoFinal
获取输出,其中包括只有身份验证标签。如果你还需要发送明文,你必须自己安排。
与解密类似,CcmBlockCipher
不将 AAD 视为其通常输入的一部分;它应该使用 ProcessAadBytes
添加,然后是 DoFinal
,它只包含您的情况下的标签。