راز آدرس ها در تکنولوژی بلاکچین!
در روزهای نخست بیتکوین، امکان ارسال پرداختها به یک آدرس IP مثل ۱۰۴.۲۵.۲۴۸.۳۲ وجود داشت. این کار برای ایجاد راحتی در استفاده از بیتکوین بدون استفاده از آدرسهای کلید عمومی و خصوصی انجام شد. اما بعد از آن توسعه دهندگان متوجه شدند که این وضعیت ممکن است باعث بروز حمله Man in the middle شود.
آدرس ها در بلاکچین یک چیز سفت و سخت نیستند. بلکه یک شناسه برای پذیرش و ارسال تراکنشهای بلاکچین هستند. درست مانند آدرسهای سوییفت. خود آدرس و فرمت آن مساله اصلی نیست. مساله مهم خدمتی است که آدرس ، برای تبدیل پرداختها به یک موجودیت اطلاعاتی، ارائه میکند. معمولا یک کلید خصوصی برای دسترسی به موجودی وجود دارد و آدرس چیزی به جز یک شناسه امن نیست. بعد از کنار گذاشتن آدرس IP در بیتکوین، P۲PKH به عنوان استاندارد جدید آدرسهای بیتکوین شناخته شد. این آدرس چیزی شبیه به آدرس زیر است:
۱K۳۱KZXjcochXpRhjH۹g۵MxFFTHPi۲zEXb
یک آدرس استاندارد P۲PKH، سی و چهار حرف دارد و با ۱ شروع میشود. P۲PKH مخفف “Pay to Public Key Hash” است. یعنی شما توسط هش یک کلید عمومی، پرداخت انجام میدهید. برای مبتدیان، این ممکن است بسیار گیج کننده باشد. بنابراین ابتدا باید فرآیند ساخت همچین آدرسی را یاد بگیریم تا بدانیم چگونه عمل میکند.
هر نرمافزار کیف پول که استفاده میکنید یک آدرس P۲PKH تولید میکند. این کار ترکیبی از چند عملیات نه چندان پیچیدهی رمزنگاری است.
ابتدا، کیف پول شما یک کلید خصوصی ECDSA تولید میکند. ECDSA یک الگوریتم رمزنگاری در هسته آدرسهای بیتکوین است که یک الگوریتم امضای غیرمتقارن میباشد. یعنی شما میتوانید یک پیام را با کلید خصوصی امضا کرده و آن را با کلید عمومی تایید کنید. با استفاده از ECDSA و امضا کردن پیام، میتوانید به بقیه ثابت کنید که شما تنها تولید کننده پیام هستید و اصالت آن را تایید کنید. این مورد بسیار شبیه به امضای یک نامه به طور فیزیکی است.
بنابراین بعد از ایجاد کلید خصوصی، کیف پول، کلید عمومی را از روی آن بدست میآورد. این کار با استفاده از برخی محاسبات و الگوریتمهای تصادفی انجام میشود. البته جزییات آن مهم نیست. چیزی که اهمیت دارد این است که کلید عمومی تنها چیزی است که شما برای دریافت و جمعآوری ارز دیجیتالی به آن نیاز دارید.
ایجاد آدرس بلاکچین در بیتکوین
برای ایجاد آدرس، کیف پول شما کلید عمومی را از طریق یک سری از الگوریتمهای رمزنگاری بدست میآورد. به طور شفاف این چیزی است که اتفاق میافتد:
نرمافزار هش، کلید عمومی را با SHA ۲۵۶ و سپس RIPEMD-۱۶۰ بدست میآورد. سپس آن را با ۰۰ بایت به عنوان پیشوند در ابتدای نتیجه قبل جمع میکند. به همین دلیل است که آدرسهای P۲PKH با ۱ شروع شده و با چهار بایت checksum در انتها ختم میشود. چهار بایت از checksum توسط دوبار هش گرفتن از نتیجه با SHA ۲۵۶ و جدا کردن ۴ بایت اول آن بدست میآید. سپس کیف پول شما نتیجه را به یک رشته base۵۸ تبدیل میکند. حالا یک آدرس بیتکوین بدست آمده است.
شما نیاز به دانستن جزییات رمزنگاری ندارید. مهم این است که آدرس، یک کلید عمومی با خوانایی بیشتر ارائه کرده و یک checksum را برای جلوگیری از خطای تایپی به آن اضافه میکند. هر وقت شما یک آدرس را در کیف پول خود وارد میکنید، پیشوند را چک کرده و checksum را حساب میکند. اگر checksum محاسبه شده با مقدار موجود در آدرس متفاوت باشد، امکان ارسال را در صورت وجود خطای تایپی نخواهید داشت.
اگر شما کلید خصوصی یک آدرس را داشته باشید، فقط شما میتوانید یک تراکنش را برای توکنی که به این آدرس اختصاص دارد امضا کنید. در حالی که هر کسی که آدرس شما را بداند میتواند اعتبار امضای شما را تایید کند. این فرآیند ساده، امضای تراکنش و تایید امضا، تنها چیزی است که رمزنگاری روی تراکنش انجام میدهد.
اما بیتکوین آدرسهای پیشرفتهتری دارد: یعنی آدرسهای P۲SH. که خلاصه “Pay To Script Hash” میباشد. یعنی شما به هش یک آدرس پرداخت نمیکنید؛ بلکه به هش یک اسکریپت پرداخت میکنید. برای امضای یک تراکنش شما به یک امضا که با یک کلید عمومی خاصی تطابق داشته باشد، نیاز ندارید. بلکه به یک اسکریپت که با یک هش مشخص تطابق داشته باشد نیاز دارید.
هر چند برای فهم قدرت P۲SH به دانش بیشتری نیاز است، فعلا بیتکوین را کنار گذاشته در ادامه روی آدرسها تمرکز میکنیم.
آدرسها در کوینهای دیگر
بسیاری از کوینها از آدرسدهی مشابه بیتکوین استفاده میکنند. برای مثال لایت کوین ، دش و دوج کوین از روندهای مشابهی برای رمزگذاری استفاده میکنند: ECDSA, SHA ۲۵۶, RIPEMD ۱۶۰
تنها تفاوت وجود پیشوند هشِ RIPEMD-۱۶۰ است. در حالی که پیشوند ۰۰ در آدرس بیتکوین باعث شروع آن با «۱» میشود، کوینهای دیگر مانند دش، لایت کوین و دوج کوین از پیشوندهای دیگری استفاده میکنند که باعث میشود با حروفی مثل «X» و «L» و «D» شروع شوند.
مادامی که این کوینها از الگوریتمهای رمزنگاری متفاوتی استفاده میکنند، شما میتوانید از همان کلید عمومی و خصوصی مشابه برای ذخیره کوین در تمام ارزهای دیجیتال استفاده کنید.
ارزهای دیگر از روشهای دیگری برای تولید آدرس استفاده میکنند. برای مثال مونرو بر اساس الگوریتم Cryptonote میباشد. این الگوریتم نوع دیگری از الگوریتم امضای رمزشده را برای تولید کلید عمومی استفاده میکند. ارزهای مبتنی بر کریپتونوت (Cryptonote) یک امضای حلقه گونه دارند که حریم خصوصی بیشتری را فراهم میکند چرا که شما نمی توانید تعیین کنید یک تراکنش با کدام کلید امضا شده است. به همین دلیل، آدرسهای کریپتونوت باید شامل دو کلید عمومی باشند: یک کلید مشاهده و دیگری کلید پرداخت.
همانند آدرسهای بیتکوین، کریپتونوت یک پیشوند اضافه میکند و نتیجه را هش میکند. این الگوریتم از Keccak-۲۵۶ بجای SHA-۲۵۶ دوتایی برای تولید checksum چهاربیتی استفاده میکند که به آخر یک رشته اضافه میشود. بعد از تبدیل نتیجه به base۵۸ شما آدرس نهایی را بدست میآورید که از بیتکوین طولانی تر میباشد. و شبیه زیر است:
۴۳ZZViHQKd۴۲X۷cajEtc۶NUoxG۴AvyMu۳ZqpGTBP۸۵uhEfYoPVAuGHxJcomMHEPp۳NWiKJRUMnuAJ۷dfBrPTcfjYMPJzz۲a
این تنوع در آدرسها، نشان میدهد که آدرسها فقط وسیلهای برای پرداخت هستند که به یک کلید عمومی مشخص الحاق میشود. برای همین، مهم نیست که شما چه کاری با کلید عمومی انجام میدهید، از چه الگوریتمی برای تبدیل آن به یک آدرس استفاده میکنید و …
روال ساخت یک آدرس، مفاهیمی از امنیت، حریم خصوصی و قابلیت استفاده را در بر دارد. بدون استفاده از checksum، آدرسهای بیتکوین ممکن است دچار اشتباه تایپی شوند و بدون تعبیه کلید مشاهده در آدرس، مونرو نمیتواند آنگونه که هست خصوصی بماند.
آدرسهای اتریوم
مانند خیلی از چیزهای دیگر در دنیای رمزارزها، مبحث آدرسها با رسیدن به اتریوم جذابتر میشود. بسیاری از افرادی که با بیتکوین شروع کردهاند و سپس به سراغ اتریوم میروند، با دیدن قالب آدرس آن سردرگم میشوند که یک آدرس طولانی، و یک رشته در مبنای ۱۶ است که با ۰x شروع میشود. به عنوان مثال:
۰x۰eb۸۱۸۹۲۵۴۰۷۴۷ec۶۰f۱۳۸۹ec۷۳۴a۲c۰e۵f۹f۷۳۵
از لحاظ فنی، تولید آدرس اتریوم مشابه بیتکوین است، اما نه در همه موارد. برای تولید یک کلید عمومی ۶۴ بایتی، باید از یک کلید خصوصی شروع کرده و از ECDSA استفاده کنید. یعنی همان طور که بیتکوین عمل میکند. سپس آن را توسط Keccak-۲۵۶ هش میکنید. نتیجه که یک رشته ۳۲ بایتی خواهد بود. ۱۲ بیت اول از این بایتها دور انداخته میشود و ۲۰ بایت باقی مانده که یک آدرس ۴۰ کاراکتری است با یک پیشوند ۰x آدرس اتریوم را تشکیل میدهند. برخلاف بیتکوین یا کریپتونت، اتریوم آدرس را به base۵۸ تبدیل نمیکند، بنابراین یک آدرس هگزادسیمال یا مبنای ۱۶ خواهد بود.
تفاوت دیگر اتریوم با رمزارزهای دیگر، این است که آدرسهای اتریوم checksum ندارند. هر رشتهی ۴۰ کاراکتری مبنای ۱۶ میتواند یک آدرس اتریوم باشد. یعنی خطای تایپی در وارد کردن آدرس قابل شناسایی نخواهد بود.
در مقایسه با سایر رمزارزها، آدرسها برای کاربر اتریوم، خام، خشن و خطرناک خواهد بود. این مساله برای ارزی که دومین بازار بزرگ را در اختیار دارد و به عنوان خلاقانه ترین رمزارز شناخته میشود، بسیار پیش پا افتاده است.
دلیل اول برای این مشکل، این است که در زمان ارائه نسخه اول اتریوم، Frontier، کسی واقعا به این موضوع اهمیت نمیداد. هدف توسعه دهندگان اتریوم ساخت یک قرارداد هوشمند بود، که پرداختها به راحتی به اسامی و دامنهها فرستاده شود.
البته همانطور که جف کولمن اشاره کرد، استفاده نکردن اتریوم از روش مشابه بیتکوین دلیل مهمتری دارد. در حقیقت توسعه دهندگان گمان کردند که این کار میتواند بهتر انجام شود. به یاد بیاورید که یک آدرس فقط یک روش رمزنگاری برای ارائه اطلاعات است که موجودی را به یک کلید خصوصی تخصیص میدهد. این کار میتواند توسط قراردادهایی انجام شود که اطلاعات را به اسامی اختصاص میدهد.
ICAP یک شماره بانکی بینالمللی کاملا معتبر است که نرمافزارهای بانکی میتوانند آن را بفهمند و با آن تعامل کنند. IBAN نیز نمونه متمرکز این پروتکل بوده و شناسه بینالمللی مشتریان در صنعت بانکداری است. این شناسه از ۲۳ کاراکتر حساس به حروف کوچک و بزرگ تشکیل شده است و شامل یک کد کشور، یک checksum و شماره بانک در کنار شماره حساب میباشد.
در حال فرمت ICAP حاضر اینگونه میباشد:
E۷۳۳۸O۰۷۳KYGTWWZN۰F۲WZ۰R۸PX۵ZPPZS
مانند بیتکوین، این آدرس از کاراکترهای base۵۸ استفاده میکند و شامل checksum میشود.
استیم، نام کاربری شما آدرس شماست!
ارز رمزنگاریشده استیم ( Steem ) سیستم مشابه اتریوم را استفاده کرده است. در استیم نام کاربری شما کیف پول شما است.
استیم رمزارزی مبتنی بر ایده Bitshares است. این ارز با بستر شبکه اجتماعی Steemit لینک شده است. یعنی شما میتوانید استیم کوین را با بدست آوردن لایک و کامنت روی پستهای خود ماین کنید! استیم مانند بیتکوین و اتریوم غیرمتمرکز نیست و قسمتهای مهم آن در پلتفرم خصوصی Steemit میزبانی میشود و قسمت اصلی استیم میباشد.
هرچند، استیم به روش متمرکزتری ایدهی قرارداد هوشمند اتریوم را پیادهسازی کرده است اما کاربران در این سیستم نیز یک کلید خصوصی دریافت کرده و همانند ارزهای دیگر میتوانند تراکنشها را امضا کنند. در استیم نامهای کاربری، آدرسهایی نیستند که از کلید خصوصی مشتق شده باشند. بلکه فقط نامهایی هستند که روی پایگاه داده استیم به کلیدهای عمومی وصل شدهاند. در اینجا مهمترین بخش تایید اتصال بین کلید عمومی و آدرس، براساس محاسبات ریاضی نیست؛ بلکه نیاز به اعتماد به بستر استیم داریم.
شیوه آدرس دهی براساس نام کاربری در استیم جالب است چرا که قابلیت استفاده ایدهآل را فراهم میکند. اما هنوز متمرکز بوده و عدم اعتماد کافی را برای بسیاری از کاربران بلاکچین به همراه دارد. یعنی سیستم هنوز از شفافیت کافی برخوردار نمیباشد.
یک سیستم قرارداد هوشمند مانند اتریوم، میتواند هر دو بخش ایدهآل را داشته باشد؛ غیرمتمرکز بودن، اعتماد طبیعی بلاکچین و راحتی استفاده از آدرسهای مبتنی بر نام استیم!