- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在Linux系统中,密码是使用MD5哈希值存储的。为什么使用“盐”可以进一步保护系统?特别是,我想明确以下两个
/etc/shadow
。 h1 = md5(password.s1);
。
h2 = md5(password.s2)
。由于h1不等于h2,系统如何验证用户身份?
最佳答案
如您所知,MD5是一个哈希,因此,如果给它一个输入,例如“PASSWORD”,您将得到一个唯一的(希望-但是如今MD5发生冲突)输出,例如“3DE2AF ...”。
如您所知,现在很难直接将其反转,直到有人想到...等等,为什么我不预生成可哈希值的所有可能组合,直到可以反转哈希。这称为rainbow table。
盐的目的是将任意随机数据添加到要进行哈希处理的字符串中,从而增加哈希输入的长度。这意味着希望仅将密码输入反向转换为哈希的常规彩虹表将无法正常工作。当然,彩虹表只是反向查找,您可以简单地生成一个彩虹表来补偿所有可能的密码+盐输出。这就是长度增加的原因。由于具有反向散列的性质,因此在很长的哈希输入中生成反向的磁盘空间很快变得不可行。 6到8个字符的字母数字彩虹表已经是几GB。增加长度和字符类,然后您就开始以10GB的倍数讲话。
当然,如果您要对“PASSWORD”加盐并且对“PASSWORD”进行散列,那么就对“PASSWORDPASSWORD”进行散列,这并不是那么安全,因此对盐的选择也很重要。理想情况下,您应该对每个散列字符串使用随机盐,但是,当然,您需要知道它是什么。一种常见的技术是从用户名或这种情况下独有的其他属性派生出salt。添加任意数据本身就没有用;现在,拥有用户确定的盐数据会增加额外的复杂性,这意味着需要彩虹表才能对每个用户进行专门搜索。您越难以解决,就需要更多的计算能力。那就是战斗所在。
但是,有一些现代技术。我不是专家,所以我不能告诉您这些工具的安全性,但是值得一提。这个概念是慢散列。基本上,通过复合哈希函数,您需要花费一些时间来计算每个哈希。这样,每个用户检查密码的能力现在为您要检查的每个密码增加了固定的时间量。如果您是蛮横的,那就是坏消息(tm)。同样,如果系统设计良好,如果没有快捷方式(可能等同于弱点),则为慢速哈希函数生成彩虹表也将花费一些时间。
在此处编辑的更多详细信息。有关此示例的第一个示例,请参见 crypt()
。 @CodeInChaos引用了PBKDF2,它是PKCS#5的一部分。较新的开发项目是scrypt。
正如我所说,我不是专家密码分析师。在后一个示例中,我对它的适用性没有特别的专业知识,我只是向您展示事情的发展方向。
编辑2 阐明了我对salt的撰写-我想我以前在磁盘空间的关键问题上跳舞。
关于security - 盐的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5051007/
我正在使用一个以明文形式存储密码的旧应用程序。我已将应用程序移植到 spring 3 mvc + security。我还成功地让 spring security 使用 sha256 + 基于用户名的盐
我试图按照 here. 中的代码获取哈希密码从中,我目前只使用 salt 的代码。方法,hash方法和isExpectedPassword方法。 我从文本字段获取密码: char[] passChar
我已经阅读了有关此问题的许多问题,但许多答案相互矛盾或我不明白。 您应该始终将密码存储为哈希值,而不是纯文本。但是您是否应该将盐(对于每个用户来说都是唯一的)存储在数据库中的散列密码+盐旁边。这对我来
我有一些 php 脚本,使我的用户能够使用电子邮件创建帐户。然后,他设置了一个经过哈希处理的密码,生成了一个盐并将其存储在我的数据库中。现在我正在重置密码,工作正常,但新密码(更改密码,即使其正确的密
我在申请中使用 shiro 进行身份验证。我使用加盐的散列密码,并将它们存储在我的数据库中,如下所示: private User createUserWithHashedPassword(St
我正在尝试找出在桌面应用程序中应该将应用程序 secret 和 key 存储在何处或如何存储。 例如 facebook 应用程序 key 或 dropbox key 和 secret 。 所以我读到我
ASP.NET 成员资格如何生成他们的 salt key ,然后他们如何对其进行编码(即是 salt + 密码还是密码 + salt)? 我正在使用 SHA-1使用我的成员(member)资格,但我想
我正在设置一个cookie。像这样的东西: $_COOKIE['test'] = SHA1('124'.'mysalt'); 现在 124 是我想要的 ID。所以在我的 MySQL 表中,我尝试运行如
我的应用需要加密一些数据(用户 session token )。我看到的大多数示例都有一种使用密码和盐生成 key 的方法,例如: public static Key generateKey(char
我想在数据库中的密码旁边存储一个(随机)盐。现在,问题是: 我应该将其存储为哈希值还是纯文本?有什么区别吗(更安全,更快?)?我应该付出多少努力来创建随机字符串? 示例代码: //Creati
当我收到此错误时,我正要在 Windows Azure 上部署我的服务: Error: The provided configuration file contains XML that could
如何在 C# 中创建以下 PHP 代码? PHP代码: 我将不胜感激任何形式的帮助。一直在测试以下内容: https://stackoverflow.com/a/1300927/7312781 但它
谁能推荐一个使用 javascript 创建 sha1 salt 的好方法? 最佳答案 首先,阅读盐的用途以确保您理解它。 This和 this会让您入门,但您应该阅读更多内容。 基本上,任何适当大小
我知道这可能是一个常见问题,网上有很多关于为密码哈希生成安全盐的文章。到目前为止,我已经了解到mcrypt_create_iv通常用于加密的初始化向量,它可用于安全地创建盐,特别是在针对MCRYPT_
我知道这个话题已经被讨论了一百万次。但这对我来说是新的,我读得越多,就越不了解实际发生或应该发生的事情。 我在用户密码的散列存储中添加了每个用户盐,因此存储的密码散列如下所示:hash(passwor
我正在学习本教程 ( http://kowsercse.com/2011/09/04/kohana-tutorial-beginners/ ) 并遇到此错误消息: Kohana_Exception [
我是一名优秀的程序员,十分优秀!