盐位置,盐藏

时间:2012-02-16 16:14:29

标签: security encryption salt jasypt salt-creation

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

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

谢谢。

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

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

建议:难以窃取整个盐

基本腌制机制还有一些额外的建议增强功能需要考虑:

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

建议:盐分离

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

1 个答案:

答案 0 :(得分:2)

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