INTEGRITY Документация

Начало работы

Есть два способа самостоятельно увидеть Privacy Pass в действии:

Чтобы разобраться в самом протоколе, см. Протокол Privacy Pass. Когда будете готовы проверить настоящее развёртывание, управляемое Cloudflare, см. Тестирование развертывания в продакшене и свяжитесь с нами ↗ чтобы начать настройку необходимой инфраструктуры.


Получение реального токена с помощью демонстрационного инструмента

Проще всего увидеть, как выглядит токен, подписанный издателем, с помощью Демонстрационный инструмент Privacy Pass ↗. Указав издателя, вы запускаете полный процесс выдачи токена прямо в браузере и получаете проверенный токен.

Предварительные требования

Как получить токен

  1. Откройте демонстрационный инструмент Privacy Pass ↗.
  2. В Запрос по URL эмитента, вставьте URL каталога демонстрационного издателя и отправьте форму. Инструмент отобразит каталог издателя, список token-keys с типом токена 2 (Blind RSA), и автоматически заполняет поля для следующих шагов.
  3. В Создать проверку, отправьте заполненную форму. Инструмент формирует WWW-Authenticate проверку токена по ключу издателя.
  4. В Отправка запроса токена, отправьте заполненную форму. Инструмент создаёт слепой запрос, отправляет его издателю, снимает ослепление с ответа и проверяет результат.

Успешный запуск покажет:

Draft 16 Valid: true
PrivateToken token=...

Draft 16 Valid: true означает, что издатель вернул настоящий токен, который проходит проверку по его открытому ключу. PrivateToken token=... это готовый токен, который клиент отправляет на Origin в Authorization заголовок.


См. локальный пример

Вы можете запустить процесс выдачи и предъявления токенов на своей машине за несколько минут без какой-либо настройки Cloudflare. Он использует настоящую криптографию Blind RSA, но все происходит в рамках одного процесса: ключ издателя генерируется локально, а аттестация заменяется заглушкой. Это быстрый способ увидеть протокол в действии.

Предварительные требования

Запустите пример

@cloudflare/privacypass-ts ↗ библиотека поставляется с готовыми к запуску примерами. Клонируйте репозиторий и установите зависимости:

git clone https://github.com/cloudflare/privacypass-ts.git
cd privacypass-ts
npm ci

Пример с публичной проверяемостью (pub_verif.example.ts ↗) экспортирует только свои функции, поэтому добавьте небольшой раннер, который вызывает именно эту функцию. Создайте examples/run-pub-verif.ts:

import { publicVerifiableTokensPSS } from "./pub_verif.example.js";

await publicVerifiableTokensPSS();

Скомпилируйте примеры и запустите ваш исполняемый файл:

npx tsc -b examples
node ./lib/examples/run-pub-verif.js

Он выводит:

Public-Verifiable tokens
    Suite: ...
    Valid token: true

Valid token: true означает, что токен был выдан, с него сняли ослепление и его успешно проверили.

Как пример соотносится с четырьмя ролями

В этом примере в рамках одного процесса создаются Издатель, Клиент и Источник (пара ключей Издателя генерируется заранее в setup() с Issuer.generateKey), а затем проводит их через протокол.

Пример следует процессу, показанному на диаграмме, и задействует только Источник, Клиент и Издатель. Аттестатор эмулируется заглушкой и не показан на диаграмме, поскольку реальная аттестация здесь не выполняется.

 ┌────────┐              ┌────────┐                ┌────────┐
 │ Origin │              │ Client │                │ Issuer │
 └────────┘              └────────┘                └────────┘
      │                       │                         │
      │<────── Request ───────│                         │
      │─── TokenChallenge ───>│                         │
      │                       │                         │
      │                       │───── TokenRequest ─────>│
      │                       │<──── TokenResponse ─────│
      │                       │                         │
      │<─── Request+Token ────│                         │

Каждый вызов в примере соответствует одному шагу этого процесса:

const redemptionContext = crypto.getRandomValues(new Uint8Array(32));
const tokChl = origin.createTokenChallenge(issuer.name, redemptionContext);  // Origin issues a token challenge
const tokReq = await client.createTokenRequest(tokChl, pkIssuer);            // Client sends blinded request
const tokRes = await issuer.issue(tokReq);                                   // Issuer signs the blinded request
const token = await client.finalize(tokRes);                                 // Client finalizes token and resends request with it
const isValid = await origin.verify(token, issuer.publicKey);                // Origin verifies against the issuer key

Следующие шаги