Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

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

[复制链接]
mark35 发表于 2012-10-8 18:35:31 | 显示全部楼层 |阅读模式
本帖最后由 mark35 于 2012-12-3 19:29 编辑

目前Discuz系列,准确说是UCenter1.6,对账户口令的处理方式是md5+salt。MD5早已不安全,单次MD5值现在可以很容易在网上找到对应的明文(复杂的需要付费)。自己找块显卡用GPU来跑MD5的彩虹表也很轻松。 网上对于dz的口令处理机制直接就有专门的选项
hash.png

一旦论坛被拖了库,基本上所有用户口令就成明文了,也许这个就是例子 https://discuz.dismall.com/forum.php?mod=viewthread&tid=3122525

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给你带来的选择,你可以一个安全的口令和一个快速的加密算法,或是一个不怎么安全的口令和一个性能不好的加密算法
http://coolshell.cn/articles/2078.html

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



回复

使用道具 举报

枯心树 发表于 2012-10-8 22:06:06 | 显示全部楼层
本帖最后由 枯心树 于 2012-10-8 22:15 编辑

有技术的说dx 的密码是双重加密的。。破解不了的?
回复

使用道具 举报

 楼主| mark35 发表于 2012-10-8 22:17:24 | 显示全部楼层
本帖最后由 mark35 于 2012-12-3 19:29 编辑
枯心树 发表于 2012-10-8 22:06
有技术的说dx 的密码是双重加密的。。破解不了的?

前端js md5一次,后端php掺盐md5一次,这种双重处理只要拿到了salt没说破解不了的,除非明文是超长的字符串~

准确说不是“破解”而是跑字典,因为md5是摘要算法。而DES,AES这些对称算法才是加密算法,对应的才有“破解”。
回复

使用道具 举报

枯心树 发表于 2012-10-8 22:18:58 | 显示全部楼层
mark35 发表于 2012-10-8 22:17
前端js md5一次,后端php掺盐md5一次,这种双重处理没说破解不了的~

如果mysql不小心被人端了。。。那可以破解那些密码不?
回复

使用道具 举报

 楼主| mark35 发表于 2012-10-8 22:21:07 | 显示全部楼层
本帖最后由 mark35 于 2012-12-3 19:29 编辑
枯心树 发表于 2012-10-8 22:18
如果mysql不小心被人端了。。。那可以破解那些密码不?

我一楼截图里面高亮的就是拿来找已经跑出字典的呀。

如果启用了SITESALT,那么那种方式基本就无效了,必须每个站点跑一次字典
回复

使用道具 举报

枯心树 发表于 2012-10-8 22:23:40 | 显示全部楼层
blowfish 这个东西或者php5.3这个普及问题倒不怕。。只要程序支持blowfish,并且提供一个开关。那么我相信,虽然不会全部都开启。。但是很多站长会逐渐使用php5.3的。。只要他们知道这样会更安全。
回复

使用道具 举报

 楼主| mark35 发表于 2012-10-8 22:28:26 | 显示全部楼层
本帖最后由 mark35 于 2012-12-3 19:29 编辑
枯心树 发表于 2012-10-8 22:23
blowfish 这个东西或者php5.3这个普及问题倒不怕。。只要程序支持blowfish,并且提供一个开关。那么我相信, ...

绝大多数站长都是饭来张口的,如果程序提供了强加密方式,没说不会用的。除非环境不支持
回复

使用道具 举报

枯心树 发表于 2012-10-8 22:31:40 | 显示全部楼层
mark35 发表于 2012-10-8 22:28
绝大多数站长都是饭来张口的,如果程序提供了强加密方式,没说不会用的。除非环境不支持

环境可以解决或者可以逐步解决的。。好比当年伪静态也需要环境支持一样。。开始也没有几家虚拟主机支持。。不过只要程序有需求。。那就代表站长有需求。。自然就代表虚拟主机或者环境也有这个需求。
回复

使用道具 举报

 楼主| mark35 发表于 2012-10-8 22:35:21 | 显示全部楼层
本帖最后由 mark35 于 2012-12-3 19:30 编辑
枯心树 发表于 2012-10-8 22:31
环境可以解决或者可以逐步解决的。。好比当年伪静态也需要环境支持一样。。开始也没有几家虚拟主机支持。 ...

这倒是,需求决定市场
其实php5.3的要求不算高。虽然CentOS5默认版本是5.1,但YUM有 php53可以安装的。如果是Centos6,默认即php5.3.
对于VPS来说就更不是问题了

唯一可能出兼容的是zend optmizer那儿。有些老插件用老5.2版本的zend加密的
回复

使用道具 举报

枯心树 发表于 2012-10-8 22:40:28 | 显示全部楼层
mark35 发表于 2012-10-8 22:35
这倒是,需求决定市场
其实php5.3的要求不算高。虽然CentOS5默认版本是5.1,但YUM有 php53可以安装的。如 ...

插件这些更不可能阻挡的吧。。插件还是靠程序吃饭的。程序是什么样。。他们就得跟着做什么样的了。。
本身作为第三方。。就注定了。。一切都靠主程序吃饭的了。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-8-30 05:50 , Processed in 0.100897 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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