Weak Sources of Randomness from Chain Attributes  چیست؟

 Weak Sources of Randomness from Chain Attributes  چیست؟

Weak Sources of Randomness from Chain Attributes چیست؟

توانایی تولید اعداد تصادفی در انواع مختلفی از برنامه‌ها بسیار مفید است. یک مثال واضح، DAppهای شرط‌بندی هستند که در آن‌ها از مولد اعداد شبه‌تصادفی برای انتخاب برنده استفاده می‌شود. با این حال، ایجاد منبع تصادفی قوی در اتریوم بسیار چالش‌برانگیز است. به عنوان مثال، استفاده از block.timestamp ناامن است، زیرا یک ماینر می‌تواند هر زمان‌مناسبی را در عرض چند ثانیه انتخاب کند و همچنان بلوک خود را توسط دیگران پذیرفته شود. استفاده از blockhash، block.difficulty و سایر فیلدها نیز ناامن است، زیرا توسط ماینر کنترل می‌شوند. اگر میزان شرط‌بندی بالا باشد، ماینر می‌تواند با اجاره سخت‌افزار، تعداد زیادی بلوک را در زمان کوتاهی استخراج کند، بلوکی را که هش بلوک مورد نیاز برای برنده شدن او را دارد انتخاب کند و سایر بلوک‌ها را رها کند.


 اهمیت تصادفی بودن در قراردادهای هوشمند و چالش‌های آن

تصادفی بودن (Randomness) می‌تواند در طیف گسترده‌ای از کاربردهای قراردادهای هوشمند، از بازی‌ها و شرط‌بندی گرفته تا امور مالی غیرمتمرکز (DeFi) و قرعه‌کشی‌ها، مورد استفاده قرار گیرد. در چنین سناریوهایی، دستیابی به یک نتیجه‌ی تصادفی منصفانه و غیرقابل پیش‌بینی برای حفظ یکپارچگی و عدالت ضروری است.در حالی که پیاده‌سازی تصادفی بودن در زبان‌هایی مانند Python و JavaScript نسبتاً ساده است، اضافه کردن تصادفی بودن به قراردادهای هوشمند SmartContracts به‌صورت ایمن، چالش‌های قابل‌توجهی دارد. طبق گزارش OWASP، تصادفی‌سازی ناامن Insecure Randomness به‌عنوان نهمین آسیب‌پذیری رایج در لیست "۱۰ ضعف امنیتی برتر قراردادهای هوشمند" شناخته شده است.

ماشین مجازی اتریوم (EVM) و چالش تولید اعداد تصادفی

در اتریوم، ماشین مجازی اتریوم (EVM) محیط اجرایی برای اجرای قراردادهای هوشمند SmartContracts است. EVM از یک مدل قطعی (Deterministic Model) استفاده می‌کند. این بدان معناست که برای یک ورودی مشخص، اجرای یک قرارداد هوشمند SmartContract همیشه منجر به خروجی یکسانی خواهد شد. این ویژگی برای حفظ سازگاری و قابلیت اطمینان قراردادهای هوشمند SmartContracts در بلاکچین Blockchain ضروری است.

در EVM، تراکنش‌ها توسط چندین نود بازپخش (Replayed) و تأیید می‌شوند. اگر یک قرارداد هوشمند شامل تابع تولید عدد تصادفی (RNG) باشد، باید در هر اجرا دقیقاً همان عدد تصادفی را تولید کند تا سایر نودها بتوانند رفتار قرارداد را تأیید کنند. اما این موضوع با اصول اساسی تصادفی بودن در تضاد است، زیرا بر اساس تعریف، یک عدد تصادفی باید همیشه یکتا و غیرقابل پیش‌بینی باشد.

راهکار: استفاده از تولیدکننده اعداد شبه‌تصادفی (PRNG)

یک روش برای حل این مشکل، استفاده از تولیدکننده اعداد شبه‌تصادفی (PRNG) است که بر اساس یک مقدار اولیه (Seed) خصوصی و وضعیت داخلی، مجموعه‌ای از بایت‌ها را به‌صورت شبه‌تصادفی اما قطعی تولید می‌کند. توسعه‌دهندگان می‌توانند برای این کار از ویژگی‌های زیر در بلاک استفاده کنند:

  • blockhash(uint blockNumber): هش یک بلاک مشخص را بازمی‌گرداند (فقط برای ۲۵۶ بلاک اخیر کار می‌کند).
  • block.number: شماره بلاک فعلی.
  • block.coinbase: آدرس ماینر بلاک فعلی.
  • block.timestamp: زمان‌بندی بلاک فعلی به ثانیه از زمان Epoch Unix.

این روش‌ها به قراردادهای هوشمند کمک می‌کنند تا مقادیر شبه‌تصادفی تولید کنند، در حالی که تأییدپذیری در شبکه حفظ شود.

 Weak Sources of Randomness from Chain Attributes چه تاثیری دارد؟

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

چه اقدامی باید انجام شود؟

1- استفاده از اوراکل‌ها (Oraclize) به‌عنوان منابع خارجی تصادفی: هنگام اعتماد به اوراکل باید احتیاط لازم را رعایت کنید. همچنین می‌توان از چندین اوراکل به‌طور همزمان استفاده کرد تا امنیت افزایش یابد.

2- استفاده از طرح‌های تعهد (Commitment Schemes): این یک عنصر ابتدایی رمزنگاری است که از رویکرد تعهد-افشا استفاده می‌کند. این روش کاربردهای گسترده‌ای در پرتاب سکه، اثبات‌های بدون دانش و محاسبات امن دارد. به‌عنوان مثال: RANDAO.

3- Chainlink VRF: این یک مولد عدد تصادفی قابل اثبات عادلانه و قابل تأیید (RNG) است که به قراردادهای هوشمند امکان دسترسی به مقادیر تصادفی را بدون به خطر انداختن امنیت یا قابلیت استفاده فراهم می‌کند.

4- الگوریتم Signidice: مناسب برای مولدهای عدد تصادفی شبه‌تصادفی (PRNG) در برنامه‌هایی که شامل دو طرف با استفاده از امضاهای رمزنگاری هستند.

5- هش‌های بلوک بیت‌کوین: می‌توان از اوراکل‌هایی مانند BTCRelay استفاده کرد که به‌عنوان پلی بین اتریوم Ethereum و بیت‌کوین Bicoin عمل می‌کنند. قراردادهای اتریوم Ethereum می‌توانند هش‌های بلوک آینده را از بلاک‌چین بیت‌کوین Bitcoin Blockchain به‌عنوان منبع آنتروپی درخواست کنند. لازم به ذکر است که این روش در برابر مشکل انگیزش ماینر ایمن نیست و باید با احتیاط اجرا شود.

 

Related Posts

@2025 codeauditplus.com Your code, Fortified