Php MD5,密码哈希和salt位置
在开始之前,我知道MD5已经被破坏(冲突攻击和散列速度),不应该被使用 要散列密码,但只是为了它,请容忍我 我的问题是: 使用md5散列时盐的位置如何影响“质量” 还是散列的“强度” 假设我有下面一段代码,它散列了一个用户 使用其部分电子邮件地址作为salt的密码:Php MD5,密码哈希和salt位置,php,hash,md5,salt,Php,Hash,Md5,Salt,在开始之前,我知道MD5已经被破坏(冲突攻击和散列速度),不应该被使用 要散列密码,但只是为了它,请容忍我 我的问题是: 使用md5散列时盐的位置如何影响“质量” 还是散列的“强度” 假设我有下面一段代码,它散列了一个用户 使用其部分电子邮件地址作为salt的密码: <?php $email = 'user@emailservice.ex'; $password = 'RandomPassWithChars'; $segments = explode('@', $
<?php
$email = 'user@emailservice.ex';
$password = 'RandomPassWithChars';
$segments = explode('@', $email);
list($saltPart1, $saltPart2, $saltPart3) = $segments;
$hash = md5($saltPart1.$password.$saltPart3.$saltPart2);
?>
这段代码会减慢暴力/字典/彩虹表的速度吗
攻击,而不是说:
<?php
$password = 'RandomPass';
$salt = 'RandomSaltStoredInTheDatabase';
$hash = md5($password, $salt);
?>
是否值得尝试像在第一个代码中那样添加密码或使用它
与第二个代码的结果相同?这有什么好处吗?
第一个代码是否会延迟破解以这种方式散列的密码列表
第二种方法是什么
这就引出了第二个问题:
在数据库中存储盐比获取盐安全吗
从一个用户id(说电子邮件地址)?
在我看来,一旦攻击者获得了数据库的副本
这也抑制了盐分,这使得他的生活更容易尝试破解散列。但是如果盐没有存储,攻击者还需要创建盐的算法。如果我错了,请纠正我
我希望我能把自己说清楚。感谢您提前给出答案。当您处理密码安全问题时,请始终假定如果攻击者可以访问您的数据库,那么他就可以访问您的代码 因此,当涉及到salt时,只需生成一个随机值的散列(例如,
mcirotime()
),并在散列之前使用它来对密码进行salt,并将其存储在数据库中密码旁边的一列中
当把哈希添加到密码中时,我个人的看法是,如果你把它放在第一个或最后一个或者中间,这并不重要。
你要保安吗?然后使用慢速散列算法,我强烈推荐,因为它使用
bcrypt
(基于河豚)作为默认散列算法。这取决于攻击者是否试图绕过您的安全设置或是否试图查找密码
如果由于散列算法的加密弱点,攻击者依赖于查找与数据库给定散列的冲突,salt将不会产生任何影响:我有一堆位,我希望找到XXX散列算法的一些输入,该算法在输出中为我提供相同的一堆位
如果他试图通过尝试每种可能的组合来强制执行密码,那么他可以收集到的关于原始密码的任何信息都将有助于:
- 长度
- 组合(字母数字字符、特殊符号等)
- 盐
“password”。“salt”
比“salt”;“password”
,请使用前者)。然而,大多数编程语言都没有这种性能“问题”
第二个问题:
如果salt显式存储在数据库中,攻击者将知道salt,并能够发起蛮力哈希攻击。如果salt未知,仍然可以使用蛮力密码攻击(尽管在尝试之间插入延迟很容易导致无效)。此外,攻击者还可以对程序进行反向工程并检索哈希字段
至于散列的安全性,如果用户在两个不同的地方拥有相同的电子邮件和密码,这就否定了随机salt的好处之一,因为相同的散列在两个地方都是可见的
就我个人而言,我认为哈希的最佳方法是使用:
"password" . "salt" . "internalconstantvalue"
这样做的好处是简单,而且安全性不低于大多数其他安全方法。通过模糊实现安全性很少是一个好主意。@Wooble这是真的,但这两种Salting方法之间有什么区别吗MD5在密码哈希方面不受损害,MD5上没有前置映像。然而,由于碰撞攻击,它在加密方面受到了威胁。考虑到这一点,我仍然认为我不会使用它。我的缺点是,当我说“妥协”时,我在考虑hasing的速度和碰撞可能的重复。你能解释一下碰撞攻击如何与本案相关吗?为什么攻击者会尝试查找具有相同哈希的两个密码?
“password”的+1。“盐”。“internalconstantvalue”
,奇怪的是,它从未出现在salt教程中