092. AEAD (Authenticated Encryption with Associated Data)
⚠️ 이 문서는 기밀성(데이터 숨기기)과 무결성/인증(조작되지 않음 증명)을 각각 따로 처리하던 과거의 비효율적이고 위험한 방식을 버리고, 한 번의 연산으로 두 가지 보안 목표를 동시에 완벽하게 달성하는 현대 암호학의 설계 표준인 'AEAD'를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: AEAD(인증 및 연관 데이터 암호화)는 해커가 훔쳐볼 수 없게 텍스트를 잠그는 '암호화(Encryption)' 작업과, 텍스트가 전송 중 단 1비트도 훼손되지 않았음을 증명하는 '인증 태그(MAC)' 생성 작업을 결합하여 하나의 알고리즘으로 처리하는 프레임워크다.
- 가치: 과거 개발자들이 암호화(AES)와 해시(SHA-256)를 따로 돌리며 발생했던 "무엇을 먼저 할 것인가(MAC-then-Encrypt 등)"의 순서 오류(Padding Oracle 등 최악의 헛점 유발)를 원천 차단하여, 개발자가 바보 같은 짓을 할 수 없는 안전한 봉인 박스를 제공한다.
- 융합: 메시지의 내용뿐만 아니라 라우팅에 필요한 IP 주소나 HTTP 헤더 같은 '암호화할 필요는 없지만 위조되면 안 되는 껍데기 정보(AAD)'까지 한 번에 묶어서 위변조를 감시하므로, TLS 1.3과 같은 초안전 클라우드 네이티브 네트워크 통신의 뼈대가 되었다.
Ⅰ. 개요 및 탄생 배경 (Context & Necessity)
과거의 암호학은 모듈식이었다. 비밀을 숨기려면 AES 믹서기(암호화)를 쓰고, 남이 건드렸는지 확인하려면 SHA 해시 믹서기(무결성/인증)를 따로 썼다. 개발자들은 이 두 가지 레고 블록을 자기 마음대로 조립해서 웹 서버를 짰다.
- 개발자의 딜레마 (조립 순서의 문제):
- Encrypt-then-MAC: 먼저 암호화(AES)하고, 그 암호문 덩어리에 대해 해시 태그(MAC)를 붙인다. (가장 안전한 정답)
- MAC-then-Encrypt: 평문에 먼저 해시 태그(MAC)를 붙인 뒤, 평문과 태그를 통째로 묶어서 암호화(AES)한다. (TLS 1.2까지 쓰던 방식) $\rightarrow$ 비극 발생! 이 방식은 블록 암호의 빈 공간을 채우는 패딩(Padding)을 뜯어먹는 **패딩 오라클 공격(Padding Oracle Attack)**의 완벽한 표적이 되어 수백만 대의 서버가 탈탈 털렸다.
암호학자들은 분노했다. "보안 전공자도 아닌 개발자들에게 레고 조립을 맡기니까 자꾸 터지는구나. 아예 암호화와 무결성 인증을 하나로 묶어서 **분해 불가능한 완전체 칩(AEAD)**으로 묶어서 던져주자!" 이렇게 탄생한 규격이 바로 AEAD다.
📢 섹션 요약 비유: 옛날엔 '자물쇠(암호화)'와 '훼손 방지 스티커(인증)'를 따로 팔았더니 사람들이 스티커를 자물쇠 안에 잘못 붙여서 도둑이 맘대로 뜯어냈습니다. 빡친 제조사가 아예 자물쇠를 잠그는 순간 스티커가 자동으로 겉면에 찰싹 붙어버리는 일체형 제품(AEAD)을 만들어버린 것입니다.
Ⅱ. AEAD의 구조와 AAD(연관 데이터)의 역할
AEAD 알고리즘 믹서기에 데이터를 집어넣을 때, 데이터는 크게 두 종류로 나뉘어 들어간다.
1. 암호화 대상 데이터 (Plaintext)
- 카드 번호, 비밀번호, 환자 진료 기록 등 남의 눈에 절대 보이면 안 되는 알맹이 정보다.
- AEAD 믹서기를 통과하면 해커가 읽을 수 없는 **암호문(Ciphertext)**으로 변환되고, 이 암호문이 중간에 1비트라도 훼손되면 폭발하는 봉인 태그(MAC Tag)의 계산식에 융합된다.
2. 연관 데이터 (AAD, Associated Data)
- 개념: 남의 눈에 보여도 상관없지만(평문으로 날아감), 해커가 중간에서 글자를 슬쩍 고치면 절대 안 되는 껍데기 정보다.
- 예시: 네트워크 통신의 IP 주소, 도착지 포트 번호, 이메일의 "보낸 사람: 사장님" 같은 헤더 정보다. 이 정보까지 암호화해 버리면 중간에 우체부(라우터)가 길을 못 찾아 배달을 못 한다.
- AEAD의 마법: 믹서기는 이 AAD를 암호화하지 않고 투명하게 놔두지만, 아까 알맹이를 포장할 때 쓴 봉인 태그(MAC Tag) 계산식에 AAD의 수학적 지문도 함께 섞어버린다!
┌───────────────────────────────────────────────────────────────────────┐
│ AEAD 알고리즘의 동작 메커니즘 (데이터 2트랙 입력) 시각화 │
├───────────────────────────────────────────────────────────────────────┤
│ │
│ 입력 1: [ AAD (헤더, IP 등) ] ────▶ (암호화 안 함! 통과) ───┐ │
│ │ │ │
│ 입력 2: [ 평문 (비밀 데이터) ] ────▶ (AES로 암호화) ─────┼─┐ │
│ │ │ │ │
│ 입력 3: [ 비밀 키 & IV 난수 ] ────▶ (복잡한 수학 계산) ─┴─┴─┐ │
│ │ │
│ ========================================================│= │
│ ▼ ▼ │
│ 출력물 패키지 (인터넷으로 전송됨) │ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 1. [ AAD (평문) ]: "To: 192.168.1.10" (누구나 볼 수 있음) │ │
│ │ 2. [ 암호문 (Ciphertext) ]: "X$#@!$" (아무도 못 읽음) │ │
│ │ 3. [ 인증 태그 (Tag) ]: 128비트 서명 (1과 2를 섞어 만든 도장) │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ★ 해커가 지나가는 AAD의 IP 주소를 "192.168.1.99"로 변조한다면? │
│ -> 수신자가 3번 인증 태그의 봉인을 뜯어보는 순간, 1번 AAD의 훼손이 │
│ 감지되어 삐빅! 에러를 내고 데이터를 통째로 휴지통에 버린다! │
└───────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 이것이 AEAD가 위대한 이유다. 해커가 암호문 알맹이는 못 건드리니, 겉포장지(AAD)의 택배 주소를 고쳐서 은행 갈 돈을 자기 집으로 오게 하려 한다. 하지만 택배 상자를 감싸고 있는 도장(Tag)이 겉포장지와 알맹이 전체의 기운을 담아 찍혀있기 때문에, 포장지에 펜을 대는 순간 도장이 산산조각 난다. 수신자는 내용물을 열어보지도 않고 "조작된 데이터다!"라며 통신을 닫아버린다 (Fail-Safe).
- 📢 섹션 요약 비유: 택배를 보낼 때, 상자 안의 금시계(암호문)만 특수 끈으로 묶는 게 아니라, 상자 겉에 붙은 송장 스티커(AAD)까지 하나의 끈(인증 태그)으로 한 번에 돌돌 묶어버리는 겁니다. 도둑이 주소(송장)만 펜으로 고치려 해도 끈을 끊어야 하니 바로 발각됩니다.
Ⅲ. 실무 적용: 최신 보안 표준의 폭력적 강제
과거에는 개발자에게 너무 많은 자유(조립식)가 주어져 사고가 났다. 이제 현대 IT 생태계는 AEAD가 아닌 구닥다리 방식을 아예 법과 표준으로 금지시켜 버렸다.
-
TLS 1.3의 대학살 (AEAD의 승리)
- 2018년 전 세계 인터넷 표준인 TLS 1.3이 발표될 때 가장 충격적인 변화는 암호화 방식의 정리 해고였다.
- 취약점이 터질 위험이 있는 이전의 모든 분리형 블록 암호 모드(CBC 등)를 표준에서 삭제해 버렸다. 오직 **GCM(AES-GCM)**이나 ChaCha20-Poly1305와 같은 AEAD 알고리즘만 허용하도록 규격을 못 박아버린 것이다. (더 이상 바보 같은 짓을 못 하게 차단)
-
클라우드 API 인증 (JWT)
- MSA(마이크로서비스) 환경에서 서버 간 인증 토큰인 JWT를 암호화할 때도 JWE(JSON Web Encryption) 스펙은 무조건 AEAD 알고리즘을 사용하여 헤더(AAD)와 페이로드(암호문)를 동시에 묶도록 강제한다.
Ⅳ. 결론
"보안 엔지니어링의 최고 경지는, 인간의 실수가 개입할 여지를 없애는 것이다." AEAD는 기밀성(Confidentiality)과 무결성(Integrity)이라는 암호학의 두 마리 토끼를 완벽하게 잡아낸 기술적 진보다. 개발자가 암호화와 해시를 언제 어떻게 섞어야 할지 고민할 필요 없이, 그냥 "데이터 줘, 껍데기 줘, 키 줘" 하면 믹서기가 알아서 완벽하게 결합된 다이아몬드 금고를 던져준다. 이 은총 덕분에 현대 인터넷은 해커들의 무자비한 조작(Tampering) 공격으로부터 평화로운 안전을 누리고 있다.
📌 관련 개념 맵
- 분류: 블록 암호 / 스트림 암호의 최상위 운영 체계
- 대표적인 구현 알고리즘: AES-GCM (가장 유명함), ChaCha20-Poly1305 (모바일/구글 선호)
- 대체 및 극복 대상: MAC-then-Encrypt, Encrypt-then-MAC 분리형 아키텍처
- 제공하는 보안 서비스 2가지: 기밀성 (암호문), 무결성/인증성 (인증 태그, MAC)
👶 어린이를 위한 3줄 비유 설명
- 옛날엔 일기장을 자물쇠로 잠그는 일(암호화)과, 일기장 표지에 투명 테이프를 붙여 누가 만졌나 검사하는 일(인증)을 개발자가 각각 따로 했어요. 순서를 틀리면 큰일 났죠.
- AEAD는 아예 "투명 테이프가 발라져서 나오는 자물쇠" 하나를 통째로 만든 거예요.
- 개발자는 그냥 일기장을 집어넣고 버튼 한 번만 누르면, 안의 내용도 숨겨주고 누가 표지에 낙서를 했는지도 한방에 묶어서 지켜주는 완벽한 보디가드 상자가 탄생한답니다!