피드로 돌아가기
How I built a file-sharing tool where even I can't read your files (zero-knowledge architecture in Next.js)
Dev.toDev.to
Security

Web Crypto API 기반 Zero-Knowledge 설계로 파일 서버의 데이터 가독성 완전 제거

How I built a file-sharing tool where even I can't read your files (zero-knowledge architecture in Next.js)

Akshay Sharma2026년 4월 14일5intermediate

Context

기존 휘발성 파일 공유 도구들이 DB 상의 삭제 마킹이나 클라이언트 렌더링 차단에 의존하여 실제 데이터가 서버에 잔존하는 한계 존재. 서버 운영자조차 데이터에 접근할 수 없는 완전한 제어권 보장을 위한 Zero-Knowledge 아키텍처 필요성 대두.

Technical Solution

  • Web Crypto API를 통한 브라우저 단 AES-GCM 암호화 수행으로 서버 전송 전 데이터 은닉
  • Decryption Key를 URL Hash Fragment(#)에 포함하여 HTTP 요청 시 서버 전송을 원천 차단하는 설계
  • Supabase RPC를 통한 view_count 업데이트와 Storage 삭제를 원자적(Atomic)으로 처리하여 동기적 삭제 구현
  • SHA-256 해싱을 통한 수신자 이메일의 익명화 저장으로 개인 식별 정보의 서버 저장 배제
  • Canvas element 기반 렌더링 방식을 채택하여 브라우저 기본 저장 및 자동 스크래핑 기능 무력화
  • v1의 Cron 기반 백그라운드 삭제 방식에서 발생하는 5분간의 데이터 노출 윈도우를 RPC 기반 실시간 삭제로 해결

- 서버에 절대 저장해서는 안 될 민감 정보는 URL Fragment를 활용해 클라이언트에만 유지하는 패턴 검토 - 데이터 삭제의 엄격함이 요구되는 시스템은 Background Job 대신 Atomic Transaction 내 삭제 로직 배치 - 개인정보 보호가 필요한 식별자는 서버 저장 전 클라이언트 사이드 해싱 처리 적용 - 정적 파일의 단순 다운로드를 방지해야 하는 경우 Canvas 렌더링을 통한 1차 방어선 구축

원문 읽기