基于HMAC的身份验证系统相比HTTPS的单令牌身份验证系统更昂贵吗?

3
第一种情况需要为每个通信生成一个HMAC来识别请求,这样服务器就可以重新生成它以确保客户端被授权(因为HMAC是使用只有服务器和客户端知道的私钥加密的),而第二种情况只需要服务发出证书(或令牌)一次,并保持其有效一段时间 -例如15分钟。当然,为了防止中间人攻击或重放攻击,它必须只通过SSL发送,具有所有相关后果(更多带宽和更多CPU要求)。
个人认为第一种不仅更简单,而且更强大,因为每个请求都有其自己独特的数据,而第二种则依赖于SSL证书的完整性(我并不是说签名的SSL证书很容易破解,但如果有人破解了它,所有通信都将被嗅探)。
所以我认为它们具有以下优缺点:
- HMAC优点:每个请求都有唯一的令牌,可以通过使用唯一数据组成签名和时间戳来真正安全地防止MITM和Replay攻击,易于实现 - HMAC缺点:需要服务器为每个单独的请求重新生成令牌 - 令牌优点:多个请求只需要一个令牌,在需要多个客户端操作的服务上很有用 - 令牌缺点:所有通信都需要SSL。
我认为我需要设置一些测试来得出最终答案,但我很想听听是否有人已经有了一些基于旧经验的知识或想法。

1
你所说的“昂贵”是指什么?建设方面的成本?维护成本?还是CPU资源? - Claude
是的,抱歉,我应该更清楚:我的意思是哪个在资源使用方面更昂贵(为了处理传入的连接)。哪一个需要更多的资源来执行。 - user1543863
在这种情况下,这将很容易(正如Pavel所提到的):非对称加密始终比对称加密更昂贵,而加密比签名更昂贵(作为一个经验法则;我相信有一些不太安全的非对称加密比安全的对称加密更便宜等等...)。现在,看到现代服务器可以处理数千个SSL连接每秒(和数十万个HMAC签名),你必须在一个非常高流量的网站上工作才会关注到这个问题。可能SSL在开发时间方面更便宜... - Claude
2个回答

1

HMAC和PKI旨在解决非常不同的问题。

如果您正在尝试保护消息免受在传输过程中被修改的风险,那么HMAC旨在解决这个问题,并且将为您提供良好的服务。

如果您想要防止消息在传输过程中被读取,那么您唯一的选择是PKI(例如SSL)。 PKI提供的保证比HMAC更加严格 - 毕竟,如果无法读取消息,则很难对该消息进行有意义的修改 :)

如果您通过PKI传输HMAC使用的密钥,请注意,HMAC不可能比PKI系统更安全。毕竟,如果您破解了PKI,那么您可以轻松地读取HMAC密钥。

SSL的大部分带宽开销都将在握手过程中产生;如果您将任何内容发送到SSL上,则没有理由不将其余通信也发送到SSL上。


0

如果您只想使用基于密码(或基于密钥)的身份验证来验证客户端的HTTP请求,那么HMAC是更好的解决方案。现代HMAC在密码分析方面比公钥算法更可靠。

在服务器端生成随机令牌的开销要比执行公钥转换小。

P.S. 如果问题可以通过对称加密来解决,最好使用对称加密来解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接