Logo Zephyrnet

Menuju dompet Bitcoin tanpa kepercayaan dengan miniscript | buku besar

Tanggal:

Hal-hal yang perlu diketahui:
- Miniscript memungkinkan untuk membangun dompet perangkat lunak Bitcoin yang membuat pintu belakang tidak mungkin dieksploitasi. Kami senang untuk mengatakan bahwa Ledger adalah produsen dompet hardware komersial pertama yang mendukung miniscript.

- Fitur tambahan dapat diimplementasikan tanpa mengorbankan pengalaman pengguna.

Perangkat penandatanganan perangkat keras direkayasa untuk melindungi pengguna dari berbagai vektor serangan umum, seperti:

  • Akses dan ekstraksi benih yang tidak sah
  • Malware menginfeksi dompet perangkat lunak terkait Anda
  • Kerentanan perangkat lunak pada perangkat itu sendiri

Seperti bisnis apa pun, adalah kepentingan terbaik pabrikan untuk membuat perangkat tidak bisa dipecahkan seperti yang mereka bisa. Berhasil dalam misi ini adalah yang terpenting, dan perusahaan keamanan seperti Ledger mengandalkan reputasi yang dibangun di atas rekam jejak mereka.

Namun, beberapa pengguna mungkin masih memiliki kekhawatiran. Apa yang mencegah perusahaan itu sendiri untuk menyembunyikan a pintu belakang di perangkat?

Dalam tahanan diri, kita jangan percaya, kami memverifikasi.
Tapi bisa pengguna benar-benar memverifikasi bahwa perangkat tidak memiliki pintu belakang?

Itulah pertanyaan kunci yang digali artikel ini. Lebih tepatnya, artikel ini membahas topik-topik berikut:

  • apa itu backdoor, dan mengapa sulit, jika bukan tidak mungkin, untuk membuktikan bahwa itu tidak ada;
  • mengapa hanya pengguna yang dapat melindungi diri dari risiko ini;
  • bagaimana miniscript memungkinkan solusi praktis untuk tantangan dompet bitcoin ini.

Dengan menjadi dompet perangkat keras pertama yang didukung naskah mini, kami berharap dapat menginspirasi pengembang untuk membuat solusi yang aman dan meningkatkan seluruh industri kami, serta menghilangkan kemungkinan terjadinya risiko sistemik semacam itu.

Cara membangun tidak dapat dibuka kembali perangkat penandatanganan

Mari kita jelaskan: Anda tidak bisa.

Untuk melindungi diri Anda dari potensi pintu belakang, Anda memerlukan model serangan yang berbeda dari yang kami uraikan di atas: dalam skenario ini, musuh bisa jadi adalah vendor itu sendiri, atau orang dalam yang rusak.

Solusi yang sering disebut-sebut untuk masalah ini adalah Sumber Terbuka: lagipula, jika Anda dapat memeriksa kodenya, apa yang mungkin salah?

Namun, kebenarannya lebih kompleks. Karena vendor merakit perangkat keras, pintu belakang dapat sepenuhnya terkandung di dalamnya. Perangkat keras dapat dirancang untuk mengabaikan perangkat lunak pada titik-titik tertentu dan sebagai gantinya mengeksekusi kode berbahaya.

Tidak seperti perangkat lunak yang berjalan pada perangkat komputasi untuk keperluan umum (seperti laptop atau ponsel Anda), memeriksa perangkat keras secara praktis tidak mungkin dilakukan dengan teknologi saat ini. Bahkan jika spesifikasi perangkat keras sepenuhnya open source, lengkap dengan perincian setiap gerbang di sirkuit, Anda masih memerlukan peralatan berbiaya tinggi untuk memverifikasi bahwa chip tertentu dibuat sesuai dengannya.

Cara mem-backdoor dompet perangkat keras

Berikut adalah beberapa metode paling sederhana yang dapat digunakan oleh vendor perangkat keras jahat untuk memperkenalkan pintu belakang, bersama dengan beberapa cara yang dapat digunakan oleh pengguna yang kuat untuk melindungi diri mereka sendiri hari ini.

Generasi benih

Banyak perangkat menawarkan Anda kemampuan untuk menghasilkan benih (juga disebut Frase Pemulihan Rahasia) langsung di perangkat, menggunakan a Penghasil Angka Acak Benar.

😈 Perangkat jahat dapat menghasilkan benih yang tampak acak tetapi sebenarnya dapat diprediksi oleh penyerang.

🛡️ Power user dapat mengatasi masalah ini dengan membuat mnemonic offline. Selain itu, menggabungkan yang kuat frasa sandi juga dapat menghasilkan benih yang sepenuhnya independen yang tidak dapat diprediksi oleh vendor perangkat keras. Imbalannya adalah pengguna harus memastikan mereka mencadangkan frasa sandi dengan benar selain kata-kata mnemonik.

Derivasi kunci publik

Dompet perangkat keras memperoleh dan mengekspor kunci publik (disebut juga xpubs, kependekan dari kunci publik yang diperluas seperti yang didefinisikan dalam BIP-32. itu xpubs digunakan untuk menghasilkan kemungkinan alamat untuk menerima koin.

😈 Perangkat jahat dapat mengembalikan kunci publik yang dikendalikan oleh penyerang alih-alih yang benar yang berasal dari seed.

🛡️ Pengguna dapat memvalidasi turunan xpub di perangkat offline lainnya. Namun, memasukkan benih di perangkat lain membawa risikonya sendiri. Pengguna yang sadar keamanan mungkin menganggap perangkat apa pun yang telah mengakses seed sebagai berbahaya, berpotensi sampai menghancurkannya. Pengguna biasa mungkin kesulitan untuk melakukan prosedur ini dengan benar sambil mengelola risiko tambahan.

Informasi bocor

An celah udara sering diusulkan sebagai solusi untuk mencegah perangkat jahat atau yang dikompromikan dari mengeksfiltrasi kunci pribadi. Lagi pula, jika suatu perangkat tidak dapat berkomunikasi dengan dunia luar, ia tidak dapat melakukan sesuatu yang berbahaya, bukan?

Tidak terlalu!

Perangkat selalu dapat berkomunikasi saat sedang digunakan: menghasilkan tanda tangan. Tanda tangan ini berakhir di dalam transaksi yang disiarkan dan disimpan selamanya di blockchain.

Tanda tangan adalah string byte yang tampak acak minimal 64 byte. Namun, karena lebih dari satu tanda tangan yang valid dapat sesuai dengan pesan yang sama, perangkat jahat dapat mengkomunikasikan beberapa bit informasi setiap kali tanda tangan dibuat, dengan membuat beberapa tanda tangan dan secara selektif memilih mana yang akan dipublikasikan.

😈 Perangkat nakal mungkin menghasilkan tanda tangan non-acak yang, melalui banyak transaksi, mengungkapkan benihnya kepada penyerang!

Penyerang yang berhasil memasang pintu belakang seperti itu hanya perlu menunggu tanda tangan jahat muncul di blockchain sampai mereka memiliki informasi yang cukup untuk merekonstruksi seluruh benih.

🛡️ Untuk tanda tangan ECDSA, gunakan metode standar untuk menurunkan nonce secara deterministik (seperti RFC6979) menggagalkan serangan ini, asalkan seseorang memvalidasi bahwa tanda tangan yang dihasilkan cocok dengan yang diharapkan. Namun, memastikan hal ini memerlukan pemuatan perangkat kedua dengan seed yang sama, yang mengarah ke masalah praktis yang sama yang disebutkan di bagian sebelumnya.

🛡️ Pendekatan yang menarik adalah dengan menggunakan cara yang cerdas kekuatan perangkat untuk benar-benar memilih nonce acak. Sebuah protokol untuk tujuan ini, dikenal sebagai anti-exfil or anti klepto, saat ini diimplementasikan di dompet perangkat keras Blockstream Jade dan ShiftCrypto BitBox02. Baca lebih lanjut blog ShiftCrypto, yang juga menyertakan deskripsi teknis tentang bagaimana serangan semacam itu dapat dilakukan.

Baiklah kalau begitu, apakah tidak ada harapan?

Sebagian besar pertahanan🛡️ yang tercantum di atas sebagian besar mengharuskan pengguna untuk melakukan tindakan eksplisit dan mengganggu untuk melindungi diri mereka sendiri: baik dengan membuat seed sendiri (pada dasarnya, menggunakan otak mereka untuk menggantikan fungsionalitas dari dompet perangkat keras), atau menggunakan perangkat tambahan untuk memverifikasi bahwa perhitungan dijalankan dengan benar.

Namun, protokol anti-exfil menonjol: mengingat selalu ada mesin perantara antara penanda tangan perangkat keras dan dunia luar, mesin ini dapat membantu. Melalui protokol interaktif dengan penanda perangkat keras, itu bisa melaksanakan penggunaan nonce yang benar-benar acak, sehingga mengurangi atau menghilangkan kemungkinan memanipulasi tanda tangan akhir secara signifikan.

Dalam posting blog ini, kami terutama tertarik pada jenis tindakan ini: sementara strategi yang memperburuk UX secara signifikan dapat menarik bagi pengguna yang kuat, mereka cenderung membuat sesuatu lebih buruk dalam praktiknya untuk pengguna yang kurang mahir secara teknis – yang merupakan mayoritas.

Model keamanan
Model standar untuk penanda tangan perangkat keras

Pabrikan penandatangan perangkat keras bertujuan untuk melindungi pengguna dari berbagai potensi ancaman (untuk lebih jelasnya, lihat Model Ancaman). Dalam artikel ini, kami fokus pada satu properti yang sangat penting, yang dapat diringkas sebagai berikut:

Pengguna tidak dapat ditipu untuk melakukan tindakan yang mengakibatkan hilangnya dana, asalkan mereka memahami dan memverifikasi informasi di layar sebelum persetujuan.

Persetujuan diperlukan untuk setiap tindakan sensitif, terutama tanda tangan. Melindungi benih akan sia-sia jika malware dapat menghasilkan tanda tangan untuk pesan sewenang-wenang, seperti transaksi yang menguras semua dana!

Sangat penting untuk ditekankan bahwa properti di atas harus berlaku bahkan jika dompet perangkat lunak benar-benar disusupi. Apa yang ditampilkan di layar laptop/ponsel Anda tidak dapat dipercaya: malware dapat mengganti alamat, menipu Anda tentang alamat mana yang menjadi milik Anda, menyajikan transaksi tetapi kemudian meneruskan transaksi lain ke perangkat untuk ditandatangani, dll.

Oleh karena itu, firmware dan aplikasi yang berjalan pada perangkat penandatanganan perangkat keras mempertimbangkan dompet perangkat lunak secara inheren tidak terpercaya dan tidak dapat dipercaya.

Model keamanan anti-pintu belakang untuk dompet perangkat lunak

Di bagian ini, kami membalik peran sepenuhnya. Kami sekarang ingin merancang a dompet perangkat lunak yang mencegah produsen perangkat keras mencuri atau menyebabkan kerugian dana, bahkan jika perangkat tersebut benar-benar berbahaya.

Oleh karena itu, ini tidak dapat menjadi properti dari alat: lebih tepatnya, ini adalah properti dari dompet perangkat lunak mempersiapkan. Kami dapat meringkasnya sebagai berikut:

Asalkan dompet perangkat lunak tidak disusupi, produsen perangkat keras tidak dapat menyebabkan pengguna kehilangan dana.

Ini mungkin tampak berlawanan dengan intuisi, karena secara langsung bertentangan dengan model keamanan standar yang dijelaskan di atas. Namun, "tidak memiliki pintu belakang" berarti "melakukan apa yang seharusnya mereka lakukan". Karena dompet perangkat lunak adalah matahari antarmuka antara perangkat penandatangan dan dunia luar, itu satu-satunya tempat di mana perlindungan terhadap perilaku buruk dapat ditegakkan − baik karena bug, atau penyusupan perangkat secara eksplisit.

Perhatikan bahwa model ini jauh melampaui kegagalan perangkat, seperti bug yang dapat dieksploitasi. Dalam hal ini, kami beroperasi dalam skenario di mana perangkat secara aktif berupaya menyebabkan hilangnya dana.

Tentu saja, tidak ada kemungkinan perlindungan jika pabrikan berhasil melakukan kompromi kedua perangkat dan juga mesin Anda yang menjalankan dompet perangkat lunak. Oleh karena itu, sangat penting untuk memastikan bahwa dompet perangkat lunak Anda adalah Sumber Terbuka dan dapat diaudit, terutama jika dibuat oleh vendor yang sama yang memproduksi perangkat keras.

Peran naskah mini

Miniscript melengkapi pengembang dompet dengan kemampuan untuk sepenuhnya memanfaatkan fitur-fitur canggih dari bitcoin Script. Untuk ikhtisar tentang kemungkinan luar biasa yang dibuka miniscript, lihat posting blog kami sebelumnya. Anda mungkin juga ingin mendengarkan Episode 452 dari Podcast Stephan Livera untuk diskusi tentang apa yang dibawa miniscript ke lanskap bitcoin.

Aplikasi Ledger Bitcoin mendukung miniscript sejak rilis 2.1.0, yang diterapkan pada Februari 2023. Pada konferensi Bitcoin 2023 di Miami, Wizardsardine mengumumkan rilis 1.0 dari dompet liana, dompet pertama yang digunakan berdasarkan miniscript.

Ide dasar dari postingan ini adalah bahwa akun dompet bitcoin dapat dilindungi tidak hanya dengan satu, tetapi dengan beberapa kunci. Hal ini memungkinkan kerangka kerja keamanan yang fleksibel di mana bahkan kegagalan total atau kerusakan kunci bukanlah bencana besar.

Renungan multisig

Multisig adalah peningkatan yang signifikan dalam kekuatan solusi hak asuh sendiri. Dengan memanfaatkan programabilitas Bitcoin Script, ini memungkinkan pembuatan dompet yang memerlukan banyak kunci, bukan hanya satu. A k-dari-n dompet multisig membutuhkan kombinasi k tanda tangan yang sah, dari total n yang mungkin.

Namun, multisig juga memberi beban UX pada pengguna, dan memperkenalkan peluang baru untuk kesalahan. Penyiapan multisig 3-dari-3, yang melibatkan tiga kunci berbeda yang dicadangkan dengan aman di lokasi terpisah, menawarkan keamanan yang kuat… tetapi itu juga berarti bahwa bahkan jika tunggal kunci hilang, koin menjadi tidak dapat diakses secara permanen!

Oleh karena itu, pengaturan yang menawarkan lebih banyak redundansi (seperti 2-of-3, atau 3-of-5) cenderung lebih populer: jika satu kunci hilang, kunci lainnya masih dapat memfasilitasi pemulihan. Tapi ini menimbulkan kompromi: jika satu kunci dikompromikan tanpa sepengetahuan Anda, keamanan keseluruhan berkurang secara signifikan!

Perusahaan seperti Casa dan Modal Tidak Terikat berspesialisasi dalam solusi hak asuh sendiri di mana mereka memegang sebagian kecil kunci untuk pelanggan mereka. Mereka juga membantu penggunanya dengan memandu mereka melalui proses orientasi dan menyederhanakan penggunaan sistem penjagaan, yang jika tidak dapat menjadi menakutkan bagi sebagian besar pengguna non-teknis.

Miniscript dan jalur pemulihan yang dikunci waktu

Liana menggunakan miniscript untuk membuat dompet yang memiliki banyak cara pengeluaran:

  • kondisi pengeluaran utama, yang segera tersedia;
  • satu atau lebih kondisi pengeluaran tambahan yang tersedia setelah periode tertentu (yang disebut timelock).

Ini memungkinkan banyak kasus penggunaan yang menarik:

  • Recovery: Dompet standar dengan tanda tangan tunggal atau multisig sebagai jalur pengeluaran utama; tetapi mekanisme pemulihan terpisah (kunci dengan benih yang berbeda, multisig, teman yang paham teknologi, penjaga) tersedia setelah 6 bulan.
  • Governance: Perusahaan dengan dua direktur dapat menetapkan 2-dari-2 untuk perbendaharaan perusahaan; jika terjadi perselisihan, pengacara tepercaya dapat mengakses dana tersebut setelah 6 bulan.
  • Multisig yang membusuk: Dompet dimulai dengan 3 dari 3, bertransisi menjadi 2 dari 3 setelah 6 bulan, dan menjadi 1 dari 3 setelah 9 bulan.
  • Warisan otomatis: Jalur pemulihan setelah 6 bulan mencakup 2 dari 3 anak Anda; mungkin jalur pemulihan kedua setelah 1 tahun melibatkan notaris, seandainya ahli waris tidak dapat mencapai mufakat.

Ucapan: semua contoh di atas menggunakan a kunci waktu relatif, yang mengacu pada usia koin (yaitu: terakhir kali dana dipindahkan). Imbalannya adalah pengguna harus ingat untuk membelanjakan koin (dengan mengirimkannya ke diri mereka sendiri) jika timelock mendekati kedaluwarsa.

Ini hanya beberapa contoh, tetapi seharusnya cukup untuk meyakinkan pembaca bahwa miniscript adalah langkah maju yang signifikan untuk mewujudkan potensi Bitcoin sebagai uang yang dapat diprogram.

Pendaftaran kebijakan dompet

Untuk akun dompet Bitcoin yang menggunakan banyak kunci (baik itu multisig, atau solusi berbasis skrip mini yang lebih canggih), penting untuk melatih perangkat untuk mengidentifikasi alamat milik akun tersebut. Ini adalah satu-satunya cara perangkat dapat membantu pengguna memastikan bahwa mereka menerima atau membelanjakan dari alamat yang benar…

Memvalidasi kebijakan dan xpubs dari cosigner terhadap cadangan tepercaya sangat penting, tetapi relatif memakan waktu.
Kabar baiknya adalah bahwa hal itu hanya perlu dilakukan sekali:

pendaftaran miniscriptwallet

Setelah polis didaftarkan dengan nama (dalam contoh “Decaying 3of3”), perangkat Anda akan dapat mengenalinya setiap kali kebijakan tersebut digunakan.

Mereka yang tertarik dengan detail teknis dapat menemukan informasi lebih lanjut di usulan BI.

Pencadangan kebijakan

Salah satu aspek penting yang perlu diperhatikan adalah bahwa meskipun kebijakan multi-kunci mengizinkan subset dari kunci pribadi untuk mengotorisasi transaksi, pengetahuan tentang semua kunci publik (dan tepat kebijakan) yang diperlukan.

Namun, tidak seperti seed, mencadangkan kebijakan dan kunci publik jauh lebih tidak berisiko: jika seseorang menemukannya, mereka dapat melacak semua transaksi yang terkait dengan kebijakan tersebut. Meskipun ini tidak ideal – masalah privasi! − itu tidak separah kehilangan koin Anda dan kurang menarik bagi penyerang potensial. Konsekuensinya, menyimpan banyak salinan kebijakan di hot wallet, mencetak dan menyimpannya di berbagai tempat, mengenkripsi dan menyimpannya di penyimpanan cloud, dan sebagainya, semuanya merupakan strategi yang layak.

Dompet tanda tangan tunggal yang tidak dapat di-backdoor

Mari mundur selangkah. Kami telah membahas dompet multi-tanda tangan, tetapi sekarang kami akan kembali ke dasar untuk membuat dompet satu tanda tangan. Lebih tepatnya, kami menginginkan dompet itu terasa dan terlihat seperti dompet satu tanda tangan, setelah fase penyiapan awal. Namun, kami bertujuan untuk membuat dompet yang darinya produsen tidak dapat mencuri dana Anda meskipun itu berbahaya 😈, dan perangkat penandatanganan perangkat keras berperilaku dengan cara yang tidak dapat diprediksi.

Pendekatan ini dapat dengan mudah digeneralisasikan untuk dompet multi-signature.

Contoh di bawah ini akan ditulis dalam bahasa yang disebut kebijaksanaan, bukan skrip mini. Kebijakan lebih mudah dibaca dan dipikirkan oleh manusia, dan dapat dikompilasi menjadi skrip mini dengan alat otomatis. Baca lebih lanjut tentang miniscript dan kebijakan.

Dompet perangkat keras dapat melindungi Anda dalam model keamanan standar. Miniscript dapat melindungi Anda dalam model keamanan anti-backdoor (dan banyak lagi!).

Langkah nol: status quo

Ini adalah kebijakan yang digunakan sebagian besar pengguna saat ini: satu kunci yang berasal dari benih yang diproduksi di dompet perangkat keras.

pk(key_ledger)

Tentu saja, tidak ada cara untuk membuktikan tidak adanya backdoor.

Langkah satu: gandakan kunci itu

Langkah pertama sederhana:

and(pk(key_ledger), pk(key_client))

Di sini, key_client dihasilkan pada mesin pengguna, maka a hot key. Pada dasarnya, ini adalah pengaturan multisig 2-dari-2. Aspek kuncinya adalah pengguna tidak banyak berinteraksi dengannya key_client: dompet perangkat lunak menghasilkan kunci ini, memasukkannya ke dalam cadangan dompet, dan menandatangani kapan pun diperlukan (misalnya, saat pengguna sibuk menandatangani dengan penanda tangan perangkat keras mereka).

Ini sepertinya cukup menarik: dana tidak dapat dihabiskan tanpa key_client, yang tidak tersedia untuk vendor perangkat keras; bahkan jika vendor jahat memiliki pengetahuan penuh tentang kunci di perangkat, mereka tetap tidak dapat memindahkan dana tanpa menargetkan pengguna secara eksplisit, misalnya dengan mengkompromikan mesin yang menjalankan dompet perangkat lunak mereka.

Namun, ada masalah: selama aktivasi dompet, penandatangan perangkat keras adalah satu-satunya entitas yang mampu menghasilkan kunci publik (xpub) key_ledger digunakan di dalam dompet. Oleh karena itu, perangkat dapat dengan sengaja menghasilkan a salah xpub dikendalikan oleh penyerang, dan kemudian menolak (atau tidak dapat) untuk menandatangani. Dapat dikatakan, ini adalah skenario serangan yang cukup ekstrim: pembuat pintu belakang tidak dapat mencuri dana, dan yang paling dapat mereka lakukan adalah menargetkan pengguna secara individual dan meminta uang tebusan (“Saya dapat membantu Anda mengambil uang Anda jika Anda membayar setengah kepada saya”).

Lebih realistis, ini meningkatkan kemungkinan kesalahan kesalahan: Anda sekarang memiliki dua benih / kunci pribadi, dan Anda membutuhkannya kedua agar bisa dihabiskan. Kalah juga, dan koin terkunci selamanya.

Langkah kedua: pemulihan yang dikunci waktu

Kami memperkenalkan kunci pemulihan terpisah, hanya dapat diakses setelah timelock tertentu: and(older(25920), pk(key_recovery)), di mana 25920 adalah perkiraan jumlah blok dalam 6 bulan. Kebijakan lengkapnya menjadi:

or(
  and(pk(key_ledger), pk(key_client)), and(after(25920), pk(key_recovery))
)

Ini mirip dengan skenario sebelumnya, tetapi dengan twist: jika key_ledger or key_client menjadi tidak tersedia karena alasan apa pun (paling umum, kehilangan benih cadangan!), a jalur pemulihan dapat diakses setelah 6 bulan.

Ada beberapa opsi untuk key_recovery, masing-masing dengan pengorbanannya sendiri:

a. Gunakan yang lain hot key. Ini adalah solusi praktis selama pengguna ingat untuk mengatur ulang timelock. Namun, jika hot key dikompromikan (skenario yang secara umum dianggap sangat mungkin!), penyerang dapat mencoba mengakses dana segera setelah timelock berakhir, memulai perlombaan dengan pemilik yang sah.

b. Gunakan perangkat penandatanganan perangkat keras terpisah. Ini adalah solusi yang kuat dan dapat digunakan dalam kombinasi dengan vendor yang berbeda jika diinginkan; namun, ini meningkatkan kompleksitas penyiapan dan biaya bagi pengguna dalam hal pengalaman pengguna.

c. Gunakan layanan eksternal tepercaya. Dompet perangkat lunak dapat mengimpor xpub dari layanan eksternal, menggunakannya sebagai key_recovery. Pihak ketiga ini hanya dipercaya jika timelock kedaluwarsa, yang bisa menjadi tradeoff yang menarik bagi sebagian pengguna.

Seperti yang disebutkan, seperti untuk kebijakan apa pun dengan timelock, penting bagi pengguna untuk mengingat untuk menyegarkan koin sebelum berakhirnya timelock.

Langkah ketiga: pihak ketiga yang tidak dipercaya

Mari gabungkan kedua ide (a) dan (c): untuk jalur pemulihan, kami memerlukan hot key lokal key_recovery_local, Dan key_recovery_remote yang dihosting dengan layanan semi-tepercaya; kami juga mempertahankan timelock.

or(
and(pk(key_ledger), pk(key_client)),
  and(older(25920),
    and(pk(key_recovery_local), pk(key_recovery_remote))
)
)

Ini mengurangi tingkat kepercayaan yang dibutuhkan dari layanan pemulihan. Namun, kami harus berhati-hati: layanan itu sendiri dapat memantau blockchain dan mendeteksi UTXO kami − bagaimanapun juga, mereka memberi kami key_recovery_remote xpub, sehingga mereka dapat memindai UTXO yang berisi kunci pub yang berasal key_recovery_remote. Mereka akan dapat mempelajari riwayat keuangan kita, bahkan sebelum timelock berakhir, dan bahkan jika kita tidak pernah menggunakan layanan mereka.

Ucapan: Pohon akar tunggang dapat menghilangkan masalah privasi ini untuk kebijakan tertentu, tetapi hal ini tidak selalu terjadi dan memerlukan evaluasi yang cermat berdasarkan kebijakan tertentu.

Langkah keempat: membutakan pihak ketiga 🙈

Untuk mencegah layanan pemulihan mempelajari riwayat keuangan kita, alih-alih menggunakan kunci pub yang mereka komunikasikan kepada kita, kita dapat menggunakan xpub buta teknik dijelaskan oleh mflaxman secara rinci di sini. Singkatnya, alih-alih menggunakan key_recovery_remote dalam kebijakan kami, kami memilih empat angka acak 31-bit a, b, c, d (The faktor yang membutakan), dan kami menggunakan yang berikut ini BIP-32 pubkey turunan:

key_recovery_remote_blind = key_recovery_remote_blind/a/b/c/d

Sangat penting bahwa kami juga menambahkan key_recovery_remote, dan faktor yang membutakan a, b, c dan d ke cadangan kami, untuk referensi di masa mendatang.

Jika kami perlu menggunakan layanan pemulihan, maka kami akan mengungkapkannya a, b, c, d ke mereka. Sampai saat itu, mereka tidak memiliki cara untuk menemukan kunci yang berasal dari mereka key_recovery_remote sedang dipublikasikan di blockchain: jumlah kemungkinan kombinasi untuk 4 faktor yang menyilaukan adalah 2^(31*4) = 2^124, yang membuat tidak mungkin untuk memaksa mereka semua.

Langkah lima: terlalu banyak hot key bisa membakar Anda 🔥

Kami berhasil membuat dompet perangkat lunak kami tidak dapat di-backdoor. Namun, kami memperkenalkan masalah yang berbeda: kedua kondisi pengeluaran menggunakan yang dihasilkan secara lokal, panas kunci yang tidak diverifikasi oleh dompet perangkat keras. Oleh karena itu, jika mesin host disusupi, ini mungkin menipu Anda untuk mendaftarkan kebijakan menggunakan kunci pub key_client dan key_recovery_local, tetapi masukkan kunci pribadi acak yang tidak terkait di cadangan kami (ingat, file panas kunci adalah bagian dari cadangan kami!).

Itu pada dasarnya akan membuat dana dikirim ke dompet tak terpakai, karena tidak ada yang mengontrol kunci privat yang diperlukan untuk ditandatangani.

Ada beberapa solusi untuk mengatasi masalah ini:

  • Selama orientasi, setelah mencetak cadangan kami di atas kertas, kami dapat menggunakan perangkat terpisah untuk memverifikasi bahwa hot key pribadi dan publik pada cadangan benar-benar cocok. Pendekatan ini akan menghilangkan masalah, karena kami yakin kami memiliki semua kunci yang diperlukan untuk rekonstruksi dan penandatanganan.
  • Kita dapat menambahkan kondisi pembelanjaan lain dengan timelock yang lebih lama (9 bulan, 38880 blok) yang hanya membutuhkan key_ledger_failsafe dari perangkat keras. Dengan cara ini, dalam skenario terburuk mutlak di mana semuanya gagal, kami kembali ke keamanan perangkat penandatanganan tunggal. Dalam operasi normal, kami tidak akan pernah membiarkan timelock pertama kedaluwarsa, jadi, timelock kedua juga tidak akan kedaluwarsa!

Dengan pendekatan kedua, kebijakan akhir akan terlihat seperti ini

or(
  and(pk(key_ledger), pk(key_client)),
  or(
    and(older(25920),
        and(pk(key_recovery_local), pk(key_recovery_remote_blind))
    ),
    and(older(38880), pk(key_ledger_failsafe))
  ),
)

Konfigurasi dompet perangkat lunak ini memenuhi semua properti keamanan yang kami klaim di awal. Selain itu, ia menawarkan jalur pemulihan jika kunci pengeluaran utama key_ledger tersesat. Fitur yang bagus untuk dimiliki!

Masuk ke dompet perangkat lunak yang tidak dapat di-backdoor

Seperti apa pengalaman pengguna untuk dompet yang menggunakan kebijakan rumit seperti itu? Berikut ikhtisar singkatnya:

  • Pengguna membuka dompet perangkat lunak dan mulai membuat akun baru.
  • Dompet perangkat lunak meminta pengguna untuk menghubungkan perangkat penandatanganan mereka dan mengambil xpub untuk key_ledger dan key_ledger_failsafe.
  • Dompet perangkat lunak secara mandiri menghasilkan hot key key_client.
  • Dompet perangkat lunak diperoleh key_recovery_remote dari layanan co-signing atau memungkinkan pengguna menentukan kunci dengan cara lain. Opsional, itu menghitung key_recovery_remote_blind menggunakan teknik penyamaran yang disebutkan sebelumnya.
  • Dompet perangkat lunak menghasilkan cadangan kebijakan yang berisi kebijakan miniscript yang tepat, semua xpub, dan kunci pribadi yang diperluas untuk key_client kunci panas. Cadangan ini disimpan dengan aman (misalnya, dicetak di atas kertas atau disimpan di perangkat terpisah).
  • Terakhir, dompet perangkat lunak menginstruksikan pengguna untuk mendaftarkan kebijakan di perangkat. Pengguna memeriksa ulang cadangan (di atas kertas atau media apa pun selain layar yang dikendalikan oleh dompet perangkat lunak).

Dompet perangkat lunak mengelola sebagian besar langkah di atas, membuat keterlibatan pengguna tidak lebih memberatkan dari upaya yang diharapkan saat ini untuk menyiapkan dompet multisignature.

Onboarding seharusnya hanya membutuhkan beberapa menit setelah UX yang bagus dibuat untuk itu. Setelah selesai, dompet perangkat lunak dapat memberikan pengalaman pengguna yang sangat mirip dengan dompet satu tanda tangan pada umumnya. Beginilah miniscript akan mengubah segalanya: dengan menghilang dari pandangan pengguna!

Perbaikan akar tunggang

Ledger mendukung miniscript sejak versi 2.1.0 dari aplikasi Bitcoin, dirilis pada bulan Maret. Sementara dukungan untuk menerima dan membelanjakan dari alamat taproot diaktifkan sejak garpu lunak akar tunggang pada November 2021, kami sekarang memberikan sentuhan akhir pada langkah roadmap berikutnya: dukungan miniscript untuk taproot.

Taproot akan berdampak besar pada kegunaan pendekatan yang disajikan dalam artikel ini. Jika jalur pengeluaran utama adalah kondisi pengeluaran kunci tunggal, keberadaan jalur pengeluaran pemulihan tidak akan terdeteksi di blockchain kecuali digunakan. Ini akan sangat meningkatkan privasi dengan sepenuhnya menghilangkan sidik jari untuk jalur pengeluaran standar. Selain itu, ini meningkatkan skalabilitas, karena jalur pengeluaran standar menjadi seefisien mungkin untuk dibelanjakan. Ini berarti tidak ada biaya tambahan yang akan dikeluarkan karena adanya jalur pemulihan, kecuali jalur tersebut digunakan. Ini adalah peningkatan signifikan dari transaksi SegWit, yang mengharuskan penerbitan seluruh skrip, termasuk semua ketentuan pengeluaran, selama pembelanjaan apa pun.

Terakhir, protokol yang lebih canggih seperti MuSig2 (baru-baru ini standar) dan FROST akan meningkatkan keypath taproot. Dibangun di atas tanda tangan Schnorr, protokol ini memungkinkan untuk membuat satu pubkey agregat yang dapat digunakan untuk mewakili suatu n-dari-n multisignature atau a k-dari-n skema ambang batas. Ini akan memungkinkan penggunaan keypath taproot bahkan dalam kasus yang saat ini lebih sering diwakili dengan skrip multisig tertentu.

Kesimpulan

Artikel ini mengeksplorasi ceruk kecil (tapi penting) dari ruang desain luas yang dikeluarkan miniscript untuk dompet perangkat lunak.

Kami menunjukkan bagaimana miniscript dapat digunakan untuk membuat dompet perangkat lunak "unbackdoorable", sementara juga menambahkan jalur pemulihan tambahan yang memungkinkan untuk mencegah hilangnya kunci bencana. Meskipun perangkat penandatangan perangkat keras tidak dapat menerapkan model keamanan anti-pintu belakang, dengan mendukung miniscript mereka mengaktifkan dompet perangkat lunak yang melakukan hal itu!

Dengan memanfaatkan kombinasi skema multisignature, timelock, xpub buta, dan hot key secara cerdik, kami telah mendemonstrasikan konfigurasi dompet aman yang menyeimbangkan keamanan, privasi, dan ketahanan.

Selain itu, kami berpendapat bahwa ini mungkin tanpa berdampak negatif pada pengalaman pengguna, karena kerumitan penyiapan tidak berarti beban UX tambahan yang besar.

Kami sangat senang dengan kemungkinan yang akan dibuka miniscript untuk hak asuh mandiri bitcoin generasi berikutnya.

Salvatore Ingala
Insinyur Bitcoin

https://twitter.com/salvatoshi

tempat_img

Intelijen Terbaru

tempat_img