盲簽章票券與匿名存取憑證
AeroNyx VPN 票券如何讓節點在無從得知付費帳號的情況下驗證付款、reject_invalid 推行模式目前仍允許什麼、節點與後端仍能看到什麼,以及為何 Blind Vault 准入已實作但尚未部署。
AeroNyx 使用盲簽章票券,讓 VPN 節點能確認連線已付費,而無從得知是哪個帳號付費。此機制目前已在 VPN 上線,運作於仍接受不帶票券連線的相容模式。第二條憑證路徑,即 Blind Vault 准入,存在於節點軟體中,但尚未部署,官方應用程式也未使用。
兩條憑證路徑
| 憑證路徑 | 狀態 | 兌換模型 |
|---|---|---|
| VPN 握手票券 | 已上線。以 reject_invalid 相容模式執行 | 節點檢查簽章。它不追蹤一次性使用 |
| Blind Vault V2 准入 | 已在節點中實作。尚未部署,官方應用程式也未使用 | 一次性使用的紀錄與租約建立以原子方式完成 |
| Blind Vault V1 准入 | 僅供相容,位於同一個已停用的元件中 | 一次性使用,但核發可與兌換連結起來 |
VPN 票券如何核發
- 應用程式產生一個隨機的 32 位元組權杖,並使用 RSA 盲簽章(RSABSSA-SHA384-PSS-Randomized,RFC 9474)在本機將其盲化。
- 應用程式只將盲化後的訊息傳送至 AeroNyx 後端的
/api/voucher/issue/。後端確認已登入的帳號具備資格,簽署盲化後的訊息並回傳簽章。它絕不會看到該權杖。 - 應用程式在本機完成簽章。完成後的票券(權杖、簽章、訊息隨機化值與金鑰週期)是一份不記名憑證,與核發請求之間沒有連結。
依週期分組的公開核發者金鑰公布於:
GET https://api.aeronyx.network/api/voucher/issuer/keys/
節點如何檢查票券
應用程式會在 VPN ClientHello 後附加一個票券擴充:
ClientHello fixed frame
+ magic: AVCH
+ voucher_length: u16 little-endian
+ voucher JSON (maximum 2048 bytes)
{
"token": "base64-32-byte-token",
"signature": "base64-finalized-blind-signature",
"msg_randomizer": "base64-32-byte-randomizer",
"epoch": "issuer-key-epoch"
}
節點只剖析這些欄位。它從上述端點擷取該週期的核發者公鑰,快取一小時,並驗證隨機化的 SHA-384 RSA-PSS 簽章。它不需要任何錢包或帳號識別碼。
推行模式:reject_invalid
- 格式錯誤及在密碼學上無效的票券,會在握手被接受之前遭到拒絕。
- 完全不帶票券的連線仍會被接受,以便舊版用戶端能繼續運作。票券目前尚未強制使用。
- 節點不會記錄已使用的票券。只要票券的核發者金鑰週期仍在公布中,節點就會接受有效票券,不論出示多少次。分享、重放與配額限制由後端執行,而非由節點執行。
節點只回報彙總結果:
mode = reject_invalid
valid | invalid | missing | malformed | total
valid_ratio | invalid_ratio | missing_ratio | malformed_ratio
last_observation | last_error
節點能得知關於您的哪些資訊
「節點絕不會得知您的錢包身分」這項保證只適用於票券連線。
- 票券連線(官方應用程式):應用程式以票券與一把全新的臨時握手金鑰連線。節點能驗證付款,但無法將工作階段與您的錢包或 P2P 身分連結起來。
- 舊版連線:以身分金鑰而非票券進行驗證的用戶端,會在握手中傳送該金鑰。
在這兩種情況下,節點都會在名為 client_wallet 的欄位中,將工作階段的握手公鑰連同工作階段時間與位元組數回報給 AeroNyx 後端。對於票券連線,該值是臨時金鑰。對於舊版連線,該值是用戶端的身分金鑰。節點營運者可以在 Nodeboard 中看到逐工作階段的流量與這些金鑰。
票券也無法隱藏其他所有資訊。如同任何 VPN,節點仍能看到您的 IP 位址,並且作為出口,能看到您的目的地與 DNS。當應用程式預留每日連線時,後端也會記錄該帳號在該時間連線,但不會記錄它使用了哪個節點。請參閱 VPN 比較 與 信任中心。
Blind Vault 准入(尚未部署)
Blind Vault 是一個節點元件,用於在匿名租約下儲存經用戶端加密的物件。其說明請參閱 MemChain 與 Blind Vault。其准入設計如下:
- V2:用戶端將一則 RFC 9474 准入訊息盲化。授權服務負責批准核發,而一個獨立的簽署程序(
aeronyx-blind-issuer)只簽署盲化後的位元組。該程序沒有帳號資料庫、儲存空間,也看不到兌換情況。節點依據釘選的公鑰週期驗證完成後的憑證,並在單一 SQLite 交易中記錄使用標記,同時建立一份隨機、自我驗證的租約。已使用的憑證無法建立第二份租約。重試完全相同的請求會回傳相同的租約。 - V1:一種使用相同一次性使用資料表的不記名票證。節點會儲存該票證的身分,因此兌換可與核發連結起來。它僅為相容而保留。
只有在 Blind Vault 及其公開 API 都啟用時,節點才會開放這些路由。兩者預設皆為關閉。
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
目前狀態:Blind Vault 尚未部署於正式環境節點,官方應用程式不會呼叫這些路由,AeroNyx 後端也沒有 Blind Vault 授權端點。Blind Vault 不是備份、封存或儲存產品,目前也沒有提供任何此類產品。
可觀察性
營運者介面只顯示彙總的憑證健康狀態:
- VPN 的
valid、invalid、missing與malformed總數與比例,以及推行模式 - 核發者金鑰的可用性與概略的失敗分組
它們絕不顯示票券權杖、簽章、隨機化值、盲化訊息或使用 ID。工作階段層級的流量與握手金鑰屬於另一個營運者檢視畫面,如上所述。
威脅模型與限制
盲簽章能切斷核發請求與票券之間的連結。但它無法消除以下風險:
- 後端的核發或連線預留紀錄與節點的工作階段紀錄之間的時間關聯,尤其是在同一方能同時看到兩者時
- 節點能看到您的 IP 位址、目的地與 DNS
- 在金鑰週期公布期間,票券遭竊、分享或轉售,因為節點不強制一次性使用
- 不帶票券的連線,在
reject_invalid模式下仍會被接受 - 核發者金鑰輪替錯誤或用戶端遭入侵
原始碼對照
| 層級 | 節點儲存庫中的路徑 | 角色 |
|---|---|---|
| VPN 驗證器 | crates/aeronyx-server/src/voucher_verifier.rs | 剖析 AVCH、擷取週期金鑰、驗證票券並記錄彙總結果 |
| 盲簽署器 | crates/aeronyx-blind-issuer/src/signer.rs、api.rs | 為 Blind Vault V2 執行不含身分的 RSA 盲簽署 |
| 傳輸格式契約 | crates/aeronyx-core/src/protocol/blind_vault.rs | RFC 9474 准入訊息、金鑰週期與使用 ID |
| Blind Vault 服務與 API | crates/aeronyx-server/src/services/blind_vault.rs、api/blind_vault.rs | 准入、原子性使用與租約、物件路由 |
| Blind Vault 設定 | crates/aeronyx-server/src/config_blind_vault.rs | 預設關閉;核發者釘選與輪替規則 |
節點軟體以 AGPL-3.0 授權開源於 github.com/AeroNyxNetwork/AeroNyx。應用程式並非開源。
<!-- faq:start -->常見問題
AeroNyx VPN 節點知道我用哪個錢包付款嗎?
對於官方應用程式所使用的票券連線,不知道。節點驗證的是一張盲簽章票券與一把臨時握手金鑰,兩者都與您的錢包沒有連結。以身分金鑰連線的舊版用戶端,則會向節點揭露該金鑰。
票券可以使用多次嗎?
可以。節點會依據票券週期所公布的金鑰驗證簽章,但不會保留已使用票券的清單。配額由後端執行。
連線需要票券嗎?
目前還不需要。節點會拒絕格式錯誤或無效的票券,但仍接受完全不帶票券的連線,以便舊版用戶端能繼續運作。
票券核發者金鑰公布在哪裡?
它們公布於 https://api.aeronyx.network/api/voucher/issuer/keys/,依週期分組。節點會快取這些金鑰一小時。
應用程式中可以使用 Blind Vault 嗎?
不可以。Blind Vault 准入已在節點軟體中實作,但預設停用、尚未部署,官方應用程式也未使用。AeroNyx 不提供任何備份或儲存產品。
<!-- faq:end -->