我遇到了一个讨论,在那次讨论中,我了解到我实际上并不是在给密码加盐,而是在给它们添加胡椒粉,从那时起,我就开始使用以下功能:
hash_function($salt.hash_function($pepper.$password)) [multiple iterations]
忽略选择的哈希算法(我希望这是关于盐和胡椒的讨论,而不是特定算法的讨论,但是我使用的是安全算法),这是安全的选择还是我应该做一些不同的事情?对于不熟悉的术语:
甲盐是通常存储与设计,使其不可能使用哈希表来破解密码的数据库中的字符串中的随机生成值。由于每个密码都有自己的特色,因此必须将所有密码单独强行破解。但是,由于盐与密码哈希一起存储在数据库中,因此数据库泄密意味着同时丢失两者。
甲胡椒是从中旨在是秘密的数据库(在应用程序的源代码通常硬编码)分开存储站点范围静态值。使用它是为了避免对数据库的损害,不会导致整个应用程序的密码表都是蛮力的。
我有什么想念的吗?给密码加盐和胡椒粉是保护用户安全的最佳选择吗?这样做是否存在潜在的安全缺陷?
注意:出于讨论目的,假设应用程序和数据库存储在单独的计算机上,不共享密码等,因此违反数据库服务器并不意味着违反应用程序服务器。
青春有我
哔哔one