标签: salt

强迫复杂的密码比盐腌"更重要"?

我花了两个小时阅读盐渍密码,确保我理解了这个想法.我希望你们中的一些人可以分享你对我的结论的了解.


如果我是攻击者,并且我可以访问用户数据库,那么我可以使用表中存在的所有用户盐并使用它们来创建我的彩虹表.对于大桌子,这可能需要很长时间.如果我可以将列表切换到感兴趣的用户(管理员,模组),我可以使用更大的字典列表来创建彩虹表,提高我的命中百分比......

如果这是真的那么盐腌似乎真的没有那么多帮助.它只会轻微地减慢攻击者的速度.

我知道理想情况下你会想要强制使用复杂的密码并用独特的随机字符串加密它们,但强制使用复杂的密码会让用户烦恼(我知道这让我感到烦恼),所以很多网站都不这样做.看起来网站对他们的用户不利,并且强制复杂的密码比一个好的腌制方法更重要.

我想这不是一个问题,而是要求其他人了解情况.

passwords hash cryptography salt rainbowtable

11
推荐指数
3
解决办法
653
查看次数

我该如何存储密码盐?

使用PHP,我使用shama6算法使用hmac函数编码密码.我不确定的是如何正确储存盐.

散列密码的全部意义在于黑客可以访问数据库.如果我将数据库中的salt存储在与散列密码相同的行中,是不是就像我将黑客交给"密码"一样?我正拿着一把带锁的门,把入侵者递给钥匙.

任何人都可以向我解释他们如何储存他们的盐?

php security passwords salt

11
推荐指数
1
解决办法
775
查看次数

如何从LDAP检索salt?

我工作的组织使用PPolicy(OpenLDAP模块)来自动加密和散列密码.不幸的是,我无法访问运行OpenLDAP服务器的机器,所以我无法查看配置文件.从我所看到的,几乎所有东西似乎都使用默认设置进行设置.

我希望能够为特定用户检索salt.如果我查看用户的属性,userPassword是SSHA密码.我没有看到任何有关该特定用户的盐的信息.我最终查看了LDAP模式,我也没有看到任何关于盐的信息.

如果您猜测每个用户存储盐的位置,它会在哪里?我理解这是模糊的,可能不是很多信息,但我在OpenLDAP文档中找不到任何解释确切存储唯一盐的位置.也许之前配置过OpenLDAP服务器的人会知道默认位置在哪里.

谢谢.

sha1 salt openldap ssha

11
推荐指数
1
解决办法
1万
查看次数

密码哈希+盐如何工作

我虽然理解哈希和盐渍密码,但似乎我有一些误解.我正在nodejs中为我的网站创建一个用户帐户系统.

我理解的方式是,当用户创建密码时,我们生成一个随机盐,将其附加到密码然后散列该字符串.我们还可以添加一个工作因子来使哈希缓慢工作并防御暴力攻击.我们将salt与哈希一起存储在我们的数据库中,并验证登录尝试,我们使用存储的salt和尝试的密码重复上述过程(在服务器上),并检查哈希值是否匹配.

似乎bcryptnodejs 中的模块与我对散列的解释不一致.这是来自http://codetheory.in/using-the-node-js-bcrypt-module-to-hash-and-safely-store-passwords/的示例

var salt = bcrypt.genSaltSync(10);
var hash = bcrypt.hashSync("my password", salt);
Run Code Online (Sandbox Code Playgroud)

首先,为什么工作因素应用于盐而不是哈希?如果有人通过暴力攻击他们会运行哈希函数是否正确?哈希不是我们需要慢的函数吗?

我也对bcrypt的验证感到困惑:

bcrypt.compareSync("my password", hash);
Run Code Online (Sandbox Code Playgroud)

我们需要哈希是唯一的,即使两个用户选择相同的密码,这是盐的权利吗?那我们为什么不这样做呢?

bcrypt.compareSync("my password"+salt, hash);
Run Code Online (Sandbox Code Playgroud)

hash salt bcrypt node.js

11
推荐指数
2
解决办法
5731
查看次数

用PHP和MySQL腌制我的哈希

像大多数用户一样,我只是想找出一种存储密码的安全方法.我在这里找不到的(或者可能是我缺乏理解)是如何在我的数据库中检索盐渍哈希并将盐与哈希密码分开,特别是对每个密码使用唯一的盐,同时保持盐+密码在单列.

我发现所有这些很酷的方法来加密密码(SHA-256,但MySQL只支持SHA/1和MD5吗?)以及PHP手册中的其他内容,但不确定如何存储和检索密码.

所以,这就是我理解的全部内容:

SHA('$salt'.'$password') // My query sends the password and salt 
                         // (Should the $salt be a hash itself?)
Run Code Online (Sandbox Code Playgroud)

在那之后,我迷失了盐.

在没有盐的情况下检索密码很容易,但盐让我感到困惑.我从哪里再次获得$ salt的价值,特别是如果它独特且安全的话?我将它们隐藏在另一个数据库中吗?常数(似乎不安全)?

编辑: HMAC中的关键变量应该是盐还是其他的东西?

php mysql security salt

10
推荐指数
1
解决办法
3660
查看次数

Salting:使用用户名是否合理?

我正在讨论使用用户名作为加密密码的方法,而不是随机字符串与名称一起存储.我的理由是盐的目的是防止彩虹表,那么是什么使得这实际上不如那里的另一组数据安全?

例如,

hash( md5(johnny_381@example.com), p4ss\/\/0rD)

VS

hash( md5(some_UUID_value), p4ss\/\/0rD)

是否有一个真正的原因我不能坚持用户名并简化事情?我的网络搜索结果的唯一的事情就是辩论,以盐应该如何一个密码,但是没有它后面的任何理由,在我的印象就是结束这仅仅是防止像一个该隐和-能够裂解装置在没有一百万年的范围内反对它.考虑到处理现实的局限性,如果人们知道哈希,我不相信这是一个大问题,他们仍然不知道密码,并且他们已经进入超级计算机范围以暴力破坏每个单独的哈希.

有人可以在这里赐教吗?

hashtable salt

10
推荐指数
1
解决办法
437
查看次数

密码盐:前置和附加

我只是看着密码哈希的在Django的实施,发现它预先将盐,所以散列创建类似sha1(salt + password),例如.

在我看来,盐有两个目的

  1. 防止彩虹表查找

    好吧,预先添加/添加盐对彩虹表并没有什么影响.

  2. 强化蛮力/字典攻击

    这就是我的问题所在.如果有人想从被盗的密码数据库中攻击单个密码,他需要尝试大量密码(例如字典单词或[A-Za-z0-9]排列).

    假设我的密码是"ABCDEF",该盐是"盐",而攻击者尝试所有[AZ] {6}密码.

    使用前置盐,必须计算hash("salt"),存储哈希算法的状态,然后从该点继续进行每个排列.也就是说,遍历所有排列将需要26 ^ 6个复制哈希算法的状态结构操作和26 ^ 6个hash(permutation of [a-z]{6})操作.由于复制哈希算法的状态非常快,所以无论多长时间,盐都不会增加任何复杂性.

    但是,使用附加的盐,攻击者必须计算hash(permutation of [a-z]{6} + salt)每个排列,导致26 ^ 10个哈希操作.显然,添加盐会增加复杂程度,具体取决于盐的长度.

我不相信这是出于历史原因,因为Django相当新颖.那么预先添加盐有什么意义呢?

security hash salt password-protection

10
推荐指数
1
解决办法
2942
查看次数

bcrypt盐是否可以单独使用?

has_secure_password在Rails 3.1中使用时,bcrypt会为每个用户的密码随机生成一个salt.基于此响应,我了解salt是作为密码哈希的一部分存储的.是否有可用于分别访问该盐的方法或属性,例如用于编写安全cookie?

ruby-on-rails salt bcrypt

10
推荐指数
1
解决办法
4474
查看次数

是否可以将用户的盐保存在与密码哈希相同的表中?

它没关系并且没用吗?它可以保存在另一个表甚至另一个数据库中.

你怎么看?

PS为了更高的安全性,我也有恒定的盐"花生".它是保存在配置文件中的常量值(不在数据库中).因此,如果黑客想以某种方式破解密码,他也需要访问文件服务器和数据库.

passwords hash salt password-protection

10
推荐指数
1
解决办法
3798
查看次数

在登录时重新散列存储的密码有什么好处吗?

我正在使用各种不安全/可怕的不安全的基于MD5的密码哈希更新几个项目.我现在至少对最佳做法有所了解,但我仍然想知道我做错了什么.我还没有看到我在其他地方使用的具体过程,但至少有一个SO用户似乎想要做类似的事情.就我而言:

  • 密码哈希是使用bcrypt生成的.(因为正确的选项似乎是bcrypt,scrypt,或者pbkdf2和bcrypt在PHP中最容易被我访问.)

  • 每个哈希使用不同的随机盐.(防止攻击者生成使用单个静态盐计算的自定义彩虹表.)

  • 散列,算法设置和salt存储在一起.(因为这就是PHP的crypt函数给我的哈希值.)

  • 成功登录后,将使用新的随机盐重新计算哈希值.

这是我想知道的最后一步.我的目的是随着时间的推移允许更新散列算法,以便定期登录的用户将以最安全的格式存储密码.

我的问题是:

  1. 这是浪费时间吗?

  2. 这样做有危险吗?

security salt

10
推荐指数
1
解决办法
443
查看次数