Блокчейндегі цифрлық қолтаңбаға негізделген кездейсоқ оракул

Идеядан іске асыруға дейін: біз бар эллиптикалық қисық цифрлық қолтаңба схемасын детерминирленген етіп өзгертеміз және оның негізінде блокчейнде тексерілетін жалған кездейсоқ сандарды алу функцияларын береміз.

Блокчейндегі цифрлық қолтаңбаға негізделген кездейсоқ оракул

Идея

2018 жылдың күзінде Waves блокчейніне кірді алғашқы смарт келісімшарттар іске қосылды, алу мүмкіндігі туралы бірден сұрақ туындады жалған кездейсоқ сандарсенуге болады.

Осы сұрақты таң қалдыра отырып, мен ақырында мынадай қорытындыға келдім: кез келген блокчейн - бұл жасуша; жабық жүйеде сенімді энтропия көзін алу мүмкін емес.

Бірақ маған бір идея ұнады: егер кездейсоқ оракул пайдаланушы деректеріне детерминирленген алгоритммен қол қояды, содан кейін пайдаланушы әрқашан ашық кілт арқылы мұндай қолтаңбаны тексере алады және нәтиже мәнінің бірегей екеніне сенімді болады. Oracle, қанша қаласа да, ештеңені өзгерте алмайды; алгоритм бір мәнді нәтиже береді. Негізінде, пайдаланушы нәтижені жазады, бірақ оны oracle оны жарияламайынша білмейді. Сіз оракулға мүлдем сене алмайсыз, бірақ оның жұмысының нәтижесін тексеріңіз. Содан кейін, сәтті тексеру жағдайында мұндай қолтаңбаны жалған кездейсоқ сан үшін энтропия көзі деп санауға болады.

Waves блокчейн платформасы қол қою схемасын пайдаланады EdDSA опция Ed25519. Бұл схемада қолтаңба R және S мәндерінен тұрады, мұнда R кездейсоқ мәнге тәуелді, ал S қол қойылған хабарламаға, жеке кілтке және R сияқты кездейсоқ санға байланысты есептеледі. сол үшін бірегей тәуелділік жоқ Пайдаланушы хабары үшін көптеген жарамды қолтаңбалар бар.

Әлбетте, оның таза түрінде мұндай қолтаңбаны псевдокездейсоқ сандардың көзі ретінде пайдалану мүмкін емес, өйткені ол детерминистикалық емес және сондықтан оны оракул оңай басқаруға болады.

Бірақ, белгілі болғандай, оны детерминистік етуге болады.

үлкен үміт күттім тексерілетін кездейсоқ функция (VRF), бірақ аппараттық құралдарды зерттегеннен кейін мен бұл опциядан бас тартуға тура келді. VRF қолтаңбаның детерминирленген нұсқасын және оның дәлелін ұсынса да, алгоритмде oracle манипуляциясы үшін қара тесікті ашатын біртүрлі орын бар. Атап айтқанда, k мәнін есептеу кезінде (5.1 бөлім) пайдаланушыға белгісіз болып қалатын жабық кілт пайдаланылады, яғни пайдаланушы k есептеуінің дұрыстығын тексере алмайды, яғни oracle өзіне қажет k-ның кез келген мәнін пайдалана алады және сонымен бірге корреспонденциялар базасын жүргізе алады. k және қол қойылған деректер әрқашан VRF тұрғысынан дұрыс нәтижені қайта есептеу мүмкіндігі болуы үшін. Егер сіз VRF негізіндегі сызбаны құпия кілтті ашпай-ақ көрсеңіз, сіз ақылды бола аласыз: кілтті ашу қажеттілігін көрсетіңіз немесе оны k есебінен алып тастаңыз, содан кейін бірінші қолтаңба пайда болған кезде жеке кілт автоматты түрде ашылады. . Жалпы, жоғарыда айтылғандай, кездейсоқ оракул үшін оғаш схема.

Біраз ойланып, жергілікті сарапшылардың қолдауына жүгінгеннен кейін VECRO жұмыс схемасы дүниеге келді.

VECRO — Verfiable Elliptic Curve Random Oracle сөзінің аббревиатурасы, ол орыс тілінде эллиптикалық қисықтардағы тексерілетін кездейсоқ оракул дегенді білдіреді.

Барлығы өте қарапайым болып шықты; детерминизмге қол жеткізу үшін қол қойылатын хабарлама пайда болғанға дейін R мәнін түзету керек. Егер R орындалса және қол қойылып жатқан хабарламаның бөлігі болса, бұл R қол қойылған хабарламада орындалуын одан әрі қамтамасыз етеді, S мәні пайдаланушы хабарламасымен бірегей түрде анықталады және сондықтан жалған кездейсоқ сандар үшін көз ретінде пайдаланылуы мүмкін.

Мұндай схемада R қалай бекітілгені маңызды емес, бұл оракулдың жауапкершілігі болып қала береді. S пайдаланушының бірегей анықтауы маңызды, бірақ оның мәні oracle оны жарияламайынша белгісіз. Біз қалағанның бәрі!

Бекітілген R туралы айтатын болсақ, мынаны ескеріңіз қайта пайдаланылған Р әртүрлі хабарламаларға қол қою кезінде ол EdDSA схемасындағы жеке кілтті бірегей түрде көрсетеді. Oracle иесі үшін әртүрлі пайдаланушы хабарларына қол қою үшін R қайта пайдалану мүмкіндігін жою өте маңызды болады. Яғни, кез келген манипуляция немесе сөз байласу кезінде oracle әрқашан өзінің жеке кілтін жоғалту қаупіне ұшырайды.

Жалпы алғанда, oracle пайдаланушыларға екі функцияны қамтамасыз етуі керек: R мәнін бекітетін инициализация және S мәнін қайтаратын қолтаңба. Бұл жағдайда R, S жұбы тіркелген хабарламасы бар пайдаланушы хабарламасының әдеттегі тексерілетін қолтаңбасы болып табылады. R мәні және пайдаланушының ерікті деректері.

Блокчейнге арналған бұл схема қарапайымнан басқа ештеңе емес деп айтуға болады міндеттеу-кеңейту схемасы. Негізінде, иә, бұл ол. Бірақ бірнеше нюанстар бар. Біріншіден, oracle барлық операцияларда әрқашан бірдей кілтпен жұмыс істейді, мысалы, бұл келісім-шарттарда қолдануға ыңғайлы. Екіншіден, егер ол дұрыс әрекет етпесе, oracle жеке кілтті жоғалту қаупі бар, мысалы, oracle нәтиженің үлгілерін жасауға мүмкіндік береді, содан кейін жеке кілтті анықтау және толық алу үшін тек екі сынақтан өту жеткілікті. әмиянға қол жеткізу. Үшіншіден, блокчейнде табиғи түрде тексерілетін және кездейсоқтықтың көзі болып табылатын қолтаңба әдемі.

Алты ай бойы іске асыру идеясы менің басымда болды, соңында мотивация түрінде пайда болғанға дейін Waves Labs гранты. Үлкен грантпен үлкен жауапкершілік келеді, сондықтан жоба сонда болады!

Реализация

Сонымен, бұл жобада VECRO енгізілді пайдаланушы мен oracle арасындағы тасымалдау транзакцияларын пайдалана отырып, сұрау-жауап режимінде Waves блокчейнінде. Бұл ретте oracle тіркелгісінде жұмысты жоғарыда сипатталған логикаға сәйкес қатаң басқаратын сценарий орнатылған. Oracle транзакциялары тексеріледі және пайдаланушының өзара әрекеттесуінің бүкіл тізбегі қалпына келтірілді. Барлық төрт транзакция түпкілікті мәнді тексеруге қатысады; смарт келісімшарт оларды қатаң тексеру ағынымен біріктіреді, барлық мәндерді кезең-кезеңімен тексереді және ешқандай манипуляцияға орын қалдырмайды.

Тағы бір рет, оны бір жаққа қойып, түсінікті ету үшін. Оракл ұсынылған схемаға сәйкес жұмыс істемейді. Оның жұмысы бекітілген блокчейн деңгейінде толығымен бақыланады ақылды келісімшартпен тығыз. Солға қадам жасаңыз, транзакция жай ғана орындалмайды. Сонымен, егер транзакция блокчейнге қосылса, пайдаланушыға ештеңені тексерудің қажеті жоқ; жүздеген желі түйіндері ол үшін бәрін тексеріп қойған.

Қазіргі уақытта Waves негізгі желісінде бір VECRO жұмыс істейді (сіз өзіңізді іске қоса аласыз, бұл қиын емес, жай ғана конфигурация үлгісін қараңыз). Ағымдағы код PHP тілінде жұмыс істейді (қосу WavesKit, ол туралы Мен сізге бұрын айттым).

Oracle қызметін пайдалану үшін сізге қажет:

  • Fix R;
    • Oracle бүркеншік атына init@vecr кем дегенде 0.005 толқын жіберіңіз;
    • Пайдаланушыға oracle-дан 1 R-vecr таңбалауышын тасымалдау кезінде тіркеме өрісінде R-кодын алыңыз;
  • Қол қою;
    • Random@vecr oracle бүркеншік атына кемінде 0.005 толқын жіберіңіз, сонымен қатар тіркеме өрісінде бұрын алынған R-кодын және қосымша пайдаланушы деректерін көрсетуі МІНДЕТТІ;
    • Oracle-дан пайдаланушыға 1 S-vecr таңбалауышын тасымалдау кезінде тіркеме өрісінде S-кодын алыңыз;
  • Pseudo-кездейсоқ санның көзі ретінде S-кодын пайдаланыңыз.

Ағымдағы енгізудің нюанстары:

  • Oracle-ға жіберілген толқындар пайдаланушыға қайтару транзакциясы үшін комиссия ретінде пайдаланылады, максимум 1 толқынға дейін;
  • R-код - 'R' таңбасының байт пен 32 байт базасы58-кодталған R мәнінің конкатенциясы;
  • Қосымшадағы R-код бірінші болуы керек, пайдаланушы деректері R-кодынан кейін келеді;
  • S-код – 'S' таңбасының байтының және S-тің 32 байт базасы58-кодталған мәнінің конкатенциясы;
  • S модульді бөлудің нәтижесі болып табылады, сондықтан S толық 256-биттік жалған кездейсоқ сан ретінде пайдалана алмайсыз (бұл санды ең көбі 252-биттік жалған кездейсоқ сан деп санауға болады);
  • Ең қарапайым нұсқа - S-код хэшін псевдокездейсоқ сан ретінде пайдалану.

S-кодын алудың мысалы:

Техникалық тұрғыдан алғанда, oracle жұмысқа толығымен дайын, оны қауіпсіз пайдалануға болады. Қарапайым пайдаланушының пайдалану тұрғысынан ыңғайлы графикалық интерфейс жоқ, бұл күтуге тура келеді.

Мен сұрақтарға жауап беруге және пікірлерді қабылдауға қуаныштымын, рахмет.

Ақпарат көзі: www.habr.com

пікір қалдыру