【发布时间】:2011-09-14 17:58:58
【问题描述】:
我昨天问了一个关于安全散列的问题,这让我开始思考如何真正破解使用自定义散列算法创建的密码。我当前的(非常不安全的)密码脚本在密码上使用了 sha1 的迭代,然后在前面加上 3 位盐生成的哈希上进行迭代。
$hash = sha1($pass1);
//creates a 3 character sequence
function createSalt()
{
$string = md5(uniqid(rand(), true));
return substr($string, 0, 3);
}
$salt = createSalt();
$hash = sha1($salt . $hash);
现在我,作为这台服务器的管理员,可以完全访问源代码和密码表,加上管理工具,可以简单地将用户的密码重置为我想要的任何值,但为了更好地理解安全性,我好奇如何像黑客那样做这件事。我有一个名为 cain & abel 的程序,它对特定的哈希算法进行暴力破解,但是我将如何做一些事情,比如获取每个尝试的密码,对其进行 sha1 处理,将其连接到(已知的)salt,然后再次对其进行 sha1 处理?这看起来很简单,但我从来没有用过像 C++ 这样的语言编程,我认为这是必要的。
编辑:
我应该指定以下内容:
这是一种离线暴力攻击。
我的数据库中充满了哈希值和它们各自的盐值。
盐是每个用户的,但我只想一次攻击一个用户的密码。
具体来说,我问的是如何使用一系列自定义哈希算法(例如我上面展示的算法)来强制输入密码:
伪代码:
$hash = sha1( 'password' );
$salt = '3Sf';
$hash = sha1( $salt.$hash);
我认为任何用于执行此操作的方法也可用于暴力破解使用已知算法散列的密码,例如:
$hash = sha1( 'password' );
$salt = '3Sf';
for($i; $i<1000; $i++){
$hash = sha1( $salt.$hash);
}
所以我并不是特别要求 CODE 做第一件事,而是问我可以通过什么方法来针对自定义散列算法(如上面列出的 2)运行蛮力程序。
注意:我绝不是说我可能会遇到这种情况,但我想知道它是如何做到的。
【问题讨论】: