我对信息很陌生。我在研究各种加密算法。根据我迄今为止的发现,我认为HMAC和数字签名几乎是一样的,除了密钥是对称的还是不对称的。对我来说,HMAC的复杂度似乎低于数字签名的功能。那么,我可以说使用HMAC比数字签名更好吗?我发现HMAC的弱点是关键。但这真的发生了吗?如果是的话,当数字签名比HMAC更有效的时候,它是如何在现实世界中发生的呢?
发布于 2019-09-05 01:15:39
它们适用于不同的用例。假设您使用的是某个知道自己在做什么的人编写的经过良好测试的实现(所以,可能不是您自己编写的东西,也可能不是您自己编写的某个人的GitHub),它们都是相当安全的,尽管威胁模型有点不同。而且,HMACs通常在计算上更便宜。
只有在您完全信任消息验证方(通常是作者)和验证消息真实性的方时,HMAC才能使用。完全信任是必需的,因为验证HMAC的能力也意味着具有伪造HMAC的能力。只有当您有一种安全的方法来交换共享密钥时,它才能工作。
当验证真实性的一方不被认证方完全信任时,或者当无法安全地交换密钥时,使用签名。它通常计算成本更高,需要存储/传输更多的数据,因此除非需要,否则通常不会使用。
当“完全可信”有点模糊时,HMAC密钥泄漏主要是一个问题。例如,您可能信任第三方不会伪造消息,但您是否也信任它们有足够的密钥存储和足够的保护以防止应用程序的破坏?或者您可能相信他们的密钥交换系统是安全的,以防攻击者拦截或篡改交换的密钥,但不要信任他们不会在某个可能会被泄露的日志文件中捕获该密钥?
在很多情况下,你真的需要在这两种结构之间做出选择。想到的主要问题是JSON令牌(JWT)。我通常对JWT的建议是,如果验证JWT的一方比生成JWT的一方少得有意义,那么使用签名;否则使用HMAC。然而,它确实应该根据具体情况来决定。
https://security.stackexchange.com/questions/216560
复制相似问题