Discuz教程网

Discuz(UCenter)应该考虑升级账户口令处理机制

[复制链接]
authicon gram 发表于 2013-3-12 01:26:12 | 显示全部楼层 |阅读模式
目前Discuz系列,准确说是UCenter1.6,对账户口令的处理方式是md5+salt。MD5早已不安全,单次MD5值现在可以很容易在网上找到对应的明文(复杂的需要付费)。自己找块显卡用GPU来跑MD5的彩虹表也很轻松。 网上对于dz的口令处理机制直接就有专门的选项
   190406xi85jlbjwlbbdyib.png   

  

一旦论坛被拖了库,基本上所有用户口令就成明文了,也许这个就是例子

DZ的机制如下:
前台 md5(password) => hash1 ----> 后台 md5(hash1 + salt) => hash2 ---> DB


在计算能力日新月异的今天这种方式已经相当不可靠—几年前谁会想到显卡都可以用来暴破呢

简单的升级方式是使用高强度的摘要算法(注意是hash算法而不是加密算法,学过《数据结构》的绝对不会混淆),比如用SHA256,甚至SHA512. 不过连RSA1024都不太保险的今天,依靠摘要强度升级而不更新结构多半也支持不了多久。

我在修改dz7.2实现的解决方案是 SHA256搭配blowfish,再配合sitesalt,这基本上在论坛有生之年是不用考虑被暴力破解了:
论坛设定一个站点SALT,长度随便,可随便输入,也可由安装程序自动生成。一旦启用就不能更改
前端 sha256(pass + SITESALT) => hash1 --------> 后台 blowfish(hash1 + SALT) => hash2 -----> DB


采用SITESALT的目的是防止被跑彩虹表—— DZ目前的方式只要知道了数据库保存的salt那么就可以依据已(跑出)有的数据来破解。 并且在无TLS时这多少也能增加些安全,避免被嗅探后轻易破解——dz这个时候连salt都没掺的,完全是裸奔的md5~

后台用SALT只是为了兼容现有的代码而已,其实blowfish本身在处理时就会生成一个22字节长度的salt做混淆用并附加在结果值中。

介绍下blowfish:
Blowfish算法是一种取代了DES和IDEA的加密算法。它是一种对称(秘密或个人密钥)的分组密码,使用32位至448位的可变长度密钥,应用于内部加密或加密输出。(美国政府禁止加密输出软件使用40位以上的密钥,除非软件有特殊用途)。Blowfish算法是1993年由Bruce Schneier提出的备选加密方法。32位处理器的诞生后,Blowfish算法在加密速度上超越了DES,引起了人们的关注

我们知道MD5,SHA的算法速度太快了。所以,我们需要一个“慢一点”的加密算法。呵呵。bcrypt是这样的一个算法,因为它很慢,对于计算机来说,其慢得有点BT了,但却慢得刚刚好!对于验证用户口令来说是不慢的,对于穷举用户口令来说,其会让那些计算机变得如同蜗牛一样。
因为bcrypt采用了一系列各种不同的Blowfish加密算法,并引入了一个work factor,这个工作因子可以让你决定这个算法的代价有多大。因为这些,这个算法不会因为计算机CPU处理速度变快了,而导致算法的时间会缩短了。因为,你可以增加work factor来把其性能降下来。呵呵。
那么,bcrypt到底有多慢?如果和MD5一起来比较的话,如果使用值为12的work factor的话,如果加密“cool”的话,bcrypt需要0.3秒,而MD5只需要一微秒(百万分之一秒)。也就是说,前面我们说的那个只需要40秒就可以穷举完所有的可能的MD5编码的口令的算法,在使用bcrypt下,需要12年。
这就是bcrypt给你带来的选择,你可以一个安全的口令和一个快速的加密算法,或是一个不怎么安全的口令和一个性能不好的加密算法


blowfish 是个好东西,主要问题是 PHP 5.3.0 以上才内置,否则依赖于系统是否支持



上一篇:【行业首选】First v即时通讯高清视频会议协同办公系统
下一篇:抛弃 Flash, 采用 HTML5 的上传方式?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-7-4 03:26

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表