Voucher bertanda tangan buta dan kredensial akses anonim
Panduan berbasis source untuk VPN voucher dan Blind Vault RFC 9474 admission, mencakup rollout, replay, issuer, dan batas privasi.
AeroNyx memakai blind signature pada dua authorization path berbeda. Keduanya mengurangi identity linkage, tetapi rollout dan replay guarantees berbeda. Halaman ini menyatakan Rust main, kemampuan deployment-controlled, dan hal yang tidak boleh disimpulkan dari credential.
Dua jalur credential
VPN mengizinkan ClientHello dengan finalized blind-signature credential. Blind Vault V2 memakai RFC 9474 untuk membuat random self-authenticating lease. V1 adalah linkable one-time bearer compatibility, bukan blind issuance.
| Jalur | Status saat ini | Model replay/redemption |
|---|---|---|
| VPN ClientHello voucher | Diimplementasikan; rollout kompatibel reject_invalid | Tidak ada one-time spend di VoucherVerifier |
| Blind Vault V2 admission | Diimplementasikan di Rust; deployment controlled | Atomic spend dan idempotent exact retry |
| Blind Vault V1 admission | Hanya kompatibilitas; V2 untuk integrasi baru | Atomic spend tetapi issuance linkable |
Invarian privasi
Tujuan adalah authorize tanpa memberi issuance identity ke redeeming node. Signer, entitlement backend, storage node, dan console harus terpisah; join request-level records merusak unlinkability.
- Node verify hak tanpa wallet/account identity.
- Signer menerima blinded bytes dan key ID, bukan entitlement identity.
- Secrets, tokens, randomizers, spend/lease IDs, private keys tidak di-log.
- Aggregate counters tidak di-join dengan per-user traffic.
- Tidak terkait wallet blind signing transaction tak dikenal.
VPN handshake voucher
Client mengirim bounded AVCH extension. Rust hanya parse fields, mengambil public key per epoch, cache satu jam, dan verify randomized SHA-384 RSA-PSS tanpa 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 hanya blind bila client blind message sebelum signature. Signature normal pada identity-linked token tidak setara. Token, signature, randomizer, epoch adalah bearer secrets dan tidak boleh di-log.
Batas rollout VPN
VPN dalam reject_invalid: malformed/invalid ditolak, missing masih diterima untuk migrasi old client. Ini bukan mandatory enforcement.
mode = reject_invalid
valid | invalid | missing | malformed | total
valid_ratio | invalid_ratio | missing_ratio | malformed_ratio
last_observation | last_error
VoucherVerifier verify dan menyimpan aggregate outcome, tetapi tidak atomic spend VPN token. Belum ada node one-time redemption; sharing, replay, quota, expiry perlu versioned contract.
Blind Vault V2 admission
Blind Vault V2 menemukan node-signed epochs, blind RFC 9474 message, mendapat signature dari isolated issuer, finalize local lalu memakai /api/vault/v1/lease. Public API dan pinned issuers harus aktif.
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
Isolasi issuer dan rotasi key
Private operation ada di aeronyx-blind-issuer, hanya menerima version, public fingerprint, bounded blinded RSA bytes. Tidak ada account model, storage DB, redemption visibility; interface mendukung software dan HSM/KMS nanti.
Epoch membawa canonical DER, SHA-256 key ID, validity, max lease TTL. Update memerlukan pinned authority terpisah, monotonic generation, continuity, atomic persistence; rollback fail closed.
Atomic spend, idempotency, dan replay
V2 verify credential dan commit spend ID plus lease dalam immediate SQLite transaction. Credential spent tidak membuat lease kedua; exact retry idempotent.
V1/V2 berbagi spend table tetapi scheme-separated: V1 raw ticket linkable, V2 spend ID unlinkable. Replay protection ini bukan milik VPN verifier.
Observability dan Nodeboard
Nodeboard hanya menampilkan aggregate validity, capacity, signer health, coarse buckets. Jangan tambah token, wallet, lease, request, atau per-user dimensions.
Bukti agregat yang diizinkan:
- 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
Jangan pernah tampilkan:
- 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
Ancaman dan batasan
Blind signature mengurangi linkage, bukan timing, region, capacity, client compromise, issuer collection, theft, collusion, traffic correlation; tetap perlu blind relay, encryption, bounded logs, separation.
- korelasi issuer collection dan redemption timing
- theft, sharing, resale, client compromise
- VPN replay sebelum versioned policy
- issuer/backend/node/operator collusion
- timing, region, capacity, traffic correlation
- key rollback atau broken continuity
- aggregate telemetry menjadi per-user history
Peta source
Source memisahkan VPN verification, signing, wire contracts, Blind Vault admission/API/config, reporting. Pertahankan ownership boundaries.
| Lapisan | Path repository | Peran |
|---|---|---|
| VPN verifier | crates/aeronyx-server/src/voucher_verifier.rs | Parse AVCH, discovery epoch, verify voucher, rollout metrics. |
| Blind signer | crates/aeronyx-blind-issuer/src/signer.rs | Identity-free RSA policy dan 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 dan atomic spend+lease. |
| Blind Vault API | crates/aeronyx-server/src/api/blind_vault.rs | Issuers/lease/put/pull/delete routes dan coarse errors. |
| Blind Vault config | crates/aeronyx-server/src/config_blind_vault.rs | Pinned issuers/authority, TTL, monotonic rotation. |
| Health/reporting | crates/aeronyx-server/src/api/vpn_health.rs and management/reporter.rs | Aggregate status tanpa secrets atau wallet traffic. |
Aturan pengembangan
Selesai bila crypto semantics, rollout, spend, observability, tests, dan semua bahasa cocok. Pilih claim sempit dan benar.
- Pisahkan VPN dan Blind Vault semantics di names/code/telemetry/docs.
- Jangan klaim mandatory VPN saat missing diterima.
- Jangan klaim one-time VPN tanpa atomic spend.
- Jangan beri signer account/wallet/lease/node/redemption context.
- Jaga continuity, authority fail-closed, atomicity.
- Hanya aggregate health; tanpa credential/identity dimensions.
- Perbarui tests, Nodeboard, terjemahan saat semantics berubah.