CHAP、HMAC、HOTP、TOTP等等

去年CSDN密码泄露案公布之后,很多专家跳出来讨伐说他家的程序员太白痴居然还在数据库里面存明文。最近linkedin的事件出来之后,如何保存密码,这个问题又被拉出来谈。我认为,密码怎么保存与怎么在网上传输,这两个问题不能分开来谈。除非你已经有了安全的信道,如SSL,否则还是存明文为妙。

mysql对其原始的CHAP协议做了些改进:
storedhash=sha1(passphrase)
reply=xor(passphrase, sha1(public_seed,storedhash)

在网络上发送的是public_seed、reply,数据库里面存储的是storedhash。所以如果只是拿到了mysql.user表里的数据,而没有原始的passphrase,想要构造出reply,还是挺困难的。不过我估计这个算法是工程师自己想出来的,根本就没找安全专家讨论过,未必经得起推敲。

今天我在我的手机上装了google authenticator,它主要是采用TOTP的方式进行身份验证。TOTP是HOTP的一个变种,把HOTP中的counter换成了时间,TOTP = Truncate(HMAC-SHA-1(K,T)) 。其中K是双方之间已经共享的一个密钥,而T则是当前时间除以步长(默认是30)得到的。用手机做这个的一个优势是,K的分发可以不走网络,而是通过二维码。

我准备抽空好好看看SRP。

此博客中的热门博文

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

在windows下使用llvm+clang

tensorflow distributed runtime初窥