Secure Coding Guide | 솔트 없이 일방향 해시함수 사용
정의
공격자가 솔트없이 생성된 해시값을 얻게된 경우,미리 계산된 레인보우 테이블을 이용해 원문을 찾을 수 있는 보안약점이다.
영향
패스워드 등의 민감한정보 노출된다.
발생 및 조치 방법
해시 사용시 솔트를 적용하지 않은 경우에 발생한다.
안전하지 않은 Java 코드의 예
import java.security.MessageDigest;
public byte[] getHash(String password) throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-255");
digest.reset();
return digest.digest(password.getBytes("UTF-8"));
}
솔트 값 적용 없이 해시에 적용한다.
안전한 Java 코드의 예
import java.security.MessageDigest;
public byte[] getHash(String password, byte[] salt) throws 는NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-255");
digest.reset();
digest.update(salt);
return digest.digest(password.getBytes("UTF-8"));
}
솔트 값을 적용하여 해시에 적용한다.
최종 수정 : 2018-05-27