【问题标题】:Implementing hash and salt in Spring 3 security在 Spring 3 安全中实现 hash 和 salt
【发布时间】:2013-08-18 20:48:26
【问题描述】:

当我为 dtb 创建新条目时,我理解 hash+salt 的概念。如果我有一些固定的盐字符串,实现它可能并不难,但是当我想使用例如用户的生日作为盐时怎么做?将该密码保存到数据库很容易,但是如何在登录期间对其进行哈希处理?我在我的applicationContext-security.xml 文件中搜索了这段代码,他们在其中使用username 值作为盐:

<!-- authentication from database -->
<security:authentication-manager>
    <security:authentication-provider>
        <security:jdbc-user-service
            data-source-ref="dataSource"
            users-by-username-query="
          select username,password, enabled 
          from users where username=?"authorities-by-username-query="
          select u.username, ur.authority from users u, user_roles ur 
          where u.user_id = ur.user_id and u.username =?  " />
    <security:password-encoder hash="sha-256">
        <security:salt-source user-property="username" />
        </security:password-encoder-->
    </security:authentication-provider>

</security:authentication-manager>

所以,如果我理解正确,这意味着,如果我想将用户的生日用作盐,我必须将其存储在我的 dtb 中,将其从 dtb 中取出,然后将其用作盐?这对我来说没有意义,因为如果我的users 表列中有usernamepasswordbirthday,那么可以对密码进行哈希处理,但对于可能的攻击者来说很清楚, birthday 值将用作盐。有什么我遗漏的东西还是真的有用吗?

【问题讨论】:

  • BCrypt 这样的东西是近来的首选。加盐是内部完成的,不用担心,更安全。

标签: java security spring-security salt password-hash


【解决方案1】:

使用盐的目的是保护用户的密码,以防黑客转储数据库。因为哈希是一种单向转换(您无法反转转换以获取纯文本密码),黑客正在使用哈希字典来猜测用户的密码(使用常见的密码短语)。所以添加盐会增加额外的保护层来抵御这种类型的攻击。

来自维基百科:

Dictionary attack

Rainbow table attack

【讨论】:

    【解决方案2】:

    盐不是敏感信息,如果被泄露也没关系。盐只是防止对哈希的彩虹表攻击。请注意,盐应该具有相当高的熵,并且生日可能不如来自SecureRandom 的 32 个字节那么安全。

    【讨论】:

      猜你喜欢
      • 2013-08-02
      • 2017-08-06
      • 2013-06-17
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      相关资源
      最近更新 更多