1.过程
(1). 客户端将name(或者经过加密), 一个服务器约定的公共salt, 密码password(或者经过hash), 当前时间t
计算 data = hash(salt+name+password+t)
发送 nane, t, data到服务器
(2). 服务器从数据库提取密码
如果t与当前时间相差超过阀值, 则认为数据已经过期, 要求客户端重新发送.
计算 data = hash(salt+name+password+t)
如果和客户端发来的相等, 则通过验证
2. 抗窃听
窃听者可以通过窃听的信息登录服务器, 但是必须是在时间t附近.
(如果把t改成服务器发送的一次性随机数, 则可以避免这个缺陷, 但是过程会复杂一点).
4. 抗穷举
由于hash使用了特定salt和name, 无法通过预先制定的词典攻击password.
5. 扩展应用
根据一组服务器内部共知而对外部秘密的password和salt,
用hash生成的data可以给客户端作为session登录各个服务器.
这种情况:
(1)客户端不知道password和salt, 因而无法伪造session, 这个password可以随时改变,
只要所有服务器同时修改就可以.
(2)data中含有name信息, 因而不可以用一个用户的session登录另外一个用户
(3)由于t的存在, session有效期有时限.

1万+

被折叠的 条评论
为什么被折叠?



