
تصادفی بودن عاملی بسیار کاربردی و مهم است، از شیر یا خط تا رمزگذاریهایی که تعاملات و نقلوانتقالات آنلاین را ایمن و مطمئن میکند. تصادفی بودن به ما امکان انتخابهای منصفانه و غیرقابل پیشبینی را میدهد.
اما در اکثر کاربرد های کامپیوتری، ایجاد شرایط تصادفی مناسب دشوار است. به همین دلیل، برنامه نویسان در چنین شرایطی از چیزهایی تحت عنوان hash function ها استفاده میکنند که داده ها را به شکلی درهم می ریزند و در نهایت تعدادی از بخشهای آن را طوری بدست میآورند که تصادفی به نظر میرسند. سالهای زیادی است که بسیاری از دانشمندان علوم کامپیوتر فرض کردهاند که در کاربرد های عملی، خروجی hash functionهای مناسب به طور کلی از تصادفی بودن غیرقابل تشخیص نیست، فرضی که آن را مدل اوراکل تصادفی می نامند.
درحال حاضر مقالهای منتشر شده که این فرض را زیرسوال میبرد و روشی را معرفی میکند که با استفاده از آن میتوان یک سیستم را فریب داد تا گزارههای نادرست را به عنوان گزاره درست تایید کند حتی با وجود اینکه سیستم با فرض مدل اوراکل باز هم ایمن بوده. ایلون یوگف از دانشگاه بار-ایلان در اسرائیل میگوید: « پول زیادی به این چیزها وابسته است، انگیزه زیادی برای هکرها وجود دارد که سیستم امنیتی بلاکچین را بشکنند.»
در این مقاله پژوهشگران توانستند که دروغها را تشخیص دهند، صرفنظر از اینکه از کدام hash function برای تولید تصادفی بودن مورد نیاز سیستم اثبات استفاده میشود. وقتی یوگف درباره نتیجه تیم شنید، گفت: «احساس کردم کسی فرش را از زیر پایم کشیده است.» یوگف و همکارانش به دنبال جلوگیری از ضعفها و آسیبپذیریها هستند. اما به گفته او: «این موضوع هنوز با حلشدن فاصله زیادی دارد.»
مخلوط کن ریاضی
مجموعهای از نرمافزارهای محاسباتی متفاوت درگیر قانع کردن عدهای غریبه در اینترنت هستند که آنها واقعاً یک محاسبه را درست انجام دادهاند. مقالهای جدید روشی را معرفی میکند که با استفاده از آن میتوان تکنیکی را که مردم را قادر به تایید چنین محاسباتی میکند، فریب داد. این تکنیک که Fiat-Shamir Transformation نام دارد، علاوهبر بلاکچینها کاربردهای متفاوت دیگری مانند کلیدهایی که تراکنشهای آنلاین را ایمن میکند کاربرد دارد. این روش درحال حاضر بسیار فراگیر شده و نام آن به اصطلاحی کاربردی تبدیل شده.
با استفاده از تکنیکFiat-Shamir Transformation میتوان تنها با بررسی تصادفی بخشهای از یک محاسبه درست یا اشتباه بودن آن را تشخیص داد. برای مثال اگر استادی به تعداد ۱۰۰ تمرین تحویلی برای دانشجویان تعیین کرده باشد و نخواهد همهی ۱۰۰ تمرین را تصحیح کند میتواند با استفاده از این تکنیک تنها ۱۰ تمرین را به صورت تصادفی برای تصحیح کردن انتخاب کند و اگر پاسخ آن ۱۰ تمرین درست باشد با اطمینان خاطر پاسخ باقی تمرینات را بدون تصحیح کردن درست در نظر بگیرد. در زبان رایانهای این کار به معنی انتخاب ۱۰ چالش تصادفی است.
حال فرض کنید دانشجو قصد دارد درستی تکلیف خود را نه فقط به استاد بلکه به تمام دانشجویان ثابت کند. او هر پاسخ را درون یک جعبه قفلدار قرار میدهد و برای هر کدام عددی را اختصاص میدهد. سپس استاد از بین این جعبهها ۱۰ چالش تصادفی انتخاب میکند. اما ممکن است دانشجویان ناظر به صحت این فرایند شک داشته باشند و گمان کنند دانشجو با استاد همدست است و مسائل را در پشت صحنه به سرعت حل میکرده و پاسخها را درون جعبه میگذاشته. اما مهندسین کامپیوتر راهی پیدا کردهاند که دانشجو با استفاده از hash function بتواند نگرانی و تردید تمامی ناظرین را برطرف کند.
تابع hash درواقع مانند یک مخلوط کن است و مجموعهای از دادهها را در هم میریزد و درنهایت خروجی را به صورت یک اسموتی تحویل میدهد. تابع hash دو ویژگی بسیار مهم دارد:
1. اول اینکه خروجی آن شبیه به حروف بیمعنا و بدون ارتباط با یکدیگر است
2. دوم اینکه محاسبه تابع hash بسیار آسان است، اما محاسبه معکوس آن کاری بسیار دشوار است، درواقع به این معنی که اگر کسی خروجی تابع hash را به شما بدهد، تقریبا غیر ممکن است بتوانید ورودی آن را محاسبه کنید.حال میتوان در مثال دانشجو با استفاده از تابع hash نگرانی ناظرین را برطرف کرد. به این صورت که به جای قفل فیزیکی از تابع hash برای قفل کردن جعبهها استفاده کرد. برای انجام این کار لازم است دانشجو تمام پاسخهای خود را hash کند و نتیجه هرکدام را روی جعبه بنویسد. با این روش اگر کسی بخواهد پاسخ درون جعبه را تغییر دهد، پاسخ با نتیجه تابع hash منطبق نخواهد بود.
در سال ۱۹۸۶، آماس فیات و آدی شامیر برای برطرف کردن نگرانی دیگر ناظرین این مثال (اینکه ممکن است دانشجو استاد را مجاب به انتخاب جعبههای خاصی کرده باشد)، تکنیکی مطرح کردند. آنها پیشنهاد کردند به جای اینکه استاد به صورت تصادفی اعدادی را از بین ۱ تا ۱۰۰ انتخاب کند بهتر است او نتیجه تابع hash هر جعبه را با استفاده از فرمولی توافقی این خروجیها را به اعدادی بین ۱ تا ۱۰۰ تبدیل کند و طبق آن جعبههای که قرار است باز شوند، انتخاب میشوند. نکتهی اصلی این تکنیک این است که دیگر نیازی به تعامل بین استاد و دانشجو نیست و دانشجو میتواند این کار را حتی به تنهایی انجام دهد.
با استفاده از این روش، که نیاز به تعاملی وجود ندارد، خیلی زود این روش اثبات بسیار فراگیر شد. اما سوال این بود: آیا این روش امن است یا اینکه افراد سواستفادهگر میتوانند از آن برای اثبات ادعاهای دروغین خود به دیگران استفاده کنند؟
اثبات دروغها
یک ویژگی بارز بلاکچینهایی که پشتوانه رمزارزها هستند، این است که بسیار کند اجرا میشوند. آنها برای مدیریت ترافیک سنگین تراکنشهای مالی مجبوراند بخشی از محاسبات را به رایانههای بیرونی بسپارند. اما تضمینی وجود ندارد که آن رایانهها قابل اعتماد هستند، بنابراین بلاکچین اثباتهای بر پایه Fiat-Shamir ( که پیشتر توضیح داده شد )، ارائه دهند تا درستی محاسبات خود را اثبات کنند. حال اگر کسی بتواند ثابت کند که مثلا شخص A به شخص B مقدار مشخصی دلار واریز کرده، کل سیستم از فرو میپاشد.
صحت اثباتهایی که رایانههای بیرونی ارائه میدهند بسیار حیاتی است،به همین دلیل بنیاد اتریوم تصمیم گرفت جایزهای تعیین کند برای هرکسی که موفق به شکست این سیستم شود. اما وقتی این موضوع را با بنیاد روتبلوم در میان گذاشت واکنش روتبلوم این بود که آنها موضوع را به شدت سهلانگارانه بیان کردهاند. پس از آن روتبلوم همکاری خود را با خووراتوویچ و سوخانوف ( که در آن زمان در اتریوم کار میکردند ) شروع کرد تا این موضوع را به دقت بررسی کنند.
تصویر 1:ران روتبلوم
آنها موفق شدند برنامهای مخرب طراحی کنند که اگر خروجی hash خود را به عنوان ورودی محرمانه دریافت کند، میتواند چالشهای تصادفی را محاسبه کرده و سپس سیستم خود را به شکلی تنظیم کند که بخشهایی که مورد بررسی قرار میگیرند از آزمون عبور کنند. درواقع هیچ شکی در این نخواهد بود که برنامه همان خروجی را تولید کرده که اثباتکننده ادعا کرده، اما اینطور نیست.
علاوه بر این، پژوهشگران نشان دادند که چطور میشود این برنامهی مخرب را در هر کاری استفاده کرد. برای مثال، اگر بخواهید به دروغ اثبات کنید که پاسخهای درستی برای یک تکلیف دارید، میتوانید برنامهی تصحیح تکالیف را با نسخهی جدیدی که شامل همان برنامهی مخرب باشد، جایگزین کنید. برنامهی جدید هنوز هم یک برنامهی معتبر تصحیح محسوب میشود و همان نمراتی را میدهد که برنامهی اصلی میداد. اما با این تفاوت، که میتوانید این برنامه را با پاسخهای نادرست تغذیه کرده و دیگران را قانع کنید که خروجی برنامه درست بوده، در صورتی نادرست بوده.
قایقی در حال نشت
مدتها بعد یگف و گال آرنول (پژوهشگر موسسه سایمونز) راهی برای اصلاح Fiat-Shamir ارائه کرد تا در برابر این حمله ایمن باشد. درواقع نسخههای اصلاح شده Fiat-Shamir این شرط را میگذارند که برنامهای که قرار است بررسی شود، باید پیچیدگی کمتری نسبت به تابع hash داشته باشد تا امکان جای دادن برنامه مخرب در آن وجود نداشته باشد. یگف میگوید: «این به ما اجازه داد چرخه را بشکنیم.»
اما روتبلوم هشدار میدهد: «این که حمله فعلی موثر نیست، دلیلی بر آن نیست که حملهی دیگری وجود ندارد. وقتی یک سوراخ را پیدا کردی، میدانی که قایق به زودی غرق خواهد شد.»
مترجم: نیلوفر کریمی
منبع