피드로 돌아가기
Dev.toSecurity
원문 읽기
Plausible Deniability 구현을 통한 Zero-Knowledge 메모장 설계
How I Built Plausible Deniability Into a Browser Notepad
AI 요약
Context
기존 Zero-knowledge 암호화는 서버 침해는 방어하나 사용자 강제 인증 상황에서의 데이터 노출을 막지 못하는 한계 존재. 특히 암호화된 데이터 덩어리(Blob)의 존재 자체가 기밀 정보 소유의 증거가 되는 구조적 취약점 분석.
Technical Solution
- 고정 크기의 64개 슬롯을 가진 Ciphertext Blob 구조를 설계하여 실제 데이터와 Random Bytes를 구분 불가능하게 배치
- Argon2id(1.5s, 64MiB) 기반 키 유도와 Keyed HMAC을 통한 슬롯 매핑으로 Passphrase별 독립적 데이터 접근 경로 확보
- AES-GCM의 출력 특성을 이용해 암호화 데이터와 /dev/urandom 생성 값 간의 통계적 구분 불가능성 구현
- Decoy Passphrase 전용 benign 노트북 설계를 통해 강제 인증 상황에서 기밀 데이터의 존재를 부정하는 Plausible Deniability 달성
- URL Fragment에 Decryption Key를 배치하여 서버 로그 및 DB에 키가 남지 않는 Client-side Only 전송 구조 설계
- drand 기반의 Distributed Randomness Beacon과 tlock의 Identity-based Encryption을 결합한 Time-locked Note 구현
실천 포인트
1. 보안 민감 데이터 설계 시 실제 데이터와 더미 데이터의 외부 형태(Shape)를 동일하게 유지하고 있는가?
2. 인증 실패 시의 응답 시간과 에러 메시지가 성공/실패 여부나 데이터 존재 여부를 유추하게 하지 않는가?
3. 서버에 전송되지 않아야 할 민감 키 값을 URL Fragment 등 클라이언트 전용 영역에서 처리하고 있는가?
4. 외부 서비스 의존성 없이 데이터 독립성을 보장하는 Export/Import 메커니즘을 제공하는가?