🧂 솔트 없이 일방향 해쉬 함수 사용 - 실습 시뮬레이터

CWE-759: Use of a One-Way Hash without a Salt

✅ 학습 진행도
  • 진단 시작
  • Salt 추가
  • 해쉬 업데이트
✏️ Java 코드 에디터 취약한 코드
Hasher.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)는 동일한 비밀번호라도 다른 해시값을 생성하게 하여 레인보우 테이블 공격을 방어합니다. 해시 생성 시 솔트를 포함하도록 코드를 수정하세요.

✅ 학습 진행도
  • 진단 시작
  • 단순 해시 제거
  • PBKDF2 등 적용
🐍 Python 코드 에디터 취약한 코드
password_hash.py
import hashlib

def hash_password(password):
    # [취약점] 솔트 없이 단순 SHA-256 해시 사용
    # 이는 매우 빠르게 계산 가능하여 무차별 대입에 취약함
    return hashlib.sha256(password.encode()).hexdigest()
💡 수정 가이드
1. 키 스트레칭 함수 사용

hashlib.pbkdf2_hmac 등을 사용하여 솔트와 함께 반복 해싱을 수행해야 합니다.

hashlib.pbkdf2_hmac('sha256', password.encode(), salt, 100000)
📊 분석 결과
🎯 목표

단순 해시 함수 대신, 솔트와 반복 횟수(Iteration)를 적용할 수 있는 `pbkdf2_hmac` 등의 안전한 함수로 교체하세요.