首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HMAC + AES保证保密和诚信?

HMAC + AES保证保密和诚信?
EN

Security用户
提问于 2015-01-09 19:10:05
回答 1查看 802关注 0票数 1

作为练习,我正在编写一些代码,这些代码接受可能是秘密属性的列表(例如用户ID、密码、IP地址)、添加时间戳、对其进行加密和签名。

下面是代码所做的高级概述--从它应该确保机密性和完整性的角度来看,这看起来正确吗?

我不确定的主要事情是从同一个用户提供的秘密密钥中导出加密密钥和签名密钥,但这似乎有点偏执,因为假设密钥派生算法的底层散列函数的强度,这两者之间不应该有任何关系。

如果有人对源代码感兴趣,那么可以找到这里,它与一个小型测试套件一起使用setuptools进行打包。

Implementation

用户提供了一个私钥和两个可选的盐类,我们使用它们来使用PBKDF2派生加密和签名密钥。如果没有提供salt,则使用urandom生成两个。

接下来,用户提供一个属性字符串列表,即['a', 'b', 'c',...],它被转换为一个用环分隔的字符串,并将str(time.time())加到其中。使用PKCS#7方法填充此明文。使用urandom生成初始化向量( IV ),然后使用上面描述的密钥和IV用AES-256 (CBC模式)加密明文。

然后使用Python的本机HMAC-MD5实现对IV +密文进行签名,并使用上面所述的签名密钥对其进行签名,并将此签名附加到消息中。

解密和验证过程大致遵循上述相反的过程,在验证步骤中要格外小心,使用内置的compare_hash方法来防止由于定时攻击而造成的漏洞。

EN

回答 1

Security用户

回答已采纳

发布于 2015-01-09 22:00:18

您正在使用多少次PBKDF2迭代?

我不认为从同一个用户提供的秘密密钥派生加密和签名密钥有什么问题。正如您所说的,如果散列函数是实心的,并且使用单独的盐类和足够的PBKDF2迭代,那么它将是安全的。

使用PKCS#7填充应该可以,如果在解密之前检查HMAC,就不会受到填充oracle攻击的影响。我必须问,为什么是HMAC-MD5?虽然HMAC-MD5目前并没有因为没有针对MD5的实际的预映像攻击而被破坏,但是MD5由于其较弱的冲突抵抗力,已经部分地失败了它的安全需求。那么,为什么不使用更安全的哈希函数呢?对密码的攻击只会变得更好,而不是更糟。我强烈建议你使用SHA-2或SHA-3。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/78824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档