假设我有一个只能使用特定链接才能访问的资源。我可以使用256位随机标识符生成链接,例如,只有拥有链接的用户才能访问资源。恶意用户将无法访问链接,因为在如此大的空间中正确猜测有效ID是不可行的。
相反,我可以使用128位随机标识符,然后使用服务器才知道的密钥生成该ID的128位HMAC (让我们暂时忽略我们是否可以拥有128位HMAC)。
一个好的HMAC创建一个均匀分布的输出,因此在这两种情况下,我们将有效地有一个256位的随机数。
HMAC版本更安全吗?你能解释一下吗?
发布于 2022-08-18 12:50:36
具有256位随机标识符的Go
根据您(理想的)假设,两者的安全性应该是相同的。但是,我认为,从技术上讲,<#>HMAC解决方案可能会引入不足,因为它的值来自前128位部分的值。虽然正确地实现密码功能可以防止任何人产生有效的链接,但现实世界的事故(密钥暴露)或密码分析的进展可能会导致这种情况的发生。
在出现链接妥协的情况下,第一种方法很容易地允许您生成一个新链接。基于HMAC的解决方案将迫使您生成一个新的128个随机部分及其HMAC,将您的链接公开到可能的已知-明文攻击。密钥展览将要求您更改您的密钥并重新生成您的所有链接。再加上密钥管理、正确的密码实现等。
更复杂并不意味着更安全。
发布于 2022-08-19 15:57:29
因为只有服务器知道HMAC的密钥,所以它是唯一能够验证链接真实性的人。
这可以用来区分随机猜测和一度有效的链接。如果连续的无效猜测未能通过此检查,IP可能会受到严厉的惩罚。它也可以用来短路去寻找一个记录。不确定单个HMAC是否比查找更快。
至于总的随机性,虽然HMAC的输出是一个相当随机的分布,但在给定输入和键的情况下是确定性的。因此,前128位中的每一个数字都映射到一个256位的输出。虽然它在总体上看起来是随机的,但在普通观察者看来,只有2^128个值。而在一个完全随机的方案中,前128位是独立于最后128位的.
https://security.stackexchange.com/questions/264177
复制相似问题