Блокчейндеги санариптик кол тамгага негизделген кокустук оракул

Идеядан ишке ашырууга чейин: биз бар эллиптикалык ийри сызык санарип колтамга схемасын ал детерминисттик кылып өзгөртөбүз жана анын негизинде блокчейндин ичинде текшерилүүчү псевдо-кокус сандарды алуу функцияларын камсыз кылабыз.

Блокчейндеги санариптик кол тамгага негизделген кокустук оракул

ой

2018-жылдын күзүндө Waves блокчейн камтылган биринчи акылдуу келишимдер иштетилди, алуу мүмкүнчүлүгү жөнүндө суроо дароо пайда болду псевдордук сандарсиз ишенсе болот.

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

Бирок мага дагы эле бир идея жакты: эгерде кокустук oracle детерминисттик алгоритм менен колдонуучу маалыматтарына кол коёт, анда колдонуучу ар дайым ачык ачкычтын жардамы менен мындай кол тамганы текшере алат жана натыйжадагы маани уникалдуу экендигине ишенет. Oracle, канчалык каалабасын, эч нерсени өзгөртө албайт; алгоритм бир түшүнүктүү натыйжа берет. Негизи, колдонуучу натыйжаны жазып алат, бирок аны oracle жарыяламайынча билбейт. Көрсө, сиз такыр ишене албайсыз, бирок анын ишинин жыйынтыгын текшериңиз. Андан кийин, ийгиликтүү текшерүү учурда, мындай кол псевдордук сан үчүн энтропиянын булагы катары каралышы мүмкүн.

Waves блокчейн платформасы кол коюу схемасын колдонот EdDSA тандоо Ed25519. Бул схемада кол R жана S маанилеринен турат, мында R кокустук мааниге көз каранды, ал эми S кол коюлуп жаткан билдирүүнүн, купуя ачкычтын жана R сыяктуу кокустук сандын негизинде эсептелет. уникалдуу көз карандылык жок. Колдонуучунун билдирүүсү үчүн жарактуу кол тамгалар көп.

Албетте, анын таза түрүндө, мындай кол псевдококустук сандардын булагы катары колдонулушу мүмкүн эмес, анткени ал детерминисттик эмес, ошондуктан, оракл тарабынан оңой башкарылышы мүмкүн.

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

Менде чоң үмүт бар болчу текшерилүүчү кокустук функция (VRF), бирок аппараттык камсыздоону изилдегенден кийин, мен бул параметрден баш тартууга туура келди. VRF кол коюунун детерминисттик версиясын жана анын далилин сунуш кылса да, алгоритмде oracle манипуляциясы үчүн кара тешик ачкан кызыктай жер бар. Тактап айтканда, k маанисин эсептөөдө (5.1-бөлүм) колдонуучуга белгисиз бойдон калган купуя ачкыч колдонулат, бул колдонуучу k эсебинин тууралыгын текшере албайт, демек, oracle өзүнө керектүү kдын каалаган маанисин колдоно алат жана ошол эле учурда корреспонденциялардын маалымат базасын жүргүзө алат. VRF көз карашынан туура натыйжаны ар дайым кайра эсептей алуу үчүн k жана кол коюлган маалыматтар. Эгерде сиз VRF негизиндеги чиймени купуя ачкычты ачпай туруп көрсөңүз, анда акылдуу боло аласыз: ачкычты ачуунун зарылдыгын көрсөтүңүз, же аны k эсептөөсүнөн чыгарып салыңыз, анда купуя ачкыч автоматтык түрдө биринчи кол коюлганда өзүн көрсөтөт. . Жалпысынан алганда, буга чейин айтылгандай, кокустук Oracle үчүн кызыктай схемасы.

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

VECRO – бул Verfiable Elliptic Curve Random Oracle деген сөздүн аббревиатурасы, ал орусча эллиптикалык ийри сызыктардагы текшерилүүчү кокустук Oracle дегенди билдирет.

Баары жөнөкөй болуп чыкты; детерминизмге жетүү үчүн, кол коюла турган билдирүү пайда болгонго чейин R маанисин тактоо керек. Эгерде R аткарылса жана кол коюлуп жаткан билдирүүнүн бир бөлүгү болсо, бул андан ары R кол коюлуп жаткан билдирүүдө аткарылышын камсыздайт, S мааниси колдонуучунун билдирүүсү тарабынан уникалдуу түрдө аныкталат жана ошондуктан псевдордук сандар үчүн булак катары колдонулушу мүмкүн.

Мындай схемада R кандайча белгиленгени маанилүү эмес; бул оракулдун жоопкерчилигинде кала берет. S колдонуучу тарабынан уникалдуу аныкталышы маанилүү, бирок анын мааниси oracle аны жарыяламайынча белгисиз. Баары биз каалаган!

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

Бардыгы болуп, Oracle колдонуучуларга эки функцияны камсыз кылышы керек: R маанисин бекитүүчү инициализация жана S маанисин кайтаруучу кол тамга. Бул учурда R, S жуптары - туруктуу билдирүүнү камтыган колдонуучунун кабарынын кадимки текшерилүүчү колтамгасы. мааниси R жана ыктыярдуу колдонуучунун маалыматтары.

Бул блокчейн үчүн бул схема кадимки эле нерсе эмес деп айтууга болот commit-expand схемасы. Негизи, ооба, бул ал. Бирок бир нече нюанстар бар. Биринчиден, oracle ар дайым бардык операцияларда бир эле ачкыч менен иштейт, мисалы, бул келишимдерде колдонууга ыңгайлуу. Экинчиден, эгер ал туура эмес иш кылса, oracle купуя ачкычты жоготуп алуу коркунучу бар, мисалы, oracle натыйжанын үлгүлөрүн түзүүгө мүмкүндүк берет, анда купуя ачкычты билүү жана толук алуу үчүн эки гана тестти өткөрүү жетиштүү. капчыкка кирүү. Үчүнчүдөн, блокчейнде текшерилүүчү жана кокустуктун булагы болгон кол сулуу.

Алты ай бою ишке ашыруу идеясы менин башымда кайнап турду, акыры мотивация формасында пайда болгонго чейин Waves Labs гранты. Чоң грант менен чоң жоопкерчилик келет, ошондуктан долбоор ошол жерде болот!

Реализация

Ошентип, бул долбоордо VECRO ишке ашырылган колдонуучу менен oracle ортосундагы которуу транзакцияларын колдонуу менен суроо-жооп режиминде Waves блокчейнинде. Ошол эле учурда, жогоруда сүрөттөлгөн логикага ылайык ишти катуу көзөмөлдөгөн oracle эсебине скрипт орнотулган. Oracle транзакциялары текшерилип, колдонуучунун өз ара аракеттенүүсүнүн бүт чынжырчасы калыбына келтирилет. Бардык төрт транзакция акыркы маанини текшерүүгө катышат; акылдуу келишим аларды катуу текшерүү жип менен бириктирип, бардык баалуулуктарды этап-этабы менен текшерип, эч кандай манипуляцияга орун калтырбайт.

Дагы бир жолу, аны четке коюп, аны айкыныраак кылуу үчүн. Оракул сунуш кылынган схема боюнча эле иштебейт. Анын иши толугу менен блокчейн деңгээлинде белгиленген тарабынан көзөмөлдөнөт акылдуу келишим менен бекем. Солго кадам таштасаңыз, транзакция жөн эле өтпөй калат. Ошентип, эгерде транзакция блокчейнге киргизилсе, колдонуучу эч нерсени текшерүүнүн кереги жок; жүздөгөн тармак түйүндөр ал үчүн бардыгын текшерип коюшкан.

Учурда Waves негизги тармагында бир VECRO иштеп жатат (сиз өзүңүздү иштетсеңиз болот, бул кыйын эмес, жөн гана конфигурациянын мисалын карап көрүңүз). Учурдагы код PHPде иштейт (on WavesKit, кайсы жөнүндө Мен сага мурда айттым).

Oracle кызматын колдонуу үчүн сизге төмөнкүлөр керек:

  • Fix R;
    • Oracle лакап атына init@vecr кеминде 0.005 толкун жөнөтүңүз;
    • Тиркеме талаасында R-кодун 1 R-vecr токенин oracleдан колдонуучуга өткөрүүдө алуу;
  • Кол коюу;
    • Random@vecr каймана атына кеминде 0.005 толкун жөнөтүңүз, ошондой эле тиркеме талаасында мурда алынган R-кодун жана колдонуучунун кошумча маалыматтарын көрсөтүү КЕРЕК;
    • Тиркеме талаасында S-кодун 1 S-vecr токенин oracleдан колдонуучуга өткөрүүдө алуу;
  • S-кодун псевдококустук сандын булагы катары колдонуңуз.

Учурдагы ишке ашыруунун нюанстары:

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

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

Техникалык көз караштан алганда, oracle иштөөгө толугу менен даяр, сиз аны коопсуз колдоно аласыз. Жөнөкөй колдонуучу тарабынан колдонуунун көз карашы боюнча, ыңгайлуу графикалык интерфейстин жетишсиздиги бар, бул күтүүгө туура келет.

Мен суроолорго жооп берүүгө жана комментарийлерди кабыл алууга кубанычта болом, рахмат.

Source: www.habr.com

Комментарий кошуу