091. GCM (Galois/Counter Mode)

⚠️ 이 문서는 초고속 병렬 처리를 자랑하는 CTR(카운터) 모드의 뼈대 위에, 갈루아 체(Galois Field)라는 천재적 수학 곱셈을 얹어 데이터가 암호화될 뿐만 아니라 '변조되지 않았음'을 동시에 증명해 내는 현대 암호학의 완전체, GCM 모드를 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: GCM(갈루아 카운터 모드)은 기밀성을 제공하는 **CTR 모드(암호화)**와 무결성 및 인증을 제공하는 **GMAC(갈루아 곱셈 기반의 인증 태그)**를 하나의 칩(알고리즘) 안에서 초고속으로 동시에 수행하는 AEAD(인증 암호화) 표준이다.
  2. 가치: 기존에는 암호화를 한 번 돌리고 무결성을 증명하기 위해 해시(SHA-256 등)를 또 돌려야 해서 서버가 이중고에 시달렸지만, GCM은 이 두 가지 무거운 작업을 수학적 꼼수로 묶어버려 CPU의 과부하를 획기적으로 줄여냈다.
  3. 융합: 현재 구글, 넷플릭스 등 전 세계 인터넷 트래픽의 90% 이상을 지켜주는 **TLS 1.3 표준의 가장 핵심적이고 절대적인 암호 운영 모드(예: TLS_AES_128_GCM_SHA256)**로 자리 잡고 있다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

CTR 모드는 엄청나게 빠르고 훌륭했다. 하지만 암호학의 가장 무서운 함정 중 하나인 **'연성(Malleability, 변조 가능성)'**이라는 치명적인 급소가 남았다.

  • 해커의 새로운 공격: 해커가 CTR로 암호화된 데이터를 중간에 가로챈다. 비밀키가 없어서 안에 무슨 내용이 있는지는 모른다. 하지만 인터넷 뱅킹 구조를 대충 안다면, 암호문 덩어리 중 '송금 금액'에 해당하는 비트 부분을 1비트만 살짝 뒤집어버린다(Bit-Flipping). 은행 서버가 이 조작된 암호문을 받아 풀면, 에러도 안 나고 금액이 '1만 원'에서 '10억 원'으로 둔갑해 버린다. (기밀성은 지켰으나, 무결성이 박살 난 것이다.)

이를 막으려면 "누가 중간에서 1비트라도 편지에 장난을 치면, 풀기 전에 자물쇠가 펑 터져버리게(MAC, 인증 태그) 만들어야 한다!"는 결론에 도달했다. 즉, **암호화(Encryption)**와 **인증(Authentication)**이 동시에 결합된 AEAD(Authenticated Encryption with Associated Data) 기술이 절실해진 것이다.

📢 섹션 요약 비유: CTR 모드는 상자에 완벽한 자물쇠를 걸어 보낸 거지만, 도둑이 내용물을 몰라도 상자 밖에서 망치로 두들겨 안의 내용물을 부숴버릴 수 있었습니다. GCM은 상자를 특수 봉인 테이프(인증 태그)로 한 번 더 감싸서, 도둑이 망치로 치면 테이프가 변색되어 수신자가 "앗! 누가 건드렸구나!" 하고 바로 상자를 버리게 만듭니다.


Ⅱ. GCM의 구조와 쌍끌이 마법 (CTR + GMAC)

GCM 모드는 두 대의 엔진을 나란히 붙여서 돌린다. 하나는 암호문을 만드는 엔진이고, 다른 하나는 봉인 테이프(Tag)를 만드는 엔진이다.

  1. 엔진 1: 기밀성 보장 (CTR 모드 그대로)
    • 평문을 1, 2, 3 번호표(카운터)가 들어간 AES 믹서기에서 나온 난수와 엑스오어(XOR)하여 암호문을 좌르륵 뽑아낸다. (병렬 처리로 눈 깜짝할 새 끝남).
  2. 엔진 2: 무결성/인증 보장 (GMAC - 갈루아 메시지 인증 코드)
    • 방금 만들어진 암호문 블록들을 그냥 보내지 않는다. 이 암호문들을 $GF(2^{128})$ 이라는 갈루아 체(Galois Field)라는 특수 수학 교실에 몰아넣는다.
    • 암호문 1번과 비밀키(H)를 곱하고, 그 결과에 암호문 2번을 더해서 또 곱하고... 눈덩이 굴리듯 다 섞어버린다.
    • 마지막에 튀어나온 128비트 크기의 찌꺼기가 바로 **인증 태그(Auth Tag)**다.

최종 전송 (봉인 완료)

송신자는 수신자에게 **[ 암호문 덩어리 ] + [ 128비트 인증 태그 ]**를 세트로 보낸다. 수신자는 이 태그를 먼저 계산해 보고, 해커가 전선에서 암호문을 1비트라도 건드렸다면 내가 계산한 태그와 도착한 태그가 아예 다르다는 걸 발견하고 "통신 차단!"을 선언한다.

┌─────────────────────────────────────────────────────────────────────────────────┐
│           GCM (Galois/Counter Mode)의 쌍발 엔진 메커니즘 시각화                 │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  [ 엔진 1: CTR 암호화 파트 (병렬 초고속) ]                                      │
│   평문 1 ──(XOR)──▶ [ 암호문 1 ] ─────┐                                         │
│          (난수)                   │                                             │
│                                  │                                              │
│   평문 2 ──(XOR)──▶ [ 암호문 2 ] ─────┤                                         │
│          (난수)                   │                                             │
│                                  ▼                                              │
│  [ 엔진 2: 갈루아(Galois) 해시 파트 (인증 태그 생성) ]                          │
│    암호문 1 ──▶ (갈루아 곱셈 ✖) ──▶ (결과 누적)                                 │
│    암호문 2 ──▶ (갈루아 곱셈 ✖) ──▶ (결과 누적) ──▶ [ 인증 태그 (Tag) ]         │
│                                                                                 │
│  ★ 해커가 전송선에서 '암호문 2'를 1비트 긁었다면?                               │
│    -> 수신자가 받을 때 믹서기 곱셈 결과가 완전히 달라져 Tag 불일치! 에러 발생!  │
└─────────────────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] GCM의 천재성은 '엔진 2'에 쓰인 수학이 CPU가 엄청나게 좋아하는 곱셈(갈루아 연산)이라는 것이다. 옛날에는 이걸 SHA-256 같은 무거운 해시 함수로 돌렸지만, GCM은 인텔 CPU에 내장된 PCLMULQDQ 라는 하드웨어 가속 명령어를 통해 클럭을 거의 쓰지 않고 0.001초 만에 저 곱셈을 끝내버린다. 보안과 퍼포먼스, 어느 하나 포기하지 않은 완벽한 공학의 결정체다.

  • 📢 섹션 요약 비유: 공장에서 물건(평문)을 상자(암호문)에 담아 포장하는 속도(CTR)도 미치도록 빠른데, 포장이 끝나자마자 상자에 한 번 떼면 글씨가 나타나는 홀로그램 위조 방지 스티커(갈루아 태그)를 1초 만에 철썩철썩 붙여서 출고시키는 완벽한 택배 시스템입니다.

Ⅲ. GCM의 확장: '연관 데이터(AAD)' 기능의 등장

GCM은 단순히 암호화한 데이터만 보호하지 않는다. 네트워크 통신에서는 "IP 주소, 포트 번호, 메시지 헤더"처럼 남이 볼 수 있게 암호화하면 안 되지만(평문 유지), 남이 고치면 안 되는(무결성 보장) 정보들이 존재한다.

이를 **AAD (Additional Authenticated Data, 추가 인증 데이터)**라고 부른다. GCM은 이 AAD마저도 갈루아 곱셈 믹서기(엔진 2)의 첫 부분에 같이 털어 넣는다.

  • 결과: 해커가 IP 주소(평문)나 헤더를 조작해서 수신자를 헷갈리게 하려 해도, 이 평문 데이터도 인증 태그(Tag) 계산에 섞여 들어갔기 때문에, 수신자는 "태그가 안 맞네! 누군가 헤더(AAD)를 변조했구나!"라고 즉시 알아챈다. 평문과 암호문을 통째로 지배하는 완벽한 통제력이 완성된 것이다.

Ⅳ. GCM의 절대적 한계: Nonce 재사용의 파국

완벽해 보이는 GCM도 사용자의 바보 같은 실수 한 번에 시스템 전체가 잿더미로 변한다. GCM은 기본적으로 CTR 모드의 뼈대를 가지므로, **초기화 벡터(Nonce, 96비트)**를 매 메시지마다 절대로 중복해서 쓰면 안 된다 (Never Reuse).

  • 재앙 1 (기밀성 파괴): CTR의 한계와 똑같이, 암호문 2개를 엑스오어해서 평문 내용이 뚫려버린다.
  • 재앙 2 (인증키 완전 노출): GCM에서 동일한 Nonce를 2번 쓰면, 수학적 역연산을 통해 갈루아 곱셈에 쓰이는 가장 중요한 인증 서브 키(H)가 해커에게 고스란히 노출되어 버린다. 이 키가 털리면 해커는 자기 마음대로 완벽한 가짜 메시지와 진짜 같은 위조 태그(Tag)를 무한정 찍어내어 은행 서버로 밀어 넣을 수 있게 된다. 시스템의 심장(무결성)이 파괴되는 것이다.

이 때문에 현대 통신은 메시지 순서 번호표(Sequence Number)를 Nonce로 써서, 기계가 죽었다 깨어나도 절대 숫자가 겹치지 않게 철저히 통제한다.


Ⅴ. 결론

"속도, 기밀성, 무결성. 셋 중 어느 것도 타협할 수 없는 시대의 종착점." GCM (Galois/Counter Mode)은 인터넷의 발전에 따라 무거워지는 데이터를 암호화하기 위해 가장 똑똑한 학자들이 짜낸 걸작이다. 블록을 끊어버리는 혁신(CTR)과, 해시 함수를 쓰지 않고 덧셈/곱셈만으로 변조를 잡는 혁신(Galois)이 융합되어, 오늘날 스마트폰과 서버가 통신하는 모든 구간(TLS, IPsec VPN)에서 쉴 새 없이 돌아가는 현대 보안 아키텍처의 찬란한 제왕이다.


📌 관련 개념 맵

  • 분류: 블록 암호 운영 모드 $\rightarrow$ AEAD (인증 암호화) 모드
  • 기반 모드: CTR (Counter) 모드 (기밀성 제공 파트)
  • 무결성 메커니즘: GMAC (Galois Message Authentication Code)
  • 실무 표준 규격: TLS 1.3 (의무 채택 암호 모드)

👶 어린이를 위한 3줄 비유 설명

  1. CTR 암호가 고기를 100배 빨리 굽는 초고속 가스레인지라면, 중간에 나쁜 파리가 날아와서 고기에 똥(변조)을 싸고 가는 건 막을 수 없었어요.
  2. GCM은 이 초고속 가스레인지 옆에 '마법의 현미경(갈루아 수학)'을 딱 붙여놔서, 고기가 다 구워지자마자 "파리가 0.1초라도 앉았나 안 앉았나?"를 번개처럼 검사해서 도장을 찍어주는 기계예요.
  3. 고기도 엄청 빨리 굽고, 더럽혀지지도 않았다는 걸 동시에 증명해 주니까, 전 세계 모든 식당(인터넷 서버)들이 무조건 이 기계만 쓴답니다!