هسته بیت‌کوین (Bitcoin Core) توسط چه کسی کنترل می‌شود؟(قسمت یک)

پیش گفتار: برای مطالعه این قسمت نیاز به آشنایی با گیت‌هاب دارید. برای آشنای با گیت‌هاب می‌توانید به این لینک بروید. برای اینکه بدانید هسته بیت‌کوین به چه چیزی گفته می‌شود به این لینک مراجعه کنید.

این سوال که چه کسی کنترل ادغام کردن و تغییرات کد برنامه بیت‌کوین را در گیت‌هاب در اختیار دارد به صورت تکراری مطرح می‌شود. طی سال‌های اخیر افراد مختلفی این قسمت از پروتکل بیت‌کوین را به عنوان نقطه‌ای مرکزی در پروتکل بیت‌کوین نام برده‌اند، اما من استدلال می‌کنم که این سؤال خود یک شاه ماهی قرمز است که از دیدگاه اقتدارگرایانه حاصل می‌شود و این مدل تفکر، نمی‌تواند در مورد بیت‌کوین صدق کند. به یقین این موضوع برای یک فرد عادی واضح نیست، به همین دلیل هدف این مقاله توضیح چگونگی کارکرد هسته بیت‌کوین و در سطح بالاتر، چگونگی تکامل پروتکل بیت‌کوین می‌باشد.

تاریخ هسته بیت‌کوین

هسته بیت‌کوین (Bitcoin Core) به عنوان نقطه توسعه پروتکل بیت‌کوین بیشتر یک نقطه کانونی است تا یک نقطه با هدف کنترلی و امری. اگر به هر دلیلی این نقطه کانونی از بین برود یک نقطه کانونی دیگر بوجود خواهد آمد. پلتفرمی که در حال حاضر به منظور ایجاد ارتباطات فنی مورد استفاده قرار می‌گیرد(در حال حاضر مخزن GitHub) بیشتر به دلیل راحتی کار مورد استفاده می‌باشد تا اینکه بخواهیم از آن به عنوان تنها نقطه یکپارچگی تعاریف و پروژه بیت‌کوین یاد کنیم. در واقع تاکنون شاهد تغییرات نقطه کانونی مربوط به توسعه بیت‌کوین و حتی نام‌های آن نیز بوده‌ایم.

  • در اوایل سال ۲۰۰۹ کد پروژه بیت‌کوین تنها یک فایل rar. بود که بر روی سرویس SourceForge قرار داشت. اولین توسعه‌دهندگان از طریق ایمیل با شخص ساتوشی، برای رد و بدل کردن تغییرات نرم‌افزاری استفاده می‌کردند.
  • در ۳۰ اکتبر سال ۲۰۰۹، شخصی با نام Martti Malmi در SourceForge یک مخزن برای بیت‌‌کوین ایجاد کرد.
  • در سال ۲۰۱۱، پروژه بیت‌کوین از SourceForge به گیت‌هاب تغییر مکان داد.
  • در سال ۲۰۱۴ نام پروژه بیت‌کوین به هسته بیت‌کوین (Bitcoin Core) تغییر داده شد.

اعتماد به هیچ کس

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

به گفته پیتر تاد (peterktodd@) در توییتر:« @ummjackson @stakness هسته در مورد لیستی که اهمیت دارند شفاف می‌باشد: کلیدهای PGP که می‌توانند کامیت‌های ادغام را امضا کنند. درسی که می‌توان اینجا گرفت این است که به گیت‌هاب اعتماد نکنید! حتی هسته بیت‌کوین لیست تمام کسانی که توانایی تغییر مخزن دارند را نمی‌داند، که این را می‌توان به ده‌ها کارمند گیت‌هاب نیز بسط داد.»

با دیدگاه خصمانه، گیت‌هاب نباید مورد اعتماد باشد. هر یک از کارمندان گیت‌هاب می‌توانند با استفاده از دسترسی مدیریتی خود، هر کدی را بدون نیاز به موافقت نگهدارندگان به مخزن بیت‌کوین اضافه کنند. اما احتمال اینکه شخص حمله کننده به گیت‌هاب بیت‌کوین بتواند کد PGP را نیز در اختیار داشته باشد بسیار کم است.

هسته بیت‌کوین به جای اینکه یکپارچگی کد گیت‌هاب را بر اساس حساب‌های کاربری گیت‌هاب بررسی کند، در سیستم ادغام مداوم (CI)، کلیدهای PGP را به ازای هر درخواست ادغام بررسی می‌کند. در حالی که این کلیدها به هویت‌های شناخته‌ شده‌ای مربوط می‌باشند، همواره نمی‌توان این فرض را صحیح در نظر گرفت.  هر کلیدی ممکن است به دست شخص دیگری بیفتد و تا زمانی که صاحب اصلی کلید این موضوع را به نگهدارنده‌ها اعلام نکند نمی‌توان به این موضوع پی برد. به همین دلیل می‌توان گفت که این کلیدها امنیت مطلق ندارند و تنها کار را برای حمله کننده‌ای با هدف وارد کردن کد، سخت‌تر می‌کند.

کلیدهای پادشاهی

در لحظه نوشتن این مقاله، این‌ها اثر انگشت‌های PGP قابل اعتماد می‌باشند:

71A3B16735405025D447E8F274810B012346C9A6

133EAC179436F14A5CF1B794860FEB804E669320

32EE5C4C3FA15CCADB46ABE529D4BCB6416F53EC

B8B3F1C0E58C15DB6A81D30C3648A882F4316B9B

CA03882CB1FC067B5D3ACFE4D300116E1C875A3D

که این کلیدها در اختیار اشخاص زیر می‌باشند:

Wladimir J. van der Laan <laanwj@protonmail.com>

Pieter Wuille <pieter.wuille@gmail.com>

Jonas Schnelli <dev@jonasschnelli.ch>

Marco Falke <marco.falke@tum.de>

Samuel Dobson <dobsonsa68@gmail.com>

آیا این بدین معنی می‌باشد که ما باید به این ۵ نفر اعتماد کنیم؟ نه کاملاً. وجود کلید خود اثباتی بر هویت فرد نمی‌باشد و این کلیدها ممکن است در دست اشخاص دیگری بیفتند. با اجرا کردن اسکریپت پایتون تایید-کامیت چه تضمینی برای شما بوجود خواهد آمد؟

python3 contrib/verify-commits/verify-commits.py

Using verify-commits data from bitcoin/contrib/verify-commits

All Tree-SHA512s matched up to 309bf16257b2395ce502017be627186b749ee749

There is a valid path from “HEAD” to 82bcf405f6db1d55b684a1f63a4aabad376cdad7 where all commits are signed

اسکریپت تایید-کامیت برای بررسی یکپارچه بودن توسط هر توسعه دهنده‌ای بر روی کامپیوتر شخصی می‌تواند اجرا شود. پس از اجرای این کد، تمام امضاهای PGP بر روی تمام کامیت‌های ادغام، از کامیت 82bcf405… از دسامبر سال ۲۰۱۵، چک می‌شود که بالغ بر ۳۴۰۰ ادغام تا لحظه نوشتن این مقاله می‌شود. اگر این اسکریپت با موفقیت انجام شود، بدین معنی است که هر خط کدی که از آن زمان تغییر کرده است از پروسه توسعه هسته بیت‌کوین عبور کرده است و توسط شخصی با کلید نگهدارنده امضا شده است. با اینکه این موضوع یک ضمانت تام برای اثبات وارد نشدن هیچ کد مخربی نمی‌باشد (نگهدارنده‌ای فریب خورده باشد و یا کلیدش دزدیده شده باشد)، اما احتمال حمله را به میزان بسیار زیادی کاهش داده است. این نگهدارنده‌ها چه اشخاصی هستند و چگونه این نقش را بر عهده گرفته‌اند؟ در ادامه به این موضوع نیز خواهیم پرداخت.

امنیت لایه‌بندی شده

یکپارچه بودن کد هسته بیت‌کوین نباید تنها بر اساس کلیدهای رمزنگاری شده استوار باشد. به همین دلیل بررسی‌های دیگری نیز انجام می‌شود.  لایه‌های امنیتی مختلفی به منظور تأمین سیستم دفاعی با عمق مناسب تعبیه شده است.

امنیت درخواست واکشی (Pull request)

  1. هر شخصی اجازه دارد به منظور تغییر کد و بهبود نرم‌افزار یک درخواست واکشی به شاخه اصلی bitcoin/bitcoin باز کند.
  2. توسعه‌دهندگان درخواست‌های واکشی را به منظور اطمینان از غیر مضر بودن بررسی می‌کنند. هر شخصی آزاد است که درخواست‌های واکشی را بررسی کند و بازخورد خود را فراهم کند. هیچ نگهبان دروازه‌ یا امتحان ورودی برای مشارکت در کد بیت‌کوین وجود ندارد. اگر یک درخواست واکشی به نقطه‌ای برسد که هیچ اعتراض منطقی برای ادغام وجود نداشته باشد، نگهدارنده‌ای ادغام را انجام می‌دهد.
  3. نگهدارنده‌های هسته هوک پیش از واکشی (pre-push hook) را اجرا می‌کنند تا مطمئن شوند که کد امضا نشده‌ای را وارد مخزن نکنند.
  4. مجوزهای ادغام به صورت دلخواه توسط OpenTimestamps برچسب زمانی می‌خورند.
  5. سیستم ادغام مداوم تراویس به صورت منظم این اسکریپت را به منظور بررسی کردن یکپارچگی درخت گیت و تایید کردن تمام کامیت‌های شاخه اصلی بررسی می‌کند تا حتما توسط یکی از کلیدهای PGP مورد اطمینان امضا شده باشد.
  6. هر شخصی می‌تواند این اسکریپت را به منظور تایید امضاهای PGP تمام کامیت‌های ادغام شده از سال ۲۰۱۵ بررسی کند. اجرای این کد حدود ۱۵ دقیقه طول می‌کشد.

امنیت انتشار

  1. سیستم‌های ساخت قطعی کد Gitian به صورت مستقل توسط چندین توسعه‌دهنده اجرا می‌شوند. هدف از انجام این کار تولید فایل‌های باینری به صورت مجزا می‌باشد. اگر یکی از این افراد کدی که ساخته را با بقیه متفاوت بیابد، این بدین معنی است که قطعیت در کد نهایی وجود ندارد و این نسخه قابل انتشار نمی‌باشد. در صورتی که این اتفاق بیفتد، توسعه دهندگان به دنبال دلیل این مشکل و رفع آن می‌روند تا اینکه کاندیدای دیگری برای انتشار بسازند. در صورتی که کد ساخته شده قطعی باشد، توسعه دهندگان باینری‌های نهایی را امضا می‌کنند و ضمانت می‌کنند که این باینری‌ها و زنجیره ابزارهایی که استفاده شده اند دستکاری نشده‌اند و همگی از یک منبع استفاده کرده‌اند. این روش تک نقطه شکست ساخت و توزیع کد را از بین می‌برد. هر شخصی با توانایی خود می‌تواند سیستم خود را بسازد. دستورالعمل در این لینک قرار دارد.
  2. پس از انجام موفقیت آمیز ساخت Gitian و امضا شدن توسط سازنده‌ها، یک نگهدارنده هسته بیت‌کوین با استفاده از PGP، یک پیغام را با هش SHA256 هر ساخت امضا می‌کند. اگر قصد دارید یک باینری پیش ساخته را اجرا کنید، می‌توانید هش آن را پس از دانلود بررسی کنید و سپس صحت امضای پیام انتشار را با هش‌ها تایید کنید. دستورالعمل در این لینک قرار دارد.
  3. تمام مواردی که ذکر شد به صورت متن باز در اختیار قرار دارند و توسط هر شخصی با توانایی لازم قابل حسابرسی می‌باشد.
  4. در نهایت حتی پس از عبور از تمام بررسی‌های کیفی و یکپارچگی ذکر شده، کدی در هسته بیت‌کوین قرارا دارد و به سمت انتشار می‌رود توسط هیچ سازمان متمرکزی بر روی نودهای شبکه مستقر نمی‌شود. بلکه هر اپراتور نود از روی آگاهی تصمیم می‌گیرد که آيا تصمیم به آپدیت کردن کد خود و اجرای آن بگیرد یا خیر. هسته بیت‌کوین تعمداً هیچ قابلیت آپدیت اتوماتیکی را شامل نمی‌شود، زیرا می‌تواند باعث شود کاربران بدون انتخاب خود در حال اجرای کدی باشند که آن را نمی‌خواهند.

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

پوشش کد

هسته بیت‌کوین دارای تعداد زیادی کد به منظور تست کردن صحت عملکرد بیت‌کوین می‌باشد. یک مجموعه آزمون یکپارچگی به ازای هر درخواست ادغام اجرا می‌شود و یک مجموعه آزمون دیگر نیز هر شب بر روی شاخه اصلی اجرا می‌شود.

شما می‌توانید پوشش کد آزمون‌های انجام شده را بررسی کنید:

  1. ابتدا مخزن گیت‌هاب هسته بیت‌کوین را کلون کنید.
  2. نصب کردن وابستگی‌های لازم برای ساخت سورس برنامه
  3. اجرای این دستورات
  4. مشاهده گزارش در /total_coverage/index.html.

از سوی دیگر می‌توانید گزارش پوشش کد را در اینجا مشاهده کنید.

دارا بودن چنین پوشش کد بالایی به این معنی می‌باشد که با قطعیت بالایی می‌توان گفت که توابع نوشته شده همانگونه که باید کار می‌کنند.

آزمون‌ کد در نرم‌افزارهای مبتنی بر اجماع بسیار مهم می‌باشد. برای بعضی تغییرات پیچیده خاص، توسعه دهندگان از روش آزمون جهش سخت‌گیرانه استفاده می‌کنند، به این صورت که با خراب کرد کد، آزمون‌ها را مورد آزمون قرار می‌دهند تا ببینند آیا آنگونه که قرار است آزمون‌ها رد می‌شوند یا نه. گِرگ مکس‌وِل در هنگام انتشار نسخه 0.15 دیدی به ما می‌دهد:

«آزمون یعنی آزمون نرم‌افزار،اما آزمون آزمون به چه معنی ست؟نرم‌افزار. برای آزمودن آزمون، باید نرم‌افزار را خراب کنید.»-گِرگ مکس‌وِل

پایان بخش اول

مطالعه قسمت دوم

منبع: Who Controls Bitcoin Core?

(Visited 33 times, 1 visits today)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *