在同一张表中保存用户的盐和密码哈希值,这样做是否可行?

14

这样做是否可行并且不是无用的?可以将其保存在另一个表格甚至另一个数据库中。

你觉得呢?

附言:为了更高的安全性,我还有一个固定的盐值“peanuts”。它是保存在配置文件中的常量值(不保存在数据库中)。因此,如果黑客想要以某种方式破解密码,他需要访问文件服务器和数据库。


2
你的平台没有一个像样的登录/安全实现吗?重新发明这些东西是有风险的,无论你怎么想。 - spender
我正在使用Kohana,而且有现成的模块可供使用。这更多是为了我的个人知识等方面。 - daGrevis
我也有密码“peanuts”。你的意思是你添加了一个常量盐“peanuts”吗?如果是这样,那么这是有道理的(这也是你接受的答案所解释的方式)。 - mgiuca
@mgiuca,“peanuts”是指存储在文件服务器上的常量值。它与密码和盐一起进行哈希处理。 - daGrevis
好的,如果您不介意的话,我会编辑问题,将“密码”更改为“常量盐”,因为“花生”并不是真正的密码。 - mgiuca
2个回答

27

是的,把每个用户的盐存储在同一个表格中,也可以存储密码哈希值(而不是密码本身) - 即使敌方获取了原始数据库数据,他仍然需要分别尝试每个用户的盐+密码;在另一个表格中存储盐并不能增加任何重要的安全性(如果您假设敌方已经能够访问数据库,那么我觉得假设他只能访问其中一部分并没有多大意义)。

如果您正在使用盐+花生酱+密码来创建密码哈希,则我认为您的设计比市面上80%的系统更安全 - 这意味着,在不过分偏执的情况下,相当安全。


请注意,如果您实际上将密码以可恢复的形式(加密或明文)存储,那么您会使任何安全措施付之东流 - 盐和哈希的整个目的是您不存储可恢复的密码。如果您存储了密码,那么这就是您系统中最薄弱的环节,因此系统完全不安全。为了澄清:用户表格应该只包含salt+peanuts+password的哈希值决不能包含密码本身。


1
我知道盐和哈希是什么,但花生是什么? - Antony
4
@Antony:它们搭配盐很好;) 这是指对每个应用程序使用不同的盐,很可能将其存储在应用程序服务器上(这样,在数据库受到攻击时,部分盐仍然不会落入攻击者手中)。在同样幽默的语气下,这也被称为“胡椒粉”。 - Piskvor left the building

3

您希望存储每个用户的盐以及密码+盐哈希结果。您不想存储密码本身。


抱歉,你没有回答我的问题。 = P 我问的是:“在同一张表中保存用户的盐和密码是否可以?” - daGrevis
1
@daGrevis - 我的回答是根本不应该存储密码。 - Robert Levy
我所指的密码是经过哈希处理的密码(使用带有盐和坚果的SHA-1算法)。 - daGrevis
3
这是对有关安全最佳实践的问题进行的相当重要的澄清。 - Robert Levy
太好了!我编辑了问题标题,加入了“哈希”这个词,因为这显然是提问者的意图。 - mgiuca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接