Blockchain/Tahap II · Mekanisme/2.1 Kriptografi/Pelajaran 3
Kunci peribadi, kunci awam dan secp256k1
Nombor bulat, lengkung, dan pintu satu hala
BahanPenjelajah blok yang memaparkan data witnessA. M. Antonopoulos & D. A. Harding, Mastering Bitcoin, edisi ke-3 (2023), bab 4
Ingin tahu
- Mengapa pendaraban sebuah titik dengan nombor mengambil masa beberapa milisaat, sedangkan membalikkannya memerlukan masa yang lebih lama daripada usia alam semesta?
- Apa yang menjadikan struktur secp256k1 berbeza daripada lengkung NIST yang digunakan dalam kebanyakan tandatangan digital yang lain?
- Bagaimanakah nilai 32 bait dapat mengawal aset bernilai berbilion tanpa mendedahkan siapa yang mengawalnya?
Teroka
- Kunci peribadi bitcoin ialah integer rawak antara 1 dan n−1, dengan n ialah peringkat (order) titik penjana lengkung tersebut. Nombor n ini lebih kurang 1.158 × 10^77, iaitu nombor 78 digit, tidak jauh di bawah anggaran bilangan atom dalam alam semesta yang boleh dicerap (kira-kira 10^80). Kunci awam diterbitkan melalui pendaraban skalar: mendarabkan integer k ini dengan titik penjana tetap G pada lengkung eliptik. Oleh sebab G sama bagi semua pengguna bitcoin, setiap k yang unik menghasilkan titik K yang unik dan deterministik pada lengkung tersebut.
- Lengkung secp256k1 ditakrifkan oleh persamaan y² = x³ + 7 atas medan perdana dengan p = 2^256 − 2^32 − 977. Set parameter khusus ini ditetapkan dalam standard SEC 2 oleh Certicom. Pemilihan secp256k1 pada tahun 2009 adalah luar biasa; ia ialah lengkung Koblitz, dinamakan sempena Neal Koblitz, yang struktur khasnya (endomorfisme yang boleh dikira dengan cekap) membolehkan pendaraban skalar yang lebih pantas, dan yang parameternya memberi sedikit sahaja ruang untuk pilihan tersembunyi, tidak seperti lengkung yang dijana daripada benih rawak yang tidak dijelaskan. Satoshi Nakamoto tidak pernah menjelaskan pemilihan tersebut.
- Pendaraban skalar adalah pantas kerana pelaksanaannya menggunakan algoritma double-and-add, yang memproses perwakilan binari kunci peribadi bit demi bit. Menggandakan satu titik dan menambah titik lain ialah operasi asas lengkung yang dilaksanakan oleh komputer dalam masa mikrosaat. Namun, menterbalikkan operasi ini—menerbitkan k daripada K dan G—dikenali sebagai masalah logaritma diskret lengkung eliptik (ECDLP). Tiada algoritma klasik yang cekap untuk ECDLP pada secp256k1 yang diketahui; carian brute-force terhadap ruang kunci adalah tidak praktikal dari segi pengiraan, dan ini memberikan keselamatan kira-kira 128 bit terhadap serangan klasik.
- Kunci awam disirikan dalam format tertentu untuk penyimpanan dan penghantaran. Kunci awam yang tidak dimampatkan bersaiz 65 bait, bermula dengan awalan 04 diikuti oleh koordinat x dan y. Kunci awam yang dimampatkan bersaiz 33 bait, menggunakan awalan 02 atau 03 untuk menunjukkan pariti koordinat y, membolehkan pembinaan semula daripada koordinat x sahaja. Taproot, yang diaktifkan pada November 2021, menggunakan pengoptimuman lanjut yang dipanggil kunci x-only, yang bersaiz 32 bait dan meninggalkan awalan sepenuhnya, dengan bergantung pada sifat skema tandatangan Schnorr.
- Hubungan antara kunci peribadi dan kunci awam adalah sehala secara mutlak. Berkongsi kunci awam tidak mendedahkan apa-apa tentang kunci peribadi kerana masalah logaritma diskret masih belum dapat diselesaikan untuk saiz lengkung ini. Sebaliknya, memegang kunci peribadi membolehkan kunci awam yang sepadan dikira dengan serta-merta. Asimetri ini menjadi asas model pemilikan bitcoin: sesiapa sahaja boleh mengesahkan bahawa sesuatu tandatangan dihasilkan oleh kunci peribadi tertentu tanpa perlu melihat kunci itu sendiri.
- Untuk mengesahkan mekanisme ini, buka mana-mana penjelajah blok dan cari satu input transaksi. Bagi perbelanjaan SegWit natif (P2WPKH), witness menyimpan tandatangan dan kunci awam termampat 33 bait; bagi perbelanjaan laluan kunci (key-path) Taproot, kunci 32 bait terletak dalam output itu sendiri dan witness hanya menyimpan tandatangan. Bandingkan dengan alamat dalam output sebelumnya; walaupun alamat ialah hash kunci awam, kunci mentahnya muncul di sini semasa perbelanjaan. Ambil perhatian bahawa koordinat kunci awam ialah rentetan heksadesimal yang mewakili titik pada lengkung, berbeza daripada hash 20 bait dan 32 bait yang digunakan dalam alamat SegWit versi 0.
Fakta utama
- Kunci peribadi ialah integer rawak antara 1 dan n−1, dengan n ≈ 1.158 × 10^77.
- secp256k1 ditakrifkan oleh y² = x³ + 7 atas medan perdana p = 2^256 − 2^32 − 977.
- Pendaraban skalar k·G menghasilkan kunci awam; menterbalikkannya (ECDLP) adalah tidak praktikal dari segi pengiraan.
- Kunci awam yang tidak dimampatkan bersaiz 65 bait (awalan 04); kunci yang dimampatkan bersaiz 33 bait (awalan 02/03).
- Taproot menggunakan kunci x-only 32 bait, yang meninggalkan koordinat y dan awalan sepenuhnya.
- secp256k1 ialah lengkung Koblitz dengan sedikit parameter yang tidak dijelaskan, dipilih oleh Satoshi pada tahun 2009.
Latihan sembilan, enam, tiga, satu
9KumpulSenaraikan 9 sifat secp256k1: persamaannya, nombor perdana medan, peringkat (order) titik penjana, saiz kunci (tidak dimampatkan/dimampatkan/x-only), tahap keselamatan, asal usul standard, jenis lengkung, dan dua fakta sejarah tentang penerimagunaannya.
6KelompokkanKumpulkan 9 sifat tersebut kepada 6 kumpulan: persamaan dan medan, penjana dan peringkat, format kunci, tahap keselamatan, sejarah standard, dan penerimagunaan.
3SaringKurangkan 6 kumpulan tersebut kepada 3 sebab mengapa secp256k1 sesuai dengan model pemilikan bitcoin.
1KristalkanTulis satu ayat yang menyatakan operasi matematik tepat yang mengubah integer peribadi kepada titik awam, dan namakan masalah yang menghalang operasi itu daripada diterbalikkan.
Semakan fakta
Tarikh, angka dan dakwaan telah disemak berbanding dengan sumber yang diterbitkan yang disenaraikan di bawah.