#Backend

초당 100만 건, LINE 앱에 Apache Kafka 종단 간 암호화 적용기

초당 100만 건, LINE 앱에 Apache Kafka 종단 간 암호화 적용기
01

Summary

초당 100만 건의 트래픽을 무중단으로! LINE이 카프카 종단 간 암호화를 달성한 비결

기존 카프카 보안의 한계를 넘어, 성능 저하 없이 메시지 데이터 자체를 철통 방어하는 DEK-KEK 이중 암호화 설계

LINE 메시징 플랫폼의 민감 데이터를 완벽하게 보호하기 위해 카프카 클라이언트 간 종단 간 암호화(E2EE)를 구현했습니다. 메시지 크기 폭증과 마이그레이션 리스크라는 거대한 과제를 공유 KEK 구조와 평문 폴백 전략으로 돌파하였으며, 성능 테스트 및 실제 운영 환경에서 장비 증설 없이 CPU 오버헤드를 1% 이하로 억제하는 경이로운 최적화를 달성했습니다.

  • 01카프카 브로커 내부의 평문 노출 위험을 원천 차단하고 프로듀서부터 컨슈머까지 무중단 종단 간 암호화 달성
  • 02표준 확장 포인트인 인터셉터와 시리얼라이저를 사용하여 카프카 버전에 독립적인 안정적인 암호화 파이프라인 구축
  • 03대칭키(DEK)의 빠른 연산 속도와 비대칭키(KEK)의 유연한 관리 이점을 모두 취한 DEK-KEK 봉투 암호화 설계
  • 04다수의 컨슈머 추가에도 메시지 헤더 크기를 일정하게 유지하는 공유 KEK 패턴으로 대용량 트래픽 최적화 성공
  • 05신구 버전의 키가 공존하는 무중단 키 교체 메커니즘을 구축하여 운영 안정성을 고도화

RECOMMENDATION

대규모 분산 메시징 환경에서 민감 정보를 취급하는 백엔드 아키텍트와 데브옵스 엔지니어에게 적극 추천합니다. 암/복호화 성능 최적화와 메시지 크기 관리가 필수적인 고트래픽 플랫폼에서 Shared KEK 패턴 및 인터셉터 활용 설계는 최고의 실무 나침반이 될 것입니다.

The Problem

LINE 메신저의 방대한 트래픽 내에는 높은 보안이 요구되는 개인정보 등의 민감 데이터가 포함되어 있으나, 기존 카프카 보안 모델(TLS, SASL, ACL)은 데이터 이동 구간과 접근 권한만 보호할 뿐 브로커 내부 저장 시에는 데이터가 평문으로 남는 한계가 있었습니다.

The Solution

카프카 인터셉터와 시리얼라이저를 활용해 표준 API 규격 내에서 작동하는 레코드 단위의 종단 간 암호화(E2EE)를 구축하였으며, AES-GCM 대칭키(DEK)와 ECIES 비대칭키(KEK)를 조합한 이중 키 구조와 대규모 트래픽 최적화를 위한 공유 KEK 기법을 도입했습니다.

The Result

초당 최대 100만 건에 달하는 대규모 프로덕션 환경에 무중단으로 암호화를 성공적으로 적용하였으며, 철저한 벤치마크 테스트와 점진적 배포를 거쳐 CPU 사용량 오버헤드를 1% 미만으로 유지하고 추가적인 인프라 증설 없이 시스템을 안정화했습니다.

Trade-off

레코드 단위 암호화 선택으로 인해 배치 단위 암호화 대비 압축 효율과 CPU 연산 효율이 다소 하락했으며, 다중 컨슈머 대응을 위해 도입한 공유 KEK 구조는 컨슈머별 암호화 격리를 포기하는 대신 메시지 크기 유지를 얻어낸 타협안으로 이를 보완하기 위해 주기적 무중단 키 교체와 KMS 인가 처리가 강제됩니다.

03

Key Concepts

Concept · 01

DEK-KEK 구조

실제 메시지 페이로드를 암호화하는 속도가 빠른 대칭키인 DEK(Data Encryption Key)와, 이 DEK를 안전하게 암호화하여 전달하기 위해 사용하는 비대칭키 쌍인 KEK(Key Encryption Key)를 혼용하는 Envelope Encryption(봉투 암호화) 기법입니다.

  • 프로듀서는 AES-GCM 대칭키로 페이로드를 암호화하고, KMS에서 조회한 KEK의 공개키로 해당 대칭키를 암호화하여 헤더에 첨부함
  • 비대칭키 연산 범위를 아주 짧은 길이의 DEK 암호화로 한정함으로써 대용량 트래픽 환경에서 CPU 연산 부하를 혁신적으로 절감함
Concept · 02

공유 KEK (Shared KEK)

수많은 컨슈머가 존재하는 카프카 토픽 환경에서 각 컨슈머마다 개별적인 복호화 키 메타데이터를 메시지에 담지 않고, 허가된 다수의 컨슈머들이 단일한 KEK를 공유하여 복호화하도록 설계한 방식입니다.

  • 신규 컨슈머가 무수히 증가하더라도 메시지 헤더 크기가 일정하게 유지되어 네트워크 및 시스템 자원 소모를 방지함
  • 컨슈머별 키 격리를 포기하는 대신 일정한 성능과 안정성을 취한 설계적 트레이드오프로, 주기적 키 교체와 KMS 인가를 결합해 보안성을 유지함
Concept · 03

평문 폴백 (Plaintext Fallback)

과도기적 마이그레이션 단계에서 암호화된 메시지와 암호화되지 않은 기존 평문 메시지를 컨슈머가 메시지 헤더의 유무에 따라 실시간으로 감지하고 유연하게 처리할 수 있게 하는 하이브리드 수용 메커니즘입니다.

  • 컨슈머의 디시리얼라이저가 헤더의 암호화 메타데이터 유무를 판단하여 있으면 복호화를 거치고 없으면 기존 역직렬화만 수행하도록 제어함
  • 이를 통해 시스템 중단 없이 컨슈머 배포를 선행하고 프로듀서의 암호화 비중을 점진적으로 안전하게 높이는 데 기여함