Blockchain-dagi raqamli imzoga asoslangan tasodifiy oracle

G'oyadan amalga oshirishgacha: biz mavjud elliptik egri chiziqli raqamli imzo sxemasini deterministik bo'lishi uchun o'zgartiramiz va uning asosida biz blokcheyn ichida tekshirilishi mumkin bo'lgan psevdo-tasodifiy raqamlarni olish funktsiyalarini taqdim etamiz.

Blockchain-dagi raqamli imzoga asoslangan tasodifiy oracle

Fikr

2018 yilning kuzida Waves blokcheyni kiritilgan birinchi aqlli kontraktlar faollashtirildi, darhol olish imkoniyati haqida savol tug'ildi psevdor tasodifiy raqamlarsiz ishonishingiz mumkin.

Bu savol ustida bosh qotirib, men nihoyat shunday xulosaga keldim: har qanday blokcheyn - bu hujayra, yopiq tizimda ishonchli entropiya manbasini olish mumkin emas.

Lekin menga hali ham bitta fikr yoqdi: agar tasodifiy oracle foydalanuvchi ma'lumotlarini deterministik algoritm bilan imzolaydi, keyin foydalanuvchi har doim ochiq kalit yordamida bunday imzoni tekshirish imkoniyatiga ega bo'ladi va natijada olingan qiymat yagona ekanligiga ishonch hosil qiladi. Oracle, qanchalik qiyin bo'lmasin, hech narsani o'zgartira olmaydi; algoritm aniq natija beradi. Aslida, foydalanuvchi natijani yozib oladi, lekin uni oracle nashr etmaguncha bilmaydi. Ma'lum bo'lishicha, siz oracle-ga umuman ishonolmaysiz, lekin uning ishining natijasini tekshiring. Keyin, muvaffaqiyatli tekshirilgan taqdirda, bunday imzo soxta tasodifiy raqam uchun entropiya manbai deb hisoblanishi mumkin.

Waves blokcheyn platformasi imzo sxemasidan foydalanadi EdDSA variantni tanlang Ed25519. Ushbu sxemada imzo R va S qiymatlaridan iborat bo'lib, bu erda R tasodifiy qiymatga bog'liq va S imzolanayotgan xabar, shaxsiy kalit va R bilan bir xil tasodifiy raqam asosida hisoblanadi. o'ziga xos bog'liqlik yo'q. Foydalanuvchi xabari uchun ko'plab haqiqiy imzolar mavjud.

Shubhasiz, sof shaklda bunday imzoni psevdo-tasodifiy raqamlar manbai sifatida ishlatish mumkin emas, chunki u deterministik emas va shuning uchun oracle tomonidan osongina boshqarilishi mumkin.

Ammo, ma'lum bo'lishicha, uni deterministik qilish mumkin.

Menda katta umidlar bor edi tekshiriladigan tasodifiy funktsiya (VRF), lekin apparatni o'rganib chiqqanimdan so'ng, men bu variantdan voz kechishim kerak edi. VRF imzoning deterministik versiyasini va uning isbotini taklif qilsa-da, algoritmda oracle bilan manipulyatsiya qilish uchun qora tuynukni ochadigan g'alati joy mavjud. Ya'ni, k qiymatini hisoblashda (5.1-qism) foydalanuvchi uchun noma'lum bo'lib qoladigan shaxsiy kalit ishlatiladi, ya'ni foydalanuvchi k hisobining to'g'riligini tekshira olmaydi, ya'ni oracle o'ziga kerak bo'lgan k ning istalgan qiymatidan foydalanishi va shu bilan birga yozishmalar ma'lumotlar bazasini yuritishi mumkin. VRF nuqtai nazaridan har doim to'g'ri natijani qayta hisoblash imkoniyatiga ega bo'lish uchun k va imzolangan ma'lumotlar. Agar siz VRF-ga asoslangan chizmani shaxsiy kalitni oshkor qilmasdan ko'rsangiz, aqlli bo'lishingiz mumkin: kalitni ochish yoki uni k hisobidan chiqarib tashlash zarurligini ko'rsating, keyin birinchi imzo paydo bo'lganda shaxsiy kalit avtomatik ravishda o'zini namoyon qiladi. . Umuman olganda, yuqorida aytib o'tilganidek, tasodifiy oracle uchun g'alati sxema.

Bir oz o'ylab va mahalliy tahlilchilarning yordamiga murojaat qilgandan so'ng, VECRO ish sxemasi tug'ildi.

VECRO - Verfiable Elliptic Curve Random Oracle so'zining qisqartmasi bo'lib, rus tilida elliptik egri chiziqlardagi tekshiriladigan tasodifiy oracle degan ma'noni anglatadi.

Hammasi juda oddiy bo'lib chiqdi, determinizmga erishish uchun imzolanishi kerak bo'lgan xabar paydo bo'lishidan oldin R qiymatini tuzatish kerak. Agar R imzolangan bo'lsa va imzolanayotgan xabarning bir qismi bo'lsa, bu esa qo'shimcha ravishda imzolanayotgan xabarda R ning bajarilishini ta'minlaydi, S qiymati foydalanuvchi xabari tomonidan yagona tarzda aniqlanadi va shuning uchun psevdor tasodifiy raqamlar uchun manba sifatida foydalanish mumkin.

Bunday sxemada R qanday aniqlanganligi muhim emas, bu oracle mas'uliyati bo'lib qoladi. S foydalanuvchi tomonidan yagona aniqlanishi muhim, lekin uning qiymati oracle uni nashr etmaguncha noma'lum. Biz xohlagan hamma narsa!

Ruxsat etilgan R haqida gapirganda, e'tibor bering qayta ishlatilgan R turli xabarlarni imzolashda u EdDSA sxemasida shaxsiy kalitni noyob tarzda ochib beradi. Oracle egasi uchun turli xil foydalanuvchi xabarlarini imzolash uchun R dan qayta foydalanish imkoniyatini yo'q qilish juda muhim bo'ladi. Ya'ni, har qanday manipulyatsiya yoki til biriktirish bilan oracle har doim shaxsiy kalitini yo'qotish xavfini tug'diradi.

Umuman olganda, oracle foydalanuvchilarga ikkita funktsiyani taqdim etishi kerak: R qiymatini aniqlaydigan ishga tushirish va S qiymatini qaytaruvchi imzo. qiymati R va o'zboshimchalik foydalanuvchi ma'lumotlari.

Ta'kidlash joizki, blokcheyn uchun ushbu sxema oddiydan boshqa narsa emas commit-kengaytirish sxemasi. Aslida, ha, bu uning o'zi. Ammo bir nechta nuanslar mavjud. Birinchidan, oracle har doim barcha operatsiyalarda bir xil kalit bilan ishlaydi, masalan, shartnomalarda foydalanish qulay. Ikkinchidan, agar u noto'g'ri ishlasa, oracle shaxsiy kalitni yo'qotish xavfi mavjud, masalan, oracle sizga natija namunalarini yaratishga imkon beradi, keyin shaxsiy kalitni aniqlash va to'liq ma'lumot olish uchun faqat ikkita test o'tkazish kifoya. hamyonga kirish. Uchinchidan, blokcheynda tekshirilishi mumkin bo'lgan va tasodifiylik manbai bo'lgan imzo chiroyli.

Olti oy davomida amalga oshirish g'oyasi mening boshimda turdi, oxir oqibat shaklda motivatsiya paydo bo'lguncha. Waves Labs granti. Katta grant bilan katta mas'uliyat keladi, shuning uchun loyiha u erda bo'ladi!

РСализация

Shunday qilib, ushbu loyihada VECRO amalga oshirildi foydalanuvchi va oracle o'rtasidagi transfer operatsiyalari yordamida so'rov-javob rejimida Waves blokcheynida. Shu bilan birga, oracle hisobiga skript o'rnatilgan bo'lib, u yuqorida tavsiflangan mantiqqa muvofiq ishni qat'iy nazorat qiladi. Oracle tranzaktsiyalari tekshiriladi va foydalanuvchi o'zaro munosabatlarining butun zanjiri tiklanadi. Barcha to'rtta tranzaksiya yakuniy qiymatni tekshirishda ishtirok etadi; aqlli shartnoma ularni qat'iy tekshirish chizig'i bilan birlashtiradi, barcha qiymatlarni bosqichma-bosqich tekshiradi va hech qanday manipulyatsiya uchun joy qoldirmaydi.

Yana bir bor, uni bir chetga surib, aniqroq qilish uchun. Oracle faqat taklif qilingan sxema bo'yicha ishlamaydi. Uning ishi o'rnatilgan tomonidan blokcheyn darajasida to'liq nazorat qilinadi aqlli shartnoma bilan mahkam. Chapga qadam qo'ying va tranzaksiya amalga oshmaydi. Shunday qilib, agar tranzaktsiya blokcheynga kiritilgan bo'lsa, foydalanuvchi hech narsani tekshirishi shart emas, yuzlab tarmoq tugunlari u uchun hamma narsani tekshirib ko'rgan.

Hozirda Waves asosiy tarmog'ida bitta VECRO ishlamoqda (siz o'zingizni boshqarishingiz mumkin, bu qiyin emas, shunchaki konfiguratsiya misolini ko'rib chiqing). Joriy kod PHP da ishlaydi (on WavesKit, qaysi haqida Oldinroq aytdim).

Oracle xizmatidan foydalanish uchun sizga kerak:

  • R tuzatish;
    • Oracle taxallusi init@vecr ga kamida 0.005 to'lqin yuboring;
    • Oracledan foydalanuvchiga 1 ta R-vecr tokenini uzatishda biriktirma maydonida R-kodni oling;
  • Imzo oling;
    • Random@vecr oracle taxallusiga kamida 0.005 to'lqin yuboring, shuningdek, biriktirilgan maydonda ilgari olingan R-kodni va qo'shimcha foydalanuvchi ma'lumotlarini ko'rsatishi KERAK;
    • Oracle'dan foydalanuvchiga 1 S-vecr tokenini o'tkazishda biriktirma maydonida S-kodni oling;
  • Pseudo-tasodifiy raqam manbai sifatida S-koddan foydalaning.

Joriy amalga oshirishning nuanslari:

  • Oraclega yuborilgan to'lqinlar foydalanuvchiga qaytarish tranzaktsiyasi uchun komissiya sifatida ishlatiladi, maksimal 1 To'lqin;
  • R-kod - bu "R" belgisidagi bayt va 32 baytlik baza58-kodlangan R qiymatini birlashtirish;
  • Ilovadagi R-kodi birinchi bo'lishi kerak, foydalanuvchi ma'lumotlari R-koddan keyin keladi;
  • S-kod - 'S' belgisi bayti va S ning 32 baytlik baza58-kodlangan qiymatining birlashmasi;
  • S modul bo'linishi natijasidir, shuning uchun siz S ni to'liq 256 bitli psevdor tasodifiy raqam sifatida ishlata olmaysiz (bu raqamni maksimal 252 bitli psevdor tasodifiy raqam deb hisoblash mumkin);
  • Eng oddiy variant S-kod xeshini psevdo-tasodifiy raqam sifatida ishlatishdir.

S-kodni olish misoli:

Texnik nuqtai nazardan, oracle ishlashga to'liq tayyor, siz uni xavfsiz ishlatishingiz mumkin. Oddiy foydalanuvchi tomonidan foydalanish nuqtai nazaridan, qulay grafik interfeysning etishmasligi mavjud, bu kutishga to'g'ri keladi.

Men savollarga javob berishdan va sharhlarni qabul qilishdan xursand bo'laman, rahmat.

Manba: www.habr.com

a Izoh qo'shish