INTEGRITY Dokumentace

Začínáme

Privacy Pass si v praxi můžete vyzkoušet dvěma samoobslužnými způsoby:

Podrobnosti o samotném protokolu najdete v Protokol Privacy Pass. Až budete připraveni ověřit skutečné nasazení provozované Cloudflare, přejděte na Testování produkčního nasazení a kontaktujte nás ↗ a začněte budovat potřebnou infrastrukturu.


Získejte skutečný token pomocí demo nástroje

Nejrychlejší způsob, jak zjistit, jak vypadá token podepsaný issuerem, je díky nástroji Cloudflare Privacy Pass Demo Tool ↗. Po nasměrování na vydavatele spustí celý tok vydávání přímo ve vašem prohlížeči a vrátí ověřený token.

Předpoklady

Jak získat token

  1. Otevřete demo nástroj Privacy Pass ↗.
  2. V Načtení z URL vydavatele, vložte URL adresáře demo vydavatele a odešlete. Nástroj zobrazí adresář vydavatele, tedy seznam token-keys s typem tokenu 2 (Blind RSA) a automaticky vyplní pole pro následující kroky.
  3. V Vytvoření výzvy, odešlete předvyplněný formulář. Nástroj sestaví WWW-Authenticate výzvu k tokenu z klíče vydavatele.
  4. V Odeslání požadavku na token, odešlete předvyplněný formulář. Nástroj požadavek zaslepí, odešle ho vydavateli, odpověď odslepí a výsledek ověří.

Úspěšné spuštění zobrazí:

Draft 16 Valid: true
PrivateToken token=...

Draft 16 Valid: true znamená, že vydavatel vrátil skutečný token, který se ověřuje podle jeho veřejného klíče. PrivateToken token=... je finální token, který by klient odeslal Originu v Authorization hlavička.


Podívejte se na lokální příklad

Průběh vydání a uplatnění tokenu si můžete během několika minut spustit na vlastním počítači bez jakéhokoli nastavování na straně Cloudflare. Používá se při tom skutečná kryptografie Blind RSA, vše ale probíhá v rámci jediného procesu: klíč issueru se vygeneruje lokálně a atestace je nahrazena zástupnou implementací. Je to rychlý způsob, jak vidět protokol v akci.

Předpoklady

Spusťte příklad

@cloudflare/privacypass-ts ↗ knihovna obsahuje spustitelné příklady. Naklonujte repozitář a nainstalujte závislosti:

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

Veřejně ověřitelný příklad (pub_verif.example.ts ↗) exportuje pouze své funkce, proto přidejte malý spouštěč, který zavolá jen tuto jednu. Vytvořte examples/run-pub-verif.ts:

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

await publicVerifiableTokensPSS();

Zkompilujte příklady a spusťte svůj runner:

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

Vypíše:

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

Valid token: true znamená, že token byl vydán, odslepen a úspěšně ověřen.

Jak příklad odpovídá čtyřem rolím

Příklad v rámci jediného procesu vytvoří Issuer, Client a Origin (pár klíčů Issueru se vygeneruje předem v setup() hodnotou Issuer.generateKey), a poté je provede protokolem.

Příklad sleduje průběh popsaný v diagramu a využívá pouze Origin, Client a Issuer. Attester je nahrazen zástupnou implementací a v diagramu chybí, protože zde neprobíhá žádná skutečná atestace.

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

Každé volání v příkladu odpovídá jednomu kroku tohoto procesu:

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

Další kroky