آدرسهای بلاک چینی – قسمت دوم
مترجم: مریم لطانی
ساخت آدرس بلاکچینی برای بیتکوین
برای ایجاد یک آدرس، کیف پول شما کلید عمومی را یک مجموعه الگوریتم رمزنگاری قرار میدهد. به طور دقیقتر میتوان گفت مراحل زیر طی میشود:
نرم افزارکلید عمومی را ابتدا با SHA256 و نتیجه را با RIPEMD-160 هش میکند. سپس دوبایت 00 به عنوان پیشوند به ابتدای رشته تولید شده (علت اینکه آدرسهای P2PKH با عدد 1 شروع میشوند این است) و 4 بایت هم به عنوان checksum به انتهای آن اضافه میکند. برای محاسبه این 4 بایت checksum نتیجه به دست آمده را دوبار هش کرده و 4 بایت اول آن را انتخاب میکند. در انتها کیف پول شما نتیجه را به یک رشته تبدیل میکند و این همان ادرس بیتکوین است که میشناسیم .
نیازی به دانستن همه جزئیات رمزنگاری نیست. آنچه اهمیت دارد این است که کلیدهای عمومی با این آدرسها راحتتر خوانده میشوند. همچنین اضافه شدن بایتهای checksum مانع از این خواهد شد که شما قربانی خطای تایپ شوید. زمانی که یک آدرس به کیف پول شما ارسال میشود، کیف پیشوند آن را گرفته و checksum را محاسبه میکند. اگر مطابقت نداشت آن را باز میگرداند. بنابراین ارسال وجه به آدرسی که اشتباه تایپ شده باشد، عملا غیرممکن است.
اگر شما کلید خصوصی یک آدرس را داشته باشید، تنها شما هستید که میتوانید تراکنشهایی را که با توکنهای رمزنگاری به این آدرس ارجاع داده شدهاند، امضا کنید. این فرآیند ساده – امضای یک تراکنش و شناسایی و تایید آن امضا- همه آن چیزی است که یک تراکنش ارز رمزنگاری شده انجام میدهد.
بیتکوین آدرسدهی پیشرفتهتری هم دارد: از جمله آدرس P2SH، که مخفف عبارت Pay to Script Hash میباشد. بدین معنی که شما پرداخت را به ازای هش اسکریپت انجام میدهید نه هش کلید عمومی. برای امضای تراکنش، نیازی به استفاده از یک امضا که با یک کلید عمومی مشخص مطابقت داشته باشد، ندارید. بلکه به یک کد نیاز دارید که با یک هش مشخص مطابقت داشته باشد. این آدرسها پیشوند 05 را استفاده میکنند و به همین دلیل همیشه با عدد 3 آغاز میشوند.
آدرسها در سایر ارزهای دیجیتال
تعداد زیادی از ارزها آدرسهای مشابه بیتکوین استفاده میکنند. به عنوان مثال Litecoin، Dash و Dogecoin از روالهای رمزنگاری مشابه مثل ECDSA، SH256 و RIPEMD-160 برای تولید آدرس استفاده میکنند.
تنها تفاوت در پیشوند هش RIPEMD-160 میباشد. در بیتکوین پیشوندهای 00، آدرسهایی را تولید میکند که با عدد 1 شروع میشوند ولی سایر ارزها از پیشوندهای دیگری استفاده میکنند مثلا در Litecoin آدرسها با L، در Dash با X ودر Dogecoin با D آغاز میشوند. از آنجایی که این ارزها از الگوریتم رمزنگاری یکسانی استفاده میکنند، میتوانید از کلیدهای عمومی و خصوصی مشابهی برای ذخیره این ارزها استفاده کنید. حتی تا حدودی میتوانید آنها را در یک آدرس مشابه ذخیره کنید.
سایر ارزهای رمزنگاری شده هم ازالگوهای دیگری برای تولید آدرس استفاده میکنند. مثلا Monero از الگوریتم Cryptonote استفاده میکند. این الگوریتم ازEdDSA که یک الگوریتم امضای رمزنگاری شده است برای تولید کلید عمومی استفاده میکند که به آنها امضاهای حلقوی هم گفته میشود، محرمانگی (Privacy) بالاتری هم دارند و شما نمیتوانید تعیین کنید که کدام کلید تراکنش را امضا کرده است. به همین دلیل لازم است که آدرسهای Cryptonote دو کلید عمومی داشته باشند یکی برای مشاهده و یکی برای استفاده.
مشابه آدرسهای بیتکوینی، Cryptonote هم یک پیشوند اضافه کرده و نتیجه را هش میکند. البته به جای دوبار استفاده از SHA256، از Keccak-256 برای تولید 4 بایت checksum استفاده میکند که به انتهای رشته اضافه میشوند. بعد از تبدیل نتیجه به base58، آدرس نهایی را خواهید داشت که طولانی تر از یک آدرس بیتکوینی است. نمونه آان را میتوانید در زیر مشاهده کنید:
43ZZViHQKd42X7cajEtc6NUoxG4AvyMu3ZqpGTBP85uhEfYoPVAuGHxJcomMHEPp3NWiKJRUMnuAJ7dfBrPTcfjYMPJzz2a
این تنوع آدرسها نشان میدهد که آنها تنها مفهومی برای تایید پرداختهایی هستند که به یک کلید عمومی مشخص ارجاع داده شدهاند. این که با کلید عمومی خود چه کاری انجام میدهید، در این مرحله مهم نیست بلکه الگوریتم رمزنگاری که برای تولید آدرس استفاده میکنید و این که آدرس شما چگونه به نظر خواهد رسید حائز اهمیت میباشد.
روال ساخت یک آدرس بر امنیت، حریم خصوصی و کاربرد آن نیز دلالت دارد. به عنوان مثال، بدون بایتهای checksum، اشتباه تایپی آدرس بیتکوین مشخص نمیشود و یا مثلا بدون کلید مشاهده، آدرسهای Monero، پوشیدگی و حریم خصوصی لازم را نخواهد داشت.
منبع: blockgeeks
سلام یه سوال داشتم
وقتی یک کیف پول میخواد یه آدرس جدید یا همون کلید عمومی تولید کند از کجا میتونه بفهمه که این آدرس قبلا توسط یک کیف پول دیگه ساخته نشده باشه.؟
لازم نیست بفهمیم که این کد قبلا تولید شده یا نه الگوریتمهایی وجود داره که این تضمین رو میده که کد های یکتا ایجاد میکنه