ToolActToolAct

DES 암호화·복호화 도구

DES와 Triple DES(3DES) 지원, 다섯 가지 암호화 모드

암호화 설정

입력 내용
문자 수: 0
바이트 수: 0
변환 결과
문자 수: 0
바이트 수: 0

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 다섯 가지 모드를 제공합니다.

사용 방법

사용 방법

  1. 알고리즘을 선택하세요: DES(56비트 키) 또는 3DES(168비트 키)
  2. 암호화 모드를 선택하세요. CBC를 권장합니다.
  3. 패딩 방식을 선택하세요 - PKCS#7은 대부분의 경우에 적합합니다
  4. 키를 입력하거나 '랜덤 키 생성'을 클릭하세요
  5. IV가 필요한 모드에서는 IV를 입력하거나 생성하세요
  6. 왼쪽에 평문(암호화 대상) 또는 암호문(복호화 대상)을 입력하세요
  7. 결과는 오른쪽에 자동으로 표시됩니다

암호화 모드

  • CBCCipher Block Chaining. 암호화 전에 각 평문 블록을 이전 암호문 블록과 XOR 연산합니다. IV가 필요하며, 보안성이 우수하고 가장 널리 사용되는 모드입니다.
  • ECBElectronic Codebook. 각 블록이 독립적으로 암호화되어 동일한 평문 블록은 동일한 암호문을 생성합니다. 단일 8바이트 블록에는 적합하지만, 더 긴 데이터에는 권장하지 않습니다.
  • CFBCipher Feedback. 블록 암호를 스트림 암호로 변환하며, 바이트 단위 또는 작은 단위로 데이터를 처리할 때 적합합니다.
  • OFBOutput Feedback. CFB와 유사하지만 오류가 전파되지 않으며, 노이즈가 많은 통신 채널에서 유용합니다.
  • CTRCounter 모드. 증가하는 카운터로 키스트림을 생성하며, 병렬 암호화·복호화를 지원해 성능이 우수합니다.

  • 가능하면 AES를 사용하세요 — DES는 주로 레거시 호환성을 위해 존재합니다
  • 3DES는 DES보다 훨씬 안전하지만 약 3배 느립니다
  • 매번 다른 랜덤 IV를 사용하세요
  • 8바이트 이상의 데이터를 암호화할 때는 ECB 모드 사용을 피하세요
  • 기억하기 쉬운 문자열 대신 무작위 키를 생성하세요

활용 사례

레거시 DES 또는 TripleDES 연동 재현8바이트 키의 DES 또는 24바이트 키의 TripleDES를 선택하고, 구형 결제·통신·디바이스·기업 프로토콜 유지보수 시 ECB, CBC, CFB, OFB, CTR 모드를 맞춥니다. Feistel 네트워크 구현은 crypto-js를 통해 브라우저 내에서 전부 처리되므로 56비트(DES) 또는 168비트(3DES) 키와 평문이 로컬 탭을 벗어나지 않습니다. 벤더 샘플을 재현할 때 실제 카드 데이터를 원격 도구로 보낼 필요가 없어 유용합니다.
키, IV, 암호문 형식을 정확히 일치시키기키와 IV를 hex, Base64, 텍스트로 입력하고, 필요할 때 랜덤 자료를 생성하며, 비-ECB 모드에 필요한 8바이트 IV를 검증한 뒤 다른 시스템의 출력과 비교합니다. 불일치 원인이 잘못된 키 길이(DES는 8바이트, 3DES는 24바이트), 누락·만료 IV, 마지막 블록의 PKCS#7 패딩 엣지 케이스인지 쉽게 확인할 수 있습니다.
레거시 암호를 격리해야 하는 이유를 문서화새 보안 설계가 아닌 호환성 테스트와 마이그레이션 참고용으로 사용합니다. DES는 이미 1999년 전용 장비가 22시간 만에 해독했을 정도로 구식이며, TripleDES도 레거시입니다. 현대 시스템은 AES-GCM 같은 인증 암호화를 우선시해야 하며, DES 예시는 명확히 라벨링하여 새 보안 작업에 복사되지 않도록 해야 합니다.
벤더 샘플과의 동등성을 확인하기 위해 암호문 라운드트립 테스트결제 단말기, SIM 도구, 레거시 API 연동 시 파트너가 공개한 키와 IV로 알려진 평문을 암호화한 뒤 복호화하여 바이트 단위로 비교합니다. 바이트 길이 카운터로 출력이 벤더가 기대하는 8바이트 블록 경계와 일치하는지 확인하세요. 잘린 패딩이나 Base64 필드 주변의 여백은 흔한 무음 오류 원인입니다.
hex, Base64, 텍스트 간 전환으로 전송 형식에 맞추기암호문을 수신하는 필드에 맞게 인코딩 옵션을 조정하세요. Base64만 지원하는 다운스트림 서비스는 동일한 DES 출력이더라도 원시 hex를 거부합니다. 같은 키가 hex('0123456789abcdef')와 Base64('ASNFZ4mrze8=')로 표현되어도 동일한 평문으로 복호화됩니다. 파트너 시스템의 '잘못된 형식' 오류를 진단할 때 유용합니다.

기술 원리

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으로 인코딩한 입력 등입니다. 실제 데이터를 디버깅하기 전에 상대 시스템과 합의된 테스트 벡터로 먼저 검증하세요.