2008年6月1日星期日

非安全线路上的密码传输与登录

这个东西是给新版出校做准备而写的。因为校园网里,密码嗅探和会话劫持的几率比较大,所以不能将密码的明文,或者固定的哈希在网络上发送。这样就需要使用 一个动态的密码验证协议。本来是打算使用类似NTLM那样的挑战/相应式的验证的,但是后来大树说其实可以用随机值加md5就可以。虽然MS NTLM的安全性更好,但是相对比较复杂。所以后来就使用了后面一种实现方式。
大致流程如下:
1:服务器启动,初始化一个RSA密钥对
2:客户向服务器发送预登录请求,服务器生成一个随机值R,一个时间戳T,用生成的密钥对R和T签名得到签名S,吧R、T和S返回给客户
3:客户端收到R、T、S,把R和密码的unicode拼接在一起,求出哈希值H1,然后吧S、R、T、H1和用户名U发送到服务器。
4:服务器接收到S、R、T、H1、U以后,首先检查R与T的签名是否符合S,确定R与T的真实性后检查T是否超时,之后根据U取得用户的密码,与R拼接,求哈希H2,然后检查H1是否等于H2。这些步骤中间任何一步出错将导致验证失败。

这个方法的Java实现我正在写,等写完了再发上来。

1 条评论: