Oracle acak adhedhasar tandha digital ing blockchain

Saka gagasan kanggo implementasine: kita ngowahi skema teken digital kurva elliptic sing wis ana supaya bisa ditemtokake, lan adhedhasar iku, kita nyedhiyakake fungsi kanggo entuk nomer pseudo-acak sing bisa diverifikasi ing blockchain.

Oracle acak adhedhasar tandha digital ing blockchain

Idea

Ing musim gugur 2018, pamblokiran Waves kalebu kontrak pinter pisanan diaktifake, pitakonan langsung muncul babagan kemungkinan entuk angka pseudorandomsing bisa dipercaya.

Bingung babagan pitakonan iki, pungkasane aku nggawe kesimpulan: blok apa wae minangka sel; ora mungkin entuk sumber entropi sing dipercaya ing sistem tertutup.

Nanging aku isih disenengi siji idea: yen oracle acak bakal mlebu data pangguna kanthi algoritma deterministik, mula pangguna bakal tansah bisa verifikasi teken kasebut nggunakake kunci umum, lan bakal yakin yen nilai sing diasilake unik. Oracle, ora preduli sepira angel, ora bisa ngganti apa-apa; algoritma kasebut ngasilake asil sing ora jelas. Ateges, pangguna nyathet asil kasebut, nanging ora ngerti nganti oracle nerbitake. Pranyata sampeyan ora bisa dipercaya oracle, nanging priksa asil karyane. Banjur, yen verifikasi sukses, tandha kasebut bisa dianggep minangka sumber entropi kanggo nomer pseudorandom.

Platform blockchain Waves nggunakake skema teken EdDSA pilihan Ed25519. Ing skema iki, teken kasusun saka nilai R lan S, ing ngendi R gumantung marang nilai acak, lan S diitung adhedhasar pesen sing ditandatangani, kunci pribadi lan nomer acak sing padha karo R. Ternyata ora ana katergantungan unik kanggo padha Ana akeh teken bener kanggo pesen pangguna.

Temenan, ing wangun murni, tandha kasebut ora bisa digunakake minangka sumber nomer pseudo-acak, amarga iku non-deterministik lan, mulane, bisa gampang dimanipulasi dening oracle.

Nanging, minangka ternyata, iku bener bisa kanggo nggawe deterministik.

Aku duwe pangarep-arep gedhe Verifiable Random Function (VRF), nanging sawise sinau hardware, aku kudu ninggalake pilihan iki. Senajan VRF nawakake versi deterministik saka teken lan bukti, ana panggonan aneh ing algoritma sing mbukak bolongan ireng kanggo manipulasi oracle. Yaiku, nalika ngitung nilai k (bagean 5.1) kunci pribadi digunakake, sing tetep ora dingerteni pangguna, tegese pangguna ora bisa verifikasi bener pitungan k, tegese oracle bisa nggunakake nilai k sing dibutuhake lan ing wektu sing padha njaga database korespondensi saka k lan data sing ditandatangani supaya tansah bisa ngetung maneh asil sing bener saka sudut pandang VRF. Yen sampeyan ndeleng gambar adhedhasar VRF tanpa mbukak kunci pribadi, sampeyan bisa dadi pinter: nuduhake perlu kanggo mbukak kunci, utawa ngilangi saka pitungan k, banjur kunci pribadi bakal dicethakakΓ© kanthi otomatis nalika tandha pisanan katon. . UmumΓ©, kaya sing wis kasebut, skema aneh kanggo oracle acak.

Sawise mikir sethithik lan njaluk dhukungan saka analis lokal, skema kerja VECRO lair.

VECRO iku singkatan saka Verifiable Elliptic Curve Random Oracle, sing ing basa Rusia tegese oracle acak sing bisa diverifikasi ing kurva elliptic.

Kabeh ternyata cukup prasaja, kanggo entuk determinisme, sampeyan kudu ndandani nilai R sadurunge pesen sing bakal ditandatangani katon. Yen R wis setya lan minangka bagΓ©an saka pesen sing ditandatangani, sing luwih mesthekake yen R wis setya ing pesen sing ditandatangani, nilai S ditemtokake kanthi unik dening pesen pangguna lan mulane bisa digunakake minangka sumber nomer pseudorandom.

Ing skema kasebut, ora preduli carane R tetep; iki tetep dadi tanggung jawab oracle. Penting yen S ditemtokake kanthi unik dening pangguna, nanging regane ora dingerteni nganti oracle nerbitake. Kabeh sing dikarepake!

Ngomong babagan R tetep, elinga dienggo maneh R nalika mlebu macem-macem pesen, unik mbukak kunci pribadi ing rencana EdDSA. Dadi penting banget kanggo pemilik oracle kanggo ngilangi kemungkinan nggunakake maneh R kanggo mlebu pesen pangguna sing beda. Yaiku, kanthi manipulasi utawa kolusi, oracle mesthi bakal kelangan kunci pribadi.

Secara total, oracle kudu nyedhiyakake rong fungsi kanggo pangguna: initialization, sing ndandani nilai R, lan teken, sing ngasilake nilai S. Ing kasus iki, pasangan R, S minangka teken biasa sing bisa diverifikasi saka pesen pangguna sing ngemot tetep. nilai R lan data panganggo kasepakatan.

Bisa diarani yen skema iki kanggo pamblokiran ora luwih saka biasa skema commit-expand. Intine, ya, iku dheweke. Nanging ana sawetara nuansa. Sepisanan, oracle tansah dianggo karo tombol padha ing kabeh operasi, contone, iki trep kanggo nggunakake ing kontrak. Kapindho, ana risiko oracle bakal kelangan kunci pribadi yen tumindak ora bener, contone, oracle ngidini sampeyan nggawe conto asil, mula cukup kanggo nggawe rong tes kanggo ngerteni kunci pribadi lan entuk lengkap. akses menyang dompet. Katelu, teken sing bisa diverifikasi kanthi asli ing pamblokiran lan minangka sumber acak sing apik.

Nem sasi gagasan implementasine simmered ing sirah, nganti pungkasanipun motivasi muncul ing wangun hibah saka Waves Labs. Kanthi hibah gedhe teka tanggung jawab gedhe, mula proyek kasebut bakal ana!

РСализация

Dadi, ing proyek iki VECRO dileksanakake ing pamblokiran Waves ing mode request-respon nggunakake transaksi transfer antarane pangguna lan oracle. Ing wektu sing padha, skrip dipasang ing akun oracle sing ngontrol karya kanthi ketat miturut logika sing kasebut ing ndhuwur. Transaksi Oracle diverifikasi lan kabeh rantai interaksi pangguna dibalekake. Kabeh papat transaksi melu verifikasi nilai pungkasan; kontrak cerdas nggabungake benang verifikasi sing ketat, mriksa kabeh nilai kanthi langkah lan ora menehi ruang kanggo manipulasi.

Sepisan maneh, kanggo nyelehake lan nggawe luwih cetha. Oracle ora mung bisa digunakake miturut skema sing diusulake. Karya kasebut dikontrol kanthi lengkap ing tingkat blockchain dening sing diadegake tightly karo kontrak pinter. Langkah ngiwa lan transaksi mung ora bakal ditindakake. Dadi, yen transaksi kalebu ing pamblokiran, pangguna ora perlu mriksa apa-apa; atusan simpul jaringan wis mriksa kabeh kanggo dheweke.

Saiki, ana siji VECRO sing mlaku ing mainnet Waves (sampeyan bisa mbukak dhewe, ora angel, mung njupuk dipikir ing conto konfigurasi). Kode saiki mlaku ing PHP (on WavesKit, babagan kang Aku wis ngomong sadurunge).

Kanggo nggunakake layanan oracle, sampeyan kudu:

  • Ndandani R;
    • Kirimi paling ora 0.005 Gelombang menyang oracle alias init@vecr;
    • Nampa R-kode ing lapangan lampiran ing transfer 1 token R-vecr saka oracle kanggo pangguna;
  • Njaluk teken;
    • Kirimi paling ora 0.005 Gelombang kanggo oracle alias random@vecr, lan uga kudu nuduhake R-kode lan data pangguna tambahan sing ditampa sadurunge ing kolom lampiran;
    • Nampa kode S ing kolom lampiran ing transfer 1 token S-vecr saka oracle menyang pangguna;
  • Gunakake S-kode minangka sumber nomer pseudo-acak.

Nuansa saka implementasine saiki:

  • Gelombang sing dikirim menyang oracle digunakake minangka komisi kanggo transaksi bali menyang pangguna, nganti maksimal 1 Gelombang;
  • R-kode punika concatenation saka bait saka karakter 'R' lan 32-bait nilai R base58-encoded;
  • R-kode ing lampiran kudu pisanan, data pangguna teka sawise R-kode;
  • S-kode punika concatenation saka bait saka karakter 'S' lan 32-bait Nilai base58-encoded saka S;
  • S minangka asil saka divisi modulo, supaya sampeyan ora bisa nggunakake S minangka nomer pseudorandom 256-bit lengkap (nomer iki bisa dianggep minangka nomer pseudorandom maksimal 252-bit);
  • Pilihan sing paling gampang yaiku nggunakake hash S-code minangka nomer pseudo-random.

Conto nampa S-kode:

Saka sudut pandang teknis, oracle wis siap digunakake, sampeyan bisa nggunakake kanthi aman. Saka sudut pandang panggunaan pangguna rata-rata, ana kekurangan antarmuka grafis sing trep; iki kudu ngenteni.

Aku bakal seneng njawab pitakonan lan nampa komentar, matur nuwun.

Source: www.habr.com

Add a comment