Oracle acak dumasar kana tanda tangan digital dina blockchain

Tina ide pikeun palaksanaan: urang ngarobih skéma tanda tangan digital kurva elliptic anu aya supados deterministik, sareng dumasar kana éta kami nyayogikeun fungsi pikeun kéngingkeun nomer pseudo-acak anu tiasa diverifikasi dina blockchain.

Oracle acak dumasar kana tanda tangan digital dina blockchain

gagasan

Dina usum gugur 2018, blockchain Waves kalebet kontrak pinter munggaran diaktipkeun, patarosan langsung timbul ngeunaan kamungkinan meunangkeun angka pseudorandomnu bisa dipercaya.

Puzzling kana patarosan ieu, tungtungna kuring dugi ka kacindekan: blokchain naon waé mangrupikeun sél; mustahil pikeun kéngingkeun sumber éntropi anu dipercaya dina sistem katutup.

Tapi kuring masih resep hiji gagasan: lamun oracle acak bakal nandatanganan data pamaké kalawan algoritma deterministik, mangka pamaké bakal salawasna bisa pariksa signature misalna ngagunakeun konci publik, sarta bakal pastikeun yén nilai hasilna unik. Oracle, henteu paduli kumaha kahayangna, henteu tiasa ngarobih nanaon; algoritma ngahasilkeun hasil anu teu jelas. Intina, pangguna ngarékam hasilna, tapi henteu terang dugi ka oracle nyebarkeunana. Tétéla anjeun teu tiasa percanten ka Oracle, tapi pariksa hasil karyana. Lajeng, dina hal verifikasi suksés, signature misalna bisa dianggap sumber éntropi pikeun angka pseudorandom.

Platform blockchain Waves ngagunakeun skéma tanda tangan EdDSA pilihan Ed25519. Dina skéma ieu, tanda tangan diwangun ku nilai R sareng S, dimana R gumantung kana nilai acak, sareng S diitung dumasar kana pesen anu ditandatanganan, konci pribadi sareng nomer acak anu sami sareng R. Tétéla éta euweuh gumantungna unik keur sarua Aya loba tanda tangan valid pikeun pesen pamaké.

Jelas, dina bentuk murni, tanda tangan sapertos kitu henteu tiasa dianggo salaku sumber nomer pseudo-acak, sabab éta henteu deterministik sareng, ku kituna, tiasa gampang dimanipulasi ku oracle.

Tapi, sakumaha tétéla, éta sabenerna mungkin nyieun deterministik.

Kuring kungsi harepan gede pikeun fungsi acak diverifikasi (VRF), Tapi sanggeus diajar hardware, Kuring kungsi abandon pilihan ieu. Sanajan VRF nawarkeun versi deterministik tina tanda tangan jeung buktina, aya hiji tempat aneh dina algoritma nu muka black hole pikeun manipulasi Oracle nu. Nyaéta, nalika ngitung nilai k (bagian 5.1) konci swasta dipaké, nu tetep kanyahoan ku pamaké, nu hartina pamaké teu bisa pariksa correctness tina itungan k, nu hartina oracle nu bisa ngagunakeun sagala nilai k eta perlu tur dina waktos anu sareng ngajaga database of correspondences. tina k sareng data anu ditandatanganan supados salawasna tiasa ngitung deui hasil anu leres tina sudut pandang VRF. Upami anjeun ningali gambar dumasar kana VRF tanpa ngungkabkeun konci pribadi, anjeun tiasa pinter: nunjukkeun kabutuhan pikeun ngungkabkeun konci, atanapi ngaluarkeun tina itungan k, teras konci pribadi bakal otomatis nembongkeun diri nalika tandatangan munggaran muncul. . Sacara umum, sakumaha geus disebutkeun, skéma aneh pikeun Oracle acak.

Saatos pamikiran sakedik sareng nampi dukungan analis lokal, skéma kerja VECRO lahir.

VECRO mangrupa singketan pikeun Verifiable Elliptic Curve Random Oracle, anu dina basa Rusia hartina verifiable random Oracle dina kurva elliptic.

Sagalana tétéla cukup basajan; pikeun ngahontal determinism, anjeun kudu ngalereskeun nilai R saméméh pesen bakal ditandatanganan mucunghul. Lamun Sunda geus komitmen sarta mangrupa bagian tina suratna keur ditandatanganan, nu salajengna ensures yén Sunda geus komitmen dina suratna keur ditandatanganan, nilai S ieu uniquely ditangtukeun ku pesen pamaké sarta ku kituna bisa dipaké salaku sumber pikeun angka pseudorandom.

Dina skéma sapertos kitu, henteu masalah kumaha R dibenerkeun; ieu tetep tanggung jawab oracle. Kadé S anu uniquely ditangtukeun ku pamaké, tapi nilai na teu kanyahoan dugi Oracle nu publishes eta. Sagalana urang hayang!

Diomongkeun ngeunaan basa Sunda maneuh, perhatikeun éta dipaké deui R nalika nandatanganan rupa-rupa pesen, sacara unik nembongkeun konci pribadi dina skéma EdDSA. Janten penting pisan pikeun nu gaduh oracle pikeun ngaleungitkeun kamungkinan ngagunakeun deui basa Sunda pikeun ngadaptarkeun pesen pangguna anu béda. Nyaéta, kalayan sagala manipulasi atanapi kolusi, oracle bakal salawasna résiko kaleungitan konci pribadina.

Dina total, oracle kudu nyadiakeun pamaké kalawan dua fungsi: initialization, nu nangtukeun nilai R, sarta signature, nu mulih nilai S. Dina hal ieu, pasangan R, S teh biasa verifiable signature tina pesen pamaké ngandung hiji tetep. nilai R jeung data pamaké wenang.

Ieu bisa pamadegan yén skéma ieu pikeun blockchain teu leuwih ti biasa skéma komitmen-ngalegaan. Intina, enya, éta manéhna. Tapi aya sababaraha nuances. Anu mimiti, Oracle sok dianggo sareng konci anu sami dina sadaya operasi, contona, éta gampang dianggo dina kontrak. Kadua, aya résiko Oracle kaleungitan konci pribadi upami kalakuanana henteu leres, contona, Oracle ngamungkinkeun anjeun ngadamel conto hasilna, maka cukup ngan ukur dua tés pikeun mendakan konci pribadi sareng kéngingkeun pinuh. aksés ka dompét. Katilu, tanda tangan anu asli tiasa diverifikasi dina blockchain sareng mangrupikeun sumber acak anu saé.

Salila genep bulan gagasan palaksanaan simmered dina sirah kuring, nepi ka tungtungna motivasi mucunghul dina formulir hibah ti Waves Labs. Kalawan hibah badag asalna tanggung jawab hébat, jadi proyék bakal aya!

Реализация

Ku kituna, dina proyék ieu VECRO dilaksanakeun dina blockchain Waves dina modeu pamundut-réspon nganggo transaksi transfer antara pangguna sareng Oracle. Dina waktos anu sami, skrip dipasang dina akun Oracle anu ngatur padamelan sacara ketat saluyu sareng logika anu dijelaskeun di luhur. Transaksi Oracle diverifikasi sareng sadaya ranté interaksi pangguna disimpen deui. Opat transaksi aub dina verifikasi nilai ahir; kontrak pinter nyertakeun aranjeunna sareng benang verifikasi anu ketat, mariksa sadaya nilai léngkah-léngkah sareng henteu ngantepkeun rohangan pikeun manipulasi naon waé.

Sakali deui, nempatkeun eta kumisan jeung nyieun leuwih jelas. Oracle henteu ngan ukur dianggo dumasar kana skéma anu diusulkeun. Karyana sagemblengna dikawasa dina tingkat blockchain ku ngadegkeun kedap ku kontrak pinter. Lengkah ka kénca jeung transaksi saukur moal ngaliwatan. Janten, upami transaksi kalebet kana blokchain, pangguna henteu kedah mariksa nanaon; ratusan titik jaringan parantos pariksa sadayana pikeun anjeunna.

Ayeuna, aya hiji VECRO jalan dina mainnet Waves (anjeun tiasa ngajalankeun sorangan, teu hese, ngan tingali dina conto konfigurasi). Kodeu ayeuna dijalankeun dina PHP (on WavesKit, ngeunaan naon Abdi nyarios ka anjeun tadi).

Pikeun ngagunakeun jasa oracle anjeun kedah:

  • Ngalereskeun R;
    • Kirim sahenteuna 0.005 Gelombang ka oracle alias init@vecr;
    • Nampi R-kode dina widang kantétan dina mindahkeun 1 R-vecr token ti Oracle ka pamaké;
  • Meunang tanda tangan;
    • Kirimkeun sahenteuna 0.005 Gelombang ka oracle alias random@vecr, sareng WAJIB nunjukkeun kodeu R-kode anu ditampi sareng data pangguna tambahan dina kolom lampiran;
    • Nampi S-kode dina widang kantétan dina mindahkeun 1 token S-vecr ti Oracle ka pamaké;
  • Paké S-kode salaku sumber angka pseudo-acak.

Nuances tina palaksanaan ayeuna:

  • Gelombang dikirim ka oracle dipaké salaku komisi pikeun urus balik ka pamaké, nepi ka maksimum 1 Gelombang;
  • R-code mangrupikeun gabungan tina bait karakter 'R' sareng nilai basa Sunda anu disandikeun base32 58-bait;
  • R-kode dina lampiran kedah kahiji, data pamaké asalna sanggeus R-kode;
  • S-kode nyaéta gabungan bait tina karakter 'S' sarta 32-bait nilai base58-disandikeun tina S;
  • S mangrupa hasil tina division modulo, jadi Anjeun teu bisa make S salaku angka pseudorandom 256-bit pinuh (jumlah ieu bisa dianggap maksimum 252-bit angka pseudorandom);
  • Pilihan pangbasajanna nyaéta ngagunakeun S-kode Hash salaku angka pseudo-acak.

Conto narima S-kode:

Tina sudut pandang téknis, oracle parantos siap damel, anjeun tiasa nganggo aman. Tina sudut pandang anu dianggo ku pangguna rata-rata, aya kakurangan antarmuka grafis anu pikaresepeun; ieu kedah ngantosan.

Abdi bakal resep ngajawab patarosan sareng nampi koméntar, hatur nuhun.

sumber: www.habr.com

Tambahkeun komentar