- Kagi Search는 유료 검색 권한을 확인하면서도 검색 요청을 계정과 직접 연결하지 않기 위해 Privacy Pass 인증을 도입함
- 이 방식은 토큰 생성과 토큰 사용을 분리해, Kagi가 유효성은 검증하되 토큰만으로 사용자나 생성 시점을 역추적하지 못하게 함
- 초기 대상은 무제한 검색이 포함된 Professional, Ultimate, Family, Team 플랜이며, 검색량 제한이 있는 Trial과 Starter는 토큰 분실·초과 사용 문제가 남아 제외됨
- Orion, Kagi Android 앱, Chrome·Firefox 확장에서 바로 사용할 수 있고, Safari는 확장 API 제약 때문에 아직 지원되지 않음
- 토큰만으로는 검색과 계정을 연결하기 어렵지만, IP 주소·브라우저 핑거프린트·반복 검색 패턴 같은 사이드 채널은 남아 Tor나 VPN 사용이 권장됨
Kagi Search에 추가된 Privacy Pass 인증
- Kagi는 Kagi Search에 Privacy Pass 인증을 도입하면서 Tor onion service도 함께 공개함
- Privacy Pass는 클라이언트가 접근 권한을 증명하되, 서버가 어떤 사용자가 접속했는지 식별하지 못하게 하는 인증 프로토콜임
- 유료 검색 엔진인 Kagi는 검색 권한 확인이 필요하지만, 이 기능을 통해 검색 요청을 특정 계정과 연결하지 않는 기술적 보장을 추가함
- 구현은 Raphael Robert의 Rust Privacy Pass 구현을 출발점으로 삼았고, 코드는 kagisearch/privacypass-extension에 공개됨
지원 플랜과 클라이언트
- Privacy Pass는 먼저 무제한 검색 플랜인 Professional, Ultimate, Family, Team 사용자에게 제공됨
- Trial과 Starter 플랜은 현재 지원되지 않음
- 두 플랜은 월간 검색 수가 제한되어 있음
- 확장 삭제 등으로 생성된 토큰을 잃으면 사용자 경험이 나빠질 수 있음
- Kagi는 토큰 사용 시점에 계정이나 플랜을 알 수 없어, 이론적으로 허용 검색 수보다 많은 토큰 사용이 가능해질 수 있음
- 지원 클라이언트는 다음과 같음
- Orion Browser: macOS/iOS/iPadOS에서 기본 통합
- Kagi for Android: 버전 0.29 이상
- Firefox 확장과 Chrome 확장
- 기존 Kagi Search 확장을 쓰는 사용자는 호환성 문제를 피하려면 최신 버전으로 업데이트하거나 비활성화해야 함
- Firefox는 0.7.6
- Chrome은 1.2.2.5
Privacy Pass의 인증 흐름
- Privacy Pass는 인증을 토큰 생성과 토큰 사용 두 단계로 나눔
- 토큰 생성 단계에서는 사용자가 Kagi 세션 쿠키로 토큰 생성 권한을 증명함
- 생성된 토큰은 서버 관점에서 무작위 토큰과 구별되지 않음
- 토큰은 생성한 사용자나 같은 사용자가 만든 다른 토큰으로 추적될 수 없음
- 검색 요청 때는 미리 만든 토큰 하나를 제출해 접근 권한을 증명함
- 서버는 해당 토큰이 유효하게 생성된 적이 있다는 사실만 확인함
- 토큰을 특정 생성 단계와 연결할 수 없음
- 토큰은 1회용임
- 서버는 이미 사용된 토큰을 추적해 중복 사용을 막음
- 클라이언트도 같은 토큰을 두 번 제출하지 않아야 서로 다른 사용 단계가 연결되지 않음
- 토큰에는 고정 수명이 있어, 너무 오래된 토큰은 새로 생성해야 함
Kagi 구현 모델과 보안 속성
- Kagi의 배포 모델은 Privacy Pass 표준의 Shared Origin, Attester, Issuer 구조를 따름
- Kagi가 Attester, Issuer, Origin 역할을 모두 수행함
- 사용자는 Privacy Pass 브라우저 확장이나 Orion 기본 지원을 통해 클라이언트 역할을 수행함
- 확장은 설치 후와 이후 주기적으로 많은 수의 토큰을 생성해 저장함
- 사용자는 검색 시 기존 세션 쿠키로 인증할지, Privacy Pass 토큰으로 인증할지 토글로 선택함
- 사용자 보호 속성은 세 가지임
- 생성-사용 비연결성: Kagi는 검색 시 제출된 토큰을 특정 토큰 생성 단계와 연결할 수 없음
- 사용-사용 비연결성: Kagi는 서로 다른 두 검색이 같은 사용자에게서 온 것인지 토큰만으로 알 수 없음
- 사용 탈취 방지: 토큰 생성 과정을 관찰한 도청자가 그 정보만으로 토큰을 훔쳐 사용할 수 없음
- Kagi를 보호하는 속성도 포함됨
- 정상적으로 생성된 토큰은 Kagi 검증을 통과함
- 악의적 클라이언트는 올바르게 생성된 토큰을 알고 있어도 새 유효 토큰을 위조할 수 없음
Privacy Pass 모드에서 줄어드는 기능
- Privacy Pass 모드에서는 Kagi가 사용자를 식별할 수 없어 계정 설정을 적용할 수 없음
- Kagi는 이를 “일반 프라이버시와 전체 기능” 또는 “최대 프라이버시와 핵심 기능” 사이에서 사용자가 선택하는 구조로 제공함
- Kagi Assistant는 출시 시점에 Privacy Pass에서 사용할 수 없음
- Kagi Assistant는 Ultimate 멤버에게만 제공됨
- Privacy Pass에서는 계정 정보가 없어 어떤 플랜인지 검증할 수 없음
- 출시 시점의 Privacy Pass는 Kagi Search 인증에만 쓰임
- Kagi는 이후 몇 주 안에 다음 서비스로 지원을 확대할 계획임
- Kagi Assistant
- Kagi Translate와 Kagi Maps
- Kagi Universal Summarizer와 Ask questions about page
- 현재 이들 서비스를 쓰려면 Privacy Pass를 비활성화해야 함
사이드 채널과 Tor 사용
- Privacy Pass는 토큰만으로 토큰 생성과 사용을 연결할 수 없게 하지만, 온라인 상호작용 전체를 수학적 모델로 완전히 설명할 수는 없음
- 악의적 서버는 사이드 채널 정보로 클라이언트를 추적하려 할 수 있음
- 매일 같은 시간에 같은 구체적 검색을 반복하면 검색들이 같은 사람에게서 왔다고 추정될 수 있음
- 브라우저 user-agent, IP 주소 같은 신호는 Privacy Pass 바깥의 정보임
- 같은 IP에서 토큰 생성 요청 직후 토큰 사용 요청이 오면 같은 개인의 요청으로 볼 가능성이 있음
- RFC 9576은 토큰 생성과 사용을 시간적으로 분리하거나, Tor 같은 익명화 서비스로 공간적으로 분리할 것을 권장함
- Kagi의 Privacy Pass 확장과 Orion 기본 구현은 HTTP 헤더와 쿠키를 제거해 브라우저 핑거프린트를 가능한 한 균일하게 만들도록 처리함
- Kagi는 Tor 네트워크에서 직접 접근할 수 있는 onion 주소를 제공함
- Tor만 쓰면 IP 주소는 숨겨지지만, Privacy Pass 없이 로그인한 상태에서는 검색이 이론적으로 단일 계정에 연결될 수 있음
- Tor와 Privacy Pass를 함께 쓰면 Kagi는 해당 검색이 이전에 토큰을 받을 권한을 검증한 사용자에게서 왔다는 점만 알며, 계정이나 위치는 알 수 없음
토큰 수, 성능, 저장 공간
- 무제한 검색 플랜 사용자는 한 epoch, 즉 한 달에 2,000개 토큰을 생성할 수 있음
- 추가 토큰이 필요하면 support@kagi.com으로 요청할 수 있음
- 500개 검색 토큰 생성에는 일반 소비자용 노트북에서 약 1초의 연산이 필요함
- 서버 접속과 응답 시간 때문에 몇 초가 더 걸릴 수 있음
- 확장 설치 시 가능한 한 백그라운드에서 수행됨
- 토큰 하나는 216바이트이며, 토큰 생성 요청당 저장 공간은 약 100KiB임
- 현재 토큰 검증 서버는 us-central1 리전에만 배포되어 있고, Kagi는 출시 직후 확장할 계획임
개인화와 설정이 제한되는 이유
- Privacy Pass 검색에서는 Kagi가 사용자를 알 수 없어, 사용자의 커스텀 설정에 맞춘 결과를 제공할 수 없음
- Kagi는 요청마다
(language, region, safe-search)같은 작은 설정을 보내는 방안을 검토했지만, 현재는 익명성이 크게 줄어들 수 있다고 판단함 - 예시 분석에서 특정 언어 설정인
Lang 10을 보내는 사용자는 Privacy Pass 사용자가 약 1,000명일 때 사용-사용 비연결성 보장을 자동으로 잃을 수 있음 - Kagi는 이 추정이 지나치게 보수적일 수 있다고 보지만, 현재는 Privacy Pass 인증 사용자에게 기본 개인화 수준을 활성화하지 않음
- 수동 검색 설정은 검색어에 bangs를 붙여 일부 적용할 수 있음
- 예를 들어
!de를 검색어 앞에 붙이면 독일 지역 검색을 수행함
- 예를 들어
- 완전한 개인화 검색 경험을 원하면 기존 로그인 방식을 사용하고 Privacy Pass를 비활성화해야 함
Safari·사생활 보호 창 등 제약
- Privacy Pass는 블록체인을 사용하지 않음
- 타원곡선, 해시 함수, 검증 가능한 망각 의사난수 함수 구조를 사용함
- 토큰은 블록체인에서 생성·저장·거래되지 않음
- Chrome·Firefox 사생활 보호 창에서는 토큰 생성이 동작하지 않음
- 토큰 생성에는 세션 쿠키 접근이 필요함
- 사생활 보호 창에서는 확장이 세션 쿠키에 접근할 수 없음
- Orion에서는 사생활 보호 창에서도 토큰 생성이 동작함
- Privacy Pass를 켜도 TCP/IP 동작 방식 때문에 Kagi는 검색 요청의 IP 주소를 볼 수 있음
- IP 주소 노출이 걱정되면 Tor 또는 신뢰하는 VPN 사용을 권장함
- 모든 토큰은 생성된 달 X 기준으로 X+2월 첫날 자정에 만료됨
- 같은 시점에 생성된 토큰들의 비슷한 만료일이 여러 검색을 식별하는 데 쓰이는 문제를 피하기 위한 방식임
- Safari는 현재 지원되지 않음
- Safari 확장 API가 요청에서 쿠키를 제거하는 기능을 지원하지 않는 것으로 Kagi는 파악하고 있음
- 쿠키를 제거하지 못하면 로그인 계정으로 계속 인증됨
- WebKit 기반의 비슷한 네이티브 경험을 원하면 Privacy Pass가 통합된 Orion Browser를 대안으로 쓸 수 있음