ToolActToolAct

AES 암호화 도구

6가지 모드와 5가지 패딩 옵션을 갖춘 전문 AES 암호화

암호화 설정

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

AES 암호화란?

AES(Advanced Encryption Standard)는 현재 전 세계에서 가장 널리 사용되는 대칭 암호화 알고리즘으로, NSA에 의해 극비 정보 보호에 승인되었습니다. AES는 벨기에 암호학자 Joan Daemen과 Vincent Rijmen가 설계한 Rijndael 암호에서 발전하여 2001년 NIST에 의해 공식 발표되었으며, 더 이상 안전하지 않은 DES 알고리즘의 대체재가 되었습니다. AES는 고정 블록 크기 128비트(16바이트)의 블록 암호화를 사용하며, 128, 192, 256비트의 세 가지 키 길이를 지원하여 AES-128, AES-192, AES-256의 세 가지 보안 수준에 대응합니다. 키가 길수록 보안은 높아지지만 암복호화 속도는 약간 저하됩니다. 대칭 암호화 알고리즘으로서 AES는 암호화와 복호화에 동일한 키를 사용하므로 비대칭 암호화 알고리즘보다 훨씬 효율적입니다. AES의 응용 범위는 매우 넓습니다. 네트워크 보안에서는 TLS/SSL 프로토콜이 웹 브라우징과 이메일 전송을 보호하기 위해 AES를 사용하고, 스토리지 보안에서는 BitLocker, FileVault 등의 디스크 암호화 도구가 사용자 데이터 암호화에 AES를 채택하며, 데이터베이스 보안에서는 많은 시스템이 AES 열 수준 암호화를 지원하고, IoT에서는 기기 간 안전한 통신에 널리 사용됩니다. 이 도구는 AES의 모든 6가지 암호화 모드(ECB, CBC, CFB, OFB, CTR, GCM)와 5가지 패딩 방식을 지원하여 다양한 암호화 요구를 충족합니다.

사용 방법

사용 방법

  1. 암호화 모드를 선택하세요 (암호화와 무결성 검증에는 GCM 권장)
  2. 패딩 방식을 선택하세요 (GCM/CFB/OFB/CTR 모드는 자동으로 패딩을 사용하지 않습니다)
  3. 키 길이를 선택하세요 (256비트는 최고 보안, 128비트는 최고 성능)
  4. 키를 입력하거나 '랜덤 키 생성'을 클릭해 자동으로 생성하세요
  5. IV가 필요한 모드에서는 초기화 벡터를 입력하거나 생성하세요
  6. 왼쪽 패널에 평문(암호화 시) 또는 암호문(복호화 시)을 입력하세요
  7. 결과는 오른쪽 패널에 자동으로 표시됩니다
  8. '복사'를 클릭해 결과를 복사하거나 '교환'을 클릭해 입력과 출력을 바꿔주세요

암호화 모드

  • GCMGalois/Counter Mode는 권장 모드입니다. 암호화와 인증을 모두 제공하며 패딩이 필요 없고 병렬 처리를 지원해 네트워크 전송과 TLS에 적합합니다.
  • CBCCipher Block Chaining은 클래식 모드입니다. 각 평문 블록을 이전 암호문 블록과 XOR한 뒤 암호화하며 패딩과 IV가 필요합니다. 보안성은 우수하지만 병렬 처리는 지원하지 않습니다.
  • CFBCipher Feedback는 스트림 암호 모드입니다. 블록 암호를 스트림 암호로 변환하며 패딩이 필요 없고 스트리밍 데이터 및 실시간 암호화에 적합합니다.
  • OFBOutput Feedback는 CFB와 유사하지만 오류가 전파되지 않아 잡음이 많은 채널에 적합하며 패딩이 필요 없습니다.
  • CTRCounter mode. 증가하는 카운터로 키스트림을 생성합니다. 패딩이 필요 없고 완전한 병렬 암호화를 지원해 성능이 우수합니다.
  • ECBElectronic Codebook은 권장하지 않는 모드입니다. 동일한 평문은 동일한 암호문을 생성해 데이터 패턴이 누출되므로 단일 데이터 블록 암호화에만 적합합니다.

패딩 방식

  • PKCS7PKCS#7 패딩은 가장 일반적이고 권장되는 방식입니다. 값이 N인 바이트를 N개만큼 자동으로 채우며 복호화 시 정확히 제거되어 모호함이 없습니다.
  • ZeroPadding제로 패딩은 0x00 바이트로 채우는 방식입니다. 간단하지만 데이터가 자연스럽게 0 바이트로 끝나는 경우 모호함이 발생할 수 있습니다.
  • NoPadding패딩 없음. 데이터 길이가 정확히 16바이트의 배수여야 하며 스트림 모드나 길이가 알려진 데이터에 적합합니다.
  • ISO7859ISO/IEC 7816-4 패딩. 첫 번째 패딩 바이트는 0x80이고 이후 0x00 바이트가 이어집니다. 스마트 카드와 금융 산업에서 널리 사용됩니다.
  • ANSIX923ANSI X.923 패딩. 패딩 바이트는 모두 0x00이고 마지막 바이트가 패딩 길이를 나타냅니다. 금융 데이터 교환에서 주로 사용됩니다.

사용 팁

  • 키는 암호학적으로 안전한 난수로 생성하고 추측 가능한 문자열은 피하세요
  • 매 암호화마다 서로 다른 무작위 IV를 사용하고 IV를 절대 재사용하지 마세요
  • GCM 모드에서는 최적의 성능과 보안을 위해 12바이트(96비트) IV를 권장합니다
  • CTR과 GCM 모드는 병렬 처리를 지원해 대용량 데이터를 더 빠르게 암호화할 수 있습니다
  • 키와 IV는 16진수, 텍스트, Base64 형식으로 입력할 수 있습니다
  • 16진수 키 길이: 128비트 = 32자, 192비트 = 48자, 256비트 = 64자

활용 사례

다른 시스템의 AES 연동을 동일하게 재현하기다른 시스템이 AES-256-CBC, PKCS#7, 16진수 키, Base64 IV, Base64 암호문 같은 정확한 조합을 지정했을 때 이 페이지를 활용할 수 있습니다. 키, IV, 입력, 출력 형식을 각각 제어할 수 있어 별도의 테스트 프레임워크를 만들지 않고도 해당 규격을 맞출 수 있습니다. SubBytes, ShiftRows, MixColumns, AddRoundKey 같은 모든 연산은 aes-js 구현을 통해 브라우저에서 로컬로 실행되므로 암호문이 네트워크를 거치지 않고 키가 탭 밖으로 나가지 않습니다.
모드와 패딩을 비교한 뒤 선택하기ECB, CBC, CFB, OFB, CTR, GCM 모드를 전환하고, 패딩이 적용되는 모드에서는 PKCS#7, ZeroPadding, NoPadding, ISO/IEC 7816-4, ANSI X.923을 각각 시도해볼 수 있습니다. 스트림 계열 모드(CFB, OFB, CTR)가 패딩이 필요 없는 이유와 ECB가 패턴을 유출하는 이유를 직접 확인할 수 있습니다. CBC에 필요한 16바이트 IV와 GCM에 권장되는 12바이트 IV를 같은 평문으로 테스트할 수 있습니다.
문서용 안전한 샘플 데이터 만들기현재 표시 형식에 맞춰 무작위 키와 IV를 생성하고, 무해한 평문을 암호화한 뒤 16진수 또는 Base64로 결과를 복사해 README 예시, API 명세, 교차 언어 테스트 벡터로 활용할 수 있습니다. 키와 평문이 브라우저 탭 안에만 머무르므로 프로덕션과 유사한 데이터를 원격 인코더를 거치지 않고 샘플로 만들 수 있습니다.
다른 라이브러리 출력과 불일치 진단하기Node의 crypto, Python의 pycryptodome, Java의 javax.crypto에서 생성한 암호문이 이 페이지에서 복호화되지 않을 때, 모드와 패딩을 명세에 맞게 전환한 뒤 IV 길이, 키 길이, 입력 인코딩이 일치하는지 먼저 확인하면 애플리케이션 코드를 수정하기 전에 원인을 좁힐 수 있습니다. 흔한 원인으로 AES-CBC에서 PKCS#7 대신 ZeroPadding을 사용한 경우, AES-GCM에서 수신 측이 16바이트 인증 태그를 IV+암호문 뒤에 붙이기를 기대하는 경우 등이 있습니다.
GCM 인증 태그 처리 시연하기GCM으로 암호화한 뒤 페이지가 암호문 뒤에 붙이는 16바이트 인증 태그를 캡처하고, 태그가 잘리거나 순서가 바뀌면 수신 측이 암호문을 거부하는지 확인할 수 있습니다. 태그 처리 오류는 예외 대신 조용한 복호화 실패로 나타나는 경우가 많으므로, 이곳에서 AEAD 동작을 미리 테스트하면 통합 과정에서 문제를 사전에 잡을 수 있습니다.

기술 원리

AES(Advanced Encryption Standard)는 NIST가 1997년 15개 후보로 시작한 5년간의 공개 대회를 거쳐 2001년 11월 FIPS 197로 발표되었습니다. 우승작은 벨기에 암호학자 Joan Daemen과 Vincent Rijmen가 설계한 Rijndael로, Twofish, Serpent, RC6, Mars 등의 결선 진출작을 제쳤습니다. AES는 DES(FIPS 46, 2005년 폐지)를 대체하여 현재 전 세계에서 가장 널리 배포된 대칭 블록 암호입니다: TLS 1.2/1.3, IPsec, BitLocker, FileVault, OpenSSL의 기본 aes-256-gcm, Linux 커널의 dm-crypt, Apple의 CryptoKit, Android의 Keystore 등에 내장되어 있습니다. NSA는 2003년 AES-256을 극비(TOP SECRET) 정보 보호에 승인(suite A)하여 AES는 미국 최고 등급 분류에 처음으로 사용 승인된 공개 암호가 되었습니다. 블록 크기는 128비트(16바이트)로 고정이며, 키 크기는 128, 192, 256비트로 각각 10, 12, 14라운드를 수행합니다. 한 라운드(마지막 제외)는 4×4 바이트 상태에 대해 4가지 연산을 수행합니다: SubBytes는 고정된 16×16 S-Box를 적용합니다(0x63 = 01100011은 행 6열 3에 위치 — S-Box는 GF(2^8)에서의 곱셈 역원에 아핀 변환을 더해 대수 구조를 파괴하는 방식으로 구성됩니다); ShiftRows는 행 0을 0, 행 1을 1, 행 2를 2, 행 3을 3바이트씩 회전합니다; MixColumns는 각 열을 GF(2^8) 위의 고정 순환 MDS 행렬(행렬 형태의 다항식 0x03 * x)로 곱합니다; AddRoundKey는 라운드 서브키와 XOR합니다. 마지막 라운드에서는 MixColumns를 건너뜁니다. 라운드 키는 Rijndael 키 스케줄에서 생성됩니다: 128비트 라운드 키 11/13/15개를 RotWord(1바이트 좌측 회전), SubWord(S-Box 적용), GF(2^8) 위에서의 Rcon[i] = [0x01, 0x02, 0x04, ..., 0x80, 0x1b, 0x36] ×2^(i-1) XOR으로 생성합니다. 이 페이지의 aes-js 라이브러리는 4단계를 모두 순수 JavaScript로 수행하며 OpenSSL의 libcrypto와 바이트 수준으로 호환됩니다. 5가지 블록 모드를 지원합니다. ECB는 16바이트 블록을 독립적으로 암호화합니다: 동일한 평문 블록이 동일한 암호문 블록을 생성하여 구조가 누출됩니다(유명한 ECB 펭귄 이미지가 암호화 후에도 픽셀 패턴이 유지되어 윤곽이 살아남습니다). CBC는 각 평문 블록을 암호화 전에 이전 암호문 블록과 XOR하며, 첫 번째 블록은 IV와 XOR합니다. CTR은 AES를 스트림 암호로 변환합니다 — 증가하는 카운터(nonce || counter, 128비트 블록의 각 64비트 절반)를 암호화하고 키스트림을 평문과 XOR하여 임의 접근과 병렬 암호화를 지원합니다. GCM은 CTR에 GHASH(GF(2^128) 위의 유니버설 해시 인증자)를 더한 것으로, 16바이트 인증 태그를 암호문 뒤에 붙입니다. GCM은 TLS 1.3(RFC 8446)과 대부분의 최신 API(Node crypto.createCipheriv('aes-256-gcm', ...))에서 기본 AEAD입니다. CFB와 OFB는 호환성을 위해 유지되는 구형 스트림 암호 모드입니다. IV 함정은 프로덕션에서 가장 흔한 버그입니다. 96비트(12바이트) IV를 사용하는 GCM은 NIST 권장 구성(RFC 5288, NIST SP 800-38D §5.2.1.1)입니다: 12바이트 IV는 카운터로 취급되며 GHASH는 J0 = IV || 0x00000001에 대해 계산됩니다. CTR 모드에서 같은 키로 IV를 재사용하면 평문 XOR이 유출됩니다(C1 XOR C2 = P1 XOR P2 — 단일 선택 평문 공격으로 두 메시지 모두 복구 가능). GCM에서 IV를 재사용하면 더 심각합니다: 공격자가 인증 서브키 H를 복구하여 임의 메시지의 태그를 위조할 수 있습니다(이 공격은 Joux 2006에서 제시되었으며, NIST가 무작위 96비트 IV를 엄격한 고유성 없이 사용하는 것을 금지한 이유입니다). 이 페이지는 GCM에 대해 crypto.getRandomValues(new Uint8Array(12))로 12바이트 IV를, CBC/CFB/OFB에 대해 16바이트 IV를 생성하며, 무작위 키 버튼도 동일한 CSPRNG를 사용하므로 매번 암호화할 때마다 새로운 자료로 시작합니다. 이 도구는 AES 암호화·복호화를 모두 브라우저 내에서 aes-js(순수 JavaScript AES 구현)로 수행합니다. Web Crypto / SubtleCrypto 대체 경로는 없으며, 페이로드 크기와 무관하게 모든 연산이 aes-js를 통해 처리됩니다.

  • AES는 FIPS 197(2001)로, 15개 후보가 참가한 NIST 공개 대회에서 선정되었습니다. Rijndael이 Twofish, Serpent, RC6, Mars를 제쳤습니다. 블록 크기는 항상 128비트이며, 키 크기 128/192/256비트는 각각 10/12/14라운드를 수행합니다. 이 페이지는 aes-js의 AES_128, AES_192, AES_256 생성자를 통해 세 가지를 모두 지원합니다.
  • 4단계 라운드 함수: SubBytes(GF(2^8) 역원에 아핀 변환을 더한 256바이트 S-Box), ShiftRows(행을 0/1/2/3바이트씩 이동), MixColumns(GF(2^8) 위의 0x03 다항식을 사용한 MDS 행렬 곱셈), AddRoundKey(라운드 키와 XOR). 마지막 라운드에서는 MixColumns를 건너뜁니다. 같은 알고리즘, 같은 키 = 같은 암호문 — AES는 결정론적입니다.
  • ECB는 동일한 평문 블록이 동일한 암호문 블록을 생성하므로 안전하지 않습니다(유명한 'ECB 펭귄' 이미지가 윤곽을 유지합니다). CBC는 안전한 클래식 모드이고, CTR은 병렬성을 추가하며, GCM은 인증을 추가하여 TLS 1.3의 기본값입니다(RFC 8446). CFB와 OFB는 레거시 호환성을 위해 유지되는 스트림 암호 모드입니다.
  • PKCS#7 패딩: 1바이트 부족 시 0x0f 15바이트 + 0x10 1바이트; 2바이트 부족 시 0x0e 14바이트 + 0x0f 2바이트 등. 마지막 바이트 값이 패딩 길이를 나타내므로 패딩 제거는 모호하지 않습니다. 스트림 모드(CTR/CFB/OFB/GCM)는 패딩을 완전히 생략합니다. ZeroPadding은 데이터가 0x00으로 끝나면 모호해지므로 사용하지 마세요.
  • GCM은 AEAD입니다: 암호문에 16바이트 인증 태그가 붙으며, H = AES_K(0^128)를 사용하여 GF(2^128) 위의 GHASH로 계산됩니다. AAD(추가 인증 데이터)는 암호화하지 않고 헤더만 인증합니다. 96비트 IV(RFC 5288)는 카운터로 취급되며, 128비트 IV는 GHASH를 거쳐 J0를 유도합니다 — 동일한 보안, 약간 느림.
  • IV 재사용은 치명적입니다. CTR IV 재사용은 P1 XOR P2를 유출합니다(two-time pad). GCM IV 재사용(Joux 2006)은 공격자가 H를 복구하여 태그를 위조할 수 있게 합니다. 이 페이지는 crypto.getRandomValues(CSPRNG)로 IV를 생성하며, 세션 내에서 재사용하지 않고, IV를 암호문 앞에 붙여 복호화 측이 별도 상태 없이도 복구할 수 있게 합니다.
  • AES 키 생성: 이 도구의 무작위 키 버튼은 브라우저의 `crypto.getRandomValues`(CSPRNG)를 사용합니다. AES 라운드 연산은 순수 JavaScript 구현인 aes-js를 통해 수행되며, 동일한 키·IV·패딩 설정에서 OpenSSL libcrypto와 바이트 단위로 일치합니다.
  • 사이드 채널 현실: 순수 JS AES는 상수 시간이 아닙니다(S-Box 배열 인덱싱이 타이밍을 누출). Web Crypto의 AES는 네이티브 코드에서 상수 시간으로 동작합니다. 고신뢰 워크로드(HSM, 서버 측 KDF)에는 네이티브 경로를 선호하세요. 브라우저 내 학습 도구로서는 aes-js가 적합합니다 — 입력이 이미 페이지 메모리에 있기 때문입니다. 마이그레이션 경로: 해시는 SHA-1 → SHA-256, 암호는 DES → AES, 모드는 ECB → GCM.

예시

AES-128-CBC 암호화

평문:   Hello, World!
키:     0123456789abcdef0123456789abcdef (32 hex = 128 bit)
IV:     fedcba9876543210fedcba9876543210 (32 hex = 128 bit)
모드:   CBC / PKCS#7 / 128-bit

페이지는 출력 패널에 암호문을 Base64와 Hex 형식으로 표시합니다.
'복사' 버튼으로 값을 가져오거나 '교환' 버튼으로 다시 복호화할
수 있습니다. PKCS#7 패딩이 3바이트(0x03 0x03 0x03)를 추가하여
패딩된 평문이 정확히 하나의 AES 블록을 채웁니다.

FIPS: FIPS 197이 AES를 정의하고, NIST SP 800-38A가 CBC 모드를 정의합니다

AES-256-GCM 인증 암호화

평문:   sensitive data payload
키:     6f8a3b2c1d9e7f5a4b8c0d2e1f3a5b7c9d1e3f5a7b9c1d3e5f7a9b1c3d5e7f9a (64 hex = 256 bit)
IV:     1a2b3c4d5e6f708192a3b4c5 (24 hex = 12 bytes, GCM 권장 길이)
모드:   GCM / NoPadding / 256-bit / AAD 없음

출력 형식: IV (12B) || 암호문 || AuthTag (16B)

FIPS: NIST SP 800-38D가 GCM 모드를 정의합니다. 96비트 IV는 카운터로 사용됩니다

AES-128-ECB (FIPS 197 부록 B 테스트 벡터)

키:        2b7e151628aed2a6abf7158809cf4f3c (128 bit)
평문:      3243f6a8885a308d313198a2e0370734
암호문 (Hex): 3925841d02dc09fbdc118597196a0b32

모드:      ECB / 128-bit

참고: ECB는 16바이트 블록을 각각 독립적으로 암호화합니다.
동일한 평문 블록은 항상 동일한 암호문 블록을 생성합니다.
FIPS: FIPS 197 부록 B에 이 표준 테스트 벡터가 수록되어 있습니다

AES 모드 보안 비교

ECB:  IV 없음, 결정적, 패턴 노출 - 운영 환경에서 절대 사용 금지
CBC:  랜덤 IV, 복호화만 병렬 처리 가능, 무결성 보장을 위해 HMAC 필요
CTR:  카운터 IV, 암·복호화 모두 병렬 처리 가능, MAC 필요
GCM:  랜덤 IV, 병렬 처리 가능, 인증 태그 내장

새 시스템에서는 AES-256-GCM을 권장합니다:
- 256비트 키는 양자 공격(Grover 알고리즘)에도 안전
- GCM은 한 번의 연산으로 기밀성과 무결성을 모두 제공
- TLS 1.3은 AES-GCM과 같은 AEAD 암호를 필수로 요구

NIST: NIST SP 800-38A/D에 모든 모드가 문서화되어 있습니다

자주 묻는 질문

AES란 무엇이며 어떤 키 길이를 지원하나요?

AES(Advanced Encryption Standard, FIPS 197)는 현대 HTTPS, Wi-Fi WPA2, 디스크 암호화를 보호하는 데 가장 널리 쓰이는 대칭 암호 알고리즘입니다. 본 페이지는 128, 192, 256비트 키를 지원합니다. AES-128은 빠르면서도 거의 모든 용도에 충분히 안전하며, 미래의 양자 암호 분석에 대한 장기적인 저항력이 필요할 때만 AES-256을 선택하면 됩니다.

ECB, CBC, CFB, OFB, CTR, GCM 중 어떤 모드를 사용해야 하나요?

ECB는 단일 블록 테스트 벡터를 제외하고는 안전하지 않습니다(패턴 정보가 노출됨). CBC와 CTR은 기밀성만 제공하므로 별도의 MAC이 필요합니다. GCM은 현대의 기본 선택지로, 암호화와 동시에 암호문에 대한 인증까지 수행하며 HTTPS에서 사용하는 방식입니다. 레거시 시스템과 상호 운용해야 하는 경우가 아니라면 GCM을 선택하세요.

어떤 패딩을 사용해야 하나요?

PKCS#7(PKCS#5라고도 부름)은 ECB 및 CBC 모드의 표준 패딩입니다. CTR, CFB, OFB, GCM은 스트림 방식 모드이므로 패딩이 필요하지 않으며, 본 페이지에서는 'NoPadding'이 강제됩니다. 복호화 시 'bad padding' 오류가 발생한다면, 가장 흔한 원인은 양쪽 끝의 키, IV 또는 패딩 설정이 일치하지 않는 것입니다.

같은 텍스트인데 매번 다른 암호문이 생성되는 이유는 무엇인가요?

ECB 외의 모드는 IV(초기화 벡터)를 사용하며, 이 값은 암호화할 때마다 무작위여야 합니다. 같은 평문 + 같은 키 + 다른 IV → 다른 암호문이 됩니다. IV는 비밀이 아니므로 암호문 앞에 붙여 보내면 되지만, CTR이나 GCM 모드에서 같은 키로 IV를 재사용하면 치명적이며 암호화가 무력화됩니다.

AES는 양자 내성 알고리즘인가요?

충분히 큰 양자 컴퓨터에서 Grover 알고리즘을 적용하면 AES-128의 실효 보안 강도는 약 64비트로, AES-256은 128비트로 떨어집니다. 따라서 수십 년간 비밀을 유지해야 하는 데이터에는 AES-256이 보수적인 선택입니다. 대칭 암호인 AES는 RSA/ECC에 비해 양자 컴퓨터의 영향을 훨씬 덜 받습니다.

암호화는 제 브라우저에서 이루어지나요?

네. 본 페이지는 aes-js 라이브러리(순수 JavaScript AES 구현)를 브라우저에서 로컬로 실행합니다. 평문, 키, IV는 모두 기기를 떠나지 않습니다. 브라우저의 네트워크 탭에서 직접 확인할 수 있습니다.

키를 안전하게 공유하려면 어떻게 해야 하나요?

실제 운영 환경의 키는 본 페이지를 포함한 어떤 웹 페이지에도 절대 붙여넣지 마세요. 이 도구는 학습용이자 테스트 벡터를 검증하는 용도로만 사용하세요. 실제 키 교환에는 비대칭 방식(RSA-OAEP, ECDH/X25519), PBKDF2/Argon2와 솔트를 결합한 비밀번호 기반 키 유도, 또는 관리형 KMS를 사용해야 하며, '채팅으로 키를 보내는' 방식은 절대 안 됩니다.