피드로 돌아가기
How I built an end-to-end encrypted pastebin (and why the server can’t read your text)
Dev.toDev.to
Security

Client-side AES-GCM 및 URL Fragment 기반의 Zero-Knowledge Pastebin 설계

How I built an end-to-end encrypted pastebin (and why the server can’t read your text)

slavas-dev2026년 6월 24일3intermediate

Context

기존 Pastebin 서비스의 Plain text 서버 저장 방식에 따른 데이터 유출 및 관리자 접근 가능성 문제. 서버 신뢰 모델에서 벗어나 기술적으로 데이터 접근을 원천 차단하는 구조적 필요성 대두.

Technical Solution

  • Web Crypto API를 통한 브라우저 내 AES-GCM 256-bit 암호화 수행으로 서버 전송 전 데이터 보호
  • 암호화 키를 URL Fragment(#)에 배치하여 HTTP Request 시 서버로 전송되지 않는 브라우저 특성 활용
  • 서버에는 암호화된 Ciphertext와 IV(Initialization Vector)만 저장하여 서버의 복호화 가능성 완전 제거
  • 클라이언트 사이드에서 키를 추출하여 로컬 복호화를 수행하는 End-to-End Encryption 구조 채택
  • Burn-after-read 구현을 위해 첫 번째 성공적인 Fetch 요청 즉시 서버 데이터를 삭제하는 전략 적용
  • 동시 접속으로 인한 Race Condition 발생 시 선착순 처리 후 후속 요청에 404 응답을 반환하는 단순화된 정합성 모델 적용

1. 서버에 절대 저장해서는 안 되는 민감 정보는 URL Fragment(#)를 활용해 클라이언트에만 유지하는 방안 검토

2. 외부 라이브러리 의존성을 줄이기 위해 브라우저 내장 Web Crypto API의 AES-GCM 모드 활용

3. Zero-Knowledge 아키텍처 설계 시 데이터의 생명주기(Life-cycle)와 삭제 시점의 Race Condition 처리 방안 정의

원문 읽기