اوراکل تصادفی بر اساس امضای دیجیتال در بلاک چین

از ایده تا اجرا: ما طرح امضای دیجیتال منحنی بیضوی موجود را طوری تغییر می‌دهیم که قطعی باشد و بر اساس آن توابعی را برای به دست آوردن اعداد شبه تصادفی قابل تأیید در بلاک چین ارائه می‌کنیم.

اوراکل تصادفی بر اساس امضای دیجیتال در بلاک چین

فکر

در پاییز 2018، بلاک چین امواج را شامل شد اولین قراردادهای هوشمند فعال شد، بلافاصله این سوال در مورد امکان به دست آوردن مطرح شد اعداد شبه تصادفیکه بتوانید اعتماد کنید

با گیج شدن در مورد این سوال، در نهایت به این نتیجه رسیدم: هر بلاک چین یک سلول است؛ دستیابی به منبع قابل اعتماد آنتروپی در یک سیستم بسته غیرممکن است.

اما من هنوز یک ایده را دوست داشتم: اگر اوراکل تصادفی داده های کاربر را با یک الگوریتم قطعی امضا می کند، سپس کاربر همیشه می تواند چنین امضایی را با استفاده از کلید عمومی تأیید کند و مطمئن خواهد شد که مقدار حاصل منحصر به فرد است. اوراکل، مهم نیست که چقدر سخت بخواهد، قادر به تغییر چیزی نیست؛ الگوریتم یک نتیجه بدون ابهام ایجاد می کند. در اصل، کاربر نتیجه را ثبت می کند، اما تا زمانی که اوراکل آن را منتشر نکند، آن را نمی داند. به نظر می رسد که شما به هیچ وجه نمی توانید به اوراکل اعتماد کنید، اما نتیجه کار آن را بررسی کنید. سپس، در صورت تایید موفقیت آمیز، چنین امضایی را می توان منبع آنتروپی برای یک عدد شبه تصادفی در نظر گرفت.

پلتفرم بلاک چین Waves از یک طرح امضا استفاده می کند EdDSA گزینه ویرایش 25519. در این طرح، امضا شامل مقادیر R و S است که R به یک مقدار تصادفی بستگی دارد و S بر اساس پیام در حال امضا، کلید خصوصی و همان عدد تصادفی R محاسبه می‌شود. هیچ وابستگی منحصر به فردی برای یک پیام کاربر وجود ندارد. امضاهای معتبر زیادی برای یک پیام کاربر وجود دارد.

بدیهی است، در شکل خالص خود، چنین امضایی نمی تواند به عنوان منبع اعداد شبه تصادفی استفاده شود، زیرا غیر قطعی است و بنابراین، می تواند به راحتی توسط اوراکل دستکاری شود.

اما، همانطور که معلوم شد، در واقع می توان آن را قطعی کرد.

امیدهای زیادی داشتم تابع تصادفی قابل تایید (VRF)، اما پس از مطالعه سخت افزار، مجبور شدم این گزینه را رها کنم. اگرچه VRF یک نسخه قطعی از امضا و اثبات آن ارائه می دهد، اما مکان عجیبی در الگوریتم وجود دارد که سیاهچاله ای را برای دستکاری اوراکل باز می کند. یعنی هنگام محاسبه مقدار k (بخش 5.1) از یک کلید خصوصی استفاده می شود که برای کاربر ناشناخته می ماند، به این معنی که کاربر نمی تواند صحت محاسبه k را تأیید کند، به این معنی که اوراکل می تواند از هر مقدار k که نیاز دارد استفاده کند و در عین حال یک پایگاه داده از مکاتبات را حفظ کند. از k و داده های امضا شده برای اینکه همیشه بتوانیم نتیجه صحیح را از نقطه نظر VRF دوباره محاسبه کنیم. اگر نقاشی مبتنی بر VRF را بدون فاش کردن کلید خصوصی مشاهده کردید، می توانید هوشمندانه عمل کنید: نیاز به آشکار کردن کلید را نشان دهید، یا آن را از محاسبه k حذف کنید، سپس کلید خصوصی به طور خودکار خود را با ظاهر شدن اولین امضا نشان می دهد. . به طور کلی، همانطور که قبلا ذکر شد، یک طرح عجیب برای یک اوراکل تصادفی است.

پس از اندکی تفکر و جلب حمایت تحلیلگران محلی، طرح کاری VECRO متولد شد.

VECRO مخفف Verifiable Elliptic Curve Random Oracle است که در روسی به معنی اوراکل تصادفی قابل تایید روی منحنی های بیضوی است.

معلوم شد که همه چیز بسیار ساده است؛ برای دستیابی به جبر، باید مقدار R را قبل از ظاهر شدن پیامی که باید امضا کرد، ثابت کنید. اگر R متعهد باشد و بخشی از پیام در حال امضا باشد، که بیشتر تضمین می کند که R در پیام امضا شده متعهد است، مقدار S به طور منحصر به فرد توسط پیام کاربر تعیین می شود و بنابراین می تواند به عنوان منبعی برای اعداد شبه تصادفی استفاده شود.

در چنین طرحی، مهم نیست که R چگونه ثابت شود، این مسئولیت بر عهده اوراکل است. مهم است که S به طور منحصر به فرد توسط کاربر تعیین شود، اما مقدار آن تا زمانی که اوراکل آن را منتشر نکند، ناشناخته است. هر چیزی که می خواستیم!

در مورد R ثابت صحبت می کنیم، توجه داشته باشید که استفاده مجدد از R هنگام امضای پیام های مختلف، به طور منحصر به فرد کلید خصوصی را در طرح EdDSA نشان می دهد. برای صاحب اوراکل بسیار مهم است که امکان استفاده مجدد از R را برای امضای پیام های مختلف کاربر از بین ببرد. یعنی با هر گونه دستکاری یا تبانی، اوراکل همیشه با خطر از دست دادن کلید خصوصی خود مواجه خواهد شد.

در مجموع، اوراکل باید دو عملکرد را در اختیار کاربران قرار دهد: مقداردهی اولیه که مقدار R را ثابت می‌کند و امضا که مقدار S را برمی‌گرداند. در این مورد، جفت R، S امضای معمول قابل تأیید یک پیام کاربر حاوی یک پیام ثابت است. مقدار R و داده های دلخواه کاربر.

می توان استدلال کرد که این طرح برای بلاک چین چیزی غیر از معمولی نیست طرح commit-expand. در اصل، بله، او است. اما چندین تفاوت ظریف وجود دارد. اولا، اوراکل همیشه در همه عملیات ها با یک کلید کار می کند، به عنوان مثال، استفاده از آن در قراردادها راحت است. ثانیاً، اگر اوراکل نادرست رفتار کند، خطر از دست دادن کلید خصوصی وجود دارد، به عنوان مثال، اوراکل به شما اجازه می دهد نمونه هایی از نتیجه را تهیه کنید، سپس کافی است فقط دو آزمایش انجام دهید تا کلید خصوصی را پیدا کنید و کامل به دست آورید. دسترسی به کیف پول ثالثاً، امضایی که به صورت بومی در بلاک چین قابل تأیید است و منبع تصادفی است، زیباست.

به مدت شش ماه ایده اجرا در ذهنم می پیچید تا اینکه بالاخره انگیزه در شکل ظاهر شد کمک مالی از آزمایشگاه امواج. با یک کمک مالی بزرگ، مسئولیت بزرگی به همراه دارد، بنابراین پروژه وجود خواهد داشت!

اجرا

بنابراین، در این پروژه VECRO اجرا شد در بلاک چین Waves در حالت درخواست-پاسخ با استفاده از تراکنش های انتقال بین کاربر و اوراکل. در همان زمان، یک اسکریپت بر روی حساب اوراکل نصب می شود که کار را کاملاً مطابق با منطق توضیح داده شده در بالا کنترل می کند. تراکنش‌های اوراکل تأیید می‌شوند و کل زنجیره تعامل کاربر بازیابی می‌شود. هر چهار تراکنش در تأیید ارزش نهایی دخیل هستند؛ قرارداد هوشمند آنها را با یک رشته راستی‌آزمایی دقیق به هم متصل می‌کند و تمام مقادیر را مرحله به مرحله بررسی می‌کند و جایی برای هیچ گونه دستکاری باقی نمی‌گذارد.

یک بار دیگر، آن را کنار بگذاریم و واضح تر کنیم. اوراکل فقط طبق طرح پیشنهادی کار نمی کند. کار آن به طور کامل در سطح بلاک چین توسط تاسیس شده کنترل می شود محکم با یک قرارداد هوشمند. به سمت چپ بروید و تراکنش به سادگی انجام نخواهد شد. بنابراین، اگر یک تراکنش در بلاک چین گنجانده شود، کاربر حتی نیازی به بررسی چیزی ندارد؛ صدها گره شبکه قبلاً همه چیز را برای او بررسی کرده اند.

در حال حاضر، یک VECRO در شبکه اصلی Waves در حال اجرا است (شما می توانید خودتان را اجرا کنید، این کار دشواری نیست، فقط به مثال پیکربندی نگاهی بیندازید). کد فعلی در PHP اجرا می شود (روشن WavesKit، در مورد آن قبلا بهت گفتم).

برای استفاده از سرویس اوراکل باید:

  • رفع R;
    • ارسال حداقل 0.005 موج به اوراکل مستعار init@vecr.
    • R-code را در قسمت پیوست در انتقال 1 رمز R-vecr از اوراکل به کاربر دریافت کنید.
  • امضا بگیرید؛
    • حداقل 0.005 امواج را به نام مستعار اوراکل random@vecr ارسال کنید، و همچنین باید کد R دریافت شده قبلی و داده های کاربر اضافی را در فیلد پیوست نشان دهد.
    • دریافت کد S در قسمت پیوست در انتقال 1 توکن S-vecr از اوراکل به کاربر.
  • از کد S به عنوان منبع اعداد شبه تصادفی استفاده کنید.

تفاوت های ظریف اجرای فعلی:

  • امواج ارسال شده به اوراکل به عنوان کمیسیون برای تراکنش برگشتی به کاربر، حداکثر تا 1 موج استفاده می شود.
  • R-code الحاق یک بایت از کاراکتر 'R' و یک مقدار R 32 بایتی با پایه 58 است.
  • R-code در پیوست باید اول باشد، داده های کاربر بعد از R-code آمده است.
  • S-code الحاق یک بایت از کاراکتر 'S' و یک مقدار 32 بایتی با پایه 58 رمزگذاری شده S است.
  • S نتیجه تقسیم مدول است، بنابراین شما نمی توانید از S به عنوان یک عدد شبه تصادفی کامل 256 بیتی استفاده کنید (این عدد را حداکثر می توان عدد شبه تصادفی 252 بیتی در نظر گرفت).
  • ساده ترین گزینه استفاده از هش کد S به عنوان یک عدد شبه تصادفی است.

نمونه ای از دریافت S-code:

از نظر فنی، اوراکل کاملا آماده کار است، می توانید با خیال راحت از آن استفاده کنید. از نقطه نظر استفاده توسط کاربر معمولی، کمبود یک رابط گرافیکی مناسب وجود دارد؛ این باید منتظر ماند.

خوشحال می شوم به سوالات پاسخ دهم و نظرات را بپذیرم، متشکرم.

منبع: www.habr.com

اضافه کردن نظر