盲签名凭证与匿名访问资格

AeroNyx2026年6月29日6 分钟阅读53 次浏览

依据源码说明 AeroNyx VPN 盲签名 voucher 与 Blind Vault RFC 9474 admission,包括上线、重放、issuer 与隐私边界。

AeroNyx 在两条不同授权路径使用盲签名技术。两者都降低身份关联,但上线状态与重放保证不同。本页只描述当前 Rust main 的真实实现、受部署控制的能力,以及运营者绝不能从凭证推导的信息。

两条凭证路径

VPN 路径使用完成盲签名的资格验证 ClientHello。Blind Vault V2 使用 RFC 9474 凭证创建随机、自我认证的加密存储 lease。V1 Blind Vault admission 仍是可关联的一次性 bearer 兼容路径,不是 blind issuance。

凭证路径当前状态重放/兑换模型
VPN ClientHello voucher已实现;reject_invalid 兼容上线VoucherVerifier 没有一次性 spend
Blind Vault V2 admissionRust 已实现;受部署/配置控制原子一次性 spend,精确 retry 幂等
Blind Vault V1 admission仅兼容;新集成应使用 V2原子一次性 spend,但 issuance 可关联

隐私不变量

隐私目标是在不把 issuance identity 交给 redeeming node 的前提下完成授权。Signer、entitlement backend、storage node 与 operator console 必须保持独立信任和数据边界;合并它们的 request-level 记录会破坏不可关联性。

  • Redeeming node 验证服务权利但不接收 wallet/account identity。
  • Blind signer 只接收 blinded bytes 与 public key ID,不接收 entitlement identity。
  • Credential secret、token、randomizer、spend ID、lease ID 与 private key 不得进入 log 或 Nodeboard。
  • Synthetic/aggregate counter 不得与 per-user traffic join。
  • Wallet 的 blind-signing warning 与此无关:用户不是批准不可读 transaction。

VPN 握手 voucher

Client 发送有界的 AVCH trailing extension。Rust 只解析 credential fields,按 epoch 从配置的 issuer directory 获取公钥、缓存一小时,再验证 randomized SHA-384 RSA-PSS blind signature;不需要 wallet 或 account ID。

text
ClientHello fixed frame
  + magic: AVCH
  + voucher_length: u16 little-endian
  + voucher JSON (maximum 2048 bytes)
json
{
  "token": "base64-final-credential-message",
  "signature": "base64-finalized-blind-signature",
  "msg_randomizer": "base64-32-byte-randomizer",
  "epoch": "issuer-key-epoch"
}

只有 client 在 entitlement service 请求 signing boundary 前先 blind message,issuer flow 才是真正盲签名。对 identity-linked token 做普通签名并不等价。最终 token、signature、randomizer 与 epoch 都是 bearer secret,禁止记录。

VPN 上线边界

VPN 当前采用 reject_invalid 兼容模式:malformed 与密码学无效 voucher 会在握手前拒绝;完全 missing 的 voucher 仍允许,让旧版 client 退出。这不是 mandatory-voucher enforcement,文档不能如此宣称。

text
mode = reject_invalid
valid | invalid | missing | malformed | total
valid_ratio | invalid_ratio | missing_ratio | malformed_ratio
last_observation | last_error

VoucherVerifier 验证签名并记录聚合结果,但没有原子 consume VPN token 或一次性 redemption table。因此不能宣称节点强制一次性兑换;分享、重放、quota 与 expiry 仍属于 issuance/版本化协议问题。

Blind Vault V2 admission

Blind Vault V2 是更强的匿名 admission。Client 获取 node-signed issuer epochs、blind RFC 9474 message、经 entitlement backend 向隔离 issuer 获取签名、在本地 finalize,再发送到不变的 /api/vault/v1/lease。只有启用 Blind Vault 且 pinned issuer 有效时 public API 才工作。

http
GET  /api/vault/v1/issuers
POST /api/vault/v1/lease
POST /api/vault/v1/put
POST /api/vault/v1/pull
POST /api/vault/v1/delete
Content-Type: application/vnd.aeronyx.blind-vault-v1
text
client blinds RFC 9474 admission message
  -> entitlement backend authorizes issuance
  -> isolated blind issuer signs blinded bytes only
  -> client finalizes signature
  -> node verifies active public epoch
  -> atomic spend marker + random self-authenticating lease
  -> ciphertext storage operations use lease-scoped keys/capabilities

Issuer 隔离与密钥轮换

私钥操作位于独立 aeronyx-blind-issuer process。Request 只有 scheme version、public issuer-key fingerprint 与有界 blinded RSA bytes,没有 account model、storage DB 或 redemption visibility;并提供 aggregate health 与可替换 software/HSM/KMS custody interface。

Public issuer epoch 包含 canonical public DER、稳定 SHA-256 key ID、有效时间与 maximum lease TTL。Runtime update 必须由另一把 pinned authority 验证,generation 单调增加、维持 active-epoch continuity 并原子持久化;rollback 或移除仍有效 epoch 会 fail closed。

原子 spend、幂等与重放

Blind Vault V2 在同一个 immediate SQLite transaction 验证 finalized credential 并创建 lease。Domain-separated spend ID 与 lease 一起 commit;已 spend 的 credential 不能创建第二个 lease,相同既有 lease 的精确 retry 仍然幂等。

V1 与 V2 共用一次性 spend table,但 scheme 分离:V1 保存 raw ticket identity、可以关联;V2 从 finalized credential 派生不可关联 spend ID。此原子 replay protection 属于 Blind Vault,不能套用到 VPN VoucherVerifier

可观测性与 Nodeboard

Operator surface 只能展示聚合 validity、capacity、signer health 与粗粒度 failure bucket。last_observationlast_error 是运营 bucket,不能成为增加 token、wallet、lease、request 或 per-user 维度的理由。

允许的聚合证据:

  • VPN validinvalidmissingmalformed 总量与 ratio
  • issuer active-key、key-count、reload、capacity、rate、timeout 与 circuit-breaker counter
  • Blind Vault 聚合 lease、live-object、ciphertext-byte、expiry 与 cleanup health
  • 粗粒度 mode、epoch availability、last observation 与 privacy-boundary 状态

永不公开:

  • raw voucher token、signature、randomizer、blinded message 或 spend ID
  • wallet、account、payment、membership 或 social identity
  • per-user redemption history、lease ID、object ID、capability 或 request ID
  • client public IP、destination、DNS、route、message 或 browsing metadata
  • issuer private key、backend provider error、ciphertext、plaintext 或 wallet-level traffic

威胁模型与限制

盲签名只降低 issuance 与 redemption 的关联,不消除所有 side channel。Network timing、region、capacity、client compromise、issuer over-collection、credential theft、collusion 与 traffic correlation 仍需 blind relay、encrypted payload、bounded logs、route diversity 与部署隔离。

  • issuer-side collection 与 redemption timing 关联
  • credential theft、sharing、resale 或 client storage compromise
  • 在版本化 redemption policy 前的 VPN voucher replay
  • 恶意或共谋的 issuer、backend、node 与 operator component
  • timing、region、capacity 与 traffic-correlation side channel
  • key-rotation rollback、inactive epoch 或 continuity 破坏
  • 遥测悄悄从 aggregate health 扩张为 per-user history

源码关系图

源码刻意拆分 VPN verification、isolated signing、wire contract、Blind Vault admission、public API、configuration 与 health reporting;code review 应保持这些 ownership boundary。

层级仓库路径职责
VPN verifiercrates/aeronyx-server/src/voucher_verifier.rs解析 AVCH、获取 epoch key、验证 finalized voucher 并记录聚合 rollout metrics。
Blind signercrates/aeronyx-blind-issuer/src/signer.rs拥有 identity-free RSA blind-signing policy 与 key-custody abstraction。
Issuer APIcrates/aeronyx-blind-issuer/src/api.rs提供 authenticated bounded signing、public epochs、pressure control 与 aggregate health。
Wire contractcrates/aeronyx-core/src/protocol/blind_vault.rs定义 RFC 9474 admission message、key epoch、spend ID、frame 与 signature。
Blind Vault servicecrates/aeronyx-server/src/services/blind_vault.rs验证 V1/V2 admission 并原子 commit spend 与 lease。
Blind Vault APIcrates/aeronyx-server/src/api/blind_vault.rs以 coarse error 提供 issuers、lease、put、pull、delete routes。
Blind Vault configcrates/aeronyx-server/src/config_blind_vault.rsPin issuer 与 update authority、限制 TTL、验证 monotonic rotation。
Health 与 reportingcrates/aeronyx-server/src/api/vpn_health.rs and management/reporter.rs发布不含 voucher secret 或 wallet traffic 的节点聚合状态。

开发规则

只有 crypto semantics、rollout policy、one-time spend、observability、tests 与所有语言文档一致时才算完成。宁可采用较窄但真实的 claim,也不要把两套 credential system 合并成一句市场承诺。

  1. 命名、代码、telemetry 与文档都要分开 VPN 与 Blind Vault credential semantics。
  2. Missing credential 尚可接受时,不得宣称 VPN voucher 强制启用。
  3. 没有 atomic spend contract 时,不得宣称 VPN 一次性兑换。
  4. Blind signer 不得接收 account、wallet、lease、node 或 redemption context。
  5. 保持 epoch continuity、fail-closed authority verification 与 transaction atomicity。
  6. 只公开 aggregate health,永不记录 credential 或 identity dimension。
  7. 语义变更时同步 source tests、Nodeboard contracts 与所有翻译。

Blind Vault 加密联系人与可选消息归档