Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 正在使用';盐';那么好吗?_Security_Passwords_Hash - Fatal编程技术网

Security 正在使用';盐';那么好吗?

Security 正在使用';盐';那么好吗?,security,passwords,hash,Security,Passwords,Hash,我并不声称自己是安全方面的专家,但在我看来,添加一种盐并不会真正产生巨大的影响 例如,如果用户的密码是john1970,salt是123456,这意味着密码是123456john1970,而这使攻击者更难对付(如果使用字典攻击,例如彩虹表),攻击者很可能猜测第一部分是salt。我发现使用非标准方法(比如用一些键进行XORing或对字符的代码进行一些简单的数学运算)要有效得多。我知道你们大多数人可能不会同意我的观点,但这对我来说似乎更有意义 你的意见 重复: 这与您提到的原因不同:它使攻击者

我并不声称自己是安全方面的专家,但在我看来,添加一种盐并不会真正产生巨大的影响

例如,如果用户的密码是john1970,salt是123456,这意味着密码是123456john1970,而这使攻击者更难对付(如果使用字典攻击,例如彩虹表),攻击者很可能猜测第一部分是salt。我发现使用非标准方法(比如用一些键进行XORing或对字符的代码进行一些简单的数学运算)要有效得多。我知道你们大多数人可能不会同意我的观点,但这对我来说似乎更有意义

你的意见

重复:


这与您提到的原因不同:它使攻击者使用字典攻击更加困难


看看有没有一个好的解释。

如果你的盐足够大,那么创建彩虹表是不现实的


它还涉及使用多种因素来加密密码。虽然有人可能会窃取您的数据库,但他们可能会漏掉salt,从而成为SOL。

安全公理:永远不要在数据库中存储纯文本密码


考虑到这一点,salt突然起到了很大的作用:由于这种salt,攻击者预先计算的哈希(前面提到的彩虹表)没有任何价值

盐析确实有很大的不同,不过你使用的是哪种哈希算法?请记住,盐始终会添加到字段中的任何内容中,因此即使发现冲突,如果他在表单的该字段中键入冲突,盐也会被添加,并且冲突不再匹配


就个人而言,我散列(散列(salt1)+散列(pass)+散列(salt2));然而,salt仅在可以从数据库获取哈希值时提供保护。如果一个人真的不能得到散列,那么最好的方法就是在表单中输入随机的内容。

我不能谈论问题背后的数学,但我会使用一个物理隐喻。就因为我知道我家门把手上的锁可能会被撞击工具或喷灯击碎,我仍然锁着门。我住在一栋公寓楼里,还有一扇门可以进入,我也锁上了那扇门,尽管你可以说那扇门是浪费时间,因为很多人都有钥匙,而且通常会把它打开


安全是一组同心防御,其中一些比其他更有趣。这是一个关于哪些防御是功大于利的判断,例如哈希+盐+ROT13可能会增加功大于利。

盐是用来防御彩虹表的,但它的美丽在于,知道它是一种盐决不会削弱它作为防御措施的作用。这是因为,这并不是说salt具有某些神奇的特性或任何东西——这是因为它是添加到攻击者输入的密码中的额外信息,并且特定于他正在攻击的密码——它不是可用于多个帐户的东西——甚至不是同一服务器上的多个帐户

当然,攻击者可以将salt添加到他的rainbow表中,但是您已经使他的rainbow表必须比您用作salt的数据大一倍

如果添加两个随机字节,则会使表的大小增加65536倍。这并非无关紧要。加上四个随机字节,系数超过40亿。

“1-2-3-4-5?这是我一生中听说过的最愚蠢的组合!这是一个白痴在行李上会有的东西!”

啊,太空球


不管怎样,是的,如果你用123456作为你的“盐”,007,安全性可能没有它能做到的那么好。尽管如此,你还是让它变得更难——你正在消除字典攻击作为破解它的一种手段(除非他们知道其中的重点)。当然,这仍然可能是野蛮的强迫,但诚实的事实是,没有什么是不可破解的。你所做的一切都是为了让它更难破解,因为不可能破解是不可能做到的。

salt与加密哈希结合使用,而不仅仅是在密码前面加上。您不存储salt密码或密码,而是存储salt密码的散列。salt的目的是保护用户不受“错误”密码选择的影响,而不是隐藏密码。你从不只用盐

澄清: salt不能防止字典攻击。
它可以防止彩虹表式攻击,即生成一个大的哈希表和相应的输入文本。好的密码可以防止猜测(字典攻击),盐类可以帮助防止有人获得你的散列密码,因为使用预计算表的成本很高。当我说“坏”时,我指的是可能存在于现有表中的密码。

salt的真正价值不仅在于保护单个记录免受攻击,而且在于使其能够在多个用户拥有相同密码时,以散列形式显示出不同。为了有效,你必须使用每记录盐


如果您的安全加密/哈希机制导致具有相同密码的用户在您的数据库中具有相同的表示形式,则您为攻击者提供了一种一次破解多个帐户的简单方法。

salt的目的不仅仅是混淆密码,而是增加密码的长度。如果黑客不知道盐是什么,那么他猜测盐的存在并没有多大帮助。如果salt将密码长度增加一倍,则可能的字数将增加到二次方。您的XOR方法不能做到这一点。

“攻击者很可能猜到第一部分是盐。”

真的吗?怎样他们如何知道salt的结束和用户提供的密码的开始?解析的规则是什么