Penemuan Node dan Relay Multi-Lompatan Terenkripsi

AeroNyx9 menit baca

Bagaimana node AeroNyx saling menemukan dengan deskriptor bertanda tangan, menyimpan Directory Chain yang dicerminkan, dan meneruskan payload terenkripsi berlapis dari lompatan ke lompatan. Chat sungguhan menggunakan relay pusat secara default; rute onion dua lompatan bersifat opt-in.

Node AeroNyx saling menemukan melalui deskriptor bertanda tangan yang memiliki masa berlaku, dan dapat meneruskan payload terenkripsi end-to-end dari lompatan ke lompatan, dengan setiap relay hanya melepas lapisan enkripsinya sendiri. Saat ini, chat pengguna sungguhan melewati relay pusat AeroNyx (RelayWS) secara default. Merutekan chat melalui node adalah pengaturan opt-in di aplikasi.

Apa yang berjalan saat ini

KemampuanStatus
Penemuan node bertanda tangan dan gossip antar-peerBerjalan di node produksi
Directory Chain (riwayat deskriptor bertanda tangan per node, dicerminkan antar-node)Berjalan di node produksi
Relay onion dua lompatan antar-nodeBerjalan di node produksi. Di aplikasi bersifat opt-in dan nonaktif secara default
Kotak surat anonim yang dijangkau melalui relay onionBerfungsi di node produksi. Chat biasa tidak menggunakannya. Aplikasi memiliki fitur penitipan kotak surat beta yang terpisah
Rute dengan tiga lompatan relayKebijakan dan probe-nya ada di kode sumber node. Aplikasi tidak menggunakannya
Endpoint nama host https:// untuk node di balik gatewayAda di rilis node saat ini
TLS terikat identitas pada port API publik, tanpa nama domain atau otoritas sertifikatBerjalan di node produksi. Antar-node menggunakannya saat peer mengiklankannya. Dukungan di aplikasi sedang dikembangkan
Penyerahan akhir relay onion ke kotak masuk relay milik penerimaBerjalan di node produksi
Seed yang disematkan operator (discovery.pinned_seeds)Ada di rilis node saat ini
Transport chat defaultLayanan RelayWS pusat yang dioperasikan oleh AeroNyx

Jalur terpusat dan terdesentralisasi berjalan berdampingan.

Cara kerja penemuan

Setiap node menerbitkan deskriptor yang ditandatangani dengan kunci identitas Ed25519-nya. Deskriptor mencakup ID node, waktu terbit dan kedaluwarsa, endpoint publik opsional, penanda kemampuan (seperti relay tengah onion atau relay chat), petunjuk kapasitas kasar, dan kunci yang digunakan untuk enkripsi onion. Node menolak deskriptor yang sudah kedaluwarsa atau membawa tanda tangan yang tidak valid.

  • Gossip dibatasi. Pertukaran peer dibatasi lajunya dan diatur oleh kebijakan, dan pesan memiliki batas ukuran.
  • Pemulihan setelah dimulai ulang. Node menyimpan cache peer lokal dan beralih ke endpoint seed yang dikonfigurasi setelah dimulai ulang. Operator juga dapat menyematkan seed (lihat bagian seed yang disematkan).
  • Pemilihan rute. Hanya deskriptor baru dengan endpoint dan kunci onion yang dapat digunakan yang dipertimbangkan sebagai kandidat relay.

Endpoint apa yang boleh disebut dalam deskriptor

Tanda tangan membuktikan siapa yang menerbitkan deskriptor, bukan bahwa endpoint-nya aman untuk dihubungi. Karena itu, node hanya menerima dua bentuk endpoint:

  • alamat IP publik melalui http atau https; rentang loopback, privat, link-local, CGNAT, dokumentasi, multicast, dan cadangan ditolak;
  • URL https:// dengan nama DNS publik. Nama berlabel tunggal, localhost, dan akhiran privat seperti .local, .internal, dan .home.arpa ditolak.

Nama host diresolusi saat koneksi dibuat melalui resolver yang membuang setiap alamat non-publik, sehingga sebuah nama tidak dapat diarahkan ke node itu sendiri, jaringan privat, atau layanan metadata cloud. Klien peer juga mengabaikan pengaturan proxy dan tidak pernah mengikuti pengalihan.

Bentuk nama host ada agar node yang tidak memiliki alamat IP sendiri, seperti node TEE di balik gateway cloud, dapat ikut serta.

Seed yang disematkan

Node yang dimulai tanpa snapshot dari operator hanya memercayai identitas yang sudah dimilikinya, sehingga bisa berakhir hanya memercayai dirinya sendiri. Untuk kasus itu, operator dapat menyebutkan identitas yang diharapkan pada suatu alamat:

toml
[discovery]
pinned_seeds = ["<64-hex node id>@<public ip>:<port>"]
  • Identitas yang disematkan baru diterima untuk pertama kalinya setelah pertukaran melalui TLS terikat identitas yang disematkan pada identitas tersebut.
  • Setiap deskriptor berikutnya dari identitas yang disematkan, dari sumber mana pun, harus mempertahankan alamat yang disematkan dan mengiklankan TLS terikat identitas.
  • Kepercayaan tidak menular: deskriptor lain dalam jawaban sebuah seed tetap menjadi kandidat yang tidak dipercaya.
  • Sematan yang telah dihapus tidak dapat kembali dari cache atau cadangan lama.

Directory Chain

Setiap node juga menyimpan riwayat bertanda tangan dan bertautan hash dari peristiwa deskriptornya sendiri, yang disebut Directory Chain miliknya. Node lain dapat mencerminkan riwayat tersebut, mengambil objek deskriptor, dan meminta bukti penyertaan untuk deskriptor tertentu. Peer yang ditetapkan operator dapat menandatangani checkpoint pengamatan atas riwayat yang telah mereka lihat.

Tidak ada buku besar global dan tidak ada koordinator tunggal: setiap node menandatangani riwayatnya sendiri, dan node lain mencerminkan serta memeriksanya.

TLS terikat identitas

Menjangkau node melalui HTTPS biasanya memerlukan nama domain dan sertifikat dari otoritas sertifikat, sedangkan sebagian besar node AeroNyx hanya dapat dijangkau melalui alamat IP. Sebagai gantinya, node membuktikan sendiri endpoint HTTPS-nya dengan identitas Ed25519-nya.

  • Cara kerjanya. Node membuat kunci TLS ECDSA P-256 biasa dan sertifikat yang ditandatangani sendiri. Satu nama alternatif subjek membawa sebuah pengikatan, aeronyx-tls-binding:v1:<node id>:<expiry>:<signature>, dengan tanda tangan dibuat oleh kunci identitas node atas digest terpisah-domain dari kunci publik sertifikat itu sendiri, ID node, dan waktu kedaluwarsa. Handshake TLS 1.3 membuktikan bahwa node memegang kunci sertifikat. Kunci identitas tidak pernah menandatangani handshake.
  • Apa yang diperiksa klien. Verifier hanya menerima sertifikat untuk node yang memang ingin dijangkaunya: tepat satu pengikatan, ID node yang diharapkan, belum kedaluwarsa, sisa masa berlaku paling lama 31 hari, dan tanda tangan yang valid atas kunci sertifikat ini. Sertifikat yang diterbitkan oleh otoritas sertifikat tidak memenuhi pemeriksaan ini.
  • Port yang sama. Port API publik (8422/TCP) melayani keduanya: koneksi yang dimulai dengan handshake TLS mendapat TLS, dan yang lainnya mendapat HTTP biasa seperti sebelumnya. Fitur ini aktif secara default (discovery.public_api_identity_tls).
  • Antar-node. Node yang deskriptor bertanda tangannya mengiklankan fitur protokol anpf1-ibt1 melayani TLS terikat identitas. Peer yang melihat fitur tersebut harus menjangkau node itu melalui TLS yang disematkan pada identitasnya dan tidak pernah beralih ke HTTP biasa. Fitur ini tercakup dalam tanda tangan deskriptor, sehingga penyerang jaringan tidak dapat menghapusnya untuk memaksa penurunan versi. Jika beberapa identitas mengklaim endpoint yang sama, tidak ada alamat TLS yang dihasilkan dan permintaan gagal secara tertutup. Node lama tanpa fitur ini, dan endpoint gateway berbasis nama DNS, tetap berperilaku seperti sebelumnya.
  • Referensi. Kode sumber dan vektor uji yang dibekukan: aeronyx-node-tls.

Dampaknya, informasi rute lompatan onion, gossip, sinkronisasi direktori, dan lalu lintas saksi antar-node tidak lagi dapat dibaca di jaringan. Dukungan di aplikasi untuk terhubung ke node dengan cara ini sedang dikembangkan.

Cara kerja relay multi-lompatan

  1. Pengirim membungkus payload dalam satu lapisan enkripsi per lompatan, menggunakan kunci onion yang dipublikasikan oleh setiap relay.
  2. Setiap relay memeriksa tanda tangan, stempel waktu, dan status replay dari lompatan sebelumnya, melepas lapisannya sendiri, dan meneruskan blob buram yang tersisa. Relay tidak pernah melihat lapisan di dalamnya.
  3. Node akhir (terminal) menyerahkan pesan ke kotak masuk relay milik penerima (secara default relay pusat) dan, hanya setelah relay menerimanya, mengembalikan tanda terima bertanda tangan. Tanda terima tersebut mengikat ID rute, komitmen terhadap payload, identitas node terminal, dan waktu pengiriman. Tanda terima membuktikan bahwa pesan telah diterima ke dalam penyimpanan relay, bukan bahwa penerima telah membacanya. Node yang penyerahannya dinonaktifkan menyimpan pesan di penyimpanannya sendiri dan menandatangani jenis tanda terima yang sama, sehingga tanda terima saja tidak membedakan kedua kasus tersebut.

Apa yang dilihat setiap pihak

PihakMelihatTidak melihat
Node masukAlamat jaringan pengirim, satu lapisan tersegel, dan lompatan berikutnyaUntuk siapa pesan itu ditujukan, dan isinya
Node terminalKunci pengirim dan penerima serta ciphertextAlamat jaringan pengirim, dan isinya
Relay pusat (menerima penyerahan)Apa yang ditunjukkan oleh setiap pengiriman: kunci pengirim dan penerima, stempel waktu, dan ukuranAlamat jaringan pengirim, dan isinya

Tidak ada satu node pun yang menghubungkan alamat jaringan Anda dengan siapa yang Anda kirimi pesan. Node terminal dan relay pusat sama-sama melihat siapa menulis kepada siapa.

Protokol menerima paling banyak tiga lompatan relay yang terverifikasi. Rute privasi aplikasi menggunakan dua. Batas penyalahgunaan pada relay dijelaskan di Penjaga Penyalahgunaan Relay Buta.

Chat di aplikasi

  • Default: pesan melewati layanan RelayWS pusat. Isi pesan dienkripsi end-to-end, tetapi layanan tersebut menangani metadata pengiriman. Lihat Integrasi klien relay chat.
  • Rute privasi (opt-in, nonaktif secara default): saat diaktifkan dan rute sudah siap, aplikasi mengirim pesan satu lawan satu melalui rute onion dua lompatan terlebih dahulu. Jika tidak ada rute onion yang menerima pesan tersebut, aplikasi menahannya di perangkat dan tidak menggunakan relay standar kecuali Anda menyetujuinya untuk pesan tersebut.
  • Kotak surat anonim (beta): fitur penitipan terpisah yang hanya berfungsi selama terhubung ke jaringan privasi. Percakapan biasa tidak menggunakannya.

Ukuran pengambilan kotak surat anonim

Hasil pengambilan kotak surat dulunya berupa satu citra tetap sebesar 163.130 byte apa pun itemnya, sehingga pesan pendek memakan respons sekitar 160 KiB. Pengambilan versi 2, yang dinegosiasikan melalui fitur protokol bertanda tangan anpf1-ampc1, mengisi item tersegel hingga ukuran terkecil dari lima kelas ukuran (4.204, 16.492, 65.644, atau 131.180 byte, atau maksimum codec). Item sebesar 4.096 byte kini dikirim sebagai 4.518 byte.

Node TEE

Satu node produksi berjalan di dalam lingkungan eksekusi tepercaya Phala Cloud (dstack di Intel TDX). Node ini hanya berfungsi sebagai kotak surat anonim dan relay onion: VPN-nya dinonaktifkan, MemChain nonaktif, dan kunci identitasnya berasal dari layanan kunci dstack. Node ini hanya dapat dijangkau melalui nama host TLS di gateway, itulah sebabnya endpoint nama host ditambahkan. Aplikasi saat ini tidak memverifikasi atestasi TEE node tersebut.

Status langsung

Status agregat jaringan dipublikasikan di:

text
GET https://api.aeronyx.network/api/privacy_network/vpn/public/network-stats/

Agregat relay dan penemuan muncul di bawah data.protocol_status, misalnya peer_store.blind_relay dan peer_store.peer_quorum. Perhatikan dua hal saat membacanya:

  • Agregat tingkat node hanya menghitung node dengan heartbeat dalam 120 detik terakhir, sehingga node yang offline akan hilang dari hitungan seperti protocol_status.reported_nodes. network.total_nodes dan network.vpn_nodes tetap menghitung node aktif yang terdaftar, baik online maupun tidak.
  • Penghitung probe sintetis (probe_*, two_hop_probe_*) mengukur kesehatan jalur. Penghitung ini bukan lalu lintas pengguna.

Respons publik hanya berisi jumlah, kelompok status, dan stempel waktu. Respons tersebut tidak pernah menyertakan ID node, endpoint, ID rute, payload, penerima, alamat IP klien, data DNS, atau sisi graf sosial. Lihat Statistik jaringan dan batas privasi.

<!-- faq:start -->

Pertanyaan yang sering diajukan

Apakah pesan chat AeroNyx saya melewati node terdesentralisasi?

Tidak secara default. Pesan melewati layanan RelayWS pusat. Anda dapat mengaktifkan rute privasi di aplikasi, yang mengirim pesan satu lawan satu melalui rute onion dua lompatan melalui node saat rute sudah siap. Jika tidak ada rute yang menerima suatu pesan, aplikasi menahannya hingga rute tersedia atau Anda menyetujui pengiriman pesan tersebut melalui relay standar.

Dapatkah node relay membaca pesan yang diteruskannya?

Tidak. Relay hanya melepas lapisan enkripsinya sendiri dan meneruskan blob buram. Isi pesan juga dienkripsi end-to-end di antara orang-orang dalam percakapan.

Apa itu Directory Chain?

Directory Chain adalah riwayat deskriptor bertanda tangan dan bertautan hash milik setiap node sendiri. Node lain mencerminkannya dan dapat meminta bukti penyertaan. Directory Chain tidak memiliki koordinator global.

Bagaimana node di balik gateway dapat bergabung ke jaringan?

Node tersebut dapat menerbitkan nama host https:// sebagai endpoint-nya. Node lain meresolusi nama tersebut saat koneksi dibuat dan hanya menggunakan alamat publik, sehingga nama tersebut tidak dapat dialihkan ke target privat atau internal.

Mengapa halaman statistik publik menampilkan lebih banyak node terdaftar daripada node yang online?

network.total_nodes dan network.vpn_nodes menghitung node aktif yang terdaftar, baik sedang online maupun tidak. Bandingkan dengan network.online_vpn_nodes. Jumlah protokol dan penerusan hanya mencakup node dengan heartbeat yang masih baru.

Apakah node memerlukan nama domain atau otoritas sertifikat untuk HTTPS?

Tidak. Node dapat membuktikan endpoint HTTPS-nya dengan kunci identitasnya sendiri: sertifikat TLS-nya membawa tanda tangan identitas node atas kunci sertifikat, dan klien atau peer yang mengetahui ID node dapat memverifikasinya. Node di balik gateway tetap dapat menggunakan nama host https:// sebagai gantinya.

Apa yang dibuktikan oleh tanda terima pengiriman bertanda tangan?

Tanda terima membuktikan bahwa node terminal menerima pesan ke dalam penyimpanan relay, dalam praktiknya kotak masuk relay milik penerima. Tanda terima tidak membuktikan bahwa penerima telah melihat atau membaca pesan. Untuk itu, gunakan tanda terima pengiriman dan pembacaan dari protokol chat.

<!-- faq:end -->