🧊 취약한 암호화 알고리즘 시뮬레이터 KISA A-2 · 취약한 암호화 알고리즘

깨진 알고리즘(DES, RC4, MD5)과 ECB 블록 모드는 구조를 누출합니다. ECB는 같은 평문 블록을 같은 암호문 블록으로 변환합니다 — 유명한 'ECB 펭귄' 현상. AES-256-GCM·SHA-256·Argon2와 비교하세요.

① ECB 모드는 평문 패턴을 누출한다 VULNERABLE

반복 패턴을 입력하세요. ECB는 고정 크기 블록으로 쪼개 각 블록을 같은 키로 독립 암호화하므로, 같은 평문 블록은 같은 암호문 블록이 됩니다. 반복 블록은 같은 색으로 표시되어 이미지 구조가 암호화 후에도 남습니다.
평문 블록
ECB 암호문 (구조 누출!)

② MD5 / SHA-1: 고속·충돌 취약 VULNERABLE

MD5와 SHA-1은 깨졌습니다: 실용적 충돌(서로 다른 입력 → 같은 다이제스트)이 존재하고 초당 수십억 회 해싱되어, 유출된 MD5 비밀번호 해시는 거의 즉시 무차별 대입됩니다. 아래는 강제 충돌과 크랙 속도 추정입니다.

③ AES-256-GCM + SHA-256 / Argon2 SECURE

GCM 모드는 임의 IV/nonce를 쓰고 블록을 연쇄시켜 같은 평문 블록도 다른 암호문이 됩니다 — 패턴 누출 없음 — 인증 태그로 변조도 탐지합니다. 비밀번호는 느린 salt KDF(Argon2/bcrypt)로 무차별 대입을 비현실적으로 만듭니다.
AES-GCM 암호문 (구조 없음)

④ 취약 vs 안전 코드

VULNERABLE
// Java — ECB + MD5 (둘 다 취약)
Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, key);
byte[] ct = c.doFinal(plaintext);   // 패턴 누출

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] h = md.digest(password.getBytes());  // 충돌·고속
SECURE
// Java — AES-GCM + Argon2
byte[] iv = new byte[12];
SecureRandom.getInstanceStrong().nextBytes(iv);
Cipher c = Cipher.getInstance("AES/GCM/NoPadding");
c.init(Cipher.ENCRYPT_MODE, key, new GCMParameterSpec(128, iv));
byte[] ct = c.doFinal(plaintext);   // IV별 무패턴 + 인증태그

// 비밀번호: 느린 salt KDF
String h = Argon2Factory.create()
            .hash(3, 65536, 4, password.toCharArray());
방어 핵심: DES/3DES/RC4/MD5/SHA-1과 ECB 모드 금지 · 메시지별 고유 IV의 AEAD(AES-GCM / ChaCha20-Poly1305) 사용 · 비밀번호는 사용자별 salt + Argon2id/bcrypt/scrypt · 무결성에는 SHA-256 이상.
⚠️ 교육용 시뮬레이션입니다. 여기의 '암호화'는 시각화를 위한 페이지 내부 mock 매핑이며 실제 암호 연산이나 공격은 수행하지 않습니다.