Voucher ký mù và thông tin truy cập ẩn danh
Hướng dẫn được đối chiếu source cho VPN voucher và Blind Vault RFC 9474 admission, gồm rollout, replay, issuer và ranh giới riêng tư.
AeroNyx dùng blind signature trong hai authorization path khác nhau. Cả hai giảm identity linkage nhưng rollout và replay guarantees không giống nhau. Trang này nêu đúng Rust main, phần do deployment kiểm soát và thông tin không được suy ra từ credential.
Hai đường credential
VPN dùng finalized blind-signature credential để cho phép ClientHello. Blind Vault V2 dùng RFC 9474 tạo random self-authenticating lease. V1 là linkable one-time bearer compatibility, không phải blind issuance.
| Đường | Trạng thái hiện tại | Mô hình replay/redemption |
|---|---|---|
| VPN ClientHello voucher | Đã triển khai; rollout tương thích reject_invalid | Không one-time spend trong VoucherVerifier |
| Blind Vault V2 admission | Đã triển khai Rust; deployment controlled | Atomic spend và idempotent exact retry |
| Blind Vault V1 admission | Chỉ tương thích; dùng V2 cho tích hợp mới | Atomic spend nhưng issuance linkable |
Bất biến riêng tư
Mục tiêu là authorize mà không đưa issuance identity cho redeeming node. Signer, entitlement backend, storage node và console phải là boundary riêng; join request-level records sẽ phá unlinkability.
- Node verify quyền mà không có wallet/account identity.
- Signer nhận blinded bytes và key ID, không nhận entitlement identity.
- Secrets, tokens, randomizers, spend/lease IDs, private keys không được log.
- Aggregate counters không join với per-user traffic.
- Không liên quan wallet blind signing transaction không rõ.
VPN handshake voucher
Client gửi bounded AVCH extension. Rust chỉ parse fields, lấy public key theo epoch, cache một giờ và verify randomized SHA-384 RSA-PSS mà không cần wallet/account ID.
ClientHello fixed frame
+ magic: AVCH
+ voucher_length: u16 little-endian
+ voucher JSON (maximum 2048 bytes)
{
"token": "base64-final-credential-message",
"signature": "base64-finalized-blind-signature",
"msg_randomizer": "base64-32-byte-randomizer",
"epoch": "issuer-key-epoch"
}
Flow chỉ blind khi client blind message trước khi ký. Signature thường trên identity-linked token không tương đương. Token, signature, randomizer, epoch là bearer secrets và không được log.
Ranh giới rollout VPN
VPN đang ở reject_invalid: malformed/invalid bị từ chối, missing vẫn được nhận để migrate old client. Đây không phải mandatory enforcement.
mode = reject_invalid
valid | invalid | missing | malformed | total
valid_ratio | invalid_ratio | missing_ratio | malformed_ratio
last_observation | last_error
VoucherVerifier verify và ghi aggregate outcome nhưng không atomic spend VPN token. Chưa có node one-time redemption; sharing, replay, quota, expiry cần versioned contract.
Blind Vault V2 admission
Blind Vault V2 tìm node-signed epochs, blind RFC 9474 message, lấy signature từ isolated issuer, finalize local rồi gọi /api/vault/v1/lease. Public API và pinned issuers phải bật.
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
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
Cô lập issuer và xoay khóa
Private operation ở process aeronyx-blind-issuer, chỉ nhận version, public fingerprint và bounded blinded RSA bytes. Không có account model, storage DB, redemption visibility; interface hỗ trợ software và HSM/KMS tương lai.
Epoch mang canonical DER, SHA-256 key ID, validity và max lease TTL. Update cần pinned authority riêng, monotonic generation, continuity và atomic persistence; rollback fail closed.
Atomic spend, idempotency và replay
V2 verify credential và commit spend ID cùng lease trong immediate SQLite transaction. Credential đã spend không tạo lease thứ hai; exact retry là idempotent.
V1/V2 dùng chung spend table nhưng scheme-separated: V1 raw ticket linkable, V2 spend ID unlinkable. Replay protection này không thuộc VPN verifier.
Observability và Nodeboard
Nodeboard chỉ hiển thị aggregate validity, capacity, signer health và coarse buckets. Không thêm token, wallet, lease, request hoặc per-user dimensions.
Bằng chứng tổng hợp được phép:
- VPN
valid/invalid/missing/malformedtotals/ratios - issuer key/reload/capacity/rate/timeout/circuit counters
- Blind Vault aggregate lease/object/bytes/expiry/cleanup health
- mode, epoch availability, last observation, privacy boundary
Không bao giờ lộ:
- tokens, signatures, randomizers, blinded messages, spend IDs
- wallet/account/payment/membership/social identity
- per-user history, lease/object/capability/request IDs
- client IP, destination, DNS, route, message, browsing metadata
- private keys, provider errors, ciphertext, plaintext, wallet traffic
Mối đe dọa và giới hạn
Blind signature giảm linkage chứ không che timing, region, capacity, client compromise, issuer collection, theft, collusion, traffic correlation; vẫn cần blind relay, encryption, bounded logs và separation.
- issuer collection tương quan redemption timing
- theft, sharing, resale, client compromise
- VPN replay trước versioned policy
- issuer/backend/node/operator collusion
- timing, region, capacity, traffic correlation
- key rollback hoặc broken continuity
- aggregate telemetry thành per-user history
Bản đồ source
Source tách VPN verification, signing, wire contracts, Blind Vault admission/API/config và reporting. Phải giữ ownership boundaries.
| Lớp | Path repository | Vai trò |
|---|---|---|
| VPN verifier | crates/aeronyx-server/src/voucher_verifier.rs | Parse AVCH, khám phá epoch, verify voucher, rollout metrics. |
| Blind signer | crates/aeronyx-blind-issuer/src/signer.rs | Identity-free RSA policy và custody abstraction. |
| Issuer API | crates/aeronyx-blind-issuer/src/api.rs | Authenticated bounded signing, epochs, pressure, health. |
| Wire contracts | crates/aeronyx-core/src/protocol/blind_vault.rs | RFC 9474 contracts, epochs, spend IDs, frames, signatures. |
| Blind Vault service | crates/aeronyx-server/src/services/blind_vault.rs | V1/V2 admission và atomic spend+lease. |
| Blind Vault API | crates/aeronyx-server/src/api/blind_vault.rs | Issuers/lease/put/pull/delete routes và coarse errors. |
| Blind Vault config | crates/aeronyx-server/src/config_blind_vault.rs | Pinned issuers/authority, TTL và monotonic rotation. |
| Health/reporting | crates/aeronyx-server/src/api/vpn_health.rs and management/reporter.rs | Aggregate status không secrets hoặc wallet traffic. |
Quy tắc phát triển
Chỉ hoàn tất khi crypto semantics, rollout, spend, observability, tests và mọi ngôn ngữ đồng nhất. Chọn claim hẹp nhưng đúng.
- Tách VPN và Blind Vault semantics trong names/code/telemetry/docs.
- Không tuyên bố mandatory VPN khi missing còn được nhận.
- Không tuyên bố one-time VPN khi chưa có atomic spend.
- Không đưa account/wallet/lease/node/redemption context vào signer.
- Giữ continuity, authority fail-closed và atomicity.
- Chỉ aggregate health; không credential/identity dimensions.
- Cập nhật tests, Nodeboard và bản dịch khi semantics đổi.