有两种自助方式来体验 Privacy Pass 的实际运作:
- 使用演示工具获取真实令牌: 利用浏览器工具和 Cloudflare 提供的演示颁发者,这是获取真实的、由颁发者签名的令牌的最快方式。
- 查看本地示例: 使用真实的 Blind RSA 密码学,在几分钟内在你自己的机器上运行完整的颁发和兑换流程。
要了解协议本身,请参阅 Privacy Pass 协议。当你准备好验证真实的、由 Cloudflare 运营的部署时,请参阅生产部署测试并联系我们 ↗开始设置必要的基础设施。
查看由颁发者签名的令牌的最快方式是使用 Cloudflare 的 Privacy Pass 演示工具 ↗。指向颁发者后,它会在你的浏览器中运行完整的颁发流程并返回已验证的令牌。
- 我们的演示颁发者目录 URL,在此提供:https://demo-pat.issuer.cloudflare.com/.well-known/private-token-issuer-directory。 ↗
- 打开 Privacy Pass 演示工具 ↗。
- 在 Fetch from issuer URL(从颁发者 URL 获取) 中,粘贴演示颁发者目录 URL 并提交。该工具将显示颁发者目录——令牌类型为
2(Blind RSA)的token-keys列表——并自动填充以下步骤的字段。 - 在 Create challenge(创建质询) 中,提交预填写的表单。该工具从颁发者的密钥构建
WWW-Authenticate令牌挑战。 - 在 Send Token Request(发送令牌请求) 中,提交预填写的表单。该工具对请求进行盲化处理,将其发送给颁发者,对响应进行去盲化处理,并验证结果。
成功运行后显示:
Draft 16 Valid: true
PrivateToken token=...Draft 16 Valid: true 表示颁发者返回了一个真实的令牌,该令牌可以对照其公钥进行验证。PrivateToken token=... 值是客户端将在 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: trueValid token: true 表示令牌已成功颁发、去盲化并验证。
示例在单个进程中创建了一个颁发者、一个客户端和一个源(颁发者密钥对在 setup() 中使用 Issuer.generateKey 预先生成),然后通过协议运行它们。
该示例遵循图中描述的流程,且仅测试源、客户端和颁发者。Attester 被模拟省略,因为此处不运行真实的验证。
┌────────┐ ┌────────┐ ┌────────┐
│ Origin │ │ Client │ │ Issuer │
└────────┘ └────────┘ └────────┘
│ │ │
│<────── Request ───────│ │
│─── TokenChallenge ───>│ │
│ │ │
│ │───── TokenRequest ─────>│
│ │<──── TokenResponse ─────│
│ │ │
│<─── Request+Token ────│ │示例中的每次调用映射到该流程中的一个步骤:
const redemptionContext = crypto.getRandomValues(new Uint8Array(32));
const tokChl = origin.createTokenChallenge(issuer.name, redemptionContext); // 源颁发令牌挑战
const tokReq = await client.createTokenRequest(tokChl, pkIssuer); // 客户端发送盲化请求
const tokRes = await issuer.issue(tokReq); // 颁发者对盲化请求进行签名
const token = await client.finalize(tokRes); // 客户端最终确定令牌并重新发送请求
const isValid = await origin.verify(token, issuer.publicKey); // 源对照颁发者密钥进行验证- 生产部署测试 — 当你准备好超越这些自助演示时,这是验证真实的、由 Cloudflare 运营的部署的深度指南,包含你的 Attester、颁发者和源协同工作。
- Privacy Pass 协议 — 四个角色、颁发和兑换流程以及生成令牌的盲签名。
- 部署模型 — 各角色的运营者和部署模型。