为什么不存储原始密码?

6

我是网站开发的新手。我可以存储用户的原始密码吗?我知道最佳实践是使用salt存储哈希密码,但为什么我们不存储原始密码呢?

是因为数据库容易被黑客攻击,所以哈希能够保护密码吗?还有其他原因吗?如果没有,只要合法,我想存储原始密码。


17
我永远不会在你们的网站注册账户 ^^ 谢谢提醒。 - Bas
4
你将在哪个网站实施这一做法?我们可以保持距离:)你看见了吧!!! - Samiksha
@Bas: 我会放心地在他的网站上注册,因为我不会在两个不同的地方使用相同的密码。 :) - Roger Pate
1
@Roger Still,密码是由注册时填写的个人私有信息。不加密并不道德,但我想这是另一个需要讨论的话题^^ - Bas
@Bas:此外,还有责任问题。虽然我不是律师,但当所有这些人都可以看到你的密码时,“不是我干的,可能是那n个有数据库访问权限的人之一”更加可信。 - Piskvor left the building
显示剩余2条评论
6个回答

18

合法性取决于您所在的国家。但是有最佳实践。最佳实践是加密用户密码。这样,如果有人闯入您的数据库,他们将无法获得密码的长列表,并尝试在 ebay、雅虎邮件和 Gmail 中尝试每个密码。用户通常为许多网站使用相同的用户名和密码。

正如Jon在评论中指出的那样,哈希和加密之间当然存在差异。哈希是一种单向的数据破坏过程,它将任意长度的字符串作为输入,并输出固定长度的字符串。这个字符串被定义为改变原始输入中的任何单个位将导致哈希不同。因此,如果您有一个哈希值,则不可能重构原始文本(即不可能恢复密码)。

另一方面,加密本身是一种技术,可以在知道秘密密钥、密码等情况下恢复原始密码。

通常,您要对密码进行哈希,而不是加密:这不是必需的,而且更复杂。您也不应该恢复密码:您只需要重新生成它们。


5
投票支持这个,并删除我的。对于那些声称这是合法的人,我非常想知道你们所断言的基础是什么。你们必须是非常优秀的律师才能了解全球所有法律。 - paxdiablo
4
我认为有必要详细说明加密和哈希之间的区别,以及何时使用它们。如果需要恢复用户密码,则应使用加密。如果不需要,请使用哈希更为合适。 - Jon B

1

想象一下,如果Facebook被黑客攻击了,它没有加密任何用户的密码。Facebook本身大约有2亿用户。

如果所有2亿个密码都泄露给某个邪恶组织会怎么样?许多用户使用与其电子邮件或其他敏感在线服务(如银行账户)相同的密码。

Facebook将一次性失去安全性。你还会在那里注册一个帐户吗?


1
(1) 在多个网站使用相同密码的人是白痴。 (2) 我不会在Facebook注册账号,不是因为它不安全,只是因为我认为我的朋友是那些我喜欢和他们一起度过时间的人,而不是一根CAT5电缆另一端的小丑 :-) - paxdiablo
@paxdiablo: (1) 你说得对,但不幸的是它们确实存在,如果你想存储它们,就必须考虑到它们。(2) 我也同意这一点,但我也能理解那些想使用Facebook的人。但这仍然不是保存未加密密码的理由。 - jigfox
不,我同意你的观点@Wai。既然你不是那些没有支持权威的人之一,所以我也给你点赞。 - paxdiablo
@paxdiablo,(2)是主观的,你不能告诉别人他们应该做什么或不应该做什么,除非你是公司的老板,让员工为你做事 :D (1)正如Jens所提到的,遗憾的是它们存在。除非他们被黑客攻击或其他事情发生,否则无法治愈他们的粗心。 感谢您的支持 :) - Wai Wong
2
在多个网站中使用相同的密码(尤其是您不太在意的网站)并不是个人“愚蠢”的问题。这是因为我们正在处理的是具有非常有限的记忆能力和生成和记住“随机字符串”的非常有限手段的人类。我并不是说“这样做很好”。我是说,作为开发人员,我们需要考虑到这些人类因素,并面对现实。当然,那些在少数“重要”网站上使用相同密码的人(例如那些涉及您的钱财的网站)是白痴;-) - Palantir

1

我不知道这是否合法,但是无论如何,我建议您不要这样做,原因至少有三个:

  1. 这不仅仅涉及黑客获取您的密码。用户经常为多个帐户使用相同的密码(他们也不应该这样做)。那么,谁说我们可以信任您或其他有合法访问这些数据的人呢?
  2. 无论您认为自己的服务器安全性如何,都无所谓。没有绝对安全的服务器。您应该考虑它最终可能会被黑客攻击。不要相信它永远不会发生。抱最好的希望,但始终计划最坏的情况!
  3. 我会使用尽可能简单便宜的安全措施来保护我的数据和用户的数据。而使用盐+哈希的方法是廉价的。它只需要两行代码。

0

是的,这是完全合法的,但绝对不建议以明文形式存储密码。而且,你的实际生产数据库并非唯一可能被攻击的目标:即使备份副本也可能被窃取(而你永远不会知道)。

当密码被盗时,这对于你的实际用户来说非常糟糕,因为很少有人在不同的网站上使用不同的密码。


2
你根据什么管辖权声称这是合法的?你是国际律师(或任何类型的律师)吗? - paxdiablo

0

根据法律规定,这是合法的。一些公司将密码以明文形式存储,以便于恢复。

然而,出于安全考虑,这是一个不好的想法。偶尔会有一些公司被黑客攻击并访问其数据库。在某些情况下,这会暴露成千上万用户的密码。这将严重损害您公司的形象,并且当密码未经哈希处理时,这甚至更加是一个安全风险。

如果您希望密码可恢复,请至少对其进行加密,以便通过访问数据库来查看密码变得不容易。


1
你根据什么管辖权声称这是合法的?你是国际律师(或任何类型的律师)吗? - paxdiablo
“一些公司这样做”并不意味着“因此它一定是合法的”。它也可能意味着“一些公司正在违法”。 - Piskvor left the building

0

原始密码不会被存储,因为一旦数据库被黑客攻击,您的敏感信息就会受到威胁,包括您的密码,因此加密也无济于事。根据您所在的地区,有些网站会以明文形式存储您的密码。例如,如果您的密码是Appletree1234,则它们将以明文形式存储您的密码,即Appletree1234。根据Lifehacker.com的说法,在您输入凭据后,该网站会检查它们是否与数据库中的匹配。


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