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"));
}

솔트 값을 적용하여 해시에 적용한다.