🔓 취약한 암호화 알고리즘 - 실습 시뮬레이터

CWE-327: Use of a Broken or Risky Cryptographic Algorithm

✅ 학습 진행도
  • 진단 시작
  • DES 알고리즘 제거
  • AES 알고리즘 적용
  • KeyGenerator 수정
✏️ Java 코드 에디터 취약한 코드
SimpleEncryptor.java 💡 DES 대신 강력한 알고리즘(AES)을 사용하세요
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class SimpleEncryptor {
    public byte[] encryptData(String data) throws Exception {
        // [취약점] DES는 키 길이가 56비트로 매우 짧아 
        // 전수 조사 공격(Brute Force)에 취약합니다.
        KeyGenerator keyGen = KeyGenerator.getInstance("DES");
        keyGen.init(56);
        SecretKey key = keyGen.generateKey();
        
        // Cipher 인스턴스도 DES 사용
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        
        return cipher.doFinal(data.getBytes());
    }
}
💡 수정 가이드
1. 키 생성기 변경

DES 대신 AES 키 생성기를 사용하세요.

KeyGenerator keyGen = KeyGenerator.getInstance("AES");
2. 키 길이 증가

56비트 대신 128비트 또는 256비트로 초기화합니다.

keyGen.init(256);
3. Cipher 인스턴스 변경

알고리즘을 AES로 변경합니다. (가급적 GCM이나 CBC 모드 권장)

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
📊 분석 결과 및 설명
🎯 목표

현재 코드는 오래된 암호화 알고리즘인 DES (Data Encryption Standard)를 사용하고 있습니다. 이를 현대적인 표준인 AES (Advanced Encryption Standard)로 교체하여 보안성을 높이세요.

⚠️ 현재 취약점

Broken Crypto Algorithm (DES)

DES는 56비트 키를 사용하여 현대 컴퓨터 연산 능력으로는 매우 짧은 시간 안에 키를 찾아낼 수 있습니다. NIST에서는 2005년부터 DES 사용을 금지했습니다.

✅ 학습 진행도
  • 진단 시작
  • DES import 제거
  • AES import 추가
  • AES 객체 생성
🐍 Python 코드 에디터 취약한 코드
encrypt_data.py 💡 DES.new()를 AES.new()로 변경하세요
# [취약점] DES 모듈 사용
from Crypto.Cipher import DES
from Crypto.Random import get_random_bytes

def encrypt_secret(data):
    # DES 키 길이는 8바이트(64비트, 실제 유효 56비트)
    key = get_random_bytes(8)
    
    # DES 객체 생성 (ECB 모드도 취약하지만 여기선 알고리즘에 집중)
    cipher = DES.new(key, DES.MODE_ECB)
    
    # 패딩 및 암호화 수행 (가정)
    padded_data = pad(data)
    encrypted = cipher.encrypt(padded_data)
    
    return encrypted
💡 수정 가이드
1. 모듈 Import 변경

DES 대신 AES 모듈을 가져옵니다.

from Crypto.Cipher import AES
2. 키 길이 변경

AES는 최소 16바이트(128비트) 키가 필요합니다.

key = get_random_bytes(16)
3. 암호화 객체 생성

AES.new()를 사용하여 객체를 생성합니다.

cipher = AES.new(key, AES.MODE_ECB)
📊 분석 결과 및 설명
🎯 목표

Python의 PyCryptodome 라이브러리를 사용할 때, DES와 같은 취약한 알고리즘은 사용하지 말아야 합니다. 이를 AES로 교체하고 키 길이도 그에 맞게(16바이트 이상) 수정하세요.

⚠️ 현재 취약점

Risky Algorithm Usage

코드 상단에 from Crypto.Cipher import DES가 존재하며, DES.new()를 호출하여 암호화 객체를 만들고 있습니다. 이는 보안 감가 대상 1순위입니다.