2025-09-22 22:10
-
AES는 전 세계적으로 가장 널리 사용되는 표준 대칭키 암호화 알고리즘이다.
-
데이터 블록을 여러 라운드에 걸쳐 대체, 치환, 혼합하는 과정을 통해 강력한 보안을 제공한다.
-
ECB, CBC, GCM 등 다양한 운영 모드를 통해 데이터의 기밀성과 무결성을 보장하며 현대 디지털 통신의 핵심 기술로 자리 잡고 있다.
AES 완벽 핸드북 암호화의 제왕을 파헤치다
오늘날 우리가 인터넷 뱅킹을 하고, 와이파이를 사용하며, 클라우드에 파일을 저장할 수 있는 이유는 보이지 않는 곳에서 데이터를 안전하게 지켜주는 강력한 기술 덕분이다. 그 기술의 중심에는 ‘암호화의 제왕’이라 불리는 **AES(Advanced Encryption Standard)**가 있다. 이 핸드북은 AES가 어떻게 탄생했으며, 어떤 원리로 동작하고, 우리 삶의 어디에서 사용되는지, 그 모든 것을 심도 있게 탐구하는 완벽한 가이드가 될 것이다.
1. AES의 탄생 배경 새로운 시대의 표준을 찾아서
이야기는 20세기 후반으로 거슬러 올라간다. 당시 암호화 표준의 왕좌는 **DES(Data Encryption Standard)**가 차지하고 있었다. 1977년 미국 표준으로 채택된 DES는 오랫동안 훌륭한 수문장 역할을 했지만, 컴퓨터 기술의 폭발적인 발전은 56비트라는 DES의 키 길이를 위협하기 시작했다. 1990년대 후반에 이르러서는 전문 장비를 이용하면 하루 안에 DES 암호를 해독할 수 있게 되었고, 이는 더 이상 안전한 표준이 아님을 의미했다.
이에 미국 국립표준기술연구소(NIST)는 1997년, DES를 대체할 새로운 차세대 표준 암호화 알고리즘을 공모하는 프로젝트를 시작했다. 이 프로젝트의 목표는 다음과 같았다.
-
대칭키 블록 암호 방식일 것
-
128비트의 블록 크기를 가질 것
-
128, 192, 256비트의 키 길이를 지원할 것
-
보안성, 효율성, 유연성을 모두 갖출 것
-
전 세계 누구나 로열티 없이 자유롭게 사용할 수 있을 것
전 세계에서 15개의 후보 알고리즘이 제출되었고, 수년간에 걸친 엄격하고 투명한 심사 과정이 진행되었다. 이 치열한 경쟁의 최종 승자는 벨기에의 두 암호학자, **요안 다이먼(Joan Daemen)과 빈센트 라이먼(Vincent Rijmen)**이 설계한 라인달(Rijndael) 알고리즘이었다. 라인달은 보안성, 속도, 그리고 다양한 환경에서의 유연성 측면에서 가장 높은 평가를 받았고, 2001년 FIPS 197 표준으로 공식 발표되며 AES라는 새로운 이름을 얻게 되었다.
2. AES의 핵심 구조 데이터를 뒤섞는 예술
AES는 대칭키 암호이자 블록 암호이다.
-
대칭키: 암호화할 때 사용하는 키와 복호화할 때 사용하는 키가 동일하다. 열쇠 하나로 문을 잠그고 여는 것과 같다.
-
블록 암호: 데이터를 고정된 크기(블록)로 나누어 블록 단위로 암호화를 수행한다. AES의 블록 크기는 **128비트(16바이트)**로 고정되어 있다.
AES의 핵심은 입력된 데이터 블록(평문)을 누구도 예측할 수 없는 무작위의 데이터 블록(암호문)으로 바꾸는 과정에 있다. 이 과정은 여러 번의 **라운드(Round)**를 반복하며 진행되는데, 마치 여러 단계의 복잡한 금고를 거치는 것과 같다. 라운드의 횟수는 키 길이에 따라 달라진다.
| 키 길이 | 라운드 수 |
|---|---|
| 128 비트 | 10 라운드 |
| 192 비트 | 12 라운드 |
| 256 비트 | 14 라운드 |
각 라운드는 네 가지 주요 연산으로 구성된, SPN(Substitution-Permutation Network) 구조를 기반으로 한다. 데이터를 대체하고(Substitution), 자리를 바꾸는(Permutation) 과정을 반복하여 원본 데이터의 통계적 특징을 완전히 제거하는 것이 목표다.
2.1 상태(State) 행렬
AES는 128비트(16바이트) 데이터 블록을 4x4 크기의 바이트 행렬로 변환하여 처리한다. 이 행렬을 **상태(State)**라고 부른다. 모든 연산은 이 상태 행렬 위에서 이루어진다.
예를 들어, “Hello World! 123”이라는 16바이트 데이터는 다음과 같은 상태 행렬로 표현될 수 있다.
State=Hello World 23!1
→
0x480x650x6C0x6C0x6F0x200x570x6F0x720x6C0x640x200x320x330x210x31
2.2 라운드의 4단계 연산
각 라운드(마지막 라운드 제외)는 다음 네 가지 연산을 순서대로 수행한다.
1) SubBytes (바이트 대체)
SubBytes 단계는 상태 행렬의 각 바이트를 **S-Box(Substitution Box)**라는 미리 정의된 테이블을 참조하여 새로운 바이트로 대체하는 과정이다. 이는 AES의 유일한 비선형(Non-linear) 연산으로, 암호의 복잡성을 높여 단순한 수학적 관계로 평문과 암호문을 분석하기 어렵게 만드는 핵심적인 역할을 한다.
S-Box는 특정 수학적 연산(유한체 에서의 곱셈 역원과 아핀 변환)으로 만들어진 256개의 값을 담고 있는 조회 테이블(lookup table)이다. 이 과정은 마치 모든 글자를 아무런 연관성 없는 다른 글자로 바꾸는 고대의 암호표와 같다.
2) ShiftRows (행 이동)
ShiftRows 단계는 상태 행렬의 각 행을 왼쪽으로 일정 칸씩 순환 이동(circular shift)시키는 간단한 치환 과정이다.
-
첫 번째 행: 이동 없음
-
두 번째 행: 왼쪽으로 1바이트 이동
-
세 번째 행: 왼쪽으로 2바이트 이동
-
네 번째 행: 왼쪽으로 3바이트 이동
이 과정은 행렬의 열에 있는 데이터들을 서로 섞어주는 역할을 한다. SubBytes가 개별 바이트의 값을 바꾸는 것이라면, ShiftRows는 그 바이트들의 위치를 재배열하여 데이터의 확산(Diffusion)을 시작하는 단계다.
S0,0S1,0S2,0S3,0S0,1S1,1S2,1S3,1S0,2S1,2S2,2S3,2S0,3S1,3S2,3S3,3
→
S0,0S1,1S2,2S3,3S0,1S1,2S2,3S3,0S0,2S1,3S2,0S3,1S0,3S1,0S2,1S3,2
3) MixColumns (열 혼합)
MixColumns 단계는 ShiftRows를 통해 섞인 상태 행렬의 각 열을 독립적으로 변환하는 과정이다. 각 열은 4개의 바이트로 구성되는데, 이 4개의 바이트를 입력으로 받아 미리 정해진 행렬과 곱셈 연산을 수행하여 새로운 4개의 바이트를 출력한다. 이 연산 역시 유한체 GF(28) 산술에 기반한다.
이 과정은 매우 중요한 확산(Diffusion) 속성을 제공한다. MixColumns 연산을 거치면 입력 바이트 하나가 바뀌어도 해당 열의 모든 바이트가 영향을 받아 완전히 다른 값으로 바뀌게 된다. 이를 비유하자면, 빨강, 파랑, 노랑, 초록 네 가지 색의 물감을 섞어 완전히 새로운 네 가지 색을 만들어내는 것과 같다. SubBytes와 ShiftRows를 거친 데이터가 MixColumns를 통해 더욱 복잡하게 얽히게 된다.
참고: 마지막 라운드에서는 MixColumns 연산을 수행하지 않는다. 이는 암호화와 복호화 과정의 대칭성을 유지하기 위함이다.
4) AddRoundKey (라운드 키 더하기)
AddRoundKey는 현재 상태 행렬에 **라운드 키(Round Key)**를 더하는 과정이다. 여기서 ‘더하기’는 일반적인 덧셈이 아닌, 각 바이트별로 XOR(Exclusive OR) 연산을 수행하는 것을 의미한다.
State←State⊕RoundKey
라운드 키는 사용자가 제공한 원래의 비밀 키로부터 **키 스케줄(Key Schedule)**이라는 알고리즘을 통해 생성된, 각 라운드마다 사용되는 고유한 키다. AddRoundKey는 AES에서 비밀 키가 직접적으로 암호화 과정에 개입하는 유일한 단계다. 이 과정을 통해 암호문은 비밀 키 없이는 해독할 수 없게 된다.
2.3 키 스케줄 (Key Expansion)
사용자가 입력한 128, 192, 또는 256비트의 비밀 키 하나만으로는 여러 라운드를 진행할 수 없다. 키 스케줄은 이 초기 비밀 키를 확장하여 각 라운드에서 사용할 라운드 키들을 미리 생성하는 과정이다.
이 과정은 이전 라운드 키의 일부를 가져와 SubBytes의 S-Box를 통과시키고, 순환 이동시키며, 라운드 상수(Rcon)와 XOR 하는 복잡한 절차를 거친다. 이를 통해 생성된 각 라운드 키들은 초기 비밀 키와 통계적 연관성이 거의 없어, 특정 라운드 키가 유출되더라도 다른 라운드 키나 원래의 비밀 키를 추측하기 매우 어렵게 만든다.
3. AES 사용법 블록을 넘어 현실로
AES는 128비트 블록 단위로 동작한다. 하지만 우리가 암호화하려는 이메일, 동영상, 파일 등은 대부분 128비트보다 훨씬 크다. 이처럼 큰 데이터를 안전하게 암호화하기 위해 **운영 모드(Modes of Operation)**라는 규칙이 사용된다.
3.1 ECB (Electronic Codebook)
가장 단순한 모드. 각 데이터 블록을 독립적으로 동일한 키를 사용하여 암호화한다.
-
장점: 구조가 간단하고, 각 블록을 병렬로 처리할 수 있어 속도가 빠르다.
-
단점: 치명적인 보안 약점이 있다. 동일한 평문 블록은 항상 동일한 암호문 블록으로 변환된다. 이 때문에 데이터의 패턴이 암호문에도 그대로 드러난다. 암호화된 이미지에서 원본 이미지의 형태가 보이는 유명한 펭귄 사진 예제가 바로 ECB 모드의 위험성을 보여준다. 절대로 사용해서는 안 되는 모드로 간주된다.
3.2 CBC (Cipher Block Chaining)
ECB의 약점을 보완하기 위해 나온 모드. 각 평문 블록을 암호화하기 전에 이전 암호문 블록과 XOR 연산을 수행한다. 첫 번째 블록은 **초기화 벡터(Initialization Vector, IV)**라는 임의의 데이터 블록과 XOR 한다.
-
장점: 이전 블록의 암호문이 다음 블록의 암호화에 영향을 주므로(체인처럼 연결됨), 동일한 평문 블록이라도 위치에 따라 다른 암호문 블록이 생성된다. 패턴이 드러나지 않아 훨씬 안전하다.
-
단점: 암호화 과정이 순차적으로 진행되어야 하므로 병렬 처리가 어렵다.
3.3 CTR (Counter)
블록 암호를 마치 스트림 암호처럼 사용할 수 있게 해주는 모드. 카운터(Counter)와 IV를 결합한 값을 암호화하여 키 스트림(Key Stream)이라는 것을 생성하고, 이 키 스트림을 평문과 XOR 하여 암호문을 만든다.
-
장점: 각 블록의 암호화/복호화가 독립적이어서 병렬 처리가 가능하며 속도가 매우 빠르다. CBC와 달리 암호화와 복호화의 구조가 동일하다.
-
단점: 카운터 값을 재사용하면 심각한 보안 취약점이 발생한다.
3.4 GCM (Galois/Counter Mode)
현대 암호화에서 가장 널리 사용되는 모드 중 하나. CTR 모드의 장점(속도, 병렬 처리)을 가지면서, 데이터의 **무결성(Integrity)**과 인증(Authentication) 기능까지 제공하는 AEAD(Authenticated Encryption with Associated Data) 모드이다.
-
기밀성(Confidentiality): CTR 모드 방식으로 데이터를 암호화하여 내용을 보호한다.
-
무결성 및 인증: 암호화 과정에서 **GMAC(Galois Message Authentication Code)**라는 인증 태그를 생성한다. 수신자는 데이터를 복호화하면서 동일한 태그가 생성되는지 확인한다. 만약 데이터가 중간에 조금이라도 변조되었다면 태그 값이 달라지므로, 변조 사실을 즉시 감지할 수 있다.
TLS 1.2/1.3, 디스크 암호화 등 높은 수준의 보안이 요구되는 거의 모든 최신 프로토콜에서 GCM 모드가 표준처럼 사용된다.
4. AES 심화 탐구 보안성과 미래
4.1 AES는 얼마나 안전한가?
AES는 발표된 지 20년이 넘었지만, 아직까지 실용적인 공격 방법이 발견되지 않은 매우 강력한 암호 알고리즘이다. 그 견고함은 설계 단계부터 다음과 같은 공격들을 방어하도록 만들어졌기 때문이다.
-
차분 분석(Differential Cryptanalysis): 입력값의 차이가 출력값의 차이에 어떤 영향을 미치는지 분석하는 기법. AES의 S-Box와
MixColumns는 이러한 공격에 매우 강한 저항성을 갖도록 설계되었다. -
선형 분석(Linear Cryptanalysis): 평문, 암호문, 키의 비트들 사이에 존재하는 근사적인 선형 관계를 찾아내는 기법. AES의 비선형 계층인 S-Box가 이를 효과적으로 방어한다.
-
관련 키 공격(Related-Key Attack): 공격자가 선택한 여러 키들 사이의 관계를 이용하여 암호를 분석하는 기법. AES의 키 스케줄은 이러한 공격을 어렵게 만든다.
현존하는 가장 강력한 슈퍼컴퓨터를 총동원하더라도 AES-128을 무차별 대입 공격(Brute-force attack)으로 해독하는 데는 수십억 년 이상이 걸릴 것으로 추정된다. AES-192나 AES-256은 그보다 훨씬 더 긴 시간이 필요하다. 양자 컴퓨터가 실용화되면 상황이 달라질 수 있지만, 현재로서는 AES는 인류가 만들어낸 가장 안전한 자물쇠 중 하나라고 할 수 있다.
4.2 실생활 속의 AES
우리는 매일 의식하지 못하는 사이에 AES의 보호를 받고 있다.
-
무선 통신: 와이파이 보안 프로토콜인 WPA2와 WPA3는 AES를 기반으로 데이터를 암호화하여 통신 내용을 보호한다.
-
보안 웹 통신: 우리가 웹사이트에 접속할 때 주소창에 나타나는 자물쇠 아이콘(HTTPS)은 TLS/SSL 프로토콜이 동작하고 있다는 의미이며, 이 프로토콜의 핵심 암호화 알고리즘으로 AES가 사용된다.
-
파일 및 디스크 암호화: Windows의 BitLocker, macOS의 FileVault, 그리고 각종 압축 파일(7-Zip, RAR)의 비밀번호 기능은 AES를 사용하여 데이터를 보호한다.
-
가상 사설망(VPN): VPN은 인터넷 트래픽을 암호화된 터널로 보내는데, 이 터널을 만드는 데 AES가 핵심적인 역할을 한다.
-
메신저 앱: Signal, WhatsApp 등 종단간 암호화(End-to-End Encryption)를 지원하는 메신저들도 AES를 기반으로 메시지를 안전하게 보호한다.
5. 결론 시대를 관통하는 암호의 표준
AES는 DES의 뒤를 이어 디지털 시대를 지키는 새로운 수호자로 탄생했다. 수학적 정교함에 기반한 강력한 보안성, 하드웨어 가속(AES-NI)을 통해 달성한 뛰어난 성능, 그리고 다양한 운영 모드를 통한 유연성은 AES를 지난 20년간 암호화의 절대 강자로 군림하게 만들었다.
단순한 기술을 넘어, AES는 현대 사회의 신뢰를 지탱하는 기반 인프라다. 우리가 디지털 세상에서 자유롭게 소통하고, 거래하며, 정보를 공유할 수 있는 것은 바로 이 보이지 않는 암호의 방패 덕분이다. 앞으로 양자 컴퓨터의 등장과 같은 새로운 도전이 있겠지만, AES가 쌓아 올린 암호학적 성취는 미래의 보안 기술을 위한 중요한 초석으로 영원히 기억될 것이다.