피드로 돌아가기
Dev.toSecurity
원문 읽기
AES-256-GCM과 MessagePack 기반의 Zero-Knowledge E2EE 채팅 시스템 구축
How I built an E2EE chat in Go + React (with AI agent support)
AI 요약
Context
기존 메신저의 Plaintext 전송 방식과 일회성 비밀 공유 도구의 실시간 소통 부재라는 한계점 존재. 서버 신뢰 없이 API Key 등 민감 정보를 실시간으로 공유할 수 있는 Ephemeral한 통신 구조 필요.
Technical Solution
- 서버를 단순한 Ciphertext 전달자로 정의한 Dumb Pipe 아키텍처 설계로 서버측 복호화 가능성 원천 차단
- AES-256-GCM 기반의 Local Key Generation 방식을 통해 암호화 키의 서버 전송을 배제한 Side Channel 배포 전략 채택
- roomId와 Base64url로 인코딩된 Key를 결합한 Share Code 구조를 통해 주소 지정과 인증을 단일 스트링으로 처리
- JSON 대비 오버헤드가 적은 MessagePack 프로토콜 도입으로 바이너리 데이터 전송 효율 최적화
- Go의 Goroutine-per-connection 모델을 활용하여 다수의 WebSocket 연결을 효율적으로 처리하는 Relay 서버 구현
- Web Crypto API를 통한 브라우저 네이티브 암호화 구현으로 외부 라이브러리 의존성 제거 및 보안성 강화
실천 포인트
1. 민감 데이터 처리 시 서버를 Trust-less한 Relay로 설계하여 보안 책임 범위 최소화
2. 바이너리 프로토콜 도입 시 MessagePack과 같이 직렬화 효율이 높은 포맷 검토
3. 브라우저 환경의 암호화 구현 시 외부 라이브러리보다 Web Crypto API 우선 고려