✏️ Java 코드 에디터
취약한 코드
import java.security.MessageDigest;
public class Hasher {
public byte[] hash(String password, byte[] salt) throws Exception {
MessageDigest md = MessageDigest.getInstance("SHA-256");
// [취약점] 솔트(salt)를 사용하지 않고 패스워드만 해시함
// 동일한 비밀번호는 항상 동일한 해시값을 가지게 되어
// 레인보우 테이블 공격에 취약함
md.update(password.getBytes());
return md.digest();
}
}
💡 수정 가이드
1. Salt 업데이트
패스워드 해시 전, 랜덤하게 생성된 salt 값을 먼저 업데이트해야 합니다.
md.update(salt);
📊 분석 결과
🎯 목표
솔트(Salt)는 동일한 비밀번호라도 다른 해시값을 생성하게 하여 레인보우 테이블 공격을 방어합니다. 해시 생성 시 솔트를 포함하도록 코드를 수정하세요.