کلمه کیف پول برای معرفی و توصیف مفاهیم مختلفی در بیت کوین به کار میرود. در ابتدا یک کیف پول، اپلیکیشنی است که رابط کاربری اولیه با کاربر را تشکیل میدهد. وظیفه کیف پول در واقع کنترل دسترسی کاربر به پول، مدیریت کلیدها و آدرسها، پیگیری تعادل، ایجاد و امضای معاملات است.
اگر بخواهیم از زاویه نزدیکتر و از نگاه یک برنامهنویس به این موضوع نگاه کنیم، کلمه کیف پول به ساختمان دادهای برمیگردد که از آن برای حفظ و مدیریت کلیدهای کاربر استفاده میشود.
در این سری مقالهها، ما نگاهی بر مفهوم دوم خواهیم داشت یعنی مفهومی که در آن کیف پول ها محفظه کلیدهای خصوصی هستند که معمولا در قالب ساختار فایل یا دیتابیسهای ساده به اجرا در میآیند.
بررسی اجمالی تکنولوژی کیف پول
در این قسمت ما به طور خلاصه تکنولوژیهای گوناگونی که برای ساختن کیفپول هایی با رابط کاربری مناسب، امن و منعطف به کار میرود را به طور خلاصه بررسی میکنیم
تصور غلط رایجی که راجب بیت کوین وجود دارد این است که افراد فکر میکنند کیفپول دارای بیت کوین است. در واقع، کیف پول فقط شامل کلیدها میشود و سکهها بر روی بلاکچین در شبکه بیت کوین ذخیره میشوند. کاربران با امضای معاملات به کمک کلیدهای موجود در کیف پولشان، سکهها را مدیریت میکنند. به بیان دیگر، کیفپول بیت کوین، بلاک چین نیست و کیچین (KeyChain) به معنای زنجیره کلیدهاست.
دو نوع کیف پول اصلی وجود دارد. این دو نوع بسته به این که آیا کلیدهایی که در این کیف پول وجود دارند به هم مرتبط اند یا نه متمایز میشوند.
کیف پول تصادفی (nondeterministic wallet) نوع اول کیف پولهای بیت کوین است که در آن، هر کلید به طور مستقل از یک شماره اتفاقی استخراج میشود. کلیدها در این کیف پول به هم ارتباطی ندارند. به این نوع کیف پولها، JBOK نیز گفته میشود که مخفف عبارت (Of Keys Just a Bunch) بوده و به معنی یک دسته کلید است.
کیف پول قطعی (deterministic wallet) نوع دوم کیف پول است که در آن کلیدها از یک کلید اصلی استخراج میشوند که به آن کلید سید (seed) گفته میشود. همه کلیدهای موجود در این نوع کیف پول به یکدیگر مرتبط اند و امکان تولید مجدد آنها در صورت وجود سید اصلی وجود دارد. متدهای مختلفی برای استخراج کلیدها در کیفپول های قطعی وجود دارد. معمولترین روش استخراج کلید، استفاده از یک ساختار درختی است که به آن روش سلسله مراتبی قطعی (hierarchical deterministic) یا HD گفته میشود.
مقداردهی اولیه کیف پولهای قطعی از سیدها آغاز میشود. برای این که کارها راحتتر انجام شود، سیدها با کلمات انگلیسی کدگذاری میشوند که به آن کلمات کدگذاری شده یادیار (mnemonic code words) گفته میشود.
در چند قسمت بعد درباره تکنولوژیهای یاد شده به تفضیل صحبت خواهیم کرد.
کیف پولهای تصادفی (nondeterministic wallet)
در نوع اول کیفپول بیت کوین که اکنون به آن هسته بیت کوین ( Bitcoin Core) گفته میشود، کیف پولها مجموعه ای از کلیدهای شخصی هستند که به صورت اتفاقی استخراج شده اند. به عنوان مثال، کاربر اصلی هسته بیت کوین برای استخراج ۱۰۰ کلید شخصی اتفاقی پیشگام میشود و در صورت نیاز کلیدهای بیشتری را استخراج میکند و از هرکلید یک بار استفاده میکند. ای نوع کیف پولها جای خود را کم کم به کیف پولهای قطعی (deterministic wallet) داده اند چرا که مدیریت، بکآپ گیری و واردکردن آن سخت است. ویژگی منفی کلیدهای اتفاقی این است که اگر شما چند کلید را استخراج کنید، باید کپی همه آنها را نگه دارید یعنی این کیف پول باید به طور مکرر بکآپ گیری شود. در واقع هر کلید باید بکآپ گیری شود.
به عبارت دیگر، دارایی های تحت کنترل این کیف پول در صورتی که از دسترس خارج شود، به طور غیرقابل برگشتی از دست میرود. این موضوع به طور مستقیم با اصل پرهیز از استفاده مجدد آدرس یعنی استفاده از هر آدرس بیت کوین برای تنها یک معامله در تعارض است. استفاده مجدد از آدرس باعث پیوستن چندین معامله و آدرس به یکدیگر شده و در نهایت باعث کاهش امنیت میشود. نوع Type-0 کیف پولهای تصادفی یک انتخاب ضعیف برای کیف پول است به خصوص اگر شما بخواهید از استفاده مجدد آدرس پرهیز کنید چرا که عدم استفاده مجدد از آدرس به معنای مدیریت چندین کلید است که نیازمند بکآپ گیری مکرر میباشد.
اگرچه هسته بیت کوین دارای کیف پول Type0 است اما باید بدانید که این کیف پول حتی توسط توسعه دهندگان هسته بیت کوین نیز توصیه نمیشود. تصویر پایین یک کیف پول تصادفی را نشان میدهد که شامل مجموعهای از کلیدهای تصادفی بی ربط است.
کیف پولهای قطعی (deterministic wallet)
کیف پولهای قطعی ، کیف پولهایی هستند که دارای کلیدهای خصوصی بوده که از یک سید مشترک به وسیله استفاده از تابعی یک طرفه به وجود میآیند. سید، یک عدد اتفاقی استخراج شده بوده که با دادههای دیگر مانند عدد شاخص و یا کد زنجیرهای (chain code) برای استخراج کلیدهای شخصی ترکیب شده است. در یک کیفپول قطعی، سید مورد نظر برای ریکاوری همه کلیدهای استخراجشده کافیست بنابراین یک بکآپ گیری ساده در زمان تشکیل آن کفایت میکند. همچنین سید برای خروج یا ورود به کیفپول کافیست و باعث میشود انتقال آسان کلیدهای کاربران در بین کیفپولهای مختلف عملی شود. تصویر زیر یک دیاگرام منطقی از کیف پولهای قطعی رانمایش میدهد.
کیف پولهای HD
کیف پول های قطعی یا deterministic به منظور آسانسازی فرآیند استخراج کلیدهای مختلف از یک سید ایجاد شدند. پیشرفتهترین نوع کیفپول های قطعی با نام کیفپول HD با استانداردهای BIP-32 تعریف شده است. کیف پول های HD شامل کلیدهایی است که در یک ساختار درختی استخراج می شوند به گونهای که کلید اصلی میتواند چندین کلید زیرمجموعه را به وجود آورد و زیرمجموعهها نیز میتوانند کلیدهای زیرمجموعه خودشان را ایجاد کنند و این مسیر تا عمق بی نهایت ادامه دارد. این ساختار درختی را در تصویر پایین مشاهده میکنید.
کیفپول های HD بیشترین مزیت را نسبت به کلیدهای اتفاقی در کیف پولهای تصادفی ارائه میکنند. اول این که ساختار درختی میتواند به منظور بیان معانی سازمانی دیگر نیز به کار رود؛ مثلا میتوان شاخه خاصی از کلیدهای زیرمجموعه را برای دریافت حقوق و دستمزد در نظر گرفته و از شاخه دیگر آن برای دریافت وجه تبدیل شده خروجی استفاده کرد. شاخههای مختلف کلید همچنین میتوانند در تنظیمات شرکت، تخصیص شاخههای مختلف به ادارات، شرکتهای تابعه، توابع خاص و یا دستهبندی حسابداری مورد استفاده واقع شوند.
مزیت بعدی کیفپول های HD این است که کاربران میتوانند بدون دسترسی به کلیدهای شخصی مشابه، کلیدهای عمومی متوالی ایجاد کنند. این قابلیت به کیفپول های HD کمک میکند تا در یک سرور ناامن مورد استفاده واقع شده و بتواند برای هر معامله، کلیدهای عمومی مختلف ایجاد نماید. کلیدهای عمومی نیازی به پیشبارگذاری و یا استخراج به صورت پیشرفته را ندارند. با این حال، این سرور کلیدهای خصوصی که بتواند پول هزینه کند را دارا نیست.
سید (seed) و کدهای یادیار (Mnemonic Codes)
کیفپول های HD یک مکانیسم بسیار پیشرفته برای مدیریت بسیاری از کلیدها و آدرس ها ارائه میکنند. این کیفپول حتی میتوانند کارآمدتر باشد به شرط این که با روش استاندارد ایجاد سیدها از توالی کلمات انگلیسی که به راحتی نوشته شده، ترکیب شود و بتواند بین کیفپول ها ورودی و خروجی داشته باشد. این ترکیب، ترکیب یادیار یا mnemonic است و استاندارد آن BIP-39 نام دارد. امروزه بیشتر کیفپول های بیت کوین (همانند کیف پولهای دیگر ارزهای دیجیتال) از این استاندارد استفاده کرده و سیدها را برای بکاپ وارد و خارج میکند و نیز اطلاعات آن را با استفاده از یادیارهای تعاملپذیر ریکاوری مینماید.
بگذارید نگاهی از منظر عملی به این کدها داشته باشیم. کدامیک از سیدهای پایین راحتتر رونویسی شده، روی برگه ذخیره شده، بدون اشتباه خوانده شده، و به یک کیف پول دیگر صادر و وارد میشود؟
۰C1E24E5917779D297E14D45F14E1A1A
army van defense carry jealous true
garbage claim echo media make crunch
پاسخ روشن و واضح است!
بیت کوین بیت کوین بیت کوین بیت کوین