프라이버시 프록시 CLI를 오픈 소스로 공개합니다 (새 탭에서 열림)
Oblivious HTTP(OHTTP)는 여러 주체와 바이너리 인코딩을 거치기 때문에 장애 원인을 추적하기 어렵다. Cloudflare는 실제 운영 경험을 바탕으로 전체 OHTTP 요청 과정을 한 번에 실행하고 각 단계를 확인할 수 있는 오픈소스 CLI 도구 pvcli(privacy-client)를 만들었다. 이 도구는 복잡한 수작업과 일회성 스크립트를 줄여 개발·테스트·장애 대응을 단순화한다.
OHTTP가 제공하는 프라이버시 구조
- OHTTP는 요청을 보낸 사람과 요청 내용을 한 주체가 동시에 알 수 없도록 설계된다.
- 서로 충돌하지 않는 두 운영 주체가 필요하다.
- Relay: 클라이언트의 신원을 gateway에 전달하지 않음
- Gateway: 요청을 복호화해 실제 대상 서버로 전달
- 일반적인 요청 흐름은 다음과 같다.
- 클라이언트가 gateway의 공개 키를 가져온다.
- 클라이언트가 HTTP 요청을 암호화해 relay로 보낸다.
- relay가 클라이언트 식별 정보를 제거하고 gateway로 전달한다.
- gateway가 요청을 복호화해 target 서버에 전송한다.
- target의 응답을 gateway가 다시 암호화한다.
- relay가 암호화된 응답을 클라이언트에 전달한다.
- 클라이언트가 응답을 복호화한다.
- 각 단계가 별도의 장애 지점이므로, 문제가 relay·gateway·target 중 어디에서 발생했는지 확인하기 어렵다.
기존 디버깅 방식의 문제
- 고객 환경에서 실제 end-to-end 테스트를 수행하려면 배포별 맞춤 클라이언트를 일회성으로 작성해야 했다.
- 장애 발생 시 자체 시스템의 문제인지 고객 시스템의 문제인지 판별하는 데 시간이 많이 걸렸다.
- OHTTP는 바이너리 HTTP를 사용하므로 원시 바이트를 직접 분석해야 했다.
- 공개 키, 바이너리 HTTP 요청, 암호화된 OHTTP 메시지를 RFC에 따라 수작업으로 해석해야 했다.
- 사람이 긴 hexadecimal 문자열을 직접 검증하는 과정은 번거롭고 실수하기 쉽다.
공개 키와 바이너리 HTTP의 수동 분석
- gateway에서 받은 공개 키 설정은 긴 hexadecimal 데이터로 반환된다.
- RFC 9458에 따라 다음 필드를 직접 해석해야 한다.
0029: 공개 키 항목의 길이55: 공개 키 ID0020: DHKEM(X25519, HKDF-SHA256) 비대칭 암호 방식- 뒤따르는 32바이트: 실제 공개 키
0004: 대칭 암호 방식 ID 영역의 길이0001,0001: HKDF-SHA256 및 AES-128-GCM 식별자
- 원래의 HTTP 요청도 RFC 9292의 바이너리 HTTP 형식으로 변환해야 한다.
- 예를 들어
POST,https, 호스트명, 경로, 헤더와 본문이 각각 바이너리 필드로 인코딩된다. - 이후 공개 키를 이용해 바이너리 HTTP 요청을 OHTTP 형식으로 암호화하고, 키 ID와 암호 방식 ID를 포함한 헤더를 붙여 relay에 보낼 wrapper HTTP 요청을 만들어야 한다.
pvcli의 역할
- Cloudflare는 이러한 프라이버시 프로토콜 관련 기능을 하나의 CLI에 통합했다.
- 익숙한 HTTP 클라이언트 인터페이스를 제공하면서 OHTTP의 각 처리 단계를 순서대로 표시한다.
- relay, gateway, origin으로 이어지는 전체 요청을 단일 명령으로 실행할 수 있다.
- 예시 명령은 다음 작업을 수행한다.
--first-hop: relay 지정--proxy: gateway 지정-X POST: HTTP 메서드 지정--header: 요청 헤더 지정--data: JSON 요청 본문 지정- 대상 URL: gateway가 요청을 전달할 origin
- 따라서 사용자는 공개 키 조회, 바이너리 HTTP 변환, OHTTP 암호화, relay 전달, 응답 복호화 과정을 각각 수동으로 구현할 필요가 없다.
공개와 활용
- 도구 이름은
privacy-client, 실행 파일은pvcli다. - Apache-2.0 라이선스로 공개되며 외부 기여를 허용한다.
- 새로운 프라이버시 프로토콜이나 다양한 네트워크 아키텍처를 지원할 수 있도록 확장성을 고려했다.
- 운영 환경과 유사한 end-to-end 테스트 및 장애 재현에 활용할 수 있다.
복잡한 OHTTP 시스템을 운영하거나 연동한다면, 원시 바이트와 RFC를 직접 해석하는 방식보다 pvcli로 전체 경로를 재현하는 것이 효율적이다. 특히 relay·gateway·origin 중 장애 위치를 빠르게 좁혀야 하는 개발 및 incident response 상황에서 유용하다.