Blockchain-də rəqəmsal imzaya əsaslanan təsadüfi oracle

İdeyadan həyata keçirməyə: biz mövcud elliptik əyri rəqəmsal imza sxemini deterministik olması üçün dəyişdiririk və onun əsasında blokçeyn daxilində yoxlanıla bilən psevdo-təsadüfi nömrələrin əldə edilməsi funksiyalarını təmin edirik.

Blockchain-də rəqəmsal imzaya əsaslanan təsadüfi oracle

Fikir

2018-ci ilin payızında Waves blokçeyninə daxil oldu ilk ağıllı müqavilələr aktivləşdirildi, əldə etmək mümkünlüyü barədə dərhal sual yarandı psevdor təsadüfi nömrələrki, etibar edə bilərsiniz.

Bu sualı çaşdıraraq, nəhayət, belə bir nəticəyə gəldim: istənilən blokçeyn hüceyrədir; qapalı sistemdə etibarlı entropiya mənbəyi əldə etmək mümkün deyil.

Amma yenə də bir fikri bəyəndim: əgər təsadüfi oracle istifadəçi məlumatlarını deterministik alqoritmlə imzalayacaq, onda istifadəçi həmişə açıq açardan istifadə edərək belə imzanı yoxlaya biləcək və nəticədə alınan dəyərin unikal olduğuna əmin olacaq. Oracle, nə qədər istəsə də, heç nəyi dəyişdirə bilmir; alqoritm birmənalı nəticə verir. Əslində, istifadəçi nəticəni qeyd edir, lakin oracle onu dərc edənə qədər onu bilmir. Belə çıxır ki, oracle heç etibar edə bilməzsiniz, amma işinin nəticəsini yoxlayın. Sonra, uğurlu yoxlama halında, belə bir imza psevdor təsadüfi bir nömrə üçün entropiya mənbəyi hesab edilə bilər.

Waves blokçeyn platforması imza sxemindən istifadə edir EdDSA seçimi Ed25519. Bu sxemdə imza R və S dəyərlərindən ibarətdir, burada R təsadüfi qiymətdən asılıdır, S isə imzalanan mesaj, şəxsi açar və R ilə eyni təsadüfi nömrə əsasında hesablanır. eyni üçün unikal asılılıq yoxdur İstifadəçi mesajı üçün çoxlu etibarlı imzalar var.

Aydındır ki, təmiz formada belə bir imza psevdo-təsadüfi nömrələrin mənbəyi kimi istifadə edilə bilməz, çünki o, qeyri-deterministikdir və buna görə də oracle tərəfindən asanlıqla manipulyasiya edilə bilər.

Ancaq məlum oldu ki, onu deterministik etmək əslində mümkündür.

böyük ümidlərim vardı yoxlanıla bilən təsadüfi funksiya (VRF), lakin aparatı öyrəndikdən sonra bu seçimdən imtina etməli oldum. VRF imzanın və onun sübutunun deterministik versiyasını təklif etsə də, alqoritmdə oracle ilə manipulyasiya üçün qara dəlik açan qəribə bir yer var. Məhz, k dəyərini hesablayarkən (bölmə 5.1) istifadəçiyə naməlum olaraq qalan şəxsi açardan istifadə edilir, bu o deməkdir ki, istifadəçi k-nin hesablanmasının düzgünlüyünü yoxlaya bilmir, yəni oracle k-nin ehtiyac duyduğu istənilən dəyərindən istifadə edə bilər və eyni zamanda yazışmalar bazasını saxlaya bilər. k və imzalanmış məlumatları həmişə VRF nöqteyi-nəzərindən düzgün nəticəni yenidən hesablaya bilmək üçün. Şəxsi açarı açıqlamadan VRF-ə əsaslanan rəsm görürsünüzsə, ağıllı ola bilərsiniz: ya açarın açılmasının zəruriliyini göstərin, ya da k hesabından xaric edin, onda ilk imza görünəndə şəxsi açar avtomatik olaraq özünü göstərəcək. . Ümumiyyətlə, artıq qeyd edildiyi kimi, təsadüfi bir oracle üçün qəribə bir sxem.

Bir az fikirləşdikdən və yerli analitiklərin dəstəyindən sonra VECRO iş sxemi yarandı.

VECRO Verfiable Elliptic Curve Random Oracle sözünün abbreviaturasıdır, rus dilində elliptik əyrilərdə yoxlanıla bilən təsadüfi oracle deməkdir.

Hər şey olduqca sadə oldu; determinizmə nail olmaq üçün imzalanacaq mesaj görünməzdən əvvəl R dəyərini düzəltmək lazımdır. Əgər R yerinə yetirilibsə və imzalanan mesajın bir hissəsidirsə, bu, R-nin imzalanan mesajda əlavə olunmasını təmin edir, S dəyəri istifadəçinin mesajı ilə unikal şəkildə müəyyən edilir və buna görə də psevdor təsadüfi nömrələr üçün mənbə kimi istifadə edilə bilər.

Belə bir sxemdə R-nin necə sabitlənməsinin əhəmiyyəti yoxdur; bu, oracle-ın məsuliyyətində qalır. S-nin istifadəçi tərəfindən unikal şəkildə müəyyən edilməsi vacibdir, lakin oracle onu dərc edənə qədər onun dəyəri məlum deyil. İstədiyimiz hər şey!

Sabit R-dən danışarkən, qeyd edin təkrar istifadə edilən R müxtəlif mesajları imzalayarkən, o, EdDSA sxemində özəl açarı unikal şəkildə ortaya qoyur. Oracle sahibi üçün fərqli istifadəçi mesajlarını imzalamaq üçün R-dən təkrar istifadə etmək imkanını aradan qaldırmaq son dərəcə vacib olur. Yəni hər hansı manipulyasiya və ya sövdələşmə ilə oracle həmişə şəxsi açarını itirmək riski ilə üzləşəcək.

Ümumilikdə, oracle istifadəçilərə iki funksiya təqdim etməlidir: R dəyərini təyin edən inisializasiya və S dəyərini qaytaran imza. Bu halda, R, S cütlüyü sabit olan istifadəçi mesajının adi yoxlana bilən imzasıdır. dəyəri R və ixtiyari istifadəçi məlumatları.

Blockchain üçün bu sxemin adi bir şeydən başqa bir şey olmadığını iddia etmək olar commit-expand sxemi. Əslində, bəli, odur. Ancaq bir neçə nüans var. Birincisi, oracle həmişə bütün əməliyyatlarda eyni açarla işləyir, məsələn, müqavilələrdə istifadə etmək rahatdır. İkincisi, oracle düzgün davranmadığı təqdirdə şəxsi açarı itirmək riski var, məsələn, oracle nəticənin nümunələrini yaratmağa imkan verir, o zaman şəxsi açarı tapmaq və tam məlumat əldə etmək üçün yalnız iki test etmək kifayətdir. cüzdana giriş. Üçüncüsü, blokçeynində yerli olaraq yoxlana bilən və təsadüfilik mənbəyi olan imza gözəldir.

Altı ay ərzində həyata keçirmək fikri beynimdə qaynadı, nəhayət formada motivasiya görünənə qədər Waves Labs-dan qrant. Böyük bir qrantla böyük məsuliyyət gəlir, buna görə də layihə orada olacaq!

Tətbiq

Beləliklə, bu layihədə VECRO həyata keçirildi istifadəçi və oracle arasında köçürmə əməliyyatlarından istifadə edərək sorğu-cavab rejimində Waves blokçeynində. Eyni zamanda, oracle hesabında yuxarıda təsvir olunan məntiqə uyğun olaraq işi ciddi şəkildə idarə edən bir skript quraşdırılmışdır. Oracle əməliyyatları yoxlanılır və bütün istifadəçi qarşılıqlı əlaqə zənciri bərpa olunur. Dörd əməliyyatın hamısı yekun dəyərin yoxlanılmasında iştirak edir; ağıllı müqavilə onları ciddi yoxlama xətti ilə birləşdirir, bütün dəyərləri addım-addım yoxlayır və heç bir manipulyasiyaya yer qoymur.

Bir daha onu bir kənara qoyub aydınlaşdırmaq üçün. Oracle yalnız təklif olunan sxemə uyğun işləmir. Onun işi tamamilə blokcheyn səviyyəsində qurulan tərəfindən idarə olunur ağıllı müqavilə ilə möhkəm. Sola addımlayın və əməliyyat sadəcə keçməyəcək. Beləliklə, əgər əməliyyat blokçeynə daxil edilibsə, istifadəçinin heç nəyi yoxlamağa belə ehtiyacı yoxdur; yüzlərlə şəbəkə qovşağı artıq onun üçün hər şeyi yoxlayıb.

Hal-hazırda, Waves şəbəkəsində işləyən bir VECRO var (özünüzü idarə edə bilərsiniz, bu çətin deyil, sadəcə olaraq konfiqurasiya nümunəsinə nəzər salın). Cari kod PHP-də işləyir (on Waves Kit, hansı haqqında Mən sizə əvvəl dedim).

Oracle xidmətindən istifadə etmək üçün sizə lazımdır:

  • R düzəltmək;
    • Oracle ləqəbinə init@vecr-ə ən azı 0.005 Dalğa göndərin;
    • Oracle-dan istifadəçiyə 1 R-vecr tokeninin ötürülməsində əlavə sahəsində R-kodu alın;
  • İmza alın;
    • Random@vecr oracle ləqəbinə ən azı 0.005 Dalğa göndərin, həmçinin əlavə sahəsində əvvəllər qəbul edilmiş R kodunu və əlavə istifadəçi məlumatlarını GÖSTƏRİN;
    • Oracle-dan istifadəçiyə 1 S-vecr tokeninin ötürülməsində əlavə sahəsində S kodunu alın;
  • Pseudo-təsadüfi nömrə mənbəyi kimi S kodundan istifadə edin.

Mövcud tətbiqin nüansları:

  • Oracle göndərilən dalğalar istifadəçiyə qaytarılması əməliyyatı üçün komissiya kimi istifadə olunur, maksimum 1 Dalğa;
  • R-kodu 'R' simvolunun baytının və 32 baytlıq baza58 kodlu R dəyərinin birləşməsidir;
  • Əlavədəki R kodu birinci olmalıdır, istifadəçi məlumatları R kodundan sonra gəlir;
  • S-kodu 'S' simvolunun baytının və S-in 32 baytlıq baza58-kodlanmış dəyərinin birləşməsidir;
  • S modul bölünməsinin nəticəsidir, ona görə də siz S-dən tam 256 bitlik psevdor təsadüfi nömrə kimi istifadə edə bilməzsiniz (bu nömrə maksimum 252 bitlik psevdor təsadüfi nömrə hesab edilə bilər);
  • Ən sadə seçim S kodu hash-dən psevdo-təsadüfi nömrə kimi istifadə etməkdir.

S kodunu alma nümunəsi:

Texniki nöqteyi-nəzərdən oracle işə tam hazırdır, onu təhlükəsiz istifadə edə bilərsiniz. Orta istifadəçi tərəfindən istifadə nöqteyi-nəzərindən rahat qrafik interfeys çatışmazlığı var, bu gözləmək məcburiyyətində qalacaq.

Suallara cavab verməkdən və şərhləri qəbul etməkdən məmnun olaram, təşəkkür edirəm.

Mənbə: www.habr.com

Добавить комментарий