2013-08-16 5 views
1

dtb에 새로운 항목을 만들 때 hash + salt라는 개념을 이해합니다. 소금에 고정 된 문자열을 사용하면 구현하기가 어려울 수도 있지만 어떻게해야할까요, 예를 들어 사용자의 생일을 소금으로 사용하고 싶습니까? 데이터베이스에 암호를 저장하는 것은 쉽지만 로그인하는 동안 이것을 해싱하는 방법은 무엇입니까? 그들은 소금 ​​username 값을 사용하여 어디, 내 applicationContext-security.xml 파일이 코드 조각을 봤했습니다스프링 3 보안에서 해쉬와 솔트 구현

<!-- 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 테이블 열 username, password, birthday에있는 경우 암호가 해시 될 수 있기 때문에 공격자가 확실하기 때문에 birthday 값이 소금으로 사용되므로 나를 이해할 수 없습니다. . 실종되었거나 실제로 작동합니까?

+0

요즘에는 [BCrypt] (http://stackoverflow.com/a/8528804/241990)와 같은 것이 좋습니다. 염분은 내부적으로 이루어 지므로 염려 할 필요가 없으며 더욱 안전합니다. –

답변

1

소금을 사용하는 목적은 해커가 데이터베이스를 덤프하는 경우 사용자의 암호를 보호하는 것입니다. 해시는 일방적 인 변환이므로 일반 텍스트 암호를 얻기 위해 변환을 되돌릴 수 없습니다. 해커는 해시 사전을 사용하여 사용자 암호를 추측합니다 (일반적인 암호 구문 사용). 따라서 소금을 추가하면 이러한 유형의 공격에 대비하여 추가 보호 층이 추가됩니다. 위키

:

Dictionary attack

Rainbow table attack

1

염은이 개시되는 경우는 문제가되지 않는 중요한 정보가 아니다. 소금은 단순히 해저에 무지개 테이블 공격을 방지합니다. 소금은 상당히 높은 수준의 엔트로피를 가져야하며, 생일은 SecureRandom에서 32 바이트만큼 안전하지 않을 수 있습니다.

관련 문제