බ්ලොක්චේන් හි ඩිජිටල් අත්සන මත පදනම් වූ අහඹු ඔරකල්

අදහසේ සිට ක්‍රියාත්මක කිරීම දක්වා: අපි දැනට පවතින ඉලිප්සීය වක්‍ර සංඛ්‍යාංක අත්සන යෝජනා ක්‍රමය නියත වන පරිදි වෙනස් කරන්නෙමු, එය මත පදනම්ව අපි බ්ලොක්චේන් තුළ සත්‍යාපනය කළ හැකි ව්‍යාජ අහඹු සංඛ්‍යා ලබා ගැනීම සඳහා කාර්යයන් සපයන්නෙමු.

බ්ලොක්චේන් හි ඩිජිටල් අත්සන මත පදනම් වූ අහඹු ඔරකල්

අදහස

2018 සරත් සෘතුවේ දී, Waves blockchain ඇතුළත් විය පළමු ස්මාර්ට් ගිවිසුම් සක්‍රිය කර ඇත, ලබා ගැනීමේ හැකියාව ගැන ප්රශ්නය වහාම මතු විය ව්යාජ සංඛ්යාඔබට විශ්වාස කළ හැකි බව.

මෙම ප්‍රශ්නය ගැන ප්‍රහේලිකාවක් ඇති කරමින්, මම අවසානයේ නිගමනයට පැමිණියෙමි: ඕනෑම බ්ලොක්චේන් සෛලයකි; සංවෘත පද්ධතියක එන්ට්‍රොපියේ විශ්වාසදායක ප්‍රභවයක් ලබා ගත නොහැක.

නමුත් මම තවමත් එක් අදහසකට කැමතියි: නම් අහඹු ඔරකල් පරිශීලක දත්ත නිර්ණායක ඇල්ගොරිතමයක් සමඟ අත්සන් කරනු ඇත, එවිට පරිශීලකයාට සෑම විටම පොදු යතුර භාවිතයෙන් එවැනි අත්සනක් සත්‍යාපනය කිරීමට හැකි වනු ඇත, එහි ප්‍රතිඵලය වන අගය අද්විතීය බව සහතික වනු ඇත. ඔරකල්ට, එය කොතරම් දුෂ්කර වුවත්, කිසිවක් වෙනස් කිරීමට නොහැකි ය; ඇල්ගොරිතම නොපැහැදිලි ප්රතිඵලයක් ලබා දෙයි. අත්යවශ්යයෙන්ම, පරිශීලකයා ප්රතිඵලය වාර්තා කරයි, නමුත් ඔරකල් එය ප්රකාශයට පත් කරන තුරු එය නොදනී. ඔබට ඔරකල් විශ්වාස කළ නොහැකි බව පෙනේ, නමුත් එහි කාර්යයේ ප්‍රති result ලය පරීක්ෂා කරන්න. ඉන්පසුව, සාර්ථක සත්‍යාපනයකදී, එවැනි අත්සනක් ව්‍යාජ අංකයක් සඳහා එන්ට්‍රොපි ප්‍රභවයක් ලෙස සැලකිය හැකිය.

Waves blockchain වේදිකාව අත්සන් යෝජනා ක්රමයක් භාවිතා කරයි EdDSA විකල්පය එඩ්25519. මෙම යෝජනා ක්‍රමයේදී, අත්සන R සහ S යන අගයන්ගෙන් සමන්විත වන අතර එහිදී R අහඹු අගයක් මත රඳා පවතින අතර S ගණනය කරනු ලබන්නේ අත්සන් කරන ලද පණිවිඩය, පුද්ගලික යතුර සහ R ලෙස එකම අහඹු අංකය මත පදනම්ව ය. ඒ සඳහා අනන්‍ය යැපීමක් නොමැත පරිශීලක පණිවිඩයක් සඳහා වලංගු අත්සන් රාශියක් ඇත.

පැහැදිලිවම, එහි පිරිසිදු ස්වරූපයෙන්, එවැනි අත්සනක් ව්‍යාජ-අහඹු සංඛ්‍යා ප්‍රභවයක් ලෙස භාවිතා කළ නොහැක, මන්ද එය නිර්ණය නොවන බැවින් ඔරකල් මගින් පහසුවෙන් හැසිරවිය හැක.

එහෙත්, එය සිදු වූ පරිදි, එය නියත වශයෙන්ම එය නියත වශයෙන්ම කළ හැකිය.

මට ලොකු බලාපොරොත්තු තිබුණා සත්‍යාපනය කළ හැකි අහඹු ශ්‍රිතය (VRF), නමුත් දෘඪාංග අධ්යයනය කිරීමෙන් පසුව, මෙම විකල්පය අත්හැරීමට සිදු විය. VRF විසින් අත්සනෙහි සහ එහි සාධනයෙහි නියත අනුවාදයක් ඉදිරිපත් කළද, ඔරකල් හැසිරවීම සඳහා කළු කුහරයක් විවෘත කරන ඇල්ගොරිතමයේ අමුතු තැනක් තිබේ. එනම්, k හි අගය ගණනය කිරීමේදී (5.1 වගන්තිය) පුද්ගලික යතුරක් භාවිතා කරනු ලැබේ, එය පරිශීලකයා නොදන්නා ලෙස පවතී, එයින් අදහස් වන්නේ පරිශීලකයාට k ගණනය කිරීමේ නිවැරදි භාවය තහවුරු කළ නොහැකි බවයි, එයින් අදහස් වන්නේ Oracle හට අවශ්‍ය k හි ඕනෑම අගයක් භාවිතා කළ හැකි අතර ඒ සමඟම ලිපි හුවමාරු දත්ත ගබඩාවක් පවත්වා ගත හැකි බවයි. VRF හි දෘෂ්ටිකෝණයෙන් සෑම විටම නිවැරදි ප්‍රතිඵලය නැවත ගණනය කිරීමට හැකි වීම සඳහා k සහ අත්සන් කළ දත්ත. පුද්ගලික යතුර හෙළි නොකර VRF මත පදනම් වූ චිත්‍රයක් ඔබ දුටුවහොත්, ඔබට බුද්ධිමත් විය හැකිය: යතුර හෙළිදරව් කිරීමේ අවශ්‍යතාවය දක්වන්න, නැතහොත් k ගණනය කිරීමෙන් එය බැහැර කළ යුතුය, එවිට පළමු අත්සන දිස්වන විට පුද්ගලික යතුර ස්වයංක්‍රීයව හෙළි වේ. . සාමාන්යයෙන්, දැනටමත් සඳහන් කර ඇති පරිදි, අහඹු ඔරකල් සඳහා අමුතු යෝජනා ක්රමයක්.

මඳක් සිතා බලා දේශීය විශ්ලේෂකයින්ගේ සහාය ලබා ගැනීමෙන් පසුව, VECRO වැඩ යෝජනා ක්රමය උපත ලැබීය.

VECRO යනු Verifiable Elliptic Curve Random Oracle සඳහා කෙටි යෙදුමකි, රුසියානු භාෂාවෙන් අදහස් කරන්නේ ඉලිප්සීය වක්‍ර මත සත්‍යාපනය කළ හැකි අහඹු ඔරකල් යන්නයි.

සෑම දෙයක්ම ඉතා සරල විය; අධිෂ්ඨානය සාක්ෂාත් කර ගැනීම සඳහා, අත්සන් කළ යුතු පණිවිඩය දිස්වීමට පෙර ඔබ R හි අගය නිවැරදි කළ යුතුය. R කැපවී ඇත්නම් සහ අත්සන් කරන ලද පණිවිඩයේ කොටසක් නම්, එය අත්සන් කරන පණිවිඩයේ R කැපවී ඇති බව තවදුරටත් සහතික කරයි නම්, S හි අගය පරිශීලකයාගේ පණිවිඩය මගින් අනන්‍යව තීරණය වන අතර එම නිසා ව්‍යාජ අංක සඳහා මූලාශ්‍රයක් ලෙස භාවිතා කළ හැක.

එවැනි යෝජනා ක්‍රමයක් තුළ, R සවි කර ඇත්තේ කෙසේද යන්න ගැටළුවක් නොවේ; මෙය ඔරකල්හි වගකීම ලෙස පවතී. S යන්න පරිශීලකයා විසින් අනන්‍ය ලෙස නිර්ණය කිරීම වැදගත් වන නමුත් ඔරකල් විසින් එය ප්‍රකාශයට පත් කරන තුරු එහි අගය නොදනී. අපට අවශ්‍ය සියල්ල!

ස්ථාවර R ගැන කතා කරන විට, එය සටහන් කරන්න නැවත භාවිතා කළ ආර් විවිධ පණිවිඩ අත්සන් කිරීමේදී, එය EdDSA යෝජනා ක්‍රමයේ ඇති පුද්ගලික යතුර අද්විතීය ලෙස හෙළි කරයි. විවිධ පරිශීලක පණිවිඩ අත්සන් කිරීමට R නැවත භාවිතා කිරීමේ හැකියාව ඉවත් කිරීම ඔරකල්හි හිමිකරුට අතිශයින්ම වැදගත් වේ. එනම්, ඕනෑම උපාමාරුවක් හෝ කුමන්ත්‍රණයක් සමඟ, ඔරකල් සෑම විටම එහි පුද්ගලික යතුර අහිමි වීමේ අවදානමක් ඇත.

සමස්තයක් වශයෙන්, ඔරකල් මඟින් පරිශීලකයින්ට කාර්යයන් දෙකක් සැපයිය යුතුය: ආරම්භ කිරීම, R අගය ස්ථාවර කිරීම සහ S අගය ආපසු ලබා දෙන අත්සන. මෙම අවස්ථාවේදී, R, S යුගලය ස්ථාවර පණිවිඩයක් අඩංගු පරිශීලක පණිවිඩයක සාමාන්‍ය සත්‍යාපනය කළ හැකි අත්සන වේ. අගය R සහ අත්තනෝමතික පරිශීලක දත්ත.

බ්ලොක්චේන් සඳහා මෙම යෝජනා ක්රමය සාමාන්ය දෙයක් නොවන බව තර්ක කළ හැකිය කැපවීම-පුළුල් කිරීමේ යෝජනා ක්රමය. ඇත්ත වශයෙන්ම, ඔව්, ඒ ඇයයි. නමුත් සූක්ෂ්මතා කිහිපයක් තිබේ. පළමුව, ඔරකල් සෑම විටම සියලුම මෙහෙයුම් වලදී එකම යතුර සමඟ ක්‍රියා කරයි, උදාහරණයක් ලෙස, මෙය කොන්ත්‍රාත්තුවේ භාවිතා කිරීමට පහසුය. දෙවනුව, ඔරකල් වැරදි ලෙස හැසිරෙන්නේ නම් පුද්ගලික යතුර අහිමි වීමේ අවදානමක් ඇත, උදාහරණයක් ලෙස, ඔරකල් මඟින් ප්‍රති result ලය සාම්පල සෑදීමට ඔබට ඉඩ සලසයි, එවිට පුද්ගලික යතුර සොයා ගැනීමට සහ සම්පූර්ණ වීමට පරීක්ෂණ දෙකක් පමණක් සිදු කිරීම ප්‍රමාණවත් වේ. මුදල් පසුම්බිය වෙත ප්රවේශය. තෙවනුව, බ්ලොක්චේන් මත ස්වදේශිකව සත්‍යාපනය කළ හැකි සහ අහඹු ප්‍රභවයක් වන අත්සනක් ලස්සනයි.

මාස හයක් තිස්සේ ක්‍රියාත්මක කිරීමේ අදහස මගේ හිසෙහි ගිලී ගියේය, අවසානයේ අභිප්‍රේරණය ස්වරූපයෙන් දිස්වන තුරු Waves Labs වෙතින් ප්‍රදානය. විශාල ප්‍රදානයක් සමඟ විශාල වගකීමක් ඇත, එබැවින් ව්‍යාපෘතිය පවතිනු ඇත!

Реализация

ඉතින්, මෙම ව්යාපෘතියේ VECRO ක්රියාත්මක කරන ලදී පරිශීලකයා සහ ඔරකල් අතර හුවමාරු ගනුදෙනු භාවිතා කරමින් ඉල්ලීම්-ප්‍රතිචාර ආකාරයෙන් Waves blockchain මත. ඒ සමගම, ඉහත විස්තර කර ඇති තර්කයට අනුකූලව කාර්යය දැඩි ලෙස පාලනය කරන script එකක් oracle ගිණුමේ ස්ථාපනය කර ඇත. ඔරකල් ගනුදෙනු සත්‍යාපනය කර ඇති අතර පරිශීලක අන්තර්ක්‍රියා දාමය ප්‍රතිසාධනය කෙරේ. සියලුම ගනුදෙනු හතරම අවසාන අගය සත්‍යාපනය කිරීමට සම්බන්ධ වේ; ස්මාර්ට් කොන්ත්‍රාත්තුව දැඩි සත්‍යාපන නූලකින් ඒවා එකට සම්බන්ධ කරයි, සියලු අගයන් පියවරෙන් පියවර පරීක්ෂා කර කිසිදු හැසිරවීමකට ඉඩ නොතබයි.

ආයෙත් පාරක් පැත්තකින් තියලා පැහැදිලි කරන්න. ඔරකල් යෝජිත යෝජනා ක්රමයට අනුව පමණක් ක්රියා නොකරයි. ස්ථාපිත කර ඇති බ්ලොක්චේන් මට්ටමින් එහි කාර්යය සම්පූර්ණයෙන්ම පාලනය වේ බුද්ධිමත් ගිවිසුමක් සමඟ තදින්. වමට පියවර ගන්න, ගනුදෙනුව සරලව සිදු නොවේ. එබැවින්, බ්ලොක්චේන් තුළ ගනුදෙනුවක් ඇතුළත් කර ඇත්නම්, පරිශීලකයාට කිසිවක් පරීක්ෂා කිරීමට පවා අවශ්ය නොවේ; ජාල නෝඩ් සිය ගණනක් දැනටමත් ඔහු සඳහා සියල්ල පරීක්ෂා කර ඇත.

දැනට, Waves mainnet මත එක් VECRO ක්‍රියාත්මක වේ (ඔබට ඔබේම ලෙස ධාවනය කළ හැකිය, එය අපහසු නැත, මානකරන උදාහරණය දෙස බලන්න) වත්මන් කේතය PHP (on WavesKit, ඒ ගැන මම ඔයාට කලින් කිව්වා).

ඔරකල් සේවාව භාවිතා කිරීම සඳහා ඔබ කළ යුත්තේ:

  • R සවි කරන්න;
    • ඔරකල් අන්වර්ථය init@vecr වෙත අවම වශයෙන් තරංග 0.005 ක් යවන්න;
    • ඔරකල් සිට පරිශීලකයා වෙත 1 R-vecr ටෝකනය මාරු කිරීමේදී ඇමුණුම් ක්ෂේත්රයේ R-කේතය ලබා ගන්න;
  • අත්සනක් ලබා ගන්න;
    • ඔරකල් අන්වර්ථය random@vecr වෙත අවම වශයෙන් තරංග 0.005 ක් යවන්න, තවද ඇමුණුම් ක්ෂේත්‍රයේ කලින් ලැබුණු R-කේතය සහ අතිරේක පරිශීලක දත්ත සඳහන් කළ යුතුය;
    • ඔරකල් සිට පරිශීලකයා වෙත 1 S-vecr ටෝකනය මාරු කිරීමේදී ඇමුණුම් ක්ෂේත්‍රයේ S-කේතය ලබා ගන්න;
  • ව්‍යාජ අහඹු සංඛ්‍යාවේ මූලාශ්‍රයක් ලෙස S-කේතය භාවිතා කරන්න.

වත්මන් ක්රියාත්මක කිරීමේ සූක්ෂ්මතා:

  • ඔරකල් වෙත යවන තරංග, උපරිම තරංග 1ක් දක්වා, පරිශීලකයා වෙත ආපසු ලබා දෙන ගනුදෙනුව සඳහා කොමිස් මුදලක් ලෙස භාවිත කෙරේ;
  • R-කේතය යනු 'R' අක්ෂරයේ බයිටයක සහ 32-byte base58-කේතනය කළ R අගයක සංකලනයයි;
  • ඇමුණුමේ R-කේතය පළමු විය යුතුය, පරිශීලක දත්ත R-code පසු පැමිණේ;
  • S-කේතය යනු 'S' අක්ෂරයේ බයිටයක සහ S හි 32-byte base58-කේතන අගයක සංකලනයයි;
  • S යනු මොඩියුල බෙදීමේ ප්‍රතිඵලයකි, එබැවින් ඔබට S යනු සම්පූර්ණ 256-bit ව්‍යාජ අංකයක් ලෙස භාවිතා කළ නොහැක (මෙම අංකය උපරිම 252-bit ව්‍යාජ අංකයක් ලෙස සැලකිය හැක);
  • සරලම විකල්පය වන්නේ S-කේත හැෂ් ව්‍යාජ අහඹු අංකයක් ලෙස භාවිතා කිරීමයි.

S-කේතය ලැබීමේ උදාහරණය:

තාක්ෂණික දෘෂ්ටි කෝණයකින්, ඔරකල් වැඩ සඳහා සම්පූර්ණයෙන්ම සූදානම්, ඔබට එය ආරක්ෂිතව භාවිතා කළ හැකිය. සාමාන්‍ය පරිශීලකයාගේ භාවිතයේ දෘෂ්ටි කෝණයෙන්, පහසු චිත්‍රක අතුරු මුහුණතක් නොමැතිකම ඇත; මෙය බලා සිටීමට සිදුවනු ඇත.

ප්‍රශ්නවලට පිළිතුරු දීමට සහ අදහස් පිළිගැනීමට මම සතුටු වෙමි, ස්තූතියි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න