我遇到了一个讨论,在其中我了解到我一直在做的实际上并不是对密码进行加盐,而是对它们进行添加,从那以后我开始使用以下功能进行这两种操作:
hash_function($salt.hash_function($pepper.$password)) [multiple iterations]
忽略选择的哈希算法(我希望这是对椒盐的讨论,而不是特定的算法,但我使用的是安全的算法),这是一个安全的选项还是我应该做一些不同的事情?对于那些不熟悉这些条款的人:
盐是一个随机生成的值,通常与字符串一起存储在数据库中,旨在使使用哈希表无法破解密码。由于每个密码都有自己的盐,因此必须对它们进行单独的暴力破解才能破解它们;但是,由于盐与密码哈希一起存储在数据库中,因此数据库泄露意味着两者都丢失。
辣椒是与数据库分开存储的站点范围的静态值(通常在应用程序的源代码中硬编码),旨在保密。使用它是为了使数据库的妥协不会导致整个应用程序的密码表是暴力破解的。
有什么我遗漏的东西吗?在我的密码上加盐和撒盐是保护用户安全的最佳选择吗?这样做有任何潜在的安全漏洞吗?
注意:为了讨论的目的,假设应用程序和数据库存储在不同的机器上,不共享密码等,因此数据库服务器的破坏并不自动意味着应用程序服务器的破坏。