مقدمه
ابتدا بهتره چند تعریف رو بدونیم:
(Bitcoin Improvement Proposal) BIP: به فارسی پیشنهاد بهبود بیت کوین، یک استانداردی برای توسعه و بهبود پروتکل های بیت کوین هست که توسط جامعه بیت کوین ارائه شده.
گیت هاب: BIPs
رمزنگاری کلید عمومی (Public-key cryptography): به طور خلاصه اساس کار تراکنش ها در بلاکچین بیت کوین بر اساس رمزنگاری کلید عمومی هست. و در ابتدایی ترین حالت کیف پول ها برای سهولت کار و نگهداری امن کلید های خصوصی به وجود آمدن.
یک آدرس و کلید خصوصی مرتبط با آن در بلاکچین بیت کوین:
با زیاد شدن رمزارزها چگونه قراره این کلیدهای خصوصی را حفظ کنیم؟ فرض کنید شما 10 تا کوین مختلف رو دارید، و باید کلید خصوصی آنها رو در جای امن یادداشت کنید!
BIP 32
از مهم ترین پروپوزال های در سال 2012 مطرح شد BIP 32 بود که با عنوان کیف پول های قطعی سلسله مراتبی (hierarchical deterministic (HD) wallets) شناخته شد، و از مهم ترین تغییرات اضافه شدن کلید خصوصی بهبود یافته (xprv) بود که کاربران میتوانستند با یک کلید خصوصی اصلی (master private key)، کلید های خصوصی فرزند رو تولید کرد.
حال شما با داشتن یک کلید خصوصی اصلی میتوانید کلید های خصوصی اون 10 کوین رو که در بالا مثال زدم بازیابی کنید. مثالی از عملکرد کلید خصوصی اصلی در BIP32:
گیت هاب ابزار استخراج کلیدهای خصوصی: BIP32
BIP 39
در این پروپوزال که در سال 2013 ارائه شد، حفظ کلید خصوصی اصلی را برای انسان بسیار ساده تر کرد، در ادامه مراحل آن را شرح میدهم.
Seed Phrase: مجموعهای از چند کلمه است که کاربر در هنگام ساخت یک کیف پول، آنها را دریافت میکند. که میتواند با استفاده از آن کل کیف پول خود را و کلیدهای خصوصی خود را بازیابی کند. ویژگی Multicurrency بودن عبارت بازیابی، با ارائه BIP44 در سال 2014 اضافه شد.
فرایند ساخت Seed Phrase در استاندارد BIP39:
به دو بخش تقسیم میشود. بخش اول تولید تک تک کلمات Mnemonic و بخش دوم تبدیل کلمات Mnemonic به معادل باینری آنهاست.
بخش اول تولید کلمات Mnemonic:
1.تولید Entropy :Entropy به معنای بینظمی است. یک رشتهی ۱۲۸ تا ۲۵۶ بیتی از صفر و یک ها به صورت کاملاً تصادفی تولید میشود. رشتههای انتروپیِ ۱۲۸، ۱۶۰، ۱۹۲، ۲۲۴ و ۲۵۶ بیتی به ترتیب قادرند کلمات بازیابی ۱۲، ۱۵، ۱۸، ۲۱ و ۲۴ تایی تولید کنند. تصویر زیر یک رشتهی انتروپی ۱۲۸ بیتی را نشان میدهد که به صورت ۴ بیت ۴ بیت تفکیک شده است.
2.تولید Checksum: در این مرحله یک مقدارِ عددی با عنوان checksum تولید و به انتهای عدد تصادفی مرحلهی قبل یعنی همان انتروپی ۱۲۸ بیتی اضافه میشود. برای ساخت Checksum، ابتدا تعداد بیتهای انتروپی (یعنی ۱۲۸) به ۳۲ تقسیم میشود. نتیجهی تقسیم عدد ۴ است. حالا باید ۴ بیت اول SHA256 انتروپی را به انتهای آن اضافه کنیم. فرض کنیم ۴ بیت اول به صورت ۰۱۱۰ باشد. این همان checksum است و اگر به انتهای انتروپی اضافه شود، چیزی شبیه شکل زیر به وجود میآید. (تعداد بیتهای لازم برای ساخت checksum میتواند در روشهای مختلف، متفاوت باشد؛ در رشتههای انتروپی ۱۲۸، ۱۶۰، ۱۹۲، ۲۲۴ و ۲۵۶ بیتی به ترتیب checksum برابر 4، 5، 6، 7، 8 بیت است).
3.تفکیک (Split): مقدارِ نهایی باید به گروههای ۱۱ بیتی تفکیک (Split) شود، بعد از اضافه شدن checksum تعداد بیتهای انتروپی از ۱۲۸ به ۱۳۲ افزایش پیدا میکند. پس ۱۳۲ را تقسیم بر ۱۱ میکنیم. در نتیجه ۱۲ گروه ۱۱ بیتی مثل شکل زیر به دست میآید.
4.تبدیل به دسیمال (مبنای ۱۰): در این مرحله معادل هر کدام از ۱۲ گروه بالا در مبنای ۱۰ محاسبه میشود (به تصویر بعدی دقت کنید). اعداد به دست آمده بین ۱ تا ۲۰۴۸ خواهند بود که به ازای هرکدام، یک کلمه در لیست کلمات BIP 39 وجود دارد.
5.نگاشت کلمات: آخرین مرحله، پیدا کردن ۱۲ کلمهی متناظر با ۱۲ شمارهی بهدست آمده است. یعنی با توجه به تصویر قبلی، باید به سراغ لیست کلمات رفته کلمات شمارهی ۴۹، ۱۴۳۸، ۹۱۶ و … را پیدا کرد.
بخش دوم تبدیل کلمات Mnemonic به معادل باینری:
1.ترکیب Mnemonic و Salt: رشته حروف Salt (رمز اختیاری) در ادامه کلمات به دست آمده قرار میگیرند.
2.تولید هش 512 بیتی: حاصل مرحله اول 2048 بار در تابع PBKDF2 قرار میگیرد تا یک هش 512 بیتی تولید شود. اکنون با داشتن یک هش 512 بیتی، سید مورد نیاز به عنوان ورودی اولیه الگوریتمهای تعیین کلید خصوصی ارزهای دیجیتال مختلف آماده شده و والت پرایوت کی مرتبط با هر ارزی که از آن پشتیبانی میکند را تولید مینماید.
امنیت استاندارد BIP 39
هر چه تعداد کلمات بازیابی بیشتر باشد، درجهی امنیت آن بالاتر خواهد بود. فرض کنیم از سیستم کلمات ۲۴ تایی استفاده میکنیم. عدد تصادفی اولیه، یعنی همان انتروپی برای این کار یک عدد ۲۵۶ بیتی خواهد بود. برای انتخاب هر کلمه از لیست کلمات در این استاندارد، ۲۰۴۸ حالت مختلف وجود دارد. یعنی با این لیست میتوان 242048 یا 2256 ترکیب مختلف برای کلمات بازیابی ایجاد کرد. این یک عدد ۷۸ رقمی بسیار بزرگ است!
تعداد مجموع اتمهای تمامی مواد و اجسام و موجودات روی کرهی زمین در حدود 2166 تا هستند. اگر این عدد را ۲ برابر کنیم تازه میشود 2167 و اگر باز هم آن را دوبرابر کنیم 2168 به خواهیم رسید. هنوز فاصلهی خیلی خیلی زیادی تا 2256 وجود دارد. تعداد تمام اتمهای تمام کیهان، کمتر از این مقدار است. پس احتمال اینکه بتوان یک اتم منحصربه فرد را از بین تمام اتمها در کل جهان درست حدس زد از اینکه بتوان یک Master Seed را به طور تصادفی درست انتخاب زد، بیشتر است.
اگر فرض کنیم میخواهیم یک seed phrase که 12 کلمه ای رو با حمله بروت فورس با یک ابر کامپیوتر که در یک ثانیه می تواند یک میلیارد حالت مختلف رو تست کند، به طور تقریبی بعد از 10 میلیون سال میتوانیم به جواب برسیم! (: