용어집

클라이언트 측 암호화이란 무엇인가요?

클라이언트 측 암호화는 데이터를 서버로 전송하기 전에 사용자 기기(보통 브라우저나 네이티브 앱)에서 암호화하는 방식으로, 서버가 항상 암호화된 데이터만 받고 저장하도록 보장하는 관행이다.

클라이언트 측 암호화는 제로 지식 및 종단 간 암호화 시스템을 가능하게 하는 기술적 메커니즘이다. 데이터가 사용자 기기를 떠나기 전에 암호화하면 평문이 네트워크를 통과하지 않고 서버에 존재하지 않는다. 이는 네트워크 도청, 서버 침해, 내부자 위협을 동시에 방어한다.

웹 애플리케이션에서 클라이언트 측 암호화는 주로 Web Crypto API에 의존한다. 이는 암호화 연산을 위한 브라우저 내장 인터페이스다. Web Crypto API는 컴파일된 네이티브 코드를 실행하고 타이밍 공격에 강하며 현대 기기의 하드웨어 가속을 활용하므로 JavaScript 암호화 라이브러리보다 선호된다.

클라이언트 측 암호화의 주요 트레이드오프는 서버가 암호화된 데이터를 처리하거나 검색할 수 없다는 것이다. 서버가 데이터를 진정으로 읽을 수 없기 때문에 서버 측 검색, 콘텐츠 분석, 데이터 변환 같은 기능이 불가능해진다. 비밀 공유의 경우 이 트레이드오프는 이상적이다. 서버는 덩어리를 저장하고 접근 규칙을 시행하기만 하면 되며, 내용을 이해할 필요가 없다.

Vaulted가 클라이언트 측 암호화을 사용하는 방법

Vaulted를 통해 공유되는 모든 비밀은 브라우저가 네트워크 요청을 보내기 전에 Web Crypto API로 클라이언트 측에서 암호화된다. 브라우저는 무작위 AES-256-GCM 키를 생성하고 평문을 암호화한 다음, 결과 암호문과 IV만 서버로 전송한다. 암호화 키는 URL 프래그먼트에 설정되어 브라우저가 HTTP 요청에 포함하지 않는다. 이는 평문이 발신자와 수신자의 브라우저 메모리에만 존재함을 의미한다. 네트워크에서도, 서버에서도 존재하지 않는다.