盲簽名憑證與匿名存取資格

AeroNyx2026年6月29日6 分鐘閱讀66 次瀏覽

依照源碼說明 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 加密聯絡人與可選訊息封存