
Apa yang bisa dan tidak bisa dilihat relay SSP
SSP adalah dompet dua perangkat. Ekstensi peramban Anda memegang satu kunci, ponsel Anda memegang yang lain, dan tak satu pun dapat memindahkan dana sendirian. Namun kedua perangkat itu harus saling bicara, dan mereka melakukannya lewat sebuah peladen yang kami jalankan, bernama relay.
Peladen itu adalah tempat yang jelas untuk mengajukan pertanyaan yang tak nyaman: bila semuanya melewati infrastruktur yang dioperasikan perusahaan pembuat dompet, apa persisnya yang dilihat perusahaan itu?
Itu pertanyaan yang adil dan layak dijawab secara spesifik alih-alih menenangkan. Jadi inilah yang sungguh ada di dalam kodenya.
Relay tidak dapat menandatangani apa pun
Mari mulai dari bagian yang paling penting.
Relay tak pernah menerima kunci privat. Tidak terenkripsi, tidak terpecah, tidak dalam bentuk apa pun. Kunci dompet Anda tetap di ekstensi peramban dan kunci aplikasi tetap di ponsel Anda; satu-satunya yang melintasi jaringan adalah kunci publik, data tak bertanda tangan, dan tanda tangan yang sudah dibuat di perangkat Anda.
Ini bukan komitmen kebijakan, melainkan komitmen struktural. Multisig dua-dari-dua menuntut kedua tanda tangan untuk memindahkan dana, dan relay tak memiliki satu pun kunci itu. Relay yang sepenuhnya jahat — milik kami, yang diretas, atau yang diganti penyerang — tetap tak mampu menghasilkan transaksi sah, sebab menghasilkannya menuntut rahasia yang tak pernah dikirimkan kepadanya.
Itulah jaminannya. Semua di bawah ini tentang apa yang memang ditangani relay: himpunan yang lebih sempit tetapi sungguh tidak kosong.
Apa yang lewat, dan berapa lama
Relay menyimpan empat macam catatan. Dua di antaranya menghapus dirinya sendiri.
Data sinkronisasi, saat Anda memasangkan kedua perangkat. Ia membawa rantainya, identitas dompet Anda, kunci publik diperluas milik aplikasi, identitas WK yang dihasilkan, nonce publik, alamat yang dibuat, dan xpub pemulihan beserta tanda tangannya.
Data aksi, saat Anda sedang menandatangani sesuatu. Ia membawa rantainya, jalur penurunan, identitas WK Anda, jenis aksi, muatannya sendiri, dan UTXO yang bersangkutan.
Kedua koleksi itu punya indeks TTL di MongoDB yang disetel expireAfterSeconds: 900. Lima belas menit. Basis data menghapus catatan itu apa pun yang terjadi — bukan tugas pembersihan yang harus diingat seseorang untuk dijalankan, dan bukan janji dalam kebijakan privasi. Ia sebuah indeks, ditegakkan oleh basis data itu sendiri.
Token notifikasi dorong, agar ponsel Anda bisa dibangunkan ketika ada yang perlu disetujui. Ini bertahan, sebab token notifikasi yang kedaluwarsa tiap lima belas menit akan tak berguna.
Xpub pemulihan, satu per identitas, tanpa kedaluwarsa sama sekali. Ini disengaja dan kodenya mengatakannya: ia ada supaya dompet dapat mengambilnya kapan pun perlu, bukan hanya pada jendela singkat ketika kedua aplikasi kebetulan terjaga.
Bagian yang seharusnya kami katakan terus terang
Lihat lagi muatan sinkronisasi itu. Ia memuat sebuah kunci publik diperluas.
Xpub bukan kunci pembelanjaan dan tak dapat mengesahkan transaksi. Tetapi ia bukan bukan apa-apa. Dari xpub sebuah akun dapat diturunkan setiap alamat yang akan pernah dipakai akun itu, yang berarti siapa pun yang memegangnya dapat mengamati seluruh saldo dan riwayat transaksi pada rantai tersebut. Itu akses baca ke kehidupan keuangan Anda di akun itu — persis keterkaitan yang dihindari demi privasi di rantai.
Muatan aksi sama nyatanya. Selagi Anda menandatangani, relay menangani transaksi yang belum ditandatangani: ke mana uangnya pergi, berapa banyak, dan dari keluaran mana.
Jadi ringkasan yang jujur bukan «relay tidak melihat apa-apa». Melainkan:
Relay tidak bisa membelanjakan uang Anda, dan selama lima belas menit sekali waktu ia bisa melihat apa yang sedang Anda lakukan dengannya.
Jendela lima belas menit itulah peredamnya, dan itu peredam yang berarti — ia membatasi berapa banyak riwayat dapat menumpuk di satu tempat. Tetapi selama jendela itu datanya ada, dan kami lebih suka mengatakannya terus terang daripada membiarkan kata «non-kustodial» memikul kerja retoris yang belum ia peroleh.
Prinsip rancangan yang layak dipinjam
Ada sebuah komentar di layanan pemulihan yang menangkap arsitekturnya lebih baik daripada diagram mana pun:
dompet memverifikasi tanda tangan itu terhadap kunci publik identitas yang diturunkannya sendiri, jadi penyimpanan ini tidak dipercaya.
Xpub pemulihan disimpan berdampingan dengan tanda tangan terlepas yang dibuat SSP Key atasnya. Ketika dompet mengambilnya, dompet secara mandiri menurunkan kunci publik identitas dan memeriksa tanda tangannya sendiri. Jika relay mengembalikan xpub yang berbeda — karena diretas, karena kutu, atau karena penggantian yang disengaja — tanda tangannya takkan sahih dan dompet akan menolaknya.
Relay diperlakukan sebagai pipa yang tak dipercaya oleh perangkat lunak yang bergantung padanya. Itulah cara yang benar membangun di atas infrastruktur yang Anda operasikan sendiri, sebab artinya peladen Anda yang keliru tidak menjadi masalah pengguna Anda. Itu juga pola yang patut dicari saat menilai dompet mana pun: bukan «apakah mereka berjanji berperilaku baik?», melainkan «apa yang terjadi bila peladen mereka berperilaku buruk?».
Apa yang sungguh bisa dilakukan relay yang bermusuhan
Patut bersikap konkret tentang model ancaman yang nyata.
Ia bisa mengamati. Dalam jendela TTL, xpub Anda dan transaksi Anda yang tertunda. Itu paparan privasi, bukan risiko pencurian.
Ia bisa menyensor. Menolak meneruskan pesan antara perangkat Anda, yang akan menghentikan Anda menandatangani transaksi baru lewat alur biasa. Menjengkelkan dan mengganggu — dan tidak sama dengan kehilangan sesuatu. Kunci Anda tetap milik Anda, dana Anda tetap di rantai, dan jalur pemulihan ada justru karena relay mungkin tidak ada.
Ia bisa berbohong, dan umumnya gagal. Mengganti xpub pemulihan dipatahkan oleh pemeriksaan tanda tangan yang dijelaskan di atas. Karena itulah verifikasi tersebut penting.
Ia tidak bisa menandatangani. Tak ada kunci, tak ada tanda tangan, tak ada transaksi.
Kasus terburuk yang realistis adalah pengintaian dan gangguan, bukan kehilangan. Itu posisi yang jelas lebih baik daripada layanan kustodial, yang kasus terburuk setaranya adalah uangnya lenyap. Ia tidak sama dengan «tak seorang pun bisa melihat apa pun», dan mencampuradukkan keduanya adalah cara orang berakhir dengan gambaran palsu tentang privasi mereka sendiri.
Apa yang bisa Anda lakukan atas bagian yang terlihat
Pahami apa yang dipaparkan pemasangan. Menyinkronkan sebuah rantai berarti sebuah xpub untuk rantai itu melintasi relay. Itulah ongkos agar rancangan dua perangkat bekerja sama sekali.
Ingat jendelanya pendek tetapi bukan nol. Lima belas menit per aksi adalah sebuah batas, bukan ketiadaan.
Perlakukan xpub pemulihan sebagai permanen. Ia disimpan tanpa kedaluwarsa secara sengaja, dan ia adalah bahan kunci publik dengan tanda tangan yang dapat diverifikasi — tetapi ia awet, dan Anda sebaiknya mengetahuinya alih-alih menemukannya.
Nilai arsitekturnya, bukan jaminannya. Pertanyaan yang berguna tentang peladen dompet mana pun bukanlah apakah perusahaannya menjanjikan kerahasiaan. Melainkan apakah perangkat lunaknya akan menyadari bila peladen berbohong. Milik kami memeriksa tanda tangan alih-alih memercayai jawaban, dan Anda dapat membacanya di kode alih-alih memercayai perkataan kami.
Yang paling ingin kami pahamkan adalah bentuk pertukarannya. Dompet dua perangkat membutuhkan saluran koordinasi, dan saluran koordinasi adalah tempat metadata berkumpul. Kami telah membatasinya dengan kedaluwarsa yang ditegakkan basis data dan merancang klien agar tak memercayai peladen — tetapi versi jujurnya adalah relay melihat hal-hal nyata, sebentar, dan tak ada arsitektur cermat mana pun yang membuat angka itu nol.


