DES 암호화·복호화 도구
DES와 Triple DES(3DES) 지원, 다섯 가지 암호화 모드
암호화 설정
DES란?
DES(Data Encryption Standard)는 1977년 IBM이 개발하고 NSA의 수정을 거쳐 미국 연방 표준이 된 암호 알고리즘입니다. Feistel 네트워크 구조를 사용하여 64비트 평문을 좌우로 나누고 16라운드의 변환을 거칩니다. 키는 명목상 64비트이지만 8비트는 패리티 검사용으로 예약되어 실제 키 길이는 56비트입니다. 당시 56비트는 충분히 안전했지만, 1999년에는 전용 하드웨어로 22시간 만에 무차별 대입이 가능해졌습니다. Triple DES(3DES)는 DES의 수명을 연장하기 위해 개발되었으며, 세 개의 서로 다른 키로 DES 암호화를 세 번 적용하여 168비트의 실질 키 길이를 달성합니다. 3DES는 EMV 칩 카드와 다양한 은행 프로토콜 등 금융 분야에서 아직 널리 사용되고 있습니다. AES가 DES를 대체하는 새 암호 표준이 되었지만, 레거시 시스템이나 금융 프로토콜, 임베디드 기기에서는 DES와 3DES가 여전히 활용되고 있습니다. 이 도구는 DES와 3DES 두 알고리즘을 모두 지원하며, CBC, ECB, CFB, OFB, CTR 다섯 가지 모드를 제공합니다.
사용 방법
사용 방법
- 알고리즘을 선택하세요: DES(56비트 키) 또는 3DES(168비트 키)
- 암호화 모드를 선택하세요. CBC를 권장합니다.
- 패딩 방식을 선택하세요 - PKCS#7은 대부분의 경우에 적합합니다
- 키를 입력하거나 '랜덤 키 생성'을 클릭하세요
- IV가 필요한 모드에서는 IV를 입력하거나 생성하세요
- 왼쪽에 평문(암호화 대상) 또는 암호문(복호화 대상)을 입력하세요
- 결과는 오른쪽에 자동으로 표시됩니다
암호화 모드
- CBC — Cipher Block Chaining. 암호화 전에 각 평문 블록을 이전 암호문 블록과 XOR 연산합니다. IV가 필요하며, 보안성이 우수하고 가장 널리 사용되는 모드입니다.
- ECB — Electronic Codebook. 각 블록이 독립적으로 암호화되어 동일한 평문 블록은 동일한 암호문을 생성합니다. 단일 8바이트 블록에는 적합하지만, 더 긴 데이터에는 권장하지 않습니다.
- CFB — Cipher Feedback. 블록 암호를 스트림 암호로 변환하며, 바이트 단위 또는 작은 단위로 데이터를 처리할 때 적합합니다.
- OFB — Output Feedback. CFB와 유사하지만 오류가 전파되지 않으며, 노이즈가 많은 통신 채널에서 유용합니다.
- CTR — Counter 모드. 증가하는 카운터로 키스트림을 생성하며, 병렬 암호화·복호화를 지원해 성능이 우수합니다.
팁
- 가능하면 AES를 사용하세요 — DES는 주로 레거시 호환성을 위해 존재합니다
- 3DES는 DES보다 훨씬 안전하지만 약 3배 느립니다
- 매번 다른 랜덤 IV를 사용하세요
- 8바이트 이상의 데이터를 암호화할 때는 ECB 모드 사용을 피하세요
- 기억하기 쉬운 문자열 대신 무작위 키를 생성하세요
활용 사례
기술 원리
DES는 1977년 FIPS 46으로 발표된 Feistel 블록 암호이다. 64비트 블록 단위로 동작하며 64비트 키를 사용하지만, 그중 8비트는 패리티 비트로 실제 키 길이는 56비트이다. 암호화 과정은 초기 치환(IP)으로 시작하여 64비트 상태를 32비트 좌·우 반쪽 L0, R0으로 나눈 뒤 (L_{i+1}, R_{i+1}) = (R_i, L_i XOR F(R_i, K_i)) 형태의 Feistel 라운드를 16회 반복한다. 라운드 함수 F는 E-box로 32비트를 48비트로 확장하고, PC-1/PC-2 키 스케줄로 파생된 48비트 라운드 키 K_i를 XOR한 뒤, 8개의 6→4비트 S-box(S1~S8)를 적용하고 P-box 치환을 수행한다. 최종 치환(FP = IP⁻¹)이 평문을 출력한다. NIST SP 800-67에 정의된 Triple DES는 DES를 암호화-복호화-암호화(EDE) 방식으로 세 번 적용한다: C = E_{K3}(D_{K2}(E_{K1}(P))). 키 옵션 1은 독립적인 56비트 키 세 개(168비트, 중간만남 공격 대비 약 112비트 보안)를 사용하고, 키 옵션 2는 K1 = K3으로 설정(약 80비트 보안)한다. 블록 암호 모드는 DES/3DES를 64비트 이상의 메시지에 적용할 수 있도록 래핑한다: ECB는 각 블록을 독립적으로 암호화하여 평문 패턴을 유출하고, CBC는 C_i = E_K(P_i XOR C_{i-1}) 체인에 임의의 8바이트 IV를 사용하며, CFB와 OFB는 블록 암호를 자기 동기화 또는 동기 스트림 암호로 전환하고, CTR은 평문을 E_K(nonce || counter)와 XOR한다. DES의 56비트 키 공간(2^56 ≈ 7.2 × 10^16)은 무차별 대입이 가능하다: EFF DES Cracker는 1998년 전용 ASIC으로 22시간 만에 DES 과제를 해독했으며, 현대 GPU/FPGA 클러스터는 수 시간이면 완료한다. NIST SP 800-131A는 2005년 단일 DES를 폐기하고 2023년 이후 Triple DES의 암호화 사용을 금지했다. Sweet32 생일 공격(CVE-2016-2183)은 3DES의 64비트 블록 크기를 악용하여 단일 키로 ~2^32블록(~32GB) 이후 충돌이 발생하므로 TLS에서 3DES를 더욱 약화시킨다. 현대 시스템은 DES나 3DES 대신 GCM이나 ChaCha20-Poly1305 같은 인증 모드의 AES-128 또는 AES-256을 사용해야 한다.
- DES 키는 패리티 포함 8바이트(실질 56비트). 3DES 키는 16바이트(2키, ~80비트 보안) 또는 24바이트(3키, 중간만남 공격 대비 ~112비트 보안).
- 블록 크기는 64비트/8바이트. CBC, CFB, OFB, CTR은 모두 8바이트 IV/nonce가 필요하며, ECB는 IV를 사용하지 않는다(블록 단위로 패턴 유출).
- PKCS#7 패딩은 값이 N인 N바이트를 추가한다(1 ≤ N ≤ 8). 평문 길이가 이미 8의 배수이면 0x08로 채운 8바이트 블록이 하나 추가된다.
- 약 키 0x0101010101010101, 0xFEFEFEFEFEFEFEFE, 네 쌍의 반약 키는 키 스케줄에서 K1 = K2가 되어 E_K = D_K가 되므로, 랜덤 키 생성 시 피해야 한다.
- Sweet32(CVE-2016-2183)는 3DES의 64비트 블록을 악용한다: 단일 키로 ~2^32블록(CBC 모드에서 단일 키 기준 평문 ~32GB) 이후 충돌이 발생한다.
- NIST SP 800-67 Rev. 2는 2023년 12월 31일 이후 Triple DES의 암호화 사용을 금지했다. 새 설계는 DES나 3DES 대신 AES-GCM 또는 ChaCha20-Poly1305를 사용해야 한다.
- EFF DES Cracker(Deep Crack)는 1998년 7월 25만 달러 미만의 비용으로 22시간 만에 DES를 해독했다. 현대 GPU 클러스터는 수 시간이면 가능하므로, 단일 DES는 기밀성 통제 수단이 아니다.
예시
DES-CBC 암호화
평문: Hello World
키 (hex): 0123456789abcdef
IV (hex): fedcba9876543210
모드: CBC / PKCS#7
출력: Base64 인코딩된 암호문3DES 암호화
알고리즘: Triple DES
키 (hex): 24바이트 (48 hex 문자)
모드: CBC / PKCS#7
참고: 168비트 키 길이는 현재까지도 안전한 것으로 간주되지만, 신규 프로젝트에서는 AES 사용을 권장합니다ECB 단일 블록
평문: 8바이트 (정확히 한 개의 DES 블록)
키: 0123456789abcdef
모드: ECB / PKCS#7
참고: ECB는 단일 8바이트 블록에서만 안전하며, 더 긴 데이터에는 절대 사용하지 마세요자주 묻는 질문
DES를 아직도 안전하게 사용할 수 있나요?
아니요. 일반 DES는 유효 키 길이가 56비트이며 1998년에 공개적으로 깨졌습니다. 전용 하드웨어를 사용하면 하루 안에 무차별 대입이 가능하고, 최신 클라우드 GPU로는 몇 분이면 됩니다. NIST는 2005년에 DES를 공식 폐기했습니다. 새 시스템에서는 반드시 AES를 사용하세요.
Triple DES(3DES)는 어떤가요?
3DES는 두 개 또는 세 개의 키로 DES를 세 번 적용하여 약 112비트 수준의 유효 보안 강도를 제공합니다. NIST는 2017년에 3DES를 폐기 권고했고, 64비트 블록 크기에 대한 생일 한계 공격(Sweet32) 때문에 2023년 이후로는 새 응용에서의 사용을 금지했습니다. 일부 레거시 시스템(구형 은행 및 POS 네트워크)에만 남아 있으니 가능한 한 빨리 마이그레이션하세요.
그런데도 이 페이지에서 DES를 제공하는 이유는 무엇인가요?
현실의 레거시 시스템에서 여전히 사용되기 때문입니다. 구형 은행 형식, 임베디드 펌웨어, 시험 문제 등과 호환해야 할 때 유용한 도구입니다. DES 사용을 권장하는 것은 아니며, 새 코드에서는 AES를 써야 합니다.
DES 모드에는 어떤 것들이 있고 각각 어떤 의미인가요?
ECB는 각 블록을 독립적으로 암호화하며 패턴이 노출됩니다. CBC는 블록을 체이닝하며 IV가 필요합니다. CFB와 OFB는 DES를 스트림 암호로 변환합니다. CTR은 카운터를 nonce로 사용합니다. DES에서는 호환성이 목적일 때 PKCS#7 패딩과 함께 CBC를 권장하며, 실제 데이터에는 절대 ECB를 사용하지 마세요.
DES의 블록 크기와 키 크기는 어떻게 되나요?
DES는 64비트 블록 크기와 64비트 키를 사용하며, 그중 56비트만 실제 키 데이터이고 나머지 8비트는 패리티 비트입니다. 3개 키를 사용하는 3DES도 여전히 64비트 블록 크기를 가지는데, 이 점이 대용량 데이터 환경에서 Sweet32가 문제가 된 이유입니다.
계산은 브라우저에서 수행되나요?
네. DES는 JavaScript를 통해 로컬에서 계산됩니다. 키와 평문은 기기를 떠나지 않습니다. 암호화/복호화 중에 네트워크 탭을 열어 직접 확인할 수 있습니다.
3DES 출력이 상대 시스템과 일치하지 않는 이유는 무엇인가요?
흔한 원인은 다음과 같습니다. 잘못된 키 패리티 비트, 키 바이트 순서 차이, 잘못된 모드(ECB vs CBC), IV 누락 또는 추가, 잘못된 패딩(PKCS#7 vs ZeroPadding), 한쪽은 UTF-8로 다른 한쪽은 UTF-16으로 인코딩한 입력 등입니다. 실제 데이터를 디버깅하기 전에 상대 시스템과 합의된 테스트 벡터로 먼저 검증하세요.