我使用的是一个名为PyCryptodome的Python库,它为AES-GCM密码提供了以下API:
https://pycryptodome.readthedocs.io/en/latest/src/cipher/aes.html
如您所见,IV不适用于GCM密码器。
有一些C++库期望用户指定IV,而不是现在。
假设我得到了一条使用16位IV的C++库加密的消息,稍后,我想使用Python来解码这条消息。既然我知道所使用的密钥和IV,那么当我指定现在为IV时,我能正确地解密这个消息吗?
发布于 2019-06-10 23:30:36
用于AES-GCM的参数的术语必须是唯一的,从一条消息到另一条消息,对于任何一个键来说,这个术语有时被称为‘nonce’,有时被称为‘IV’。
这是PyCryptodome在区分“现在”和“IV”时得到的区别--尽管它对AES-CFB和AES-OFB说的是“IV”,而实际上它们只是使用了一个“just”。然而,在其他一些API中,相应的参数总是被称为IV。为了有信心,您应该使用两个不同的库来起草一些代码--比如您心目中的C++库之一--并确保它们可以互操作,并包括具有固定键、非cases和消息的已知答案测试,作为代码中的测试用例。
注意: AES-GCM最好使用96位(12字节)作为消息序列号的顺序选择。如果您使用一个128位(16字节)的名(正如PyCryptodome文档错误地建议的那样),就好像您随机地选择了一个96位的nonce,这意味着,由于有发生当前冲突的危险,在消息数量上的限制要比按顺序选择96位nonce的限制小得多。
https://crypto.stackexchange.com/questions/71216
复制相似问题