Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho

Urang neruskeun runtuyan urang ngeunaan Monero blockchain, sarta artikel dinten ieu bakal difokuskeun protokol RingCT (Ring Rahasia Transaksi), nu ngawanohkeun transaksi rahasia jeung tanda tangan ring anyar. Hanjakal, aya saeutik informasi dina Internet ngeunaan kumaha gawéna, sarta kami diusahakeun ngeusian gap ieu.

Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho

Urang bakal ngobrol ngeunaan kumaha jaringan hides jumlah mindahkeun ngagunakeun protokol ieu, naha maranéhna ditinggalkeun tanda ring cryptonote Palasik, sarta kumaha téhnologi ieu bakal ngamekarkeun salajengna.

Kusabab protokol ieu mangrupikeun salah sahiji téknologi anu paling pajeulit dina Monero, pamaca peryogi pangaweruh dasar ngeunaan desain blockchain ieu sareng pangaweruh anu lulus ngeunaan kriptografi kurva elliptic (pikeun ngasah pangaweruh ieu, anjeun tiasa maca bab mimiti kami. artikel saméméhna ngeunaan multisignatures).

protokol RingCT

Salah sahiji kamungkinan serangan dina mata uang cryptonote nyaéta analisis blockchain dumasar kana pangaweruh ngeunaan jumlah sareng waktos transaksi anu dikirim. Ieu ngamungkinkeun nyata ngahususkeun wewengkon pilarian pikeun kaluar dipikaresep ku panyerang. Pikeun ngajaga ngalawan analisa sapertos kitu, Monero parantos ngalaksanakeun protokol transaksi anonim anu nyumputkeun jumlah transfer dina jaringan.

Perhatos yén ide pikeun nyumputkeun jumlah sanés énggal. Bitcoin Core pamekar Nagreg Maxwell éta salah sahiji anu pang mimiti ngajelaskeun eta di na artikel Transaksi Rahasia. Palaksanaan RingCT ayeuna nyaéta modifikasi sareng kamungkinan ngagunakeun tanda tangan cincin (naha tanpa aranjeunna), sareng éta kumaha éta namina - Transaksi Rahasia Ring.

Diantara hal séjén, protokol mantuan meunang leupas tina masalah sareng Pergaulan outputs lebu - outputs tina jumlah leutik (biasana narima dina bentuk robah tina transaksi), nu dijieun leuwih masalah ti éta patut.

Dina Januari 2017, garpu teuas tina jaringan Monero lumangsung, sahingga pamakéan pilihan tina transaksi rahasia. Sareng dina bulan Séptémber taun anu sami, kalayan versi 6 hard garpu, transaksi sapertos kitu janten hiji-hijina anu diidinan dina jaringan.

RingCT ngagunakeun sababaraha mékanisme sakaligus: multilayered numbu tanda tangan grup anonim spontan (Multilayered Linkable Spontan Anonymous Grup Signature, salajengna disebut MLSAG), skéma komitmen (Pedersen Commitments) jeung rentang proofs (istilah ieu teu boga tarjamahan ngadegkeun kana Rusia) .

Protokol RingCT ngenalkeun dua jinis transaksi anonim: sederhana sareng pinuh. Dompét ngahasilkeun anu munggaran nalika transaksi nganggo langkung ti hiji input, anu kadua - dina kaayaan anu sabalikna. Aranjeunna béda dina validasi jumlah transaksi sareng data anu ditandatanganan ku tanda tangan MLSAG (urang bakal ngobrol langkung seueur ngeunaan ieu di handap). Leuwih ti éta, transaksi tina tipe pinuh bisa dihasilkeun kalayan sagala Jumlah inputs, euweuh bédana fundamental. Dina buku "Nol ka Monero" Dina hal ieu, disebutkeun yen kaputusan pikeun ngawatesan transaksi pinuh ka hiji input dijieun dina rusuh jeung bisa robah dina mangsa nu bakal datang.

tanda tangan MLSAG

Hayu urang émut naon input transaksi anu ditandatanganan. Unggal urus spends sarta ngahasilkeun sababaraha dana. Generasi dana lumangsung ku nyiptakeun kaluaran transaksi (analogi langsung nyaéta tagihan), sareng kaluaran anu dikaluarkeun ku transaksi (sanggeus sadayana, dina kahirupan nyata urang ngaluarkeun uang kertas) janten input (ati-ati, gampang pisan bingung. Ieuh).

Hiji input rujukan sababaraha kaluaran, tapi méakkeun ngan hiji, sahingga nyieun "smokescreen" sangkan hésé analisa sajarah tarjamah. Upami transaksi ngagaduhan langkung ti hiji input, maka struktur sapertos kitu tiasa diwakilan salaku matriks, dimana barisan mangrupikeun input sareng kolom mangrupikeun kaluaran campuran. Pikeun ngabuktikeun ka jaringan nu urus spends persis outputs na (nyaho konci rusiah maranéhna), inputs ditandatanganan kalawan signature ring. Tanda tangan sapertos kitu ngajamin yén anu nandatanganan terang konci rahasia pikeun sadaya unsur tina kolom mana waé.

Transaksi rahasia henteu deui nganggo anu klasik cryptonote tanda tangan ring, aranjeunna diganti ku MLSAG - vérsi tanda tangan ring lapisan tunggal anu sami diadaptasi pikeun sababaraha input, LSAG.

Disebut multilayer sabab asup sababaraha input sakaligus, anu masing-masing dicampurkeun sareng sababaraha anu sanés, nyaéta matriks ditandatanganan, sanés hiji baris. Sakumaha anu bakal urang tingali engké, ieu ngabantosan ngahémat ukuran tanda tangan.

Hayu urang tingali kumaha a signature cingcin kabentuk, ngagunakeun conto urus nu spends 2 outputs nyata jeung ngagunakeun m - 1 acak tina blockchain pikeun Pergaulan. Hayu urang denote konci umum tina outputs nu urang méakkeun salaku
Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho, sareng gambar konci pikeun aranjeunna sasuai: Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho Ku kituna, urang meunang matriks ukuran 2 x m. Mimiti, urang kedah ngitung anu disebut tantangan pikeun unggal pasangan kaluaran:
Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho
Urang ngamimitian itungan sareng kaluaran, anu urang belanjakeun nganggo konci umumna:Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyahojeung nomer acakTransaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyahoHasilna, urang meunang nilai handap:
Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho, anu kami anggo pikeun ngitung tantangan
Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyahopasangan kaluaran salajengna (pikeun ngagampangkeun ngartos naon anu urang ngagantikeun dimana, kami parantos nyorot nilai-nilai ieu dina warna anu béda). Sadaya nilai di handap ieu diitung dina bunderan nganggo rumus anu dipasihkeun dina ilustrasi munggaran. Hal anu terakhir pikeun ngitung nyaéta tantangan pikeun sapasang kaluaran nyata.

Salaku bisa urang tingali, sadaya kolom iwal hiji ngandung kaluaran nyata ngagunakeun angka dihasilkeun acakTransaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho. keur π- kolom kami ogé bakal butuh aranjeunna. Hayu urang transformasiTransaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyahodina s:Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho
Tanda tangan sorangan mangrupikeun tuple tina sadaya nilai ieu:

Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho

Data ieu lajeng ditulis kana transaksi.

Sakumaha urang tiasa tingali, MLSAG ngandung ngan hiji tantangan c0, nu ngidinan Anjeun pikeun nyimpen dina ukuran signature (anu geus merlukeun loba spasi). Salajengna, inspektur wae, ngagunakeun dataTransaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho, malikkeun nilai c1,…, cm sareng pariksa étaTransaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho. Ku kituna, cingcin urang ditutup sarta signature geus diverifikasi.

Pikeun transaksi RingCT tina tipe pinuh, hiji deui garis ditambahkeun kana matrix kalawan outputs dicampur, tapi urang bakal ngobrol ngeunaan ieu di handap.

Komitmen Pedersen

Skéma kawajiban (Istilah commitments Inggris leuwih mindeng dipaké) dipaké ku kituna hiji pihak bisa ngabuktikeun yén maranéhna terang rusiah nu tangtu (angka) tanpa sabenerna nembongkeun eta. Contona, Anjeun gulung jumlah nu tangtu dina dadu, mertimbangkeun komitmen sarta lulus eta dina pihak verifying. Ku kituna, dina momen disclosing jumlah rusiah, verifier mandiri ngitung komitmen, kukituna mastikeun yén anjeun teu nipu anjeunna.

Komitmen Monero dianggo pikeun nyumputkeun jumlah transfer sareng nganggo pilihan anu paling umum - komitmen Pedersen. Ku jalan kitu, hiji kanyataan metot - mimitina pamekar diusulkeun nyumputkeun jumlahna ku pergaulan biasa, nyaeta, nambahkeun outputs pikeun jumlah sawenang dina urutan pikeun ngawanohkeun kateupastian, tapi lajeng aranjeunna switched ka commitments (teu kanyataan yén maranéhna disimpen dina). ukuran urus, sakumaha bakal urang tingali di handap).
Sacara umum, komitmen sapertos kieu:
Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyahodi mana C - harti komitmen sorangan, a - jumlah disumputkeun, H mangrupakeun titik tetep dina kurva elliptic (generator tambahan), jeung x - sababaraha jenis topeng sawenang, faktor nyumput dihasilkeun acak. Topeng diperyogikeun di dieu supados pihak katilu henteu ngan saukur nebak nilai komitmen.

Nalika kaluaran anyar dihasilkeun, dompét Etang komitmen pikeun eta, sarta lamun spent, diperlukeun boh nilai diitung salila generasi atawa recalculates eta, gumantung kana jenis urus.

RingCT basajan

Dina kasus transaksi RingCT basajan, guna mastikeun yén urus dijieun outputs dina jumlah sarua jeung jumlah inputs (teu ngahasilkeun duit kaluar tina hawa ipis), perlu yén jumlah tina commitments kahiji jeung kadua. anu sarua, nyaéta:
Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho
Komisi komitmen nganggap éta rada béda - tanpa masker:
Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyahodimana a - jumlah komisi, éta sadia masarakat awam.

Pendekatan ieu ngamungkinkeun urang pikeun ngabuktikeun ka pihak anu ngandelkeun yén urang nganggo jumlah anu sami tanpa ngungkabkeunana.

Sangkan leuwih jelas, hayu urang nempo hiji conto. Hayu urang nyebutkeun hiji urus méakkeun dua outputs (hartina maranéhna jadi inputs) 10 jeung 5 XMR sarta ngahasilkeun tilu outputs patut 12 XMR: 3, 4 jeung 5 XMR. Dina waktos anu sami, anjeunna mayar komisi 3 XMR. Ku kituna, jumlah duit spent ditambah jumlah dihasilkeun sarta komisi sarua jeung 15 XMR. Hayu urang nyobian ngitung komitmen sareng ningali bédana jumlahna (inget matematika):

Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho
Di dieu urang ningali yén pikeun persamaan konvergen, urang peryogi jumlah masker input sareng kaluaran sami. Jang ngalampahkeun ieu, dompét dibangkitkeun acak x1, y1, y2 jeung y3, jeung sésana x2 ngitung sapertos kieu:
Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho
Ngagunakeun masker ieu, urang bisa ngabuktikeun ka verifier mana wae nu urang teu ngahasilkeun leuwih dana ti urang méakkeun, tanpa disclosing jumlahna. Asli, leres?

RingCT pinuh

Dina transaksi RingCT lengkep, mariksa jumlah transfer sakedik langkung rumit. Dina transaksi ieu, dompét teu recalculate commitments pikeun inputs, tapi ngagunakeun eta diitung nalika aranjeunna dihasilkeun. Dina hal ieu, urang kudu nganggap yén urang moal deui meunang bédana dina jumlah sarua jeung nol, tapi gantina:
Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho
Ieu téh z - bédana antara masker input sareng kaluaran. Lamun urang tempo zG salaku konci publik (anu éta de facto), lajeng z nyaeta konci swasta. Ku kituna, urang nyaho konci swasta umum jeung pakait. Kalayan data ieu dina panangan, urang tiasa nganggo éta dina tanda tangan cincin MLSAG sareng konci umum kaluaran anu dicampur:
Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho
Ku kituna, hiji signature ring valid bakal mastikeun yén urang nyaho sagala kenop swasta salah sahiji kolom, sarta kami ngan bisa nyaho konci swasta di baris panungtungan lamun urus teu ngahasilkeun leuwih dana ti eta spends. Ku jalan kitu, ieu mangrupikeun jawaban kana patarosan "naha bédana dina jumlah komitmen henteu ngakibatkeun nol" - upami zG = 0, lajeng urang bakal dilegakeun kolom kalawan outputs nyata.

Kumaha anu nampi dana terang sabaraha artos anu dikirim ka anjeunna? Sadayana saderhana di dieu - pangirim transaksi sareng konci bursa panarima nganggo protokol Diffie-Hellman, nganggo konci transaksi sareng konci panempoan panampi sareng ngitung rahasia anu dibagi. Pangirim nyerat data ngeunaan jumlah kaluaran, énkripsi sareng konci anu dibagi ieu, dina widang khusus transaksi.

Buktina rentang

Naon anu lumangsung upami anjeun nganggo angka négatip salaku jumlah komitmen? Ieu bisa ngakibatkeun generasi koin tambahan! Hasilna ieu henteu katampi, janten urang kedah ngajamin yén jumlah anu kami anggo henteu négatip (tanpa ngungkabkeun jumlah ieu, tangtosna, upami henteu aya seueur padamelan sareng sadayana sia-sia). Dina basa sejen, urang kudu ngabuktikeun yén jumlahna aya dina interval [0, 2n - 1].

Jang ngalampahkeun ieu, jumlah unggal kaluaran dibagi kana digit binér sarta komitmen diitung keur unggal digit nyalira. Éta langkung saé ningali kumaha ieu kajantenan kalayan conto.

Hayu urang nganggap yén jumlah urang leutik tur pas kana 4 bit (dina prakna ieu 64 bit), sarta kami nyieun hiji kaluaran patut 5 XMR. Urang ngitung komitmen pikeun tiap kategori sareng total komitmen pikeun sakabéh jumlah:Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyaho
Saterusna, unggal komitmen dicampurkeun jeung surrogate a (Ci-2iH) sarta ditandatanganan dina pasangan jeung tanda cingcin Borromeo (signature cingcin sejen), diajukeun ku Greg Maxwell di 2015 (Anjeun bisa maca leuwih lengkep tentang eta. di dieu):
Transaksi rahasia di Monero, atanapi kumaha cara nransferkeun hal anu teu dipikanyaho ka tujuan anu teu dipikanyahoDihijikeun, ieu disebut rentang buktina tur ngidinan Anjeun pikeun mastikeun yén commitments ngagunakeun jumlah dina rentang [0, 2n - 1].

Naon saterusna?

Dina palaksanaan ayeuna, rentang proofs nyokot loba spasi - 6176 bait per kaluaran. Ieu ngakibatkeun transaksi anu langkung ageung sareng biaya anu langkung luhur. Pikeun ngurangan ukuran transaksi Monero, pamekar ngenalkeun bulletproofs tinimbang tanda tangan Borromeo - mékanisme rentang buktina tanpa komitmen bitwise. Numutkeun sababaraha perkiraan, aranjeunna tiasa ngirangan ukuran rentang buktina dugi ka 94%. Ku jalan kitu, dina pertengahan Juli téhnologi kaliwat Inok ti Kudelski Kaamanan, nu teu nembongkeun sagala shortcomings signifikan boh dina téhnologi sorangan atawa palaksanaan na. Téknologi ieu parantos dianggo dina jaringan uji, sareng ku garpu keras énggal, sigana tiasa ngalih ka jaringan utama.

Naroskeun patarosan anjeun, nyarankeun topik pikeun tulisan anyar ngeunaan téknologi dina widang cryptocurrency, sareng ogé ngalanggan grup kami di Facebookpikeun tetep up to date sareng acara sareng publikasi urang.

sumber: www.habr.com

Tambahkeun komentar