동형암호화된 CRDTs
3 weeks ago
7
-
로컬-퍼스트 소프트웨어에서 협업 문서의 보안을 유지하기 위해 동형암호화(Homomorphic Encryption)와 CRDTs를 결합
-
종단 간 암호화만으로는 서버가 데이터를 병합할 수 없어 동기화와 업데이트 효율에 제약이 발생함
-
동형암호화는 서버가 내용을 알지 못한 채로 CRDT 업데이트를 병합할 수 있도록 프로그램 실행을 가능하게 하는 기술
- 하지만 동형암호화의 근본적 한계(성능 저하, 공간·연산량 증가, 코드의 최악 케이스 동작 필요) 로 인해 실제 적용에는 중대한 난점이 존재함
- CRDTs와 보안 연산의 공존을 위한 다양한 접근이 연구되고 있으며, 아직 완전한 해결책은 모색 중임
로컬-퍼스트와 보안 협업의 과제
- 원격 협업에서 문서를 로컬-퍼스트 방식으로 CRDT에 저장한 뒤, 동기화를 통해 공동 편집 경험을 제공하는 구조임
- 문서 내용이 앱 개발자 등 제3자에게도 절대 노출돼서는 안 되는 보안 요구가 있을 경우, 종단 간 암호화가 흔히 활용되는 방법임
- 종단 간 암호화는 동작이 단순하지만, 동기화 서버가 데이터를 병합하지 못하므로, 오랜 기간 비동기로 작업하면 비효율적 데이터 통신이 발생함
동형암호화란?
-
동형암호화는 암호화된 데이터상에서 직접 알고리듬 실행이 가능하게 하는 특수 암호화 방식임
- 이를 활용하면 동기화 서버가 데이터의 내용을 알지 못한 채로 CRDT 업데이트 병합을 수행할 수 있음
- 동형암호화에서 지원하는 연산 종류에 따라 부분 동형(덧셈/곱셈 중 하나만) , 일부 동형/계층 동형(양쪽 일부 횟수) , 완전 동형(제한 없음) 으로 구분함
- 연산이 많아질수록 암호문에 노이즈가 쌓이고 해독이 곤란해져 Bootstrapping 등 고급 기법이 요구됨
- 암호화된 비트(0/1) 수준에서 XOR, AND 같은 기본 연산 게이트 조합만으로 일반적 불리언 회로 구현 가능임
실제 동형암호화 CRDT 구현 사례
- Rust 기반 라이브러리 TFHE-rs로 Last Write Wins Register라는 대표적인 CRDT를 동형암호화로 구현함
- 평문 구조체와 암호화 구조체의 필드와 메서드(암호화/복호화)는 거의 동일하나, 실제 병합 로직에서 중요한 차이가 발생함
- if/else, match 구문 등 실행 경로 분기가 암호문 해독에 힌트를 줄 수 있으므로, 암호화 환경에서는 모든 분기·루프를 즉시 평가하는 방식이 필수임
- 주요 조건 비교, 병합 연산 모두 비트 단위 FheBool 연산자와 select 메서드 등으로 처리해 어떤 조건에서 값이 바뀌었는지 외부에 감지 불가함
동형암호화의 근본적 한계
- 암호키와 데이터 크기 불균형: 예시에서는 32바이트의 데이터에 123MB 서버 키 필요(압축해도 27MB)로 공간 비효율이 심각함
-
성능 저하: 동형암호화된 CRDT merge는 미암호화 대비 약 20억 배 느린 1초 수준 측정
- 루프·분기가 입력값에 따라 변하면 정보 노출이 발생하므로, 항상 최악의 케이스 기준으로 연산수·메모리를 소모해야 함
- 예를 들어, last-write-wins map과 같이 key-value가 희소한 경우라도, 모든 키를 고정 크기로 꽉 채운 채 병합해야 하므로 실질적 확장성 저하
- 암호문 구조나 변경 내역에서 값이 변화했는지, 어느 부분이 갱신됐는지 외부 관찰자가 추론 불가하게 설계해야 함
결론 및 전망
-
CRDTs와 동형암호화는 이론적으로는 자연스럽게 결합될 수 있지만, 현실적으로 공간/시간 효율성 및 프로그램 구조상 치명적 제약이 큼
- 현 시점에서는 완전한 실용 솔루션이 나오지 않았으나, CRDTs 자체도 비교적 젊은 기술로 지속적 연구가 이루어지는 중임
- 로컬-퍼스트 협업앱에서 보안성과 사용성의 균형을 위한 혁신적 솔루션에 대한 가능성은 여전히 남아 있음
-
Homepage
-
개발자
- 동형암호화된 CRDTs