Strong Root


비밀번호 저장시


1. 충분히 긴 길이의 랜덤 salt 를 생성한다. (java.security.SecureRandom 사용할 것)


2. 생성된 salt 에 타깃 pw 를 붙이고 해싱한다.


3. salt 와 결과 hash 를 둘다 유저 테이블에 있는 각각의 컬럼에 나란히 저장한다.




비밀번호 검증시


1. 유저 테이블에서 해당 유저의 salt 와 결과 hash 를 가져온다.


2. salt 뒤에 검증할 pw 를 붙이고 같은 해싱 기법으로 해싱한다.


3. hash 결과를 비교하여 일치하면 true, 아니면 false




주의


1. salt 는 유저마다, 패스워드마다 고유해야 한다. (The salt needs to be unique per-user per-password.)


2. 한번이라도 사용된 salt 는 절대 재사용하면 안된다.


3. salt 의 길이는 충분히 길어야 한다. 결과 hash 와 같은 길이로 하는 것이 가장 좋다.


4. salt 값은 유저 테이블에 결과 hash 와 나란히 저장되어야 한다.






출처


https://crackstation.net/hashing-security.htm