如果数据库是可访问的,那么盐和散列的意义何在?

Posted

技术标签:

【中文标题】如果数据库是可访问的,那么盐和散列的意义何在?【英文标题】:What is the point of salt and hashing if database is accessible? 【发布时间】:2011-10-29 13:31:54 【问题描述】:

我刚刚学习了散列的概念(“嘿!别忘了加盐!”)并使用加盐来保护密码。

散列它是一种单向加密(实际上不是加密而是散列),因此它不能被逆向工程。加盐是在散列之前为密码添加前缀或附加随机创建的值,因为散列(只是散列)的问题是,一些天才提供了字典中单词的散列表,以便他们只需将该字典中的散列与用户的表从数据库登录 - W-等待?我说的是数据库中的表吗?所以这意味着有人可以访问数据库,所以我们必须使用盐?如果是这样,那么如果黑客已经可以访问数据库,为什么还要找回密码呢?如果我是他,我会从数据库中获取我想要的所有详细信息,如果我已经可以通过窗户进入房子,为什么还要用从房子里偷来的钥匙打开门?

那么,为什么要散列?为什么盐?我不明白。请有人帮助我。

提前致谢。

重要提示:我不反对散列或加盐,我只是想澄清一下。

【问题讨论】:

不是完全重复,但您可能还想看看:***.com/questions/6552554/… 【参考方案1】:

如果是这样,那么如果黑客已经可以访问数据库,为什么还要找回密码呢?

原因很多。以下是一些:

    人们重复使用他们的密码,因此不泄露每个人的真实密码确实会限制此类攻击的影响。

    如果没有真正的密码,黑客仍然无法登录,也无法在被黑客入侵的系统上发布新条目。

    谁说所有信息都存储在数据库中?如果数据库仅包含用户名和散列/加盐密码怎么办?那么,了解内容并没有多大帮助。

【讨论】:

【参考方案2】:

使用盐是为了使相同的密码具有不同的哈希值,从而更难找出密码。

散列使得通过蛮力方法生成密码需要很长时间(尤其是使用 SHA2),从而使得找出密码“不可行”。

如果您不知道密码,则哈希对您没有好处,因为在密码字段中输入哈希将不起作用(显然)。

通常黑客只找到用户表和一些基本信息,但如果他们希望能够实际访问该用户信息并更改某些内容,那么他​​们需要实际密码(因为他们不知道整个数据库架构更改某些内容可能看起来非常可疑并且很容易追踪,除非您以该人的身份合法登录)

我忘记的最后一件事是人们确实会重复使用密码。因此,也许您入侵了一些没有有用信息的随机网站,但该人在其网上银行中使用了相同的用户/密码组合。如您所见,这可能非常糟糕,因此无法轻松识别密码是关键。

【讨论】:

【参考方案3】:

如果您有数据库中的明文密码和电子邮件地址,您可能会造成严重破坏!这不是要获取已被黑客入侵的站点的凭据,而是要获取其他站点的登录信息。

大多数人不会只为一个站点使用一个密码,因此,如果您有他们的主要电子邮件地址的密码,您可能可以访问他们在每个站点上的所有帐户(通过密码重置)。

【讨论】:

【参考方案4】:

拥有数据库中的用户记录并不一定意味着您可以访问数据库。通过网站中的一些泄漏(你好,SQL 注入),您可能能够访问您不应该访问的数据,而不必损害整个服务器。备份处理不当、共享服务器、不称职或恶意的员工都可能使这一切成为可能。

此外,可能更重要的是,您需要保护其他网站上的客户密码。不幸的是,人们到处重复使用他们的密码。如果您的小型聊天室数据库遭到入侵,人们在其银行网站上的密码可能会被泄露。

【讨论】:

+1 表示 SQL 注入,没错,黑客只能访问一张表,但不能访问整个数据库...谢谢。 @domanokz 这不仅仅是 SQL 注入。一些你在某处忘记的调试语句,一个逻辑错误,转储的数据比它应该的多……有上千种不同的可能性。【参考方案5】:

假设攻击者以某种方式获得了对数据库备份的访问权,其中包含不可恢复的散列密码。然后他们有昨天的所有数据,这很糟糕。但至少他们无法访问明天将在那里的数据,他们无法从真实站点中删除任何内容、破坏它、通过其 CMS 提供恶意软件等。

假设攻击者获取了每个人的明文密码,尤其是当其中包括管理员时。哎呀。

【讨论】:

以上是关于如果数据库是可访问的,那么盐和散列的意义何在?的主要内容,如果未能解决你的问题,请参考以下文章

盐和散列,为啥不使用用户名?

检查散列的 REST API 令牌

MySQL密码功能

字典和集合

如何针对密码的特定字母进行身份验证[重复]

Numpy 数组是可散列的吗?