【发布时间】:2011-04-29 08:22:26
【问题描述】:
我目前正在研究我正在开发的网站的用户身份验证协议。我想创建一个身份验证 cookie,以便用户可以在页面之间保持登录状态。
这是我的第一个 bash:
cookie = user_id|expiry_date|HMAC(user_id|expiry_date, k)
k 是HMAC(user_id|expiry_date, sk),sk 是只有服务器知道的 256 位密钥。 HMAC 是一个 SHA-256 哈希。请注意,“|”是一个分隔符,而不仅仅是串联。
这在 PHP 中是这样的:
$key = hash_hmac('sha256', $user_id . '|' . $expiry_time, SECRET_KEY);
$digest = hash_hmac('sha256', $user_id . '|' . $expiry_time, $key);
$cookie = $user_id . '|' . $expiry_time . '|' . $digest;
我可以看到它很容易受到安全 Cookie 协议中所述的重放攻击,但应该能够抵抗批量攻击和加密拼接。
问题:我在这里是正确的,还是我错过了一个巨大的漏洞?有没有办法防御使用动态分配的 IP 地址且不使用会话的重放攻击?
注意事项
我阅读的最新资料:
Web 上客户端身份验证的注意事项
又名傅等人。
(https://pdos.csail.mit.edu/papers/webauth:sec10.pdf)
安全的 Cookie 协议
又名刘等人。
(http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf)
它扩展了以前的方法
强化的无状态会话 Cookie
(http://www.lightbluetouchpaper.org/2008/05/16/hardened-stateless-session-cookies/)
这也扩展了以前的方法。
由于这个主题非常复杂,我只是在寻找在创建和破坏身份验证方案方面具有实际经验的安全专家的答案。
【问题讨论】:
-
这是一个很好的问题,我想知道您是否会考虑开始赏金以复活该问题并引起更多关注。甚至可以将问题的链接通过电子邮件发送给各种安全专家。
-
您可能会在security.stackexchange.com获得更多答案
标签: language-agnostic authentication cookies passwords security