제로 지식(Zero-knowledge) 기반 파일 전송 도구 phntm.sh: 당신의 파일을 안전하게!

by DD
2개월 전
조회수 34

개인 정보 보호(Privacy)를 위해 개발된 파일 전송 도구 phntm.sh는 AES-256-GCM 암호화(AES-256-GCM Encryption)를 통해 서버에서 파일 내용을 읽을 수 없도록 설계됨

제로 지식(Zero-knowledge) 아키텍처를 구현하여, 파일 암호 해독 키(Decryption Key)를 URL fragment에 저장하고 서버에는 암호화된 파일만 저장하는 방식으로 데이터 미저장 정책(Zero-Retention Policy)을 구현함

오픈 소스(Open Source)로 공개되어 코드 검증이 가능하며, CLI는 Go 언어로 개발되어 Go 언어(Go Language) I/O 모델 학습에 활용됨

Vercel Analytics의 해시(Hash) 수집 문제 발생으로, 서드파티 스크립트(Third-party Script)의 보안 취약점(Security Vulnerability)을 인지하고 감사(Audit)의 중요성을 강조함

제로 지식(Zero-knowledge) 아키텍처의 핵심 원리

phntm.sh는 제로 지식(Zero-knowledge) 아키텍처를 통해 서버가 사용자의 파일을 절대 읽을 수 없도록 보장한다. 핵심은 AES-256-GCM 암호화(AES-256-GCM Encryption)를 사용한 클라이언트 측 암호화이다. 사용자의 브라우저에서 256비트 AES 키를 생성하고, 파일을 암호화한 후 서버에는 암호화된 텍스트(Ciphertext)만 전송한다. 복호화 키(Decryption Key)는 URL fragment(#)에 포함되어 서버에 전송되지 않으며, 수신자는 URL을 통해 암호화된 파일을 다운로드하고, 브라우저 내에서 복호화한다. 이 방식은 서버가 데이터를 저장하지 않으므로 데이터 미저장 정책(Zero-Retention Policy)을 구현한다.

Go 언어 기반 CLI 개발 경험

phntm.sh의 CLI는 Go 언어로 개발되었으며, 개발자는 Go 언어의 I/O 모델을 학습하는 과정에서 io.Reader 인터페이스(io.Reader Interface)를 활용하여 진행률 표시줄(Progress Bar)을 구현했다. 표준 라이브러리(Standard Library)만 사용하여 외부 의존성(External Dependency)을 최소화함으로써, Go 언어의 핵심적인 기능에 집중할 수 있었다. 특히, io.Copy 함수(io.Copy Function)를 사용하여 파일 전송 과정을 간결하게 처리하고, 진행률을 실시간으로 업데이트하는 방식을 통해 Go 언어의 컴포지션(Composition) 개념을 효과적으로 이해했다.

보안 강화를 위한 서드파티 스크립트 감사

phntm.sh 개발 과정에서 Vercel Analytics의 해시(Hash) 수집 문제가 발생하여, 서드파티 스크립트(Third-party Script)의 보안 취약점(Security Vulnerability)에 대한 경각심을 갖게 되었다. Vercel Analytics는 URL fragment를 읽어 데이터를 수집했고, 이는 복호화 키(Decryption Key) 노출 위험으로 이어질 수 있었다. 개발자는 `beforeSend` 훅(Hook)을 사용하여 URL fragment를 제거하는 방식으로 문제를 해결했다. 이 사례는 보안을 위해 서드파티 스크립트(Third-party Script)의 안전성 감사(Security Audit)의 중요성을 강조하며, 특히 개인 정보 보호를 중요하게 생각하는 서비스에서 더욱 중요하다.

파일 전송 도구의 장점과 한계

phntm.sh는 별도의 설치 없이 링크만으로 파일을 안전하게 전송할 수 있다는 장점을 가진다. 파일은 만료 시간(Expiration Time)이 지나면 자동으로 삭제되어, 데이터 유출 위험을 최소화한다. 하지만, 현재는 대용량 파일 전송 시 메모리 사용량(Memory Usage) 증가라는 한계가 존재한다. 이는 파일 전체를 메모리에 버퍼링(Buffering)하기 때문이다. 또한, CLI의 단순한 CLI flag 파싱(CLI Flag Parsing)은 개선의 여지가 있다. 개발자는 이러한 한계를 인지하고 있으며, 지속적인 개선을 통해 보안성과 사용성을 모두 향상시킬 계획이다.

I built a file transfer tool that can’t spy on you even if it wanted to