IT技术博客大学习 共学习 共进步

CHAP、HMAC、HOTP、TOTP等等

changming的blog 2012-06-14 13:54:11 浏览 3,702 次

    去年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。

建议继续学习

  1. 网站密码存储方案比较 (阅读 6,542)
  2. 解决linux下安装ssl后,apache重启时需要密码 (阅读 6,384)
  3. 懒人连ssh不输密码若干大法 (阅读 5,483)
  4. SSH无密码登录 (阅读 5,483)
  5. 利用QQ游戏破解QQ密码 (阅读 5,183)
  6. Linux各版本root密码的本地破解方法 (阅读 4,922)
  7. CSDN明文口令泄露的启示 (阅读 4,662)
  8. 懒人连ssh不输密码若干大法 (阅读 4,225)
  9. 正确重置MySQL密码 (阅读 4,222)
  10. 为什么一定要有密码? (阅读 3,963)