GCM (Galois/Counter Mode, 갈루아/카운터 모드)을 쉽게 이해하려면, '금고 운반'이라는 비유를 사용하면 좋습니다. 일반적인 암호화는 금고 안에 내용을 숨기는 것뿐이지만, GCM은 금고가 변조되지 않았는지 확인하는 봉인까지 추가합니다.
GCM은 다음 두 가지 기능을 하나의 효율적인 과정으로 통합합니다.
GCM의 암호화 기반은 CTR (Counter Mode, 카운터 모드)입니다. CTR 모드가 고속 병렬 처리를 가능하게 하는 이유는 키 스트림 생성 방식에 있습니다.
| 개념 | 비유 | 설명 |
|---|---|---|
| Nonce/IV | 금고 번호 (Unique ID) | 모든 암호화 세션에 고유하게 부여되는 초기값입니다. (두 번 다시 사용 금지) |
| Counter | 작업표 일련번호 (1, 2, 3...) | 암호화할 데이터 블록마다 부여되는 순차적인 번호입니다. |
| 키 스트림 | 맞춤형 열쇠 | Nonce와 Counter를 결합하여 블록 암호(AES)를 돌려 얻는 난수 값입니다. |
| 암호화 | 열쇠로 잠금 (XOR) | 생성된 맞춤형 열쇠를 평문과 XOR 하여 암호문을 만듭니다. |
CBC와 같은 다른 모드는 이전 블록의 결과가 다음 블록에 필요합니다 (체인처럼 연결).
하지만 CTR 모드에서는, 100번째 블록의 키 스트림을 만들 때, 1번부터 99번까지의 결과를 알 필요가 없습니다. Nonce와 카운터 100만 알면 됩니다.
📝 결과: 여러 CPU 코어가 동시에 1번부터 100번까지의 맞춤형 열쇠(키 스트림)를 미리 만들 수 있습니다. 이것이 CTR 모드가 현대 고속 환경에서 가장 빠른 이유입니다.
CTR 모드로 암호화된 데이터는 안전하게 숨겨져 있지만, 공격자가 암호문을 임의로 조작할 수 있습니다. GCM은 이를 막기 위해 GHASH를 사용합니다.
| 개념 | 비유 | 설명 |
|---|---|---|
| GHASH 키 () | 마스터 봉인 인장 | GCM 시작 시 키를 이용해 미리 계산되는 값으로, 모든 인증 과정에 사용됩니다. |
| AAD | 운송장 및 금고 겉면 정보 | 암호화는 하지 않지만 (모두에게 보여도 되지만), 변조되면 안 되는 데이터 (예: 패킷 헤더, 수신자 주소) |
| GHASH 연산 | 인장 찍기 (Galois 필드 연산) | 암호문과 AAD 전체를 마스터 인장()과 함께 수학적으로 매우 복잡하게 섞습니다. |
| 인증 태그 () | 최종 봉인 (Seal) | GHASH 연산의 결과물로, 암호문과 함께 전송됩니다. |
수신자가 암호문과 태그를 받으면:
즉, GCM은 공격자가 금고(암호문)를 조작하더라도, 그 조작된 내용이 봉인()과 수학적으로 일치할 확률이 극히 낮기 때문에 변조를 즉시 탐지할 수 있습니다.
GCM은 암호화 기술에서 '두 마리 토끼'를 다 잡은 형태입니다.
이러한 이유로 GCM은 현재 가장 강력하고 빠른 인증 암호화 표준으로 자리 잡았으며, 웹 브라우저가 사용하는 TLS 1.3의 핵심입니다.