بي ترتيب اوريڪل بلاڪچين ۾ ڊجيٽل دستخط جي بنياد تي

خيال کان عمل درآمد تائين: اسان موجوده ايليپيٽڪ وکر ڊجيٽل دستخطي اسڪيم کي تبديل ڪريون ٿا ته جيئن اهو تعيناتي هجي، ۽ ان جي بنياد تي اسان بلاڪچين جي اندر pseudo-random نمبرن جي تصديق ڪرڻ لاءِ ڪم مهيا ڪندا آهيون.

بي ترتيب اوريڪل بلاڪچين ۾ ڊجيٽل دستخط جي بنياد تي

نظريه

جي زوال ۾ 2018, Waves blockchain شامل پهريون سمارٽ معاهدو چالو ڪيو ويو, سوال فوري طور تي حاصل ڪرڻ جي امڪان جي باري ۾ پيدا ٿيو بي ترتيب نمبرجنهن تي توهان اعتماد ڪري سگهو ٿا.

هن سوال تي حيران ٿي، مان آخرڪار ان نتيجي تي پهتو: ڪو به بلاڪچين هڪ سيل آهي؛ بند ٿيل سسٽم ۾ اينٽراپي جو هڪ قابل اعتماد ذريعو حاصل ڪرڻ ناممڪن آهي.

پر مون اڃا تائين هڪ خيال پسند ڪيو: جيڪڏهن بي ترتيب اوريڪل صارف جي ڊيٽا کي طئي ڪرڻ واري الگورتھم سان دستخط ڪندو، پوء صارف هميشه عوامي ڪيئي استعمال ڪندي اهڙي دستخط جي تصديق ڪرڻ جي قابل هوندو، ۽ پڪ ٿي ويندي ته نتيجو قدر منفرد آهي. اوريڪل، چاهي ڪيترو به مشڪل هجي، ڪنهن به شيءِ کي تبديل ڪرڻ جي قابل ناهي؛ الورورٿم هڪ غير واضح نتيجو پيدا ڪري ٿو. لازمي طور تي، استعمال ڪندڙ نتيجو رڪارڊ ڪري ٿو، پر ان کي خبر ناهي جيستائين اوريڪل ان کي شايع ڪري. اهو ظاهر ٿئي ٿو ته توهان oracle تي يقين نه ٿا ڪري سگهو، پر ان جي ڪم جو نتيجو چيڪ ڪريو. ان کان پوء، ڪامياب تصديق جي صورت ۾، اهڙي دستخط کي هڪ pseudorandom نمبر لاء اينٽراپي جو ذريعو سمجهي سگهجي ٿو.

Waves blockchain پليٽ فارم هڪ دستخط اسڪيم استعمال ڪري ٿو ايڊ ڊي ايس اي اختيار ايڊ 25519. هن اسڪيم ۾، دستخط R ۽ S جي قدرن تي مشتمل هوندو آهي، جتي R جو دارومدار بي ترتيب قدر تي هوندو آهي، ۽ S جو حساب ڪيو ويندو آهي ان پيغام جي بنياد تي جيڪو سائن ڪيو پيو وڃي، پرائيويٽ ڪيئي ۽ ساڳيو بي ترتيب نمبر R جي حساب سان ظاهر ٿئي ٿو. ساڳي لاءِ ڪو به منفرد انحصار نه آهي صارف جي پيغام لاءِ ڪيترائي صحيح دستخط آهن.

ظاهر آهي، ان جي خالص صورت ۾، اهڙي نشاني کي pseudo-random انگن جي ماخذ طور استعمال نه ٿو ڪري سگهجي، ڇاڪاڻ ته اهو غير مقرري آهي، ۽ ان ڪري، آساني سان oracle جي ذريعي ٺاهي سگهجي ٿو.

پر، جيئن اهو نڪتو، اهو اصل ۾ ممڪن آهي ته اهو طئي ڪرڻ وارو آهي.

مون کي وڏيون اميدون هيون قابل تصديق بي ترتيب فنڪشن (VRF)، پر هارڊويئر جي مطالعي کان پوء، مون کي هن اختيار کي ڇڏي ڏنو هو. جيتوڻيڪ VRF دستخط ۽ ان جي ثبوت جو هڪ تعيناتي نسخو پيش ڪري ٿو، اتي الورورٿم ۾ هڪ عجيب جڳهه آهي، جيڪو oracle جي ڦيرڦار لاء هڪ ڪارو سوراخ کوليندو آهي. يعني، جڏهن حساب ڪندي k جي قيمت (سيڪشن 5.1) هڪ خانگي چيڪ استعمال ڪيو ويندو آهي، جيڪو صارف کي اڻڄاتل رهي ٿو، جنهن جو مطلب آهي ته صارف k جي حساب جي صحيحيت جي تصديق نٿو ڪري سگهي، جنهن جو مطلب آهي ته oracle k جي ڪنهن به قيمت کي استعمال ڪري سگهي ٿو جيڪو ان جي ضرورت آهي ۽ ساڳئي وقت خطن جي ڊيٽابيس کي برقرار رکندو. جي k ۽ دستخط ٿيل ڊيٽا هميشه لاءِ ٻيهر ڳڻپ ڪرڻ جي قابل ٿي صحيح نتيجا VRF جي نقطي نظر کان. جيڪڏهن توهان هڪ ڊرائنگ ڏسي سگهو ٿا VRF جي بنياد تي پرائيويٽ ڪنجي کي ظاهر ڪرڻ کان سواءِ، توهان هوشيار ٿي سگهو ٿا: يا ته ڪي کي ظاهر ڪرڻ جي ضرورت کي ظاهر ڪريو، يا ان کي k جي حساب سان خارج ڪريو، پوءِ خانگي ڪيئي پاڻمرادو ظاهر ٿي ويندي جڏهن پهريون دستخط ظاهر ٿيندو. . عام طور تي، جيئن اڳ ۾ ئي ذڪر ڪيو ويو آهي، هڪ عجيب اسڪيم هڪ بي ترتيب اوريڪل لاء.

ٿوري سوچ ويچار کان پوءِ ۽ مقامي تجزيه نگارن جي مدد سان، VECRO ڪم جي اسڪيم جو جنم ٿيو.

VECRO ھڪ مخفف آھي Verifiable Elliptic Curve Random Oracle لاءِ، جنھن جو روسي ۾ مطلب آھي verrifiable random oracle on elliptic curves.

سڀ ڪجھ بلڪل سادو ٿي ويو؛ عزم حاصل ڪرڻ لاء، توهان کي سائن ان ٿيڻ واري پيغام جي ظاهر ٿيڻ کان اڳ R جي قيمت کي درست ڪرڻو پوندو. جيڪڏهن آر ڪم ڪيو ويو آهي ۽ پيغام جو حصو آهي سائن ان ٿي رهيو آهي، جيڪو وڌيڪ يقيني بڻائي ٿو ته آر پيغام ۾ دستخط ڪيو پيو وڃي، S جي قيمت منفرد طور تي صارف جي پيغام طرفان طئي ڪئي ويندي آهي ۽ انهي ڪري استعمال ڪري سگهجي ٿو هڪ ماخذ جي طور تي pseudorandom نمبرن لاءِ.

اهڙي اسڪيم ۾، اهو مسئلو ناهي ته R ڪيئن مقرر ڪيو ويو آهي؛ اهو oracle جي ذميواري رهي ٿو. اهو ضروري آهي ته S منفرد طور تي صارف طرفان طئي ڪيو وڃي، پر ان جي قيمت اڻڄاتل آهي جيستائين oracle ان کي شايع نه ڪري. سڀ ڪجهه اسان چاهيون ٿا!

مقرر ٿيل آر جي ڳالهائيندي، نوٽ ڪريو ته ٻيهر استعمال ٿيل آر مختلف پيغامن تي دستخط ڪرڻ وقت، اهو منفرد طور تي EdDSA اسڪيم ۾ پرائيويٽ ڪنجي کي ظاهر ڪري ٿو. آر کي ٻيهر استعمال ڪرڻ جي امڪان کي ختم ڪرڻ لاءِ oracle جي مالڪ لاءِ اهو انتهائي اهم ٿي وڃي ٿو ته مختلف صارف جي پيغامن کي سائن ڪرڻ لاءِ. اهو آهي، ڪنهن به هٿرادو يا ميلاپ سان، اوريڪل هميشه پنهنجي نجي ڪنجي کي وڃائڻ جو خطرو ٿيندو.

مجموعي طور تي، oracle کي لازمي طور تي صارفين کي ٻه افعال مهيا ڪرڻ گهرجن: شروعات، جيڪا قيمت R کي درست ڪري ٿي، ۽ دستخط، جيڪا قيمت S کي واپس ڪري ٿي. هن صورت ۾، جوڙو R، S صارف جي پيغام جي معمولي تصديق ٿيل دستخط آهي جنهن ۾ هڪ مقرر ٿيل آهي. قدر R ۽ صوابديدي صارف ڊيٽا.

اهو دليل ڏئي سگهجي ٿو ته blockchain لاء هن اسڪيم عام کان وڌيڪ ڪجھ به نه آهي عزم وڌائڻ وارو منصوبو. لازمي طور تي، ها، اها هن جي آهي. پر اتي ڪيترائي nuances آهن. پهرين، oracle هميشه سڀني عملن ۾ ساڳي چاٻي سان ڪم ڪري ٿو، مثال طور، اهو ٺيڪيدار ۾ استعمال ڪرڻ آسان آهي. ٻيو، oracle جي پرائيويٽ ڪنجي کي وڃائڻ جو خطرو آهي جيڪڏهن اهو غلط طريقي سان ڪم ڪري ٿو، مثال طور، oracle توهان کي نتيجن جا نمونا ٺاهڻ جي اجازت ڏئي ٿو، پوءِ اهو ڪافي آهي صرف ٻه ٽيسٽون ڪرڻ لاءِ پرائيويٽ ڪنجي کي ڳولڻ ۽ مڪمل حاصل ڪرڻ لاءِ. پرس تائين رسائي. ٽيون، هڪ دستخط جيڪو اصلي طور تي بلاڪچين تي تصديق ٿيل آهي ۽ بي ترتيب جو هڪ ذريعو آهي خوبصورت آهي.

ڇهن مهينن تائين عمل درآمد جو خيال منهنجي ذهن ۾ سمائجي ويو، ايتري قدر جو آخر ۾ حوصلو ظاهر ٿيو. Waves Labs کان امداد. وڏي گرانٽ سان وڏي ذميواري اچي ٿي، تنهنڪري منصوبو اتي هوندو!

عمل

تنهن ڪري، هن منصوبي ۾ VECRO لاڳو ڪيو ويو تي Waves blockchain درخواست-جواب موڊ ۾ استعمال ڪندڙ ۽ oracle جي وچ ۾ منتقلي ٽرانزيڪشن کي استعمال ڪندي. ساڳئي وقت، هڪ اسڪرپٽ نصب ٿيل آهي oracle اڪائونٽ تي جيڪو ڪم کي سختي سان ڪنٽرول ڪري ٿو مٿي بيان ڪيل منطق جي مطابق. Oracle ٽرانزيڪشن جي تصديق ڪئي وئي آهي ۽ صارف جي رابطي جو سڄو سلسلو بحال ٿيو آهي. سڀئي چار ٽرانزيڪشن حتمي قيمت جي تصديق ڪرڻ ۾ شامل آهن؛ سمارٽ معاهدو انهن کي هڪ سخت تصديق واري سلسلي سان گڏ ڪري ٿو، سڀني قدرن کي قدم قدم تي چيڪ ڪري ٿو ۽ ڪنهن به قسم جي ڦيرڦار جي ڪا به گنجائش نه ڇڏيندي.

هڪ ڀيرو ٻيهر، ان کي هڪ طرف رکڻ ۽ ان کي صاف ڪرڻ لاء. اوريڪل صرف تجويز ڪيل اسڪيم جي مطابق ڪم نٿو ڪري. ان جو ڪم مڪمل طور تي قائم ڪيل طرفان بلاڪچين سطح تي ڪنٽرول ڪيو ويو آهي مضبوطي سان هڪ سمارٽ معاهدي سان. کاٻي ڏانهن قدم ۽ ٽرانزيڪشن بس ذريعي نه ٿيندي. تنهن ڪري، جيڪڏهن هڪ ٽرانزيڪشن بلاڪچين ۾ شامل آهي، صارف کي ڪجهه به چيڪ ڪرڻ جي ضرورت ناهي؛ سوين نيٽ ورڪ نوڊس اڳ ۾ ئي هن لاء سڀ ڪجهه چيڪ ڪري چڪا آهن.

في الحال، ويز مينيٽ تي هڪ ويڪرو هلندڙ آهي (توهان پنهنجو پاڻ هلائي سگهو ٿا، اهو ڏکيو ناهي، بس ترتيب جي مثال تي هڪ نظر وٺو). موجوده ڪوڊ PHP ۾ هلندو آهي (on WavesKit، جنهن بابت مون توهان کي اڳ ۾ چيو).

oracle سروس استعمال ڪرڻ لاء توھان کي لازمي آھي:

  • آر کي درست ڪريو؛
    • oracle alias init@vecr ڏانھن گھٽ ۾ گھٽ 0.005 Waves موڪليو.
    • آر-ڪوڊ وصول ڪريو منسلڪ فيلڊ ۾ 1 R-vecr ٽوڪن جي منتقلي ۾ oracle کان استعمال ڪندڙ کي؛
  • هڪ دستخط حاصل ڪريو؛
    • گهٽ ۾ گهٽ 0.005 Waves موڪليو oracle alias random@vecr ڏانهن، ۽ اهو پڻ ظاهر ڪرڻ گهرجي ته اڳ ۾ مليل آر-ڪوڊ ۽ اضافي صارف ڊيٽا منسلڪ فيلڊ ۾؛
    • 1 S-vecr ٽوڪن جي منتقلي ۾ منسلڪ فيلڊ ۾ ايس-ڪوڊ وصول ڪريو oracle کان استعمال ڪندڙ کي؛
  • استعمال ڪريو S-code کي pseudo-random نمبر جي ماخذ طور.

موجوده عمل جي nuances:

  • oracle ڏانهن موڪليل موج استعمال ڪندڙ کي واپسي ٽرانزيڪشن لاءِ ڪميشن طور استعمال ڪيو ويندو آهي، وڌ ۾ وڌ 1 Waves تائين؛
  • آر-ڪوڊ 'R' ڪردار جي بائيٽ ۽ 32-بائيٽ بيس 58-انڪوڊ ٿيل R قدر جو ڪنٽينشن آهي؛
  • منسلڪ ۾ آر-ڪوڊ پهريون هجڻ گهرجي، صارف ڊيٽا آر-ڪوڊ کان پوء اچي ٿو.
  • ايس-ڪوڊ ڪردار 'S' جي هڪ بائيٽ ۽ S جي هڪ 32-بائيٽ بيس 58-انڪوڊ ٿيل قدر جو ڳنڍڻ آهي؛
  • S ماڊل ڊويزن جو نتيجو آهي، تنهنڪري توهان S کي مڪمل 256-bit pseudorandom نمبر طور استعمال نٿا ڪري سگهو (هن نمبر کي وڌ ۾ وڌ 252-bit pseudorandom نمبر سمجهي سگهجي ٿو)؛
  • سادو اختيار اهو آهي ته S-code hash استعمال ڪرڻ لاءِ هڪ pseudo-random number.

S-code حاصل ڪرڻ جو مثال:

هڪ ٽيڪنيڪل نقطي نظر کان، oracle مڪمل طور تي ڪم لاء تيار آهي، توهان محفوظ طور تي استعمال ڪري سگهو ٿا. سراسري استعمال ڪندڙ جي استعمال جي نقطي نظر کان، اتي هڪ آسان گرافڪ انٽرفيس جي کوٽ آهي؛ هن کي انتظار ڪرڻو پوندو.

مان سوالن جا جواب ڏيڻ ۽ رايا قبول ڪرڻ ۾ خوش ٿيندس، مهرباني.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو