659. GCM (Galois/Counter Mode) 모드 - 암호화와 인증 동시 적용 (AEAD)

핵심 인사이트: 지금까지의 자물쇠(AES CBC 모드 등)는 상자 안의 내용물을 안 보이게 숨겨만 줬다. 문제는 중간에 배달부가 상자를 몰래 열어 찰흙을 집어넣고(위조) 다시 닫아버려도 수신자는 눈치채지 못한다는 점이다. 이 문제를 풀려면 암호화도 하고 서명(MAC)도 따로 해야 해서 시간이 2배로 들었다. GCM은 이 귀찮은 두 과정을 한 방에 끝내버리는 현대 인터넷 통신의 마법의 황금 자물쇠다.

Ⅰ. 기존 암호화의 한계 (기밀성은 있지만 무결성이 없음)

  • AES의 가장 흔한 엮기 방식인 CBC 모드는 패킷 내용을 해커가 못 보게(기밀성) 막아주지만, 해커가 암호화된 쓰레기 패킷 중간을 강제로 변조해 버리면 수신자는 쓰레기를 그대로 복호화해서 받아들이게 됩니다(무결성 훼손).
  • 이를 막기 위해 과거에는 **[데이터 암호화]를 한 바퀴 돌리고, 다시 그 위에 [무결성 도장(MAC, 해시)]을 쾅 찍기 위해 한 바퀴를 또 돌리는 무거운 방식(MAC-then-Encrypt 등)**을 썼습니다.

Ⅱ. AEAD (Authenticated Encryption with Associated Data)의 등장

  • 개념: **암호화(Encryption, 기밀성)**와 **데이터 인증(Authentication, 무결성 도장 찍기)**을 두 번 따로 하지 않고, 수학적인 최적화 공식을 통해 단 한 번의 연산으로 동시에 묶어서 끝내버리는 고도의 보안 기법입니다.
  • 현대 암호학에서 가장 권장하는 방식으로, 속도와 보안성 두 마리 토끼를 완벽하게 잡아냈습니다.

Ⅲ. GCM (Galois/Counter Mode) 모드의 핵심 🌟

AEAD를 실제로 구현한 가장 대표적이고 완벽한 운영 모드입니다. 현재 인터넷 웹 서핑(HTTPS, TLS 1.3)의 99%가 이 AES-GCM 모드를 사용하여 돌아가고 있습니다.

  1. 카운터(CTR) 모드로 "초고속 암호화":
    • 앞선 문서에서 배운 CTR 모드를 가져와서, 순서대로 기다릴 필요 없이 100개의 조각을 CPU 멀티코어로 동시에 병렬로 암호화해 속도를 미친 듯이 뽑아냅니다.
  2. 갈루아 함수(Galois)로 "초고속 무결성 도장 찍기":
    • 병렬로 튀어나온 암호문 조각들을 **'갈루아 유한체(GF)'**라는 매우 가벼운 수학적 곱셈 법칙에 쏟아 넣고 한 번 휙 섞어줍니다.
    • 그러면 1나노초 만에 "이 데이터는 절대로 변조되지 않았다!"라는 16바이트짜리 무결성 인증 태그(MAC Tag)가 뚝딱 튀어나옵니다. 해시 함수를 돌리는 것보다 하드웨어적으로 훨씬 빠릅니다.

Ⅳ. GCM 모드의 위상 (TLS 1.3의 핵심)

  • 최신 웹 브라우저 보안 표준인 TLS 1.3에서는 낡고 구린 CBC 모드나 낡은 해시 조합 방식의 지원을 아예 법으로 폐지해 버렸습니다.
  • 오직 **AES-GCM (또는 앞서 배운 ChaCha20-Poly1305)**과 같은 최첨단 AEAD 기반 운영 모드만 통신에 사용할 수 있도록 강제하여 전 세계 인터넷의 속도와 보안을 한 단계 끌어올렸습니다.

📢 섹션 요약 비유: 옛날 은행 창구(CBC 모드)에서는 직원이 수표를 봉투에 밀봉하는 데(암호화) 1분을 쓰고, 다른 부서에 넘겨 지점장 직인(무결성 도장)을 받는 데 또 1분을 써서 비효율의 극치였습니다. GCM이라는 최첨단 기계(AEAD)는 봉투에 수표를 넣고 기계에 밀어 넣으면, 단 0.1초 만에 기계가 알아서 봉투 밀봉과 동시에 위조 방지 홀로그램 압인까지 쾅 찍어서 뱉어냅니다. 수억 건의 트래픽을 처리하는 구글, 네이버 서버에 없어서는 안 될 마법의 도장 기계입니다.