ブラインド署名バウチャーと匿名アクセス資格情報
AeroNyx VPN の blind voucher と Blind Vault RFC 9474 admission を、rollout、replay、issuer、privacy boundary までソースに基づいて説明します。
AeroNyx は異なる 2 つの認可経路で blind signature 技術を使います。どちらも identity linkage を減らしますが、rollout と replay guarantee は同じではありません。このページは Rust main の実装、deployment-controlled な範囲、credential から推論してはいけない情報を明確にします。
2 つの資格情報経路
VPN は finalized blind-signature credential で ClientHello を認可します。Blind Vault V2 は RFC 9474 credential で random self-authenticating encrypted-storage lease を作ります。V1 admission は linkable one-time bearer compatibility で、blind issuance ではありません。
| 資格情報経路 | 現在の状態 | Replay/償還モデル |
|---|---|---|
| VPN ClientHello voucher | 実装済み、reject_invalid compatibility rollout | VoucherVerifier に one-time spend なし |
| Blind Vault V2 admission | Rust 実装済み、deployment/config controlled | Atomic one-time spend と idempotent exact retry |
| Blind Vault V1 admission | Compatibility のみ、新規統合は V2 推奨 | Atomic one-time spend だが issuance は linkable |
プライバシー不変条件
目標は issuance identity を redeeming node に渡さず認可することです。Signer、entitlement backend、storage node、operator console は別の trust/data boundary であり、request-level record を結合すると unlinkability が失われます。
- Redeeming node は wallet/account identity なしで権利を検証します。
- Blind signer は blinded bytes と public key ID のみ受け取り entitlement identity を受けません。
- Credential secret、token、randomizer、spend/lease ID、private key を log/Nodeboard に出しません。
- Synthetic/aggregate counter を per-user traffic と join しません。
- Wallet の blind-signing warning とは無関係で、未知の transaction を承認する仕組みではありません。
VPN ハンドシェイクバウチャー
Client は bounded AVCH trailing extension を送ります。Rust は credential fields だけを解析し、epoch public key を設定済み issuer directory から取得して 1 時間 cache し、randomized SHA-384 RSA-PSS blind signature を検証します。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"
}
Client が entitlement service より前に message を blind して初めて issuer flow は blind になります。Identity-linked token への通常署名は同じではありません。Final token、signature、randomizer、epoch は bearer secret であり log 禁止です。
VPN の現在の展開境界
VPN は現在 reject_invalid compatibility mode です。Malformed/invalid voucher は handshake 前に拒否しますが、missing voucher は old client 移行のため受け入れます。Mandatory enforcement と表現してはいけません。
mode = reject_invalid
valid | invalid | missing | malformed | total
valid_ratio | invalid_ratio | missing_ratio | malformed_ratio
last_observation | last_error
VoucherVerifier は signature と aggregate outcome を検証しますが、VPN token を atomic spend せず one-time table も持ちません。Node-enforced one-time redemption は未実装で、sharing、replay、quota、expiry は versioned issuance contract の課題です。
Blind Vault V2 admission
Blind Vault V2 は node-signed issuer epochs を取得し、RFC 9474 message を blind、isolated issuer の signature を local finalize して /api/vault/v1/lease に送ります。Public API と pinned issuer が有効な deployment でのみ動作します。
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
Issuer の分離と鍵ローテーション
Private operation は別 process aeronyx-blind-issuer にあります。Input は version、public key fingerprint、bounded blinded RSA bytes のみで、account model、storage DB、redemption visibility を持ちません。Software key と将来の HSM/KMS に同じ custody interface を使えます。
Public epoch は canonical DER、SHA-256 key ID、validity、max lease TTL を持ちます。Update は別の pinned authority、monotonic generation、active epoch continuity、atomic persistence が必要で、rollback と still-valid epoch removal は fail closed です。
Atomic spend、冪等性、replay
V2 は finalized credential verification、domain-separated spend ID、lease creation を 1 つの immediate SQLite transaction で commit します。Spent credential は 2 つ目を作れず、同じ既存 lease への exact retry は idempotent です。
V1/V2 は one-time spend table を共有しますが scheme-separated です。V1 raw ticket は linkable、V2 spend ID は unlinkable。この replay protection は Blind Vault のもので、VPN VoucherVerifier には適用できません。
可観測性と Nodeboard
Operator UI は aggregate validity、capacity、signer health、coarse failure bucket のみ表示できます。last_observation や last_error に token、wallet、lease、request、per-user dimension を追加してはいけません。
許可される集約証拠:
- VPN
valid/invalid/missing/malformedtotals と ratios - Issuer active-key、key-count、reload、capacity、rate、timeout、circuit-breaker counters
- Blind Vault aggregate lease、live-object、ciphertext-byte、expiry、cleanup health
- Coarse mode、epoch availability、last observation、privacy-boundary status
公開禁止:
- raw voucher token、signature、randomizer、blinded message、spend ID
- wallet/account/payment/membership/social identity
- per-user redemption history、lease/object/capability/request ID
- client public IP、destination、DNS、route、message、browsing metadata
- issuer private key、provider error、ciphertext、plaintext、wallet-level traffic
脅威モデルと制限
Blind signature は issuance/redemption linkage を減らすだけです。Timing、region、capacity、client compromise、issuer collection、credential theft、collusion、traffic correlation は blind relay、encryption、bounded logs、route diversity、deployment separation が必要です。
- issuer collection と redemption timing の相関
- credential theft/sharing/resale/client storage compromise
- versioned redemption policy 前の VPN voucher replay
- malicious/colluding issuer、backend、node、operator
- timing/region/capacity/traffic correlation
- key rotation rollback、inactive epoch、broken continuity
- aggregate telemetry が per-user history に拡張されること
ソースマップ
Source は意図的に VPN verification、isolated signing、wire contract、Blind Vault admission/API/config、health reporting に分離されています。Code review でも ownership boundary を維持します。
| レイヤー | リポジトリパス | 役割 |
|---|---|---|
| VPN verifier | crates/aeronyx-server/src/voucher_verifier.rs | AVCH parse、epoch key discovery、final voucher verify、aggregate rollout metrics。 |
| Blind signer | crates/aeronyx-blind-issuer/src/signer.rs | Identity-free RSA blind-signing policy と custody abstraction。 |
| Issuer API | crates/aeronyx-blind-issuer/src/api.rs | Authenticated bounded signing、public epochs、pressure control、aggregate health。 |
| Wire contracts | crates/aeronyx-core/src/protocol/blind_vault.rs | RFC 9474 admission、key epoch、spend ID、frame、signature contract。 |
| Blind Vault service | crates/aeronyx-server/src/services/blind_vault.rs | V1/V2 admission と atomic spend+lease。 |
| Blind Vault API | crates/aeronyx-server/src/api/blind_vault.rs | Issuers/lease/put/pull/delete route と coarse error。 |
| Blind Vault config | crates/aeronyx-server/src/config_blind_vault.rs | Issuer/update authority pin、TTL bound、monotonic rotation validation。 |
| Health/reporting | crates/aeronyx-server/src/api/vpn_health.rs and management/reporter.rs | Voucher secret/wallet traffic なしの aggregate status。 |
開発ルール
Crypto semantics、rollout policy、one-time spend、observability、tests、全言語 docs が一致して完了です。異なる credential system を 1 つの marketing promise にまとめず、狭く正確な claim を選びます。
- VPN と Blind Vault semantics を name/code/telemetry/docs で分離する。
- Missing を許可中は mandatory VPN voucher と宣言しない。
- Atomic spend contract なしに VPN one-time redemption を宣言しない。
- Blind signer に account/wallet/lease/node/redemption context を入れない。
- Epoch continuity、fail-closed authority、transaction atomicity を保つ。
- Aggregate health のみ公開し credential/identity dimension を記録しない。
- Semantic change 時に tests、Nodeboard contracts、全翻訳を更新する。