静态盐与随机盐 - 安全PHP

Sou*_*rav 9 php security encryption

是否有任何工作差异

$hash=sha1($key.$staticSalt);  
Run Code Online (Sandbox Code Playgroud)

$hash=sha1($key.$randomSalt);  
Run Code Online (Sandbox Code Playgroud)

如果我使用随机盐我需要将随机盐存储在数据库中,另一方面如果我使用固定盐,则无需使用DB!
如果代码可以被黑客攻击以查看salt(静态),那么黑客将能够使用哈希和随机盐查看数据库:D
那么它值得吗?
如果我喜欢盐@#kiss~89+.&&^me怎么办?

cee*_*yoz 10

随机盐具有巨大的益处.如果系统中的所有帐户都使用相同的盐,则攻击者可以强制计算该盐的哈希值,并且只需一次计算就可以进入所有帐户.如果他们每个帐户使用不同的盐,蛮力只会让您进入一个帐户.

  • 你确实错了.访问数据库不(不应该!)意味着访问代码.您也错误地认为只能通过获取db密码来获取对数据库的访问权限.其他攻击也是可能的,包括可能暴露哈希但不一定是所有数据的SQL注入. (5认同)
  • 如果他(黑客)可以获得密码,那么他可以下载完整的数据库.并且获得对数据库的控制[几乎]也意味着获得对代码的访问权限!所以他也可以更改我的代码以登录任何帐户!**如果我错了,请纠正自己**! (2认同)

Jac*_*cco 5

根据定义,盐是随机的;不存在“静态盐”这样的东西。如果它不是随机的,那么它就不是盐而是密钥。

加盐的目的是确保攻击者必须为他/她想要破解的每个密码发起单独的攻击。换句话说,对哈希加盐的目的是防止预计算攻击(彩虹表)。

正确的简单解决方案是使用标准库而不是偷工减料


foo*_*oob 5

虽然密码存储的最佳实践要求它们应该以具有独特盐的哈希格式存储,但原始问题实际上提出了一个相当好的观点:如果将盐存储在与哈希不同的位置,那些哈希的影响就是披露被降低.

1)如果密码只是哈希,并存储在数据库中,并且该站点遭受SQL注入,则攻击者可以"破解"哈希

2)如果使用salt对密码进行哈希处理,并且哈希和salt都在数据库中,并且站点有SQL注入,则攻击者可以"破解"哈希值,但需要更多的计算工作量(因为没有性能)从预先计算的表中提升)

3)如果密码是带盐的哈希值,并且盐存储在其他地方,则SQL注入会使攻击者无法确定实际密码.

场景1显然是最弱的,但2和3之间的安全性差异不那么明确,并且取决于SQL注入与服务器端代码泄露(以及相关的漏洞类别)的相对概率.

您更信任什么 - 您防范SQL注入的能力,或Apache/PHP /无论保护您的服务器端内容的能力.

事情从来都不简单,我实际上认为OP中的想法比其他答案更有意义.

(如果您希望在生成密码时存储在Web应用程序源中,则可以同时使用存储在数据库中的salt和"密钥").