Language agnostic 解密Web身份验证
我目前正在为我正在开发的网站研究用户身份验证协议。我想创建一个身份验证cookie,以便用户可以在页面之间保持登录状态 这是我的第一次狂欢:Language agnostic 解密Web身份验证,language-agnostic,authentication,cookies,passwords,security,Language Agnostic,Authentication,Cookies,Passwords,Security,我目前正在为我正在开发的网站研究用户身份验证协议。我想创建一个身份验证cookie,以便用户可以在页面之间保持登录状态 这是我的第一次狂欢: cookie = user_id|expiry_date|HMAC(user_id|expiry_date, k) 其中k是HMAC(用户id |到期日,sk),sk是仅服务器知道的256位密钥。HMAC是一个SHA-256散列。请注意,“|”是分隔符,而不仅仅是串联 这在PHP中是这样的: $key = hash_hmac('sha256', $use
cookie = user_id|expiry_date|HMAC(user_id|expiry_date, k)
其中k是HMAC(用户id |到期日,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上客户端身份验证的应做事项和不应做事项 aka Fu等人。
() 安全Cookie协议 aka Liu等人。
()
它扩展了前面的方法 强化无状态会话cookie
()
这也扩展了前面的方法
由于主题极其复杂,我只想从在创建和破坏身份验证方案方面具有实际经验的安全专家那里寻找答案。一般来说,这很好,我在多个应用程序中也做过类似的事情。它不比会话ID更容易受到重播攻击。您可以使用SSL保护令牌不被泄漏,以便重播,这与会话ID相同 次要建议:
- 在用户数据中放置一个字段,该字段在更改密码时更新(可能是密码生成计数器,甚至只是随机salt),并将该字段包含在令牌和签名部分中。然后,当用户更改密码时,他们也会使任何其他被盗代币失效。如果没有这一点,您将受限于您可以合理地允许代币在到期前存活的时间
- 在令牌和签名部分中放置一个方案标识符,以便(a)您可以为不同的目的使用不同类型的令牌(例如一个用于auth,一个用于XSRF保护),以及(b)您可以使用新版本更新机制,而不必使所有旧令牌失效
- 确保从不重复使用
,以防止令牌被用于访问具有相同id的不同资源user\u id
- 管道定界假定
永远不会出现在任何字段值中。这可能适用于您(大概)正在处理的数值,但您可能在某些时候需要更复杂的格式,例如URL编码的名称/值对|
- 双HMAC似乎对你没有多大帮助。根据目前的理解,针对HMAC-SHA256的暴力和密码分析已经非常困难
uname-a
(但其他操作系统也有类似的功能)。足够的系统信息,您可以完全跳过使用(部分)IP地址。这项技术需要一些实验。仅使用通常由浏览器提供的系统信息将使操作更简单我认为这个协议很弱小!
它集成在http./p>这是一个很好的问题,我想知道你是否会考虑启动一个赏金来复活这个问题并得到更多的关注。甚至可以通过电子邮件将该问题的链接发送给各个安全专家。在Good idea中,您可能会得到更多答案。1) 这完全无关。2) 不涉及非对称加密,只涉及两个或四个哈希。3) 这就是密码学的全部意义,使系统依赖于密钥的安全性,而不是协议的安全性。“某人只需要破解256位”是荒谬的。这大约是2^256次尝试。好