روابط عمومی شرکت ایدکو (توزیع کننده محصولات کسپرسکی در ایران)؛ آیا به قراردادهای هوشمند علاقه دارید؟ آیا میدانستید سرریز عدد صحیح[1] یعنی چه؟ در حقیقت سرریز عدد صحیح، مشکلی از حوزهی برنامهنویسی است؛ اماقرارداد هوشمند در اصل یک برنامه است پس شاید بخواهید درک درستی از آن داشته باشید.
به بیان سادهتر، اگر سرریز عدد صحیح در یک سلول حافظهی واحد و بایتی ذخیره شود میتواند تنها از 0 تا 255 ارزش را نگه دارد. این یعنی اگر شرایط دیگری تعیین نشود، 0=1+255. نگرانکنندهتر این است: 255=1-0. بیشتر پردازشگرهای مدرن اینگونه اطلاعات را پردازش میکنند. در بسیاری از زبانهای برنامهریزی مدرن، خود برنامه کنترل میکند که آیا جریان کاری در طول عملیاتهای حسابگری رخ داده است یا خیر. اگر چنین باشد احتمال این هست که اصلاً برنامهریز روحش هم خبر ندارد؛ پس بهتر است برنامه قطع شود و اطمینان حاصل شود بعدها باگی ایجاد نخواهد کرد.
خوب همهی اینها چه ربطی به قراردادهای هوشمند دارد؟!
در قراردادهای هوشمند، چنین کنترل و بررسیای برای اتریوم - حین پردازش پول - ارائه نمیشود. به بیانی دیگر، اگر توکنهای صفر داشته باشید و یکی از آنها را برای دوستتان بفرستید، یک کوئینتیلیون توکن دریافت خواهید کرد. معلوم است که این برنامه باید بلافاصله قطع و تراکش ناموفق خیلی زود کنسل گردد. اینکه چرا توسعهدهندگان اتریوم حسابگریهای خود را به این روش انجام میدهند هنوز مشخص نیست. اما برای اینکه قوانین جهانی ریاضی بشر روی قراردادهای هوشمند به کار رود، هر برنامهریز قرارداد هوشمندی میبایست بیش از 100 خط کد حاوی کارکردهای نرمال برای جمع، ضرب و غیره اضافه کند.
در غیر این صورت، با یک کوئینتیلیون اعتبار به حساب آنها، دیگر تمام محدودیتها برداشته میشود. این وسط کلاهبرداران میتوانند رمزارزی وارد کنند و همهی بیتکوینها را بخرند و یا هرچه دوست دارند را اتر کنند (با هر قیمتی).
این سناریو تماماً هم نظری و تئوریک نیست؛ بارها شده است که چنین چیزی را در واقعیت شاهد بودهایم (چندین نوع ارز به این روز دچار شدند). معمولاً بعد از اینکه مهاجم کلکش را سوار میکند و اصطلاحاً فلنگ را میبندد (با جیبی پر از پول) مشکل کد را میفهمیم. اما حتی بعد از اینها هم هیچ کاری نمیشود انجام داد: قراردادهای هوشمند دائمی و غیرقابل تعویضند؛ نمیتوانند پَچ شوند.
سرریز[2] و بیتکوین
راستش را بخواهید، مشکل سرریز عدد صحیح فقط به اتریوم محدود نمیشود. خیلی قبلتر بیتکوین هم همین مشکل را داشت.
سرریز عدد صحیح باعث شد دو کیفپول بیتکوین به 184 میلیارد بیتکوین تبدیل شوند (در تاریخ 15 آگوست سال 2010). دیگر نگوییم که این چقدر برای مؤسسان بیتکوین گران تمام شد. آنها (ساتوشی ناکاماتو) به سرعت کد را اصلاح، باگ را برطرف و سابقه مالی را بازگرداند و جوری وانمود کرد انگار هیچ اتفاقی نیافتاده است.
بازگرداندن سابقه[3] یعنی چه؟ مثال میزنیم: اگر من آن روز بخصوص 10 هزار دلار بیتکوین خریده باشم، این بازگشت باعث میشود بیتکوینهایم به سرعت به فروشنده باز گردد- برخلاف دلارهایم که دیگر برایشان بازگشتی نیست. و اگر این بازگشت (رولبک) به جای سال 2010 الان اجرا میشد، پیامدهایش بسی عظیم میبود. چراکه اکنون هر روز به ارزش حدود 5 میلیارد دلار بیتکوین، تجارت شکل میگیرد.
همهی اینها نشان میدهد بلاکچین غیرقابلتغییر است مگر آنکه همهچیز درست طبق برنامه پیش رود. در غیر این صورت، هم برنامه و هم بلاکچین را میتوان تغییر داد.
برگردیم به قراردادهای هوشمند
تصمیم توسعهدهندگان اتریوم به نظر کمی عجیب میآید- انگار که برای برنامهریزانِ قرارداد هوشمند تله گذاشته باشند. یا باید بسیار کار کشته باشید و یا بسیار متمرکز (یا هر دو) تا بتوانید خود یا سرمایهگذاران خود را از یکشبه از دست دادن (احتمالی) پول نجات دهید. و این هم دلیل دیگری است که میگوییم کد قرارداد هوشمند به تأییدیه بادقتی نیاز دارد. متخصصین ما به عنوان بخشی از Kaspersky Token Offering Security کد قراردادهای هوشمند را برای آسیبپذیریها و قابلیتهای بدون سند تحلیل میکنند.
[1] integer overflow، هنگامی رخ میدهد که نتیجهٔ یک عمل محاسباتی مقدار عددی بزرگی است که از محدودهٔ مجاز قابل پردازش فراتر است.
[2] Overflow
[3] history rollback
منبع: کسپرسکی آنلاین (ایدکو)
کسپرسکی اسم یکی از بزرگترین شرکتهای امنیتی و سازنده آنتی ویروس است که برخی از کاربران اشتباهاً این شرکت و محصولات آنتی ویروس آن را با عناوینی نظیر کسپرسکای،کاسپرسکی، کسپراسکای، کسپراسکای، و یا کاسپراسکای نیز میشناسد. همچنین لازم به ذکر است مدیرعامل این شرکت نیز یوجین کسپرسکي نام دارد.