-1

我对以下情况有疑问:
我想使用 jasypt 加密我的密码并使用某种盐进行加密。


如果:我使用基于密码的加密使用从环境变量中获得的密码来加密盐,这样我就可以在属性文件中获得盐的加密值,这是否有意义(或是否存在任何安全隐患) ,从那里获取它,通过我从环境变量中获取的密码解密它(实际上我将拥有一个 EnvironmentStringPBEConfig 对象,该对象反过来从 EnvironmentStringPBEConfig 对象中获取环境变量,并在创建 EnvironmentStringPBEConfig 后删除环境变量)最后使用盐。

谢谢你。

编辑:请注意,我想知道如上所述“隐藏”盐是否是一种好习惯,我现在没有实施这样的解决方案。

编辑:另请注意OWASP的以下建议。

建议:很难偷走整个盐

对于基本的加盐机制,还有一些额外的推荐增强功能可供考虑:

有一个额外的“系统”盐,它是整个系统的固定值。这应该存储在某个配置文件中。这个固定值不必包含在每个备份中,这使得攻击者更难破坏正确计算哈希值所需的所有元素。在源代码中嵌入部分系统盐。这对开源代码没有多大帮助,但对于自定义应用程序,在代码中包含部分系统盐将是攻击者正确计算哈希值所需的又一项。每次更改用户密码时都会为帐户生成一个新的盐。

建议:盐分离

另一种密码存储防御机制涉及将盐存储在与密码哈希不同的位置。使用服务器的文件系统是一种常用的盐隔离机制,假设密码哈希存储在不同的位置,例如数据库或 LDAP 服务器。这种防御机制降低了数据库文件被盗时密码被盗的风险,因为盐不会包含在数据库数据中。注意确保密码哈希和盐没有一起备份,它们也应该单独备份。

4

1 回答 1

2

为什么要加密盐?盐通常是公共信息——它们的存在只是为了防止对密码数据库进行预先计算的“彩虹表”离线攻击。我认为你需要更清楚你正在尝试做什么以及为什么。

于 2012-02-16T16:24:25.830 回答