盲簽章票券與匿名存取憑證

AeroNyx6 分鐘閱讀

AeroNyx VPN 票券如何讓節點在無從得知付費帳號的情況下驗證付款、reject_invalid 推行模式目前仍允許什麼、節點與後端仍能看到什麼,以及為何 Blind Vault 准入已實作但尚未部署。

AeroNyx 使用盲簽章票券,讓 VPN 節點能確認連線已付費,而無從得知是哪個帳號付費。此機制目前已在 VPN 上線,運作於仍接受不帶票券連線的相容模式。第二條憑證路徑,即 Blind Vault 准入,存在於節點軟體中,但尚未部署,官方應用程式也未使用。

兩條憑證路徑

憑證路徑狀態兌換模型
VPN 握手票券已上線。以 reject_invalid 相容模式執行節點檢查簽章。它不追蹤一次性使用
Blind Vault V2 准入已在節點中實作。尚未部署,官方應用程式也未使用一次性使用的紀錄與租約建立以原子方式完成
Blind Vault V1 准入僅供相容,位於同一個已停用的元件中一次性使用,但核發可與兌換連結起來

VPN 票券如何核發

  1. 應用程式產生一個隨機的 32 位元組權杖,並使用 RSA 盲簽章(RSABSSA-SHA384-PSS-Randomized,RFC 9474)在本機將其盲化。
  2. 應用程式只將盲化後的訊息傳送至 AeroNyx 後端的 /api/voucher/issue/。後端確認已登入的帳號具備資格,簽署盲化後的訊息並回傳簽章。它絕不會看到該權杖。
  3. 應用程式在本機完成簽章。完成後的票券(權杖、簽章、訊息隨機化值與金鑰週期)是一份不記名憑證,與核發請求之間沒有連結。

依週期分組的公開核發者金鑰公布於:

text
GET https://api.aeronyx.network/api/voucher/issuer/keys/

節點如何檢查票券

應用程式會在 VPN ClientHello 後附加一個票券擴充:

text
ClientHello fixed frame
  + magic: AVCH
  + voucher_length: u16 little-endian
  + voucher JSON (maximum 2048 bytes)
json
{
  "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

  • 格式錯誤及在密碼學上無效的票券,會在握手被接受之前遭到拒絕。
  • 完全不帶票券的連線仍會被接受,以便舊版用戶端能繼續運作。票券目前尚未強制使用。
  • 節點不會記錄已使用的票券。只要票券的核發者金鑰週期仍在公布中,節點就會接受有效票券,不論出示多少次。分享、重放與配額限制由後端執行,而非由節點執行。

節點只回報彙總結果:

text
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 都啟用時,節點才會開放這些路由。兩者預設皆為關閉。

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

目前狀態: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.rsRFC 9474 准入訊息、金鑰週期與使用 ID
Blind Vault 服務與 APIcrates/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 -->