关于完美通行证登录协议的分析

以前和同事争论过,如果为了防止密码被数据库管理员偷窃,密码的hash运算应该放在服务器而不是客户端。但是现在越来越多的网页把这个过程用JS来实现。

http://passport.wanmei.com/ 。这是登录地址。通过分析该页面的源代码,可知协议流程如下:

1、C->S,发起http请求,建立连接

2、S->C,challenge,一个随机数r。(就是验证码)

3、C->S,username,hmac_md5(r,hash(username+password))

这其实就是Challenge-Handshake Authentication Protocol (CHAP) 的一个拙劣的变种。如果我不知道原始密码,只要我知道hash(username+password),一样能登录。换句话说,真正的是密码是hash(username+password),服务器必须把这个以plaintext的方式在数据库存储,或者,它必须把password以plaintext的方式存储。

优点:

因为认证过程未采用HTTPS,在不安全的信道上传输。这种设计方式有效的防范了playback攻击。

缺点:

Both the client and server must know the plaintext of the secret

一个可选的改进是采用MS-CHAPv2:
首先,服务器和客户端必须知道密码的hash值,并以之作为对称密钥Kab
1、C->S,建立连接
2、S->C,16位的随机数r1
3、C->S,生成一个16位的随机数r2。{r2,{hash(r2,r1,username)}Kab}
4、S->C,解密上一步的报文,如果成功,发送{r2}Kab

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥