
تجارت الکترونیک جهانی در سال 2018
در سال 2018 ،ارزش بازار تجارت الکترونیکی در جهان به 1.8 تریلیون دلار رسید. چین بزرگترین بازار تجارت الکترونیکی جهان در این سال بود که درآمدی به میزان 630 میلیارد دلار ایجاد کرد. ایالات متحده آمریکا در سال 2018 با درآمدی به میزان 501 میلیارد دلار جایگاه دوم را در بازار تجارت الکترونیکی جهان به خود اختصاص داده است، و جایگاه سوم متعلق به کشور بریتانیا با درآمد 86 میلیارد دلار است.
در سال 2018 رقم تجارت الکترونیکی B2C (کسب و کار به مشتری) جهانی با رشدی 18 درصدی به حجم بیش از2.8 تریلیون دلار رسیده است که پیش بینی می شود این رقم تا سال 2021 به 4.8 تریلیون دلار برسد.
در سال 2018، نزدیک به 1.8 میلیارد نفر در سراسر جهان کالاهای مورد نیاز خود را به شکل آنلاین خریداری کرده اند و سهم خرده فروشی آنلاین از کل خرده فروشی در جهان به بیش از 13 درصد رسیده است و پیش بینی می شود این سهم تا سال 2021 به 17.5درصد برسد.
همچنین، تجارت الکترونیکی B2B (کسب و کار به کسب و کار) در جهان در همین سال به رقم 10.8 تریلیون دلار رسید که 5 برابر بازار B2C بود. منطقه آسیا و اقیانوسیه با سهم بازار بیش از 80 درصد در این حوزه پیشرو بوده است، و شرکت های آمازون و علی بابا کسب و کارهای پیشرو در این حوزه هستند.
تجارت الکترونیک ایران در سال 97
گروه های سنی مختلف در خرید از کسب و کارها
با توجه به نمودار مشاهده می شود که بیش از نیمی از خریدهای اینترنتی توسط جوانان انجام می شود.

از نظر تئوری تمام شبکهها یک یا چند راه نفوذ دارند و بلاک چین هم از این قاعده مستثنی نیست. در این مقاله تمام راههای حمله و نفوذ به شبکههای بلاک چینی و مرتبط با آن را توضیح میدهیم.
بلاک چینهای بزرگی مثل بیت کوین و اتریوم از نظر امنیت در مقابل حملات امتحان خود را پس دادهاند اما حمله به این شبکهها حداقل روی کاغذ غیرممکن نیست. قبل از پرداختن به شیوه مقابله با تهدیدات هکرها، بیایید نگاهی اجمالی به ۵ ویژگی بلاک چین که اغلب هدف مجرمان سایبری قرار میگیرد، بیندازیم:
این مقاله ما را به درک روشنی از اینکه بلاک چین واقعا به همان اندازه که ما فکر میکنیم و دوست داریم امن نیست، میرساند.
شبکه بلاک چین شامل نوهایی است که تراکنشها را ایجاد و اجرا میکنند و خدمات دیگری را ارائه میدهند. به عنوان مثال شبکه بیت کوین شامل نودهایی است که تراکنشها را ارسال و دریافت میکنند و استخراجکنندگان تراکنشهای تایید شده را به بلاکها اضافه میکنند. مجرمان سایبری در کمین آسیبپذیری شبکه و سوءاستفاده از آن برای حمله به شبکههای بلاک چین هستند.
اجرای حمله دیداس (Distributed Denial of Service) بر روی یک شبکه مبتنی بر بلاک چین سخت است. اما با این حال فناوری بلاک چین نسبت به حملات دیداس آسیبپذیر است و این حملات در واقع معمولترین نوع حمله به شبکههای بلاک چین محسوب میشوند.
زمانی که حمله به شبکه بلاک چین اتفاق میافتد، هکرها قصد دارند تا با درخواستهای متعدد و مصرف همه منابع پردازش آن، سیستم را از دسترس خارج کنند. مهاجمان دیداس میخواهند ارتباط استخرهای استخراج، کیف پولهای الکترونیکی، صرافیهای ارز دیجیتال و دیگر سرویسهای ارائهدهنده خدمات مالی را با شبکه قطع کنند.

اگر هکرها از باتنت استفاده کنند، بلاک چین هم میتواند مانند لایه برنامههایش هک شود. در میان سایر شبکههای بلاک چین، بیت کوین اقداماتی را برای محافظت در برابر حملههای دیداس لحاظ میکند.
حمله شکلپذیری تراکنش (Transaction malleability) با هدف فریفتن قربانی به اینکه دو بار پرداخت را انجام دهد اتفاق میافتد. در شبکه بیت کوین هر تراکنش یک هش دارد که در واقع ID تراکنش محسوب میشود.
اگر هکرها موفق به تغییر ID تراکنش شوند، آنها میتوانند سعی کنند که یک تراکنش با هش تغییریافته را در شبکه دادهپراکنی کنند و پیش از تراکنش اصلی، آن را تایید کنند.
ارسالکننده گمان میکند که تراکنش اولیه آنها ناموفق شده است، در حالیکه وجوه همچنان از حساب آنها برداشت خواهد شد؛ و اگر ارسالکننده بار دیگر تراکنش را تکرار کند، همان مقدار دوباره از حساب او کسر خواهد شد.
این هک زمانی موفقیتآمیز است که هر دو تراکنش توسط استخراجکنندگان تایید شود. صرافی امتیگاکس (MtGox)، در اثر یک حمله شکلپذیری در سال 2014 ورشکست شد.
تایمجکینگ یا زمانربایی (Timejacking) از یک آسیبپذیری نظری در مدیریت زمانبندی بیت کوین استفاده میکند. در طی یک حمله زمانی، هکر شمارنده زمان شبکه را برای نود تغییر میدهد و نود را واردار به پذیرش یک بلاک چین جایگزین میکند.
این حمله زمانی میتواند اتفاق بیفتد که یک کاربر مخرب، چندین همتای (Peers) تقلبی را با برچسب زمانی (Timestamp) نادرست به شبکه اضافه کند. با این حال، میتوان با محدود کردن پذیرش محدوده زمانی و یا استفاده از زمان سیستم نود، از وقوع این حمله جلوگیری کرد.
حمله مسیریابی (Routing) میتواند هم بر هر نود به صورت جداگانه و هم بر کل شبکه تاثیر بگذارد. ایده این هک، مداخله در تراکنشها پیش از رساندن آن به همتایان است. تقریبا غیرممکن است که دیگر نودها بتوانند این دستکاری را تشخیص دهند؛ چرا که هکرها شبکه را به چند بخش تقسیمبندی میکنند که این بخشها قادر به برقراری ارتباط با یکدیگر نیستند.
حملات مسیریابی در واقع شامل دو حمله جداگانه هستند:
یک حمله سیبیل (Sybil)، با تخصیص چند شناسه به یک نود ترتیب داده میشود. شبکههای بلاک چین هیچ نود قابل اعتمادی ندارند و هر درخواست به تعدادی از نودها فرستاده میشود.

یک هکر، در طی یک حمله سیبیل، کنترل چند نود در شبکه را در دست میگیرد. سپس قربانی با چند نود جعلی که تمام تراکنشهای او را میبندد، محاصره شده است. در نهایت قربانی در معرض حمله دو بار خرج کردن (Double-Spending) قرار میگیرد.
شناسایی و پیشگیری از یک حمله سیبیل بسیار دشوار است، اما معیارهای زیر میتوانند موثر باشند: افزایش هزینه ساخت یک هویت جدید، نیاز به نوعی اعتماد برای پیوستن به شبکه و یا درنظر گرفتن قدرت کاربر بر اساس اعتبار.

حمله خسوف (Eclipse) نیازمند این است که هکر تعداد زیادی آدرس IP را کنترل کند و یا اینکه باتنت توزیع شده داشته باشد. سپس مهاجم آدرسها را روی نودهای قربانی بازنویسی میکند و تا راهاندازی دوباره نودهای قربانی منتظر میماند. پس از راهاندازی مجدد، تمام اتصالات خروجی از نود قربانی به آدرسهای IP تحت کنترل فرد مهاجم هدایت میشوند.
این حمله قربانی را از دستیابی به تراکنشهایی که به آنها علاقه دارد، محروم میکند. پژوهشگران دانشگاه بوستون حمله خسوفی را به شبکه اتریوم آغاز کردندو توانستند با استفاده از یک یا دو دستگاه این کار را انجام دهند.
حمله بازپخش یا تکرار (Replay Attack) یکی از انواع حملات تحت شبکه است که در آن یک انتقال دادهی معتبر با انگیزهی بدخواهانه یا کلاهبرداری تکرار میشود یا به تاخیر میافتد. برای درک راحتتر سازوکار این حمله میتوان مثال زیر را در نظر گرفت.
فرض کنید آلیس میخواهد هویت خود را به باب اثبات کند. باب هم رمز عبور آلیس را به عنوان مدرکی برای اثبات هویت از او درخواست میکند، و آلیس هم قبول میکند. در همین حال فرد سومی مشغول استراق سمع است و رمز عبور یا تابع هش را میدزدد و نگه میدارد. پس از اینکه مبادله اطلاعات به اتمام رسید، اکنون حملهکننده خود را به جای آلیس جا میزند و با باب ارتباط برقرار میکند. زمانی که باب از او مدرک اثبات هویتش را میخواهد حملهکننده رمز عبور یا تابع هش آلیس را که پیش خود نگه داشتهاست، برای باب میفرستد و او هم میپذیرد و بدینگونه حمله تکرار صورت میپذیرد.
اما در مبحث ارزهای دیجیتال، حمله بازپخش معنای خاصی دارد و به هاردفورکهای پروتکلهای مختلف ارز دیجیتال مربوط میشود. حمله بازپخش از هاردفورک و تکرار توکنها بر روی زنجیره فورک شده سوءاستفاده میکند.
زمانی که یک پروتکل فورک میشود، در واقع پروتکل و دفتر کل نسخه جدید کاملا جدا و مجزا از نسخه قبلی خواهد بود. بهترین مثال این اتفاق فورک بیت کوین کش از بیت کوین است.
در آگوست 2017، توسعهدهندگان بیت کوین کش هارد فورکی بر روی پروتکل بیت کوین انجام دادند. کاربرانی که مایل به ادامه فعالیت روی بیت کوین بودند، نرمافزار خود را ارتقا ندادند، و کاربرانی که میخواستند به زنجیره بیت کوین کش بپیوندند، نرمافزار خود را بروزرسانی کردند.
درنتیجه دفتر کل بیت کوین و بیت کوین کش از یکدیگر جدا شدند، اما دقیقا همان دفتر کل پیشین را تا زمان فورک با یکدیگر به اشتراک گذاشتند.

خب شاید برای شما این سوال پیش بیاید که با وجود هارد فورک برای بیت کوینهای شما چه اتفاقی میافتد؟ خب اگر پیش از هاردفورک شما بیت کوین داشتید، پس از آن ضمن اینکه BTC خود را حفظ میکنید به همان اندازه بیت کوین کش نیز دریافت خواهید کرد.
این مشکل زمانی به وجود میآید که کاربر میخواهد پول خود را روی یک زنجیره خرج کند. به عنوان مثال، آلیس میخواهد برای باب 1BTC ارسال کند، اما نمیخواهد بهطور همزمان 1BCH ارسال کند.
زمانی که آلیس بخواهد از زنجیره بیت کوین 1BTC خرج کند، فرصت برای حمله بازپخش ایجاد میشود. از آنجا که امضاهای دیجیتالی تراکنشهای BTC در زنجیره BCH نیز یکسانند، شخص دیگری میتواند امضای آلیس را کپی کند و از آن در تراکنشی در دفتر کل BCH استفاده کند.

برای اینکه حمله بازپخش و یا تکرار اتفاق بیفتد، باید مقدار و آدرس مورد استفاده در تراکنش بازپخش دقیقا همانند تراکنش اصلی باشد. این حمله میتواند سبب ایجاد مشکلات پیچیدهتری نیز در پرداختهای آنلاین شود.
راهکار در امان ماندن از این حمله، ارسال و یا خرج نکردن ارزهای دیجیتال آسیبپذیرتان نیست و تامین امنیت زنجیره جدید به عهده شبکه است. اگر محافظت از زنجیره در زمان وقوع هاردفورک تامین نشود، اکثر سرویسهای کیف پول سختافزاری به شما توصیه میکنند و هشدار میدهند که تا زمانی که گرد و غبار ناشی از هارد فورک صورت گرفته فروکش نکرد و اوضاع به حالت عادی برنگشت سکههای خود را خرج نکنید.
همیشه نام بلاک چین و امنیت سایبری مانند نمک و فلفل کنار یکدیگر میآیند. شاید عجیب به نظر برسد، اما کاربران بلاک چین خود بزرگترین تهدید برای آن به شمار میروند. مردم تمایل دارند که امنیت بلاک چین را دست بالا بگیرند و احتمال حملات بالقوه را نیز نادیده بگیرند.
در اختیار گرفتن اطلاعات و اسناد هویتی کیف پول کاربران هدف اصلی مجرمان سایبری است. هکرها سعی دارند از هم از روشهای سنتی مانند فیشینگ و لغتنامه (Dictionary) و هم از روشهای مدرن و جدیدی مثل یافتن نقطه ضعف در الگوریتمهای رمزنگاری، استفاده کنند. در زیر به مرور رایجترین حملات به کیف پول کاربران خواهیم پرداخت.
حمله فیشینگ (Phishing)، تلاشی مجرمانه برای بدست آوردن دادههای حساس مانند اطلاعات کاربری شخصی و بانکی است که طی آن یک مهاجم خود را به عنوان نهادی قابل اعتماد جا میزند و برای کاربر یک ایمیل یا پیام حاوی لینک مخرب ارسال میکند. با کلیک بر روی این لینک، در صفحه ورودی از کاربر خواسته میشود تا اطلاعات شخصی یا هر چیز دیگری که مورد نظر هکر باشد را وارد کند.
حمله به کیف پولهای شبکه آیوتا با راهاندازی iotaseed.io که تولیدکننده سید آنلاین بود، آغاز شد. هکرها یک کمپین فیشینگ با این سرویس تشکیل دادند و با سیدهای مخفی اطلاعات را جمعآوری کردند. در نهایت، در ژانویه 2018 هکرها از کیف پول قربانیان مقداری آیوتا به ارزش بیش از 4 میلیون دلار سرقت کردند.
در طی حمله لغتنامه (Dictionary)، هکرها تلاش میکنند تا هش قربانیان را بشکنند و در آن دست ببرند. آنها مقادیر هشی از گذرواژههای معمولی و آسان مانند password1 انتخاب میکنند.
در این نوع حملات فرد مهاجم لیستی از واژهها، عبارات و حتی ترکیب حروف، ارقام و نمادها را مورد استفاده قرار میدهد که از احتمال بیشتری برای انتخاب شدن به عنوان رمز برخوردار هستند. سپس با ترجمه کلمه عبور از متن به هش رمزنگاری شده، میتوانند به اطلاعات شخصی کیف پولها دست یابند.
امضای دیجیتال فرآیندی است که در آن صحت و اعتبار یک پیام دیجیتالی تایید میگردد. یک امضای دیجیتال معتبر، به گیرنده اطمینان میدهد که پیام توسط فرستندهی اصلی ارسال شده و فرستنده نیز نمیتواند پیامی که ارسال کرده را انکار نماید. علاوه بر این، خود پیام نیز از تغییر و دستکاری مصون میماند.

شبکههای بلاک چین از الگوریتمهای رمزنگاری مختلفی برای ساختن امضای کاربر استفاده میکنند؛ اما این فناوریها ممکن است آسیبپذیریها و نقاط ضعفی نیز داشته باشند. برای مثال، بیت کوین از الگوریتم رمزنگاری ECDSA برای تولید خودکار کلیدهای خصوصی منحصر به فرد استفاده میکند. با این حال به نظر میرسد که ECDSA از انتروپی کافی برخوردار نیست و ممکن است منجر به انتخاب یک مقدار تصادفی در بیش از یک امضا شود.
با سوءاستفاده از آسیبپذیری در تولید کلید، هکری به نام Johoe در دسامبر سال 2014 به سرویس ارائهدهنده کلیدهای خصوصی Blockchain.info دسترسی پیدا کرد. این حمله در نتیجه یک اشتباه که در طی بهروز رسانی یک کد اتفاق افتاد، رخ داد و منجر به ضعف تصادفی بودن ورودیها در ساختن کلیدهای عمومی کاربران شد. اگرچه این این مشکل و ضعف به سرعت مرتفع شد، اما هنوز این نقص در الگوریتم ECDSA وجود دارد.
کیف پول سرد دستگاه های فوق العاده کوچکی هستند که ارزهای دیجیتال را به صورت آفلاین و با امنیت فوق العاده بالا ذخیره میکنند و میتوانید از آنها برای انجام تراکنشها استفاده کنید. لازم به ذکر است که برای انجام تراکنش به صورت خیلی امن به اینترنت متصل می شوند.
کیف پولهای سختافزاری و یا همان کیف پولهای سرد نیز میتوانند هک شوند. به عنوان مثال، پژوهشگران با بهکارگیری باگهای کیف پول نانو اس لجر (Nano S Ledger) حملهای با نام Evil Maid را طراحی و آغاز کردند. در نتیجه این هک پژوهشگران به کلیدهای خصوصی، پینها (PIN)، سیدهای بازیابی و گذرواژههای قربانیان دست یافتند.
خدمات کیف پول داغ توسط شرکتهای خدمات کیف پول شخص ثالث در سرویس های ابری ارائه میشود. دسترسی به این کیف پول، تنها از طریق اتصال به اینترنت امکان پذیر است و برای ذخیره کلیدهای عمومی رمزنگاری مورد استفاده قرار میگیرند.
اگرچه صاحبان صرافیهای ارز دیجیتال ادعا میکنند که آنها اطلاعات کاربران خود را در کیف پولهایی که به اینترنت متصل نیست نگه میدارند، حمله اخیر 500 میلیون دلاری به صرافی کوینچک (Coincheck) خلاف این مدعا را ثابت کرده است.
یک قرارداد هوشمند، یک پروتکل ویژه است که برای مشارکت، تأیید یا اجرای مفاد یک قرارداد خاص، فعال میشود. قراردادهای هوشمند معاملات و فرایند ها را به صورت کاملا تضمینی و بدون اشخاص ثالث انجام می دهند.
فعالیت و ثبتهای قرارداد هوشمند قابل پیگیری و غیرقابل برگشت هستند. قراردادهای هوشمند شامل تمام اطلاعات مربوط به شرایط قرارداد و اجرای تمام اقدامات هدفگذاری شده به طور خودکار میشوند.

اصلیترین مسائل و مشکلات امنیتی بلاک چین مربوط به قراردادهای هوشمند، به اشکالات احتمالی در سورس کد و یا همان کد منبع، ماشین مجازی شبکه، محیط زماناجرای (Runtime) قراردادهای هوشمند و خود بلاک چین مرتبط میشوند. بیایید نگاهی جزییتر به هر کدام از این موارد بیندازیم.
اگر در کد منبع یک قرارداد هوشمند اشکال و یا آسیبپذیریای وجود داشته باشد، این برای هر دو طرف قرارداد که آن را امضا میکنند به نوعی خطر محسوب میشود. برای مثال باگ و یا اشکال شناسایی شده در قرارداد اتریوم در سال 2016 برای صاحبانش هزینهای 80 میلیون دلاری در بر داشت.
یکی از آسیبپذیریهای رایج در زبان برنامهنویسی سالیدیتی (Solidity)، امکان کنترل توابع غیر قابل اعتماد از دیگر قراردادهای هوشمند با نام حمله بازدخولی (Reentrancy) را فراهم میکند.
ماشین مجازی اتریوم (EVM)، یک کامپیوتر پشتهای (Stack) توزیعشده است که تمام قراردادهای هوشمند مبتنی بر بلاک چین اتریوم روی آن اجرا میشوند. شایعترین آسیبپذیریهای EVM موارد زیر هستند:
1- نقصهای تغییرناپذیر: ماهیت بلاکهای بلاک چین تغییرناپذیر است و این به این معناست که زمانی که یک قرارداد هوشمند ایجاد میشود، دیگر نمیتواند تغییر کند. اما این همیشه یک ویژگی مثبت نیست، چرا که اگر در کد یک قرارداد هوشمند اشکال و باگی وجود داشته باشد، باز هم برطرف کردن آن غیرممکن است. این احتمال خطر وجود دارد که مجرمان سایبری بتوانند آسیبپذیری کد را کشف کنند و از آن برای دزدیدن اتر و یا ایجاد یک فورک جدید، همانطور که در حمله DAO اتفاق افتاد، سوءاستفاده کنند.
2- ارز دیجیتال از دست رفته در انتقال: اگر اتر به آدرسی که هیچ صاحب و یا هیچ قراردادی ندارد ارسال شود، ارز دیجیتال در فرآیند انتقال از بین میرود.
3- باگ در کنترل دسترسی: یک باگ اصلاحکننده در قراردادهای هوشمند اتریوم وجود دارد که به هکر اجازه میدهد به عملکردها و قابلیتهای حساس در قرارداد دسترسی داشته باشند.
4- حمله آدرس کوتاه: احتمال این حمله به دلیل اینکه EVM میتواند شناسه و مدارک نادرست را بپذیرد، وجود دارد. هکرها میتوانند با فرستادن آدرسهای ساختگی به قربانیان بالقوه از این ویژگی سوءاستفاده کنند. به عنوان مثال، در طی حمله موفق به عرضه اولیه کویندش (Coindash) در سال 2017، تغیری در آدرس اتریوم کویندش، سبب شد که قربانیان اتر خود را به آدرس هکرها منتقل کنند.
به طور کلی قراردادهای هوشمند یک هدف حمله جدید به بلاک چین هستند که هکرها میتوانند آن را با اجرای روشهای دیگر به خطر انداختن فناوری بلاک چین از جمله حمله خسوف، دیداس و … که معمول هستند، تطبیق دهند.
بلاک چینهای جدیدتر مثل کاردانو و زیلیکا از ماشینهای مجازی مختلفی از جمله IELE، KEVM و … استفاده میکنند. این بلاک چینهای جدید ادعا میکنند که میتوانند امنیت قرارداد هوشمند را در پروتکلهای خود تضمین کنند.
برخلاف موسسات مالی، بلاک چین تنها پس از اینکه تمام نودهای درون شبکه به توافق رسیدند، تراکنش را تایید میکند. تا زمانی که یک بلاک با یک تراکنش تایید شود، به عنوان تراکنش تاییدنشده طبقهبندی میشود. فرآیند تایید تراکنش نیازمند زمان مشخصی است و این فاصله یک فرصت مناسب را برای حمله سایبری فراهم میکند. به عنوان مثال این زمان برای بیت کوین 10 دقیقه است.
دو بار خرج کردن (Double Spending) یکی از معمولترین حملاتی که با سوءاستفاده از مکانیسم تایید تراکنش اتفاق میافتد. تمام تراکنشهای روی بستر یک بلاک چین باید توسط کاربران دیگر تایید شوند تا به عنوان یک تراکنش معتبر و تاییدشده شناخته شود و طبیعتا این پروسه به اندکی زمان نیاز دارد، مهاجمان میتوانند از این زمان به نفع خود استفاده و سیستم را فریب دهند تا از همین سکهها و توکنها را در تراکنشهای دیگر نیز استفاده کنند.

در اینجا انواع متداول حملاتی که بر اساس سوءاستفاده از زمان بین شروع تراکنش و تایید آن صورت میپذیرد را بیان خواهیم کرد.
یک حمله فینی (Finney) زمانی امکانپذیر است که یک تراکنش در یک بلاک از پیش استخراج شده باشد و یک تراکنش مشابه، قبل از اینکه بلاک از پیش استخراج شده در شبکه منتشر شود، ایجاد میشود و بدین ترتیب تراکنش دوم مشابه را غیرفعال و نامعتبر میکند.
یک حمله رقابتی (Race) زمانی اجرا میشود که یک مهاجم دو تراکنش متضاد ایجاد میکند. اولین تراکنش به قربانی فرستاده میشود که او پرداخت را قبول میکند و محصول را بدون اینکه منتظر تایید اولیه بماند، ارسال میکند. در همین حال، یک تراکنش متضاد که همان مقدار ارز دیجیتال را به مهاجم باز میگرداند در شبکه پخش میشود و در نهایت تراکنش اول را معتبر میسازد.
وکتور76 (Vector76)، ترکیبی از دو حمله پیشین است. در این حالت، یک استخراجکننده بد و مخرب 2 نود ایجاد میکند که یکی از آنها را تنها به نود صرافی و دیگری را به همتایان متصل به هم در شبکه بلاک چین، متصل میکند.
پس از آن، استخراجکننده دو تراکنش ایجاد میکند یکی با ارزش بالا و دیگری با ارزش کم. سپس، مهاجم بلاک با ارزش بالا را پیشاستخراج میکند اما از فرستادن آن به صرافی خودداری میکند. پس از اینکه بلاک جدید اعلام شد، او بلافاصله بلاک از پیش استخراج شده را به سیستم صرافی میفرستد.
در این میان برخی از استخراجکنندگان این بلاک از پیش استخراج شده را به عنوان زنجیره اصلی در نظر میگیرند و این تراکنش را تایید میکنند. بنابراین این حمله از این واقعیت که بخشی از شبکه تراکنشی را که مهاجم بلاک آن را هدف قرار داد را میبینند در حالیکه بخشی دیگر این تراکنش را مشاهده نمیکنند، سوءاستفاده میکند.
پس از اینکه سرویس صرافی تراکنش با ارزش بالا را تایید کرد، مهاجم تراکنش با ارزش کم را به شبکه اصلی میفرستد و در نهایت تراکنش با ارزش بالا را رد میکند. در نتیجه تراکنش با ارزش بالا در حساب مهاجم سپرده میشود. اگرچه شانس بسیار بالایی برای موفقیت در این حمله وجود دارد، اما خیلی رایج و متداول نیست؛ چرا که نیاز دارد که یک کیف پول الکترونیک میزبان پس از تایید تراکنش، پرداخت را بپذیرد.
حمله تاریخ جایگزین (Alternative history) ممکن است حتی در مورد تایید چندین تراکنش نیز رخ دهد، اما به مقدار زیادی توان محاسباتی نیاز دارد.
در این حالت، کاربر مخرب تراکنشی را به فروشنده ارسال میکند و در همان زمان فورکی جایگزین را با تراکنش دیگری که ارزهای مشابهی را بازمیگرداند، استخراج میکند. حتی اگر فروشنده محصول خود را پس از تاییدها ارسال کند، اگر مهاجم زنجیره بلندتری را منتشر کند و سکههای آنها را پس بگیرد، ممکن است پول خود را از دست دهد.
حمله 51 درصدی زمانی امکانپذیر است که یک هکر کنترل 51 درصد از نرخ هش شبکه را در دست بگیرد و یک فورک جایگزین ایجاد کند که نسبت به پروژههای موجود در اولویت قرار گیرد. این حمله در ابتدا تنها آسیبپذیری شناختهی بیت کوین بود و در گذشتهای نه چندان دور غیرواقعی به نظر میآمد.
با این حال 5 ارز دیجیتال ورج، زنکش، موناکوین، بیت کوین گلد و لایت کوین کش از حملات 51 درصد آسیب دیدند. در هر یک از این موارد، مجرمان سایبری به اندازهای قدرت هش شبکه را دست گرفتند که آن را به خطر بیاندازند و میلیونها دلار به جیب بزنند.

متاسفانه همه ارزهای دیجیتال کوچک و نوپا هنوز هم در معرض خطر هستند. چرا آنها استخراجکنندگان کمتری را جذب میکنند و مهاجمان میتوانند برای ایجاد سهم عمده در شبکه توان محاسباتی لازم را اجاره کنند.
اقدامات لازم برای پیشگیری از حملات دو بار خرج کردن شامل نظارت بر تراکنشهای دریافت شده، ارسال مبادرتها و تلاشهای دو بار خرج کردن، وارد کردن نودهای دیگر برای مشاهده تراکنش و رد اتصالات مستقیم ورودی میشود.
علاوه بر این، یک فناوری جدید و نوآورانهای با نام شبکه لایتنینگ وجود دارد که با هدف حل مشکلات سوءاستفاده از نقاط ضعف مکانیزم تایید تراکنشها طراحی شده است. این شبکه به کاربران اجازه میدهد که از طریق شبکهای از کانالهای پرداخت دو سویه بدون تفویض اختیار وجوه، فورا تراکنشها را تایید کنند. با این حال، هنوز در معرض حمله دیداس قرار دارد که یکی از آنها در مارس 2018 اتفاق افتاد.
استخراجکنندگان غالبا منابع (توان محاسباتی و پردازشی) خود را با یکدیگر متحد میکنند و یک استخر استخراج (Mining pool) میسازند. با انجام این کار، آنها را میتوانند بلاکهای بیشتری را ماین کنند و در نتیجه پاداش استخراج را با یکدیگر شریک شوند.
برای ارزهای دیجیتالی همانند بیت کوین، رسیدن به سود برای ماینرهایی که بخواهند به صورت جداگانه کار کنند غیر ممکن است. در حال حاضر بزرگترین استخرهای استخراج بیت کوین BTC.com، AntPool.com و ViaBTC هستند.
بر اساس گزارش وبسایت Blickchain.com، این سه با یکدیگر بیش از 52 درصد از نرخ هش (Hash rate) کل شبکه را به دست میآورند.
استخرهای استخراج هدف چرب و نرمی برای مهاجمان به نظر میرسند. استخراجکننده مخرب تلاش میکند با سوءاستفاده از آسیبپذیریهای مکانیسم اجماع بلاک چین، کنترل داخلی و خارجی استخرهای استخراج را در دست بگیرد.
در اینجا نگاهی اجمالی به برخی از رایجترین حملات استخرهای استخراج خواهیم داشت.
استخراج خودخواهانه (Selfish mining) به تلاشهای یک ماینر مخرب برای افزایش سهمش از پاداش استخراج اشاره دارد. فرد مهاجم با پخش بلاکهای استخراجشده در شبکه برای مدت زمانی و سپس آزاد کردن چند بلاک بلافاصله، باعث میشود که استخراجکنندگان دیگر بلاکهای خود را از دست دهند.
از جمله اقداماتی که ممکن است برای جلوگیری از این نوع حمله موثر واقع شود، میتوان به انتصاب تصادفی استخراجکنندگان به شاخههای مختلف استخر، ارحج شمردن بلاک با برچسب زمانی تازهتر و یا تولید بلاکها در زمان قابل قبول، اشاره کرد. این نوع حمله، همیشه به عنوان مضایقه بلاک شناخته میشود.

در نتیجه یک حمله خودخواهانه به استخر الیگیوس (Eligius) در سال 2014، ماینرها 300 بیت کوین از دست دادند. احتمال موفقیت آمیز بودن این نوع از استخراج خودخواهانه بسیار زیاد است و ممکن است برای همه ارزهای دیجیتال اتفاق بیفتد.
ثبتنام تنها ماینرهای مورد اعتماد و یا تغییر پروتکل بیت کوین برای پنهان کردن تفاوت بین الگوریتم اثبات کار نسبی و اثبات کار کامل، میتواند چند نمونه از اقدامات پیشگیرانه در برابر استخراج خودخواهانه باشد.
فورک پس از مضایقه (Fork-After-Withhold or FAW) نوعی از استخراج خودخواهانه است که به نظر میرسد منجر به دریافت پاداش بیشتری برای مهاجمان میشود. در جریان یک حمله FAW، ماینر مخرب بلاک برنده را پنهان میکند و بسته به موقعیت، یا آن را رها میکند و یا در زمان دیگری، برای ایجاد فورک آن را آزاد میکند.
بلاک چین، یک فناوری نسبتا جدیدی است که اشکالات و آسیبپذیریهایی دارد. اگرچه محبوبیت بلاک چین به صورت روز افزون در حال افزایش است، اما افزایش تعداد حملات سایبری ممکن است خللی در این روند ایجاد کند. با افزایش آگاهی کاربران از آسیبپذیریهای بلاک چین، میتوان از اکثر این حملات پیشگیری کرد، در حالیکه برخی دیگر تنها با تخصص و دانش قابل جلوگیریاند.
اگر اخبار تکنولوژی را دنبال کرده باشید از تأثیرات شگرف ارزهای دیجیتالی و بلاک چین و همچنین فرصتهای اقتصادی نهفته در آنها، آگاهید. ازلحاظ اقتصادی، بیت کوین تنها در 2017 با بیش از 2035 درصد افزایش قیمت همراه بوده که از نشان از اهمیت بالای تکنولوژیهای اینچنینی دارد. از طرفی بیت کوین ویترین پولهای مجازی است، پس با رشد بیت کوین، بقیه ارزها نیز دستخوش تغییرات قیمتی خواهند شد. اتریوم یکی از این ارزهاست که 6365.3 درصد رشد داشته، لایت کوین هم از دیگر ارزهایی است که 2775.49 درصد رشد را تجربه کرده است.
بیت کوین را میتوان بهنوعی پادشاه این بازار دانست، اما کاربرد اصلی آن تنها یک ارز، که برای پرداختهای روزمره بسیار مناسب است، میباشد، از طرفی ما چیزی بیش از این عملکرد را انتظار داریم. ما نیاز داریم تا نرمافزارهایی نوشته شوند که بر پایه شبکههای غیرمتمرکزی همچون بیت کوین اجرا شوند. به این منظور میبایست قراردادهای هوشمند بیت کوین را ایجاد کنیم؛ این قراردادها دارای زبانی محدودند و بهعلاوه توسعهپذیری چندانی ندارند.
برای حل این مشکلات و اجرای قراردادهای هوشمند در شبکه وسیعتر، قراردادهای هوشمند اتریوم به وجود آمدند. اتریوم به دلیل استفاده ماشین جازی تورینگ در یک بلاک چین برای اولین، موفق به ایجاد یک چیز بسیار خاص شده است. این یعنی قراردادهای هوشمند اتریوم ازلحاظ تئوری میتوانند از پس تمامی عملیاتهای محاسباتی بربیایند. بهعبارتدیگر، هر برنامهای را میتوان بر پایه اتریوم اجرا کرد.
در ادامه قصد داریم تا نحوه ایجاد یک قرارداد هوشمند ساده را برای شما شرح دهیم؛ این قرارداد بر پایه زبان برنامهنویسی «سالیدیتی» نوشته خواهد شد. سالیدیتی زبانی است که شباهتهای بسیاری به جاوا اسکریپت دارد.
برای شروع کار لازم است تا ابتدا Ganache را روی رایانه خود نصب کنید. با استفاده از این نرمافزار قادر خواهیم بود تا یک بلاک چین شخصی را بر روی دستگاه خود ایجاد کنیم؛ بهعلاوه وجود یک نسخه دانلودی از «مای اتر ولت» نیز ضروری است (نسخه وب کارساز نیست). به یاد داشته باشید که نسخهای که اقدام به دانلود آن میکنید v3.xx.x.x.zip باشد.
Download MyEtherWallet V3.11.3.3
در سایت Ganache اگر سیستم عامل شما windows باشد نسخه ای که برای دانلود به شما پیشنهاد می شود دارای پسوند .appx است که قابل اجرا در windows 10 می باشد. قبل از نصب فایل باید تنظیماتی را در ویندوز اعمال کنید تا برنامه بتواند نصب شود.
پس از دانلود فایل نصبی Ganache در قسمت search ویندوز 10 جمله for developers settings را سرچ کنید و بروی نتیجه نمایش داده شده کلیک کنید.
پنجره settings بخش For developers باز می شود. هم اکنون گزینه Winsdows Store apps به صورت پیش فرض انتخاب شده ولی شما باید گزینه Sideload apps را انتخاب کنید.
پس از انتخاب گزینه Sideload apps پنجره ای به شما نمایش داده می شود. گزینه Yes را بزنید و کار تنظیمات ویندوز برای نصب Ganache تمام است.
حالا فایل نصبی Ganache اجرا نموده و نصب کنید.
پس از نصب این نرمافزارها به این سایت وارد شوید تا این صفحه برای شما نمایش داده شود.
این صفحه Remix نام دارد که یک کامپایلر (برنامه مترجم) برای زبان برنامهنویسی سالیدیتی است. به این وسیله میتوانیم کدهای قراردادهای هوشمند خود را تدوین کنیم. در اولین بازدید این صفحه کدهایی از پیش برای شما نوشتهشده است. اما به چیزهایی که نوشتهشده نیازی نداریم، پس آنها را پاککرده و با کدهای زیر جایگزین میکنیم.
همانطور که میبینید کد ما شامل یک متغیر و سه عملکرد است. متغیر «Count» یک عدد صحیح است که شخصی است؛ یعنی از بیرون از قرارداد امکان دسترسی به آن وجود ندارد. اولین عملکرد که با عنوان «incrementCounter()» مشخصشده، با افزایشش باعث تغییر مقدار count میشود.
از طرفی نیز با کاهش آن میزان count با جهش (mutation) مواجه خواهد شد. عملکرد سوم نیز getCount() است که با استفاده از آن میتوان به count دسترسی پیدا کرد و میزان آن را به هر چیز و هرکسی که از دستور استفاده کند بازخواهد گرداند.
پس از جایگذاری دستورها در Remix شکل صفحه باید بهمانند تصویر زیر باشد.
در اینجا ما تب موردنظر را باز گذاشتیم تا در صورت نیاز به آن رجوع کنیم. حالا وقت آن رسیده که Ganache را بازکنیم. با باز کردن آن تصویر زیر دیده خواهد شد.
بر روی صفحه میتوانید نوشته «RPC SERVER» را مشاهده کنید. مکان آن را به خاطر بسپارید که بهزودی لازممان خواهد شد.
حالا مای اتر ولت را از حالت فشرده خارج کنید و سپس پوشه موردنظر را بازکنید. با باز کردن فایل index.html بهوسیله مرورگر خود، صفحه زیر برایتان بازخواهد شد.
در گوشه سمت راست صفحه میتوانید بخشی را ببینید که به شما میگوید به شبکه از اتریوم متصل هستید. بهصورت پیشفرض شما به شبکه اصلی اتریوم یا Ethereum (ETH) متصل خواهید بود. با باز کردن ادامه لیست آن را تغییر میدهیم.
بر روی Add Custom Node کلیک کنید.
حالا اطلاعاتی را که پیشتر از Ganache و بخش RPC Server بهدست آورده بودیم را در این کادر وارد میکنیم. توجه داشته باشید که نام نود را هر چیزی که دوست داشته باشید میتوانید بگذارید.
مای اتر ولت، حالا به همان هاستی وصل شده که شما به وسیله نرمافزار Ganache ایجاد کرده بودید. حالا با استفاده از مای ولت اتر، قرارداد هوشمندی که به وسیله Counter ایجاد کردید را در درون بلاک چین خود آپلود میکنیم. به این منظور بر روی Contracts کلیک کرده و Deploy Contract را انتخاب میکنیم.
همانطور که مشاهده میکنید، مای اتر ولت از شما بایت کد قرارداد را میخواهد. برای پیدا کردن آن به Remix IDE برمیگردیم و بر روی گزینه Details کلیک میکنیم.
حالا و در صفحه بازشده اطلاعات بسیاری را در مورد قرارداد خود میبینید.
حالا باید رشته ی جلوی کلمه Object را کپی کنید که در واقع bytecode پروژه ما هست.
حالا به مای اتر ولت برگشته و بایت کد را در درون کادر مربوطه وارد میکنیم.
حالا کمی پایینتر رفته و حساب کاربری را به همراه قراردادی که روی آن قرار دارد وارد صفحه مربوطه میکنیم. خوشبختانه Ganache پنج آدرس را برای استفاده از بلاک چین خصوصیمان در اختیارمان قرار میدهد. برای استفاده از آنها تنها کافی است به بخش قبلی بازگشته و بر روی آیکون کلید که در برنامه دیده میشود، کلیک نماییم.
با کلیک بر روی آن، صفحهای به شکل مقابل برای شما نمایش داده میشود که حاوی کلیدهای خصوصی این حساب کاربری است.
حالا میتوانید این کلیدها را در بخش مای اتر ولت جایگذاری نمایید.
با کلیک بر روی گزینه Unlock، مای اتر ولت از شما میپرسد که آیا قصد تائید تراکنش و قرار دادن قرارداد را دارید. با انتخاب گزینه بله آن را تائید کنید.
اگر تمام مراحل را درست طی کرده باشید، Ganache در بخش Current Block اعدادی را به نمایش درخواهد آورد که تعداد اکانت هایی است که در داخل قرارداد، گنجاندهایم.
قرارداد ما در بلاک چین به ثبت رسیده. برای کار کردن با آن و تعیین میزان counter، به مای اتر ولت بازگشته و گزینه Interact With Contract را انتخاب میکنیم.
حالا مای اتر ولت از شما آدرس قراردادی که بهتازگی واردشده و ABI قرارداد را از ما میخواهد. برای پیدا کردن آدرس به Ganache باز میگردیم و از بخش Transactions این آدرس ها را پیدا میکنیم.
در این صفحه میتوانیم تراکنشی را که پیشتر ایجاد کردیم ببینیم. همانطور که مشخص است، Ganache آدرسی را که قرارداد را در آن قراردادیم به نمایش نشان میدهد که این همان آدرس قرارداد بلاک چین ماست. اطلاعات بیشتری نیز در این بخش قابلمشاهده است. با کلیک بر روی تراکنش، آدرس را کپی نموده و در مای اتر ولت جایگذاری میکنیم.
در اینجا تنها جای ABI خالی مانده است. به را پیدا کردن این بخش کافی است به Remix برگردیم و با کلیک روی گزینه کپی که درست در کنار INTERFACE – ABI قرار دارد آن را کپی کنیم.
در این مرحله ABI را وارد و بر روی گزینه Access کلیک میکنیم.
با کلیک بر روی گزینه Select a function میتوانیم با قرارداد خود کارکنیم.
در بخش کد نویسی مقدار اولیه count را صفر تعیین نمودیم. برای آزمایش اینکه آیا قرارداد درستکار میکند یا نه دستور getCount() را اجرا میکنیم.
اگر با تصویر بالا روبهرو شدید قرارداد شما نیز به خوبی کار میکند. دو دستور دیگر نیز در کد ما وجود داشت برای تست دستور ncrementCounter() iرا وارد میکنیم. با انتخاب عملکرد موردنظر از کادر پایین، گزینه incrementCounter را انتخاب میکنیم و یک تراکنش جدید ایجاد میکنیم.
بدین ترتیب باعث افزایش میزان count شدیم. حالا دوباره دستور getCount() را اجرا میکنیم تا ببینیم که آیا این مقدار تغییر کرده یا نه.
همانطور که میبینید مقدار count به عدد 1 تغییر کرد. پس عملکرد incrementCount() کارکرده. به همین منوال عملکرد decrementCount() نیز قابل آزمایش است.
در این مقاله قصد بر این بود تا یک قرارداد هوشمند ساده را در محیط اتریوم به شما معرفی کنیم. چنین قراردادهایی بسیار به طرز کار کلی اتریوم شبیهاند اما باکمی تفاوت در نحوه عملکرد و کد نویسی های لازم. درصورتیکه بخواهید دیگران نیز در این قرارداد با شما سهیم باشند، تنها کافی است قرار داد خود را از طریق شبکه اتریوم یا اینترنت با آنها به اشتراک بگذارید. بدین ترتیب قرارداد شما بر روی دستگاههای دیگر نیز قابلاجرا خواهد بود؛ اما به یاد داشته باشید که افراد کلاهبردار میتوانند از این طریق مبالغ تقلبی برای شما ارسال کنند.