امنیت بیت کوین
امن کردن بیتکوین چالشی بزرگ است، چون بیتکوین یک ارزش انتزاعی(مثل تراز یک حساب بانکی) نیست. بیتکوین در واقع شبیه پول یا طلای دیجیتال است. در دنیای بیتکوین، همه چیز به مالکیت مربوط میشود؛ یعنی اگر مقداری بیتکوین در دست شما باشد، آن بیتکوین قطعاً مال شماست.
در مورد پول نقد(اسکناس و سکه )مالکیت 90% قضیه است، و گاهی اوقات همچنان باید ثابت کنید مالک واقعی آن پول یا فلز گرانبها هستید. داشتن کلیدهایی که بتوانید قفل بیتکوین را باز کنید، معادل مالکیت مقداری پول یا فلز گرانبها است.
وقتی مقداری بیتکوین دارید، ممکن است آن را گم کنید، یا از شما بدزدند، یا اشتباهاً به کسی بدهید. و درست مثل وقتی پول نقد خود را گم میکنید، در اینجا هم هیچ راه برگشتی وجود ندارد.
با این حال، بیتکوین ویژگیهایی دارد که پول نقد، طلا و حسابهای بانکی ندارند. از یک کیف پول بیتکوین، که حاوی کلیدهاست، میتوان مثل یک فایل نسخه پشتیبان گرفت، میتوان آن را در چند نسخه تکثیر کرده، و یا حتی روی کاغذ چاپ کرد.
از پول نقد، طلا یا حسابهای بانکی نمیتوان «نسخه پشتیبان» گرفت. بیتکوین همچنان با همه آنچه تاکنون دیدهایم، فرق دارد که برای امنیت آن باید چارهای تازه اندیشید.
اصول امنیت
اصل بنیادی بیتکوین غیر متمرکز بودن آن است، و این عدم تمرکز پیامدهای مهمی برای امنیت در بر دارد. مدلهای متمرکز، مانند بانکهای سنتی یا شبکههای پرداخت، برای دور نگهداشتن افراد ناباب و خبیث برمبنای شناسایی و کنترل دسترسی مشتریان خود عمل میکنند.
در مقایسه، یک سیستم غیرمتمرکز مانند بیتکوین مسئولیت و کنترل را به کاربران میسپارد. از آنجا که امنیت این مدل براساس اثبات کار قرار داده شده، نه کنترل دسترسی، شبکه بیتکوین میتواند باز باشد و نیازی به رمزگذاری ترافیک آن نیست.
پرداخت در شبکه پرداخت سنتی، مثل سیستمهای کارت اعتباری، کاملاً باز است چون هویت خصوصی کاربر (شماره کارت اعتباری) روی آن درج شده است. وقتی کارت اعتباری صادر شد، هرکسی میتواند با داشتن این کارت از آن «برداشت» یا قبوض آن را «پرداخت» کند.
بنابراین، این شبکه پرداخت باید در تمام طول مسیر (از مشتری تا سیستم ) کاملاً امن باشد و هیچ نوع استراقسمع یا دخالتی در ترافیک بین این دو نقطه انتهایی (در هیچ یک از مراحل یا ذخیره سازی آن) ممکن نباشد. اگر یک فرد خبیث به این سیستم دسترسی پیدا کند، میتواند اطلاعات تراکنشها و پرداختها را ببیند و با اطلاعاتی که بدست میآورد، تراکنشهای دروغین انجام دهد.
از آن بدتر، وقتی اطلاعات مشتری لو برود، در معرض خطر جعل هویت قرار میگیرد، و باید اقدامی برای جلوگیری از سوء استفاده از اطلاعات حسابهای لو رفته صورت گیرد.
سیستم بیتکوین به کلی متفاوت است.یک تراکنش بیتکوین فقط اجازه پرداخت یک مبلغ مشخص به یک گیرنده خاص را صادر میکند و هیچ اطلاعات دیگری در آن وجود ندارد که بتوان برای جعل یا تحریف از آن سوء استفاده کرد. در یک تراکنش بیتکوین هیچ گونه اطلاعات شخصی، مثل نام و هویت طرفین پرداخت، وجود ندارد و امکان استفاده از آن برای پرداختهای دیگر وجود نخواهد داشت.
بنابراین، رمزگذاری و حفاظت ترافیک شبکه بیتکوین در مقابل استراقسمع ضرورتی ندارد. در حقیقت، یک تراکنش بیتکوین را میتوان بدون نگرانی امنیتی روی کانالهای باز و عمومی، مثل شبکههای بلوتوث یا وای فای، منتشر کرد.
مدل امنیتی غیر متمرکز بیتکوین بخش اعظم قدرت را به کاربران میسپارد؛ قدرت با خود مسئولیت میآورد، مسئولیت حفظ امنیت کلیدها برای اکثر کاربران تامین این امنیت کار سادهای نیست، به خصوص روی دستگاههای همه منظوره که تقریبا همیشه به اینترنت متصل هستند، مثل کامپیوترهای شخصی و تلفنهای هوشمند.
هرچند مدل غیرمتمرکز بیتکوین از لو رفتنهای دست جمعی مانند آنچه در کارتهای اعتباری دیده شده است، جلوگیری میکند، ولی بسیاری از کاربران قادر به تامین امنیت کافی برای کلیدهای خود نیستند، و یک به یک شکار میشوند.
توسعه امن سیستمهای بیتکوین
مهمترین اصل برای برنامه نویسان بیتکوین غیر متمرکز بودن آن است. اکثر برنامهنویسان با مدلهای امنیت متمرکز آشنایی دارند و ممکن است وسوسه شوند آن مدلها را در برنامههای کاربردی که برای بیتکوین مینویسند، اعمال کنند، اقدامی که نتیجه آن فاجعه بار خواهد بود.
این مدل امنیت به کنترل غیر متمرکز برکلیدها و اعتبار سنجی مستقل تراکنش توسط معدنچیان متکی است. اگر میخواهید امنیت بیتکوین را بالا ببرید باید چارچوب مدل امنیتی بیتکوین را ترک نکنید. به بیان ساده: کنترل کلیدها را از کاربر نگیرید و تراکنشها را از بلاکچین خارج نکنید.
برای مثال، بسیاری از صرافیهای اولیه بیتکوین تمام سرمایه کاربر را در کیف پول «داغ» (آنلاین) قرار میدادند و همه کلیدها را روی یک سری سرویس دهندهی واحد ذخیره میکردند. این طراحی کنترل را از کاربر میگیرد و آن را در یک سیستم واحد متمرکز میکند. وقتی این سیستم هک میشود، پیامدهای فاجعه باری برای مشتریان آن خواهد داشت.
یک اشتباه رایج دیگر خارج کردن تراکنشها از بلاکچین، به طمع کاهش کارمزد تراکنش و سرعت دادن به پردازش آن، است. سیستمی که «خاج از بلاکچین» است، باید تراکنشها را در داخل خود ذخیره کند، یک دفتر کل متمرکز داشته باشد، و فقط هر از چندگاهی بلاکچین مستقل خود را با بلاکچین بیتکوین همسانسازی کند، این روش هم امنیت غیرمتمرکز بیتکوین را با رویکردی تکروانه متمرکز جایگزین میکند.
وقتی تراکنشها خارج از بلاکچین اصلی بیتکوین هستند، امکان دستکاری خرابکارانه در دفتر کل محلی وجود دارد که خطر سرقت بیتکوین را برای کاربران به همراه خواهد داشت. اگر میخواهید سرمایه خود را از زیر چتر حمایت امنیت غیرمتمرکز بیتکوین خارج کنید، باید آماده پرداخت هزینه سنگین امنیت عملیاتی، لایههای متعدد کنترل دسترسی و حسابرسی دقیق باشید.
حتی اگر سرمایه و انضباط کافی برای پیاده سازی یک مدل امنیتی مستحکم داشته باشید، این مدل امنیتی چیزی بیش از یک کپی ناقص و شکننده از شبکههای مالی سنتی نخواهد بود، شبکههایی که هرگز از جعل هویت، رشوه و اختلاس رهایی نداشتهاند. برای بهرهگیری از مدل منحصر به فرد امنیت غیرمتمرکز بیتکوین، درمقابل وسوسههای به کارگیری معماریهای غیرمتمرکز مقاومت کنید.
بنیان اعتماد
معماری امنیت سنتی بر مفهوم موسوم به بنیاد اعتماد استوار است. «بنیان اعتماد» یک هسته امن و قابل اعتماد است که اساس امنیت کل سیستم یا برنامههای کاربردی را تشکیل میدهد. معماری امنیت به صورت دایرههای هم مرکز که از داخل به بیرون گسترش میابند، حول این بنیاد اعتماد توسعه داده میشود. هرلایه با استفاده از کنترل دسترسی، امضای دیجیتال، رمزگذاری و دیگر عملکردهای امنیتی، روی لایه داخلی که قابل اعتمادتر است، ساخته میشود.
با پیچیدهتر شدن سیستم نرمافزاری، احتمال بروز باگ نیز بیشتر خواهد شد، که آن را در مقابل حملههای امنیتی آسیبپذیرتر میکند. در نتیجه، هرقدر یک سیستم نرمافزاری پیچیدهتر شود، امن کردن آن سختتر خواهد شد. مفهوم «بنیان اعتماد» تضمین میکند که بخش اعظم اعتماد بر بخشهایی از سیستم که کمترین پیچیدگی (و در نتیجه کمترین آسیبپذیری) را دارند، گذاشته میشود، و بخشهای پیچیدهتر به صورت لایه حول این مرکز شکل خواهد گرفت.
این معماری امنیت در مقیاسهای مختلف تکرار میشود، از بنیان اعتماد که معمولاً در سختافزار یک سیستم واحد پیادهسازی میشود، تا لایههای بعدی که بنیان اعتماد را ابتدا به سیستم عامل، و از آنجا به سرویسهای سیستمی سطح بالا، و سرانجام به تعدادی سرویسدهنده گسترش میدهند. در بیتکوین، سیستم اجماع یک دفترکل قابل اعتماد به وجود میآورد که کاملاً غیرمتمرکز است.
یک بلاکچین معتبر از بلاک به عنوان بنیاد اعتماد استفاده میکند و زنجیره اعتماد را تا بلاک فعلی میسازد. سیستمهای بیتکوین باید از این بلاکچین به عنوان بنیان اعتماد خود استفاده کنند. در طراحیهای برنامههای کاربردی پیچیدهی بیتکوین که از تعداد زیادی سرویس روی سیستمهای مختلف تشکیل شدهاند، برای اطمینان از به جا بودن اعتماد باید دقت زیادی صرف بررسی این معماری امنیت شود.
در نهایت، آن چیزی که باید به صراحت به آن اعتماد کنید، یک بلاکچین کاملا معتبر و اعتبار سنجی شده است. اگر یک برنامه کاربردی بیتکوین اعتماد (صریح یا ضمنی) خود را روی چیزی غیر از بلاکچین بنا کند، باید با شک و تردید به آن نگاه کرد، چون همین اعتماد بیجا عامل ایجاد آسیبپذیری سیستم خواهد بود.
یک روش خوب برای ارزیابی معماری امنیت یک برنامه کاربردی بیتکوین در نظر گرفتن اجرای مختلف برنامه و ارزیابی سناریوهای فرضی است که در آنها این بخش از سیستم کاملاً آسیبدیده و تحت کنترل یک فرد خبیث(نفوذگر) است. اجرا مختلف برنامه باید یک به یک ارزیابی شده و تاثیر اختلال در آنها بر امنیت کل سیستم سنجیده شود.
با به خطر افتادن یک بخش از برنامه کل سیستم دیگر امن نیست، یعنی این بخش مبنای اعتماد بیجا قرار گرفته است. یک برنامه کاربردی بیتکوین که بخواهد از این گونه آسیبپذیریها باشد، باید بنیاناعتماد خود را فقط بر قویترین بخش از معماری امنیت بیتکوین قرار دهد. چنین برنامهای فقط در برابر خطرات آسیبپذیر است که کل سیستم بیتکوین را هدف قرار دهد.
بررسی نمونههای متعدد هکشدن صرافیهای بیتکوین نشان میدهد که در طراحی این برنامهها تا چه حد به اصول و معماری امنیت بیت کوین بیتوجهی شده است، موارد پیشپا افتادهای که حتی با یک بررسی ساده قابل مشاهده هستند. در اکثر موارد، این برنامهها متمرکز بنیان اعتماد خود را بر عامل متعدد خارج از بلاکچین بیتکوین، از قبیل کیفپول آنلاین، پایگاهداده دفتر کل مرکز، روشهای رمزگذاری پرخطر و مانند اینها، قرار داده بودهاند.