پیشرفته کریپتو پدیا

آشنایی با سیر تکامل کیف پول‌های رمزارز؛ همه چیز درباره ساختار کلید عمومی و خصوصی

حتما بارها در مطالب مختلف سایت میهن بلاکچین و دیگر منابع به توصیه‌ای مبنی بر فاش نکردن و در میان نگذاشتن کلید خصوصی یا عبارت‌های یادآور (Mnemonic phrase) کیف پول خود با دیگران برخورده‌اید چرا که با داشتن کلید خصوصی یک آدرس، می‌توان به تمامی موجودی آن دسترسی داشت. از سویی ممکن است مجبور شده باشید تا کیف پول‌های رمزارز خود را در والت دیگری به جز کیف پول اولیه خود وارد کنید و برایتان سوال پیش‌ آمده باشد که چگونه این اتفاق رخ می‌دهد. یا ممکن است عبارت کیف پول HD را شنیده باشید و دقیقا ندانید که به چه معنی است.

خرید ارز دیجیتال با ۱۰ هزار تومان!

تو صرافی ارز پلاس میتونی فقط با ۱۰ هزار تومان و با کارمزد صفر، همه ارزهای دیجیتال رو معامله کنی!

همین الان شروع کن

برای آشنایی با ساختار کلیدهای خصوصی و عمومی گسترش یافته (Extended private/public keys) و طرح‌های پیشنهادی بهبود بیت کوین (BIPs) مرتبط با نحوه سامان‌دهی آدرس‌ها و کیف پول‌ها (همچون BIP-32، BIP-39 و BIP-44) با ادامه مطلب همراه باشید.

توضیح مختصری در مورد کیف پول‌های رمزارز، کلیدهای خصوصی و عمومی

کلید خصوصی رشته‌ای ۲۵۶ بیتی (یا ۳۲ بایتی) است که می‌توان آن را کلیدی برای دسترسی و خرج کردن موجودی یک آدرس دانست. اشکال متفاوتی برای نمایش این رشته عدد وجود دارد. یکی از این اشکال، شیوه [مناسب] وارد کردن به کیف پول (WIF – Wallet Import Format) است. این روش برای کپی کردن و جابجایی سهولت بیشتری دارد همچنین دارای چک‌سام (checksum) برای بررسی خطاهای احتمالی در ورود کاراکترهاست. با توجه به اینکه چک‌سام از چسباندن تعدادی بیت به انتهای رشته‌ای دیگر ایجاد می‌شود، می‌توان با چک کردن مقدار آن و مقایسه با خروجی حاصل از بیت‌‌های پیشین، متوجه خطای احتمالی در وارد کردن کاراکترها شد. خروجی این شیوه کلیدی ۲۰ بایتی است:

نحوه ساخته شدن کلید خصوصی WIF

در این شیوه به ابتدای کلید خصوصی بایت نسخه (Version Byte) افزوده می‌شود. این بایت برای هر شبکه مقداری متفاوت است. برای مثال برای شبکه اصلی بیت کوین مقدار 0x80 و برای شبکه آزمایشی بیت کوین مقدار 0xEF است. علاوه بر آن می‌توان پسوند اختیاری بایت فشرده‌سازی (Compression Byte) را به انتهای آن افزود. در صورت افزودن آن، مقدار 0x01 به انتهای کلید خصوصی چسبانده می‌شود. در انتها چک‌سام را داریم که در شبکه بیت کوین با دو بار هش کردن متوالی سه بخش قبلی ساخته می‌شود و ۴ بایت ابتدایی آن انتخاب می‌شود. در مرحله آخر برای سهولت خواندن، رشته ساخته شده به مبنای ۵۸ (base58) برده می‌شود. این مبنا از اعداد ۰ تا ۹ و تمامی حروف کوچک و بزرگ انگلیسی، به جز کاراکترهایی که می‌توانند با یکدیگر اشتباه گرفته شوند (مثل ۰ و حرف O)، ساخته شده است.

base58 = 123456789ABCDEFGH JKLMN PQRSTUVWXYZabcdefghijk mnopqrstuvwxyz

کلید عمومی را می‌توان همانند شماره حساب بانکی شما دانست و متناظر با این مثال، کلید خصوصی را همانند رمز اینترنت بانک یا کارت بانکی شما؛ یک تفاوت مهم در این مثال وجود دارد و آن این است که در بلاکچین، کلید عمومی از روی کلید خصوصی ساخته می‌شود. کلید عمومی با استفاده از عمل ضرب در ریاضیات مبتنی بر منحنی بیضوی با استفاده از کلید خصوصی ساخته می‌شود. نتیجه نهایی این ضرب، نقطه‌ای بر روی منحنی بیضوی است که مختصات x و y آن نقطه، کلید عمومی شما است. اشکال مختلفی برای نمایش کلید عمومی موجود است. در روشی که امروز رایج است و نسخه فشرده شده نامیده می‌شود، با استفاده از خواص منحنی‌های بیضوی (تقارن نسبت به محور ایکس) در نوشتن نیمی از کلید عمومی صرفه‌جویی می‌شود. این گونه‌ها کلیدهای عمومی با اعداد 02 یا 03 آغاز می‌شوند. در صورتی که مختصات y زوجد باشد عدد 02 و در صورتی که فرد باشد عدد 03 در ابتدای کلید درج می‌شود.

شکل نمودار منحنی بیضوی

در ۳۲ بایت بعدی، مختصات ایکس ثبت می‌شود. این‌گونه می‌توان فضای زیادی را در بلوک‌ها صرفه‌جویی کرد.

ساختار

هنگامی که کلید عمومی خود را برای کسی می‌فرستید؛ او خروجی تراکنشی را با کلید عمومی شما (در واقع با هش کلید عمومی شما) قفل می‌کند و شما برای دریافت و خرج کردن آن کلید عمومی خود را به همراه امضای دیجیتال به عنوان ورودی مکانیزم باز کردن وارد می‌کنید.

اما هش کلید عمومی (public key hash) چگونه ساخته می‌شود؟ این مشخصه با هش کردن کلید عمومی با دو تابع (به ترتیب) SHA256 و RIPMED160 انجام می‌شود. خروجی این روش، خلاصه‌ای ۲۰ بایتی است که از کلید عمومی فشرده ۳۳ بایتی کوتاه‌تر است. این بدین معنی است که آدرسی که نهایتا از روی آن ساخته می‌شود کوتاه‌تر خواهد بود. دلیل همراه کردن تابع هش SHA256 در کنار RIPMED160 این است که تابع RIPMED به تنهایی امنیت چندان بالایی ندارد.

نحوه ساخته شدن HASH160

آدرس بیت کوین چیست؟

آدرس بیت کوینی اطلاعاتی است که برای دریافت بیت کوین از طرف دیگران کافی است. نوع آدرس نشان‌دهنده قفلی که برای باز کردن (خرج کردن) محتویات تراکنش لازم است،‌ خواهد بود. به شکل کلی هر آدرس از سه بخش تشکیل شده است؛ هر آدرس شامل: ۱. اطلاعات خاصی است که می‌خواهید در قفل تراکنش بگنجانید. ۲. یک پیشوند که نشان‌دهنده نوع قفل است و ۳. چک‌سامی برای بررسی هرگونه خطای سهوی است.

در نهایت آدرس تشکیل شده از این سه بخش به مبنای ۵۸ برده می‌شود تا کمی کاربرپسندتر شود.

Pay to PubKey Hash (P2PKH)

در بخش پیشین این نوع آدرس را شرح دادیم. در این روش بیت‌کوین‌های یک تراکنش با هش کلید عمومی دریافت‌کننده قفل می‌شود. پیشوند این آدرس 00 در هگزادسیمال است که وقتی به مبنای ۵۸ برده می‌شود معمولا به 1 تبدیل می‌شود. در بخش زیر نمونه‌ای از این آدرس را مشاهده می‌کنید:

1AKDDsfTh8uY4X3ppy1m7jw1fVMBSMkzjP
ساختار آدرس P2PKH

Pay to Script Hash (P2SH)

در این روش قفل تراکنش با استفاده از هش یک اسکریپت (تکه‌ای کد – همچنین نام زبان برنامه‌نویسی ابتدایی شبکه بیت کوین) قفل می‌شود. پیشوند این نوع آدرس 05 است که در مبنای ۵۸ به فرم 3 در می‌آید. نمونه‌ای از این آدرس را در بخش زیر مشاهده می‌کنید:

34nSkinWC9rDDJiUY438qQN1JHmGqBHGW7
ساختار آدرس P2SH

این دو نوع آدرس‌، تنها نمونه‌های آدرس رایج در بیت کوین نیستند – برای مثال P2MS، P2PK و null data دیگر نمونه‌های انواع آدرس در شبکه بیت کوین هستند – اما این دو پراستفاده‌ترین انواع آدرس هستند.

کیف پول HD یا قطعی سلسله مراتبی (HD Wallets)

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

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

جزییات مربوط به کیف پول‌های HD برای اولین بار در طرح بهبود بیت کوین شماره ۳۲ (BIP 32) به آن اشاره شد. ایده این کار توسط گرگوری مکسول (Gregory Maxwell) ارائه شد؛ بنیاد نرم‌افزار آزاد (FSF) به دنبال پذیرفتن کمک‌های مردمی از طریق بیت کوین بود و می‌خواست که برای هر کاربر آدرس جدیدی تولید کند بدون آن که کلید خصوصی خود را در وب سرور نگاه دارد. مکسول متوجه شد می‌توان با تغییر فرم کلیدهای عمومی، کلیدهای عمومی را بی‌نیاز به دانستن کلیدهای خصوصی مرتبط تولید کرد.

پیتر وویل (Pieter Wuille) ایده مکسول را با ساختار سلسله مراتبی ترکیب کرد و طرح BIP 32 را بر مبنای آن نوشت.

پیش از توضیح کامل سازوکار نحوه ساخت این کلیدها، با نحوه ساخت و نگاشت عبارت‌های یادآور (Mnemonic Phrase) آشنا خواهیم شد:

عبارت‌های یادآور (Mnemonic Phrase) یا سید (Seed) چیست؟

عبارت‌های یادآور یا کلمات سید راهی برای نمایش دنباله طویلی از اعداد به فرم چند کلمه است تا به خاطر سپردن آن برای انسان‌ها راحت‌تر باشد. از این کلمات برای ساخت سید (seed) می‌توان بهره برد که خود برای ایجاد کلیدهای گسترش‌یافته (extended keys) در کیف پول‌های HD به کار می‌روند.

اما این عبارت‌ها چگونه ساخته می‌شوند؟

در مرحله اول آنتروپی ایجاد می‌شود. آنتروپی عدد بزرگ تصادفی است که برای ساخت سید باید مضربی از ۳۲ بیت باشد و در کیف‌های پول معمولا بین ۱۲۸ تا ۲۵۶ بیت درنظر گرفته می‌شود. برای ساخت آنتروپی معمولا از توابع تولیدکننده امن اعداد تصادفی استفاده می‌شود.

در مرحله بعدی، از آنتروپی به کلمات می‌رسیم؛ ابتدا آنتروپی را با تابع هش SHA256 رمز می‌کنیم سپس به ازای هر ۳۲ بیت آنتروپی، یک بیت از حاصل هش را به عنوان چک‌سام به انتهای آنتروپی می‌افزاییم. برای مثال به شکل زیر نگاه کنید. آنتروپی زیر ۶۴ بیت است، بنابراین دو بیت ابتدایی حاصل تابع SHA256 را به عنوان چک‌ سام به انتهای آنتروپی می‌افزاییم.

نحوه اضافه شدن چک سام به آنتروپی

حال بیت‌ها را به گروه‌های ۱۱ بیتی تقسیم می‌کنیم و آن‌ها را به اعداد ده‌دهی تبدیل می‌کنیم و با استفاده از آن، کلمه متناظر با آن را انتخاب می‌کنیم. یک رشته ۱۱ بیتی از اعداد دودویی می‌تواند اعدادی بین ۰ تا ۲۰۴۷ را در برگیرد. در نتیجه ۲۰۴۸ کلمه در لیست تهیه شده وجود دارد. کلمات این لیست را می‌توانید از اینجا مشاهده کنید. این کلمات به نحوی برگزیده شده‌اند که ۴ حرف ابتدایی آن‌ها با یکدیگر متفاوت باشد تا یادآوری آن‌ها آسان‌تر شود.

تناظر بین کلمات و بیت‌ها

با اضافه کردن یک بیت به ازای هر ۳۲ بیت، ۳۳ بیت به دست می‌آید که همواره بر ۱۱ بخش‌پذیر است. با توجه به آنتروپی که معمولا بین ۱۲۸ بیت تا ۲۵۶ بیت انتخاب می‌شود، تعداد کلمات سید بین ۱۲ تا ۲۴ خواهد بود.

حال با به دست آوردن کلمات، وقت آن است که به سید نهایی برسیم. شاید در کیف پول‌ها به این مورد برخورده باشید که علاوه بر کلمات یادآور، به شما امکان این را می‌دهد که رمزی شخصی به عنوان کلمه سیزدهم (در صورت ۱۲ کلمه‌ای بودن عبارت‌های یادآور) به آن بیافزایید. به آن کلمه در این مرحله نیاز خواهد بود. برای ساخت سید نهایی، رشته کلمات یادآور به عنوان ورودی تابع PBKDF2 از یک سو و رشته “mnemonic” + “x” به عنوان سالت (salt) – داده‌ای که به ورودی تابع هش افزوده می‌شود تا امنیت هش کردن را بالا برد – از سوی دیگر به این تابع وارد می‌شوند. در صورت آن که رمزی شخصی تعیین کرده باشید، آن کلمه عبور در جای x می‌نشیند. در صورتی که چیزی تعیین نکرده باشید، ایکس رشته‌ای خالی خواهد بود.

چگونه از کلمات یادآور به سید برسیم؟

این تابع خروجی ۶۴ بایتی (۵۱۲ بیتی) دارد که همان سید ماست. از این عبارت می‌توان برای ساخت کلید گسترش‌یافته اصلی (master extended key) در کیف پول HD استفاده کرد. استفاده از عبارت‌های یادآور (Mnemonic Phrase) برای رسیدن به سید (seed)، اساس طرح BIP-39 است که در سال ۲۰۱۳ توسط مارک پالاتینوس (Marek Palatinus)، پاول روسناک (Pavol Rusnak)، آرون وویسینه (Aaron Voisine) و شان بو (Sean Bowe) پیشنهاد شد.

حال به طرح BIP-32 و نحوه ساخت کلیدهای گسترش‌یافته بازگردیم:

یک کلید گسترش‌یافته کلیدی خصوصی و یا عمومی است که از آن برای ساخت کلیدهای جدید در کیف پول‌های HD استفاده می‌شود. بدین ترتیب می‌توانید یک کلید خصوصی گسترش‌یافته (extended private key) داشته باشید و از آن برای ساخت تمامی کلیدهای خصوصی و عمومی فرزند در کیف پول خود استفاده کنید. همچنین می‌توانید از کلید عمومی گسترش‌یافته متناظر برای ایجاد همان کلیدهای عمومی یکسان استفاده کنید.

ساختار سلسله مراتبی درختی کیف پول‌ HD و فرزند والدی کلیدها

اولین کلیدهای گسترش‌یافته شما (که آن را شاه کلید – Master Key – می‌نامند)‌ از خروجی تابع هش HMAC-SHA512 که کلمات سید را به عنوان ورودی پذیرفته، ساخته می‌شود. خروجی تابع HMAC داده‌ای ۶۴ بایتی است. سید به عنوان ورودی و رشته “Bitcoin seed” به عنوان رشته‌ای اختیاری (کلید) به آن وارد می‌شود. دقت داشته باشید که احتیاجی به ورود آن رشته نیست، اما با توجه به اینکه در طرح BIP-32 به این رشته اختیاری اشاره شده است، از همان برای نشان دادن این موضوع استفاده شده است. برای ساخت کلید خصوصی گسترش‌یافته، خروجی ۶۴ بایتی این تابع را به دو بخش ۳۲ بایتی تقسیم می‌کنیم. قسمت نخست را کلید خصوصی می‌نامیم و نیمه سمت راستی را «کد زنجیره – chain code» می‌نامیم.

کد زنجیره برای تولید کلیدهای فرزند (child) الزامی است. اگر تنها به کلید خصوصی دسترسی داشته باشید، قادر نخواهید بود تا کلیدهای مشتق شده از آن را بسازید.

نحوه ساخت شاه کلید (master key)

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

  • کلیدهای خصوصی گسترش‌یافته می‌توانند کلیدهای عمومی و خصوصی جدیدی را به عنوان فرزند تولید کنند.
  • کلیدهای عمومی گسترش‌یافته می‌توانند کلیدهای عمومی جدیدی به عنوان فرزند تولید کنند.

هر کلید فرزند دارای شماره اندیسی (از ۰ تا دو به توان ۳۲) است. جالب است بدانید که کلیدهای عمومی فرزند ساخته شده از روی کلیدهای عمومی و خصوصی گسترش‌یافته یکسان هستند. نوع دیگری از کلیدهای فرزند موجود هستند که نمی‌توان آ‌نها را از روی کلید عمومی گسترش‌یافته تولید کرد. بنابراین برای کلیدهای خصوصی گسترش‌یافته چنین خواهیم داشت:

  • کلید Normal: هر دو کلید خصوصی و عمومی گسترش‌یافته می‌توانند این گونه کلیدهای عمومی را بسازند. اندیس‌های صفر تا ۲۱۴۷۴۸۳۶۴۷ (نیمه اول مجموع اندیس‌ها) مرتبط به این گونه کلیدهای فرزند هستند.
  • کلید Hardened: تنها کلیدهای خصوصی گسترش‌یافته قادر به تولید این گونه کلیدهای عمومی فرزند هستند. اندیس‌های ۲۱۴۷۴۸۳۶۴۸ تا ۴۲۹۴۹۶۷۲۹۵ (نیمه انتهایی مجموعه اندیس‌ها) مربوط به این گونه از کلیدهای فرزند هستند.

بنابراین به سه شکل می‌توان کلید تولید کرد: ۱. کلید فرزند Normal ساخته شده از کلید خصوصی گسترش‌یافته ۲. کلید فرزند Hardened ساخته شده از کلید خصوصی گسترش‌یافته ۳. کلید فرزند Normal ساخته شده از کلید عمومی گسترش‌یافته

کلید‌های گسترش‌یافته را می‌توان برای انتقال راحت‌تر به شکل سریالی در آورد. این اطلاعات سرهم‌شده شامل کلید عمومی/کلید خصوصی و chain code به همراه متادیتای اضافی است.

serialized extended keys در کیف پول HD

یک کلید سریالی شامل اطلاعات زیر است:

  • version (نسخه): ۴ بایت به این منظور اختصاص یافته است. xprv (با کد 0488ade4) برای کلید خصوصی و xpub (با کد 0488b21e)‌ برای کلیدهای عمومی در ابتدای کد قرار می‌گیرد.
  • depth (عمق): ۱ بایت. نشان‌دهنده این است که این کلید گسترش‌یافته در چه عمقی از شاه کلید (master key) قرار دارد.
  • parent fingerprint (اثر انگشت والد): ۴ بایت ابتدایی کلید عمومی والد که با تابع hash160 هش شده است، در این بخش قرار می گیرد.
  • child number (شماره فرزند): ۴ بایت – شماره اندیس فرزند.
  • chain code (کد زنجیره): ۳۲ بایت – پیشتر درباره کد زنجیره توضیح دادیم.
  • key (کلید): ۳۳ بایت – کلید عمومی یا خصوصی.

سپس چک سامی برای تشخیص خطا به این اطلاعات اضافه می‌شود و همه‌چیز به مبنای ۵۸ برده می‌شود. یک کلید گسترش‌یافته خصوصی این چنین به نظر می‌رسد:

xprv9tuogRdb5YTgcL3P8Waj7REqDuQx4sXcodQaWTtEVFEp6yRKh1CjrWfXChnhgHeLDuXxo2auDZegMiVMGGxwxcrb2PmiGyCngLxvLeGsZRq

و یک کلید عمومی گسترش‌یافته بدین شکل نمایش داده می‌شود:

xpub67uA5wAUuv1ypp7rEY7jUZBZmwFSULFUArLBJrHr3amnymkUEYWzQJz13zLacZv33sSuxKVmerpZeFExapBNt8HpAqtTtWqDQRAgyqSKUHu

وجود فیلدهای مربوط به اثر انگشت، شماره فرزند و عمق برای ایجاد کلیدهای گسترش‌یافته فرزند الزامی است.

اما کلیدهای گسترش‌یافته به چه دردی می‌خورند؟ در بخش بعدی به آن خواهیم پرداخت.

مسیرهای اشتقاق (Derivation Paths)

همان‌طور که اشاره کردیم، یکی از دو وجه مهم در خصوص کیف پول‌های HD، بحث تولید کلیدهای فرزند در ساختاری درختی و سلسله مراتبی است. می‌توان از کلیدهای گسترش یافته برای تولید فرزند استفاده کرد و خود آن فرزندان می‌توانند کلیدهای دیگری را تولید کنند. این چنین می‌توان درختی از کلیدهای گسترش‌یافته داشت که هر کلید مسیر اشتقاق مختص به خود را از شاه‌کلید (master key) داراست.

می‌توان کلیدها را به هر شکل تولید کرد اما برای سازگاری بیشتر کیف پول‌های با یکدیگر، استانداردهایی طی پروپوزال‌های متفاوت بهبود بیت کوین (BIP) به تصویب رسیده است. رایج‌ترین مسیرهای انشقاق و طرح مربوط به هر یک این سه هستند:

  • BIP 44 با مسیر m/44’/0’/0′ که برای آدرس‌های P2PKH (اصطلاحا آدرس‌هایی که با ۱ آغاز می‌شوند – 1addresses) به کار می‌رود
  • BIP 49 با مسیر m/49’/0’/0′ که برای آدرس‌های مولتی سیگ یا دارای اسکریپت و یا هش کلید عمومی با شاهد (P2WPKH – P2SH) به کار می‌رود؛ اصطلاحا 3addresses
  • BIP 84 با مسیر m/84’/0’/0′ که برای آدرس‌هایی به فرم هش کلید عمومی با شاهد (P2WPKH) به کار می‌روند که با نام bc1addresses شناخته می‌شوند.

در این مطلب به مسیرهای مربوط به BIP 44 می‌پردازیم. این طرح در سال ۲۰۱۴ توسط مارک پالاتینوس و پاول روسناک پیشنهاد شد. این طرح ایده‌های مطرح شده در BIP 32 و BIP 43 را بسط و گسترش داد. هدف از پیشنهاد این پروپوزال بهبود بیت کوین، پیشنهاد سازوکاری برای پشتیبانی کیف پول‌ها از چندین کوین، چندین حساب، زنجیره‌های داخلی و خارجی و میلیون‌ها آدرس به ازای هر شبکه بوده است.

هر مسیر انشقاق دارای سلسه مراتبی است که به فرم زیر نمایش داده می‌شود:

ساختار کیف پول در طرح BIP 44

ساختار derivation paths در BIP 44 به شکل زیر است:

m / purpose’ / coin_type’ / account’ / change / index

مراد از کاراکتر ” ‘ ” (یا در بعضی اوقات حرف h) در ساختار بالا، کلیدهای فرزند hardened است. اگر در مسیر نوشته شود ‘3 بدین معنی است که اندیس آن کلید فرزند 2147483651 است. با توجه به اینکه نیمه اول اندیس فرزندان عادی و نیمه دوم کلیدهای hardened هستند، گذاشتن کاراکتر ” ‘ ” باعث صرفه‌جویی در نوشتن مقدار کامل اندیس می‌شود.

همچنین کاراکتر اسلش (/) در ساختار بالا، نشانه سطحی جدید در ساختار درختی است. شکل بالا به روشنی شاخه‌ها را نشان می‌دهد. حال به توضیح دیگر موارد اشاره شده در فرمت بالا می‌پردازیم:

  • m: منظور از این سطح،‌ شاه‌کلید یا مستر کی (master key) است که از عبارت سید ساخته می‌شود.
  • Purpose (هدف): این سطح ساختار والت پیشنهادی را مشخص می‌کند. همان‌طور که اشاره کردیم علاوه بر BIP 44، از ساختارهای دیگری همچون BIP 49، BIP 84 و BIP 141 نیز استفاده می‌شود.
  • Coin type (نوع کوین): این سطح اشاره به رمزارزی دارد که کلیدهای ذیل آن،‌ برای خرج کردن/دریافت آن استفاده می‌شوند. رمزارزهای مختلف (و کیف پول‌های مولتی کوین همچون اتمیک و تراست والت) می‌توانند با استفاده از یک سید، کلیدهای متفاوتی تولید کنند. به جای آن که سیدهای متفاوتی به ازای هر رمزارز داشته باشیم، می‌توانیم از یک سید با مسیرهای انشقاق متفاوت استفاده کنیم. لیست رمزارزها و اندیس‌هایی که برای هر کدام مشخص شده است را می‌توانید از اینجا مشاهده کنید.
  • Account (حساب کاربری): این ساختار به شما اجازه می‌دهد که حساب‌های متفاوتی برای مقاصد مختلف بسازید. در بسیاری از کیف پول‌ها،‌این اولین مرحله‌ای است که یک کاربر عادی با آن سر و کار دارد و باقی مراحل به شکل اتوماتیک و از طریق رابط گرافیکی صورت می‌پذیرد. استاندارد پذیرفته شده این است که کیف‌های پول به ترتیب و از عدد صفر شروع به افزودن به اندیس حساب کاربری نمایند. اهمیت این مساله در هنگام ریکاوری یا وارد کردن سید در والتی دیگر نمایان می‌شود. طبق شیوه‌نامه BIP 44 برای سازندگان کیف‌های پول،‌ از آن‌ها خواسته شده است که در هنگام چک کردن برای حساب‌های کاربری یک سید به هنگام ایمپورت،‌ از اندیس صفر شروع به جستجو نمایند. در صورت استفاده از کلید ایجاد شده در حساب (چه واریز و چه برداشت)، نرم‌افزار کیف پول به اندیس یکی اضافه کرده و جستجو را ادامه می‌دهد. اگر طی جستجو به ۲۰ حساب کاربری متوالی استفاده نشده برخورد، به جستجو خاتمه خواهد داد. این مقدار (۲۰)‌ به نام Address Gap Limit شناخته می‌شود.
  • Change (پول خرد): کلیدها و آدرس‌ها به دو دسته تقسیم می‌شوند؛ آدرس‌هایی برای دریافت مبالغ که با اندیس صفر مشخص می‌شوند و آدرس‌هایی که برای بازگرداندن باقی‌مانده مبالغ (در شیوه UTXO) به خودمان از آن استفاده می‌کنیم و با اندیس یک مشخص می‌شود. بدین ترتیب می‌توان به راحتی بین کوین‌هایی که توسط افراد دیگر واریز شده‌اند تفکیک قائل شد.
  • Index (اندیس): این آخرین سلسله مراتب ساختار پیشنهادی است. در این مرحله کلیدهای گسترش یافته برای استفاده به عنوان کلیدهای عمومی و خصوصی قرار می‌گیرند.
ساختار یک کیف پول قطعی سلسله مراتبی (HD) که از طرح BIP 44 می‌برد
ساختار یک کیف پول قطعی سلسله مراتبی (HD) که از طرح BIP 44 می‌برد

جمع‌بندی

کیف پول‌های رمزارز طی چند سالی که از پیدایش بیت کوین می‌گذرد تغییرات گسترده‌ای داشته‌اند. رابط کاربری و شیوه استفاده از آن‌ها بهینه‌تر و کاربرپسندتر شده است و امنیت آن‌ها نیز بالاتر رفته است. در مطلبی که مطالعه کردید به سیر تکاملی کیف پول‌ها و تغییراتی که منجر به ایجاد کیف پول‌های HD و پروپوزال‌های BIP 32، BIP 39 و BIP 44 شد پرداختیم. همچنین مشاهده کردیم که چگونه مطابق روش شرح داده شده در این طرح‌ها می‌توان با استفاده از تنها یک عبارت سید، چندین حساب مجزا در بلاکچین‌های متفاوت داشت بی آن که امنیت به خطر افتد. مضاف بر آن، با انواع مختلف کلیدهای عمومی، خصوصی، نحوه ساخت آن‌ها و چندین هش/اسکریپت پرداخت مختلف در شبکه بیت کوین آشنا شدیم.

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

منبع
Learn me a Bitcoin

نوشته های مشابه

اشتراک
اطلاع از
2 دیدگاه
جدید ترین
قدیمی ترین محبوب ترین
Inline Feedbacks
View all comments
دکمه بازگشت به بالا