Слепо подписанные ваучеры и анонимные данные доступа

AeroNyx29 июня 2026 г.4 мин чтения47 просмотров

Проверенное описание VPN voucher и Blind Vault RFC 9474 admission с границами rollout, replay, issuer и приватности.

AeroNyx применяет blind signature в двух разных путях авторизации. Оба уменьшают identity linkage, но имеют разные rollout и replay guarantees. Здесь зафиксированы Rust main, deployment-controlled возможности и запрещённые выводы из credential.

Два пути credentials

VPN авторизует ClientHello finalized blind-signature credential. Blind Vault V2 создаёт random self-authenticating lease через RFC 9474. V1 — linkable one-time bearer для совместимости, не blind issuance.

ПутьТекущее состояниеReplay/redemption
VPN ClientHello voucherРеализовано; совместимый reject_invalid rolloutНет one-time spend в VoucherVerifier
Blind Vault V2 admissionРеализовано в Rust; deployment controlledAtomic spend и идемпотентный exact retry
Blind Vault V1 admissionТолько совместимость; для нового V2Atomic spend, но issuance linkable

Инвариант приватности

Цель — авторизация без передачи issuance identity redeeming node. Signer, entitlement backend, storage node и console остаются отдельными boundaries; объединение request-level records уничтожает unlinkability.

  • Node проверяет права без wallet/account identity.
  • Signer получает blinded bytes и key ID, не entitlement identity.
  • Secrets, tokens, randomizers, spend/lease IDs и private keys не логируются.
  • Aggregate counters не соединяются с per-user traffic.
  • Это не wallet blind signing неизвестной transaction.

Voucher VPN handshake

Client отправляет bounded AVCH extension. Rust разбирает только fields, получает public key по epoch, кеширует час и проверяет randomized SHA-384 RSA-PSS без 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"
}

Flow является blind только если client ослепляет message до подписи. Обычная подпись identity-linked token не эквивалентна. Token, signature, randomizer, epoch — bearer secrets и не логируются.

Текущая граница rollout VPN

VPN работает в reject_invalid: malformed/invalid отклоняются, missing временно принимается для миграции старых clients. Это не mandatory enforcement.

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

VoucherVerifier проверяет и агрегирует, но не делает atomic spend VPN token. Node one-time redemption отсутствует; sharing, replay, quota, expiry требуют versioned contract.

Blind Vault V2 admission

Blind Vault V2 получает node-signed epochs, blind RFC 9474 message, signature из isolated issuer, finalize локально и вызывает /api/vault/v1/lease. API работает только при включённом Blind Vault и pinned issuers.

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 и ротация ключей

Private operation находится в aeronyx-blind-issuer и получает version, public fingerprint, bounded blinded RSA bytes. Нет account model, storage DB, redemption visibility; custody interface подходит software и будущим HSM/KMS.

Epoch содержит canonical DER, SHA-256 key ID, validity и max lease TTL. Update требует отдельную pinned authority, monotonic generation, continuity и atomic persistence; rollback fail closed.

Atomic spend, идемпотентность и replay

V2 проверяет credential и commit spend ID плюс lease в одной immediate SQLite transaction. Spent credential не создаёт второй lease; exact retry идемпотентен.

V1/V2 используют общую spend table, но schemes разделены: V1 raw ticket linkable, V2 spend ID unlinkable. Эта replay protection не относится к VPN verifier.

Наблюдаемость и Nodeboard

Nodeboard показывает только aggregate validity, capacity, signer health и coarse buckets. Нельзя добавлять token, wallet, lease, request или per-user dimensions.

Разрешённые агрегаты:

  • VPN valid, invalid, missing, malformed totals/ratios
  • issuer key, reload, capacity, rate, timeout, circuit counters
  • Blind Vault aggregate leases, objects, bytes, expiry, cleanup
  • mode, epoch availability, last observation, privacy boundary

Никогда не раскрывать:

  • 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

Угрозы и ограничения

Blind signature снижает linkage, но не timing, region, capacity, client compromise, issuer collection, theft, collusion и traffic correlation; нужны blind relay, encryption, bounded logs и separation.

  • корреляция issuer collection и redemption timing
  • theft, sharing, resale, client compromise
  • VPN replay до versioned policy
  • collusion issuer/backend/node/operator
  • timing, region, capacity, traffic correlation
  • key rollback или broken continuity
  • aggregate telemetry превращается в per-user history

Карта исходного кода

Source разделён на VPN verification, signing, wire contracts, Blind Vault admission/API/config и reporting. Ownership boundaries намеренны.

СлойПуть репозиторияРоль
VPN verifiercrates/aeronyx-server/src/voucher_verifier.rsParse AVCH, discovery epochs, verify voucher, rollout metrics.
Blind signercrates/aeronyx-blind-issuer/src/signer.rsIdentity-free RSA policy и custody abstraction.
Issuer APIcrates/aeronyx-blind-issuer/src/api.rsAuthenticated bounded signing, epochs, pressure, health.
Wire contractscrates/aeronyx-core/src/protocol/blind_vault.rsRFC 9474 contracts, epochs, spend IDs, frames, signatures.
Blind Vault servicecrates/aeronyx-server/src/services/blind_vault.rsV1/V2 admission и atomic spend+lease.
Blind Vault APIcrates/aeronyx-server/src/api/blind_vault.rsIssuers/lease/put/pull/delete routes и coarse errors.
Blind Vault configcrates/aeronyx-server/src/config_blind_vault.rsPinned issuers/authority, TTL, monotonic rotation.
Health/reportingcrates/aeronyx-server/src/api/vpn_health.rs and management/reporter.rsAggregate status без secrets и wallet traffic.

Правила разработки

Изменение завершено, когда crypto semantics, rollout, spend, observability, tests и языки совпадают. Лучше узкое правдивое утверждение.

  1. Разделять VPN и Blind Vault в names/code/telemetry/docs.
  2. Не заявлять mandatory VPN при accepted missing.
  3. Не заявлять one-time VPN без atomic spend.
  4. Не добавлять в signer account/wallet/lease/node/redemption context.
  5. Сохранять continuity, authority fail-closed и atomicity.
  6. Только aggregate health, без credential/identity dimensions.
  7. Обновлять tests, Nodeboard и переводы при изменении semantics.

Blind Vault: зашифрованные контакты и опциональный архив