رمز ۲۱۹مرحلهٔ ایمنی، درس ۱۹ از ۲۵ کیف پول و امنیت
آدرس کیف پول چیست و چرا هر تراکنش را دوبار چک کنیم
آدرس کیف پول چیست، قالبهای آدرس بیتکوین و اتریوم چه فرقی دارند، ممو و تگ کی لازم است و چطور پیش از هر ارسال آدرس و شبکه را دو بار بررسی کنیم.
پیشنیاز رمز ۲۱۸ کلید خصوصی چیست و چه فرقی با کلید عمومی دارد
آدرس کیف پول رشتهای از حروف و عددهاست که نقش «شمارهٔ دریافت» را دارد: هر کسی آن را داشته باشد میتواند به شما ارز دیجیتال بفرستد، اما نمیتواند چیزی از کیف پول شما بردارد. آدرس از کلید عمومی ساخته میشود و هر شبکه قالب مخصوص خودش را دارد. چون تراکنش بلاکچینی پس از تأیید برگشتپذیر نیست و بانکی در میانه نیست که آن را لغو کند، یک نویسهٔ اشتباه، شبکهٔ نادرست یا ممو فراموششده میتواند به ازدسترفتن دارایی برسد؛ به همین دلیل هر ارسال را باید دو بار بررسی کرد.
آدرس یعنی شمارهٔ دریافت
اگر کیف پول ارز دیجیتال را به یک حساب شخصی تشبیه کنیم، آدرس کیف پول همان شمارهای است که برای دریافت پول به دیگران میدهید. دادن این شماره خطری برای برداشت ندارد، چون برای خرج کردن دارایی چیز دیگری لازم است: امضای تراکنش با کلید خصوصی. در این درس از بخش کیف پول و امنیت ارز دیجیتال، تمرکز روی همین شماره و خطاهایی است که هنگام استفاده از آن رخ میدهد.
آدرس از هیچ ساخته نمیشود؛ پشت آن یک زنجیرهٔ ریاضی یکطرفه قرار دارد. در اتریوم، کلید خصوصی از ۶۴ نویسهٔ هگزادسیمال تشکیل شده است و کلید عمومی با الگوریتم امضای دیجیتال منحنی بیضوی (ECDSA) از آن ساخته میشود [۱]. سپس آدرس حساب از ۲۰ بایت آخر هش Keccak-۲۵۶ کلید عمومی بهدست میآید و پیشوند «۰x» به ابتدای آن افزوده میشود [۱]. برای امضای هر تراکنش خروجی، کلید خصوصی لازم است [۱]. این مسیر فقط در یک جهت پیش میرود: از کلید خصوصی به کلید عمومی و از آن به آدرس.
دو نکته از همین تصویر ساده بیرون میآید. نخست اینکه آدرس را میتوانید آزادانه به فرستنده بدهید. دوم اینکه آدرس در بلاکچینهای عمومی پنهان نیست؛ هر کسی آدرس شما را بداند، میتواند موجودی و تاریخچهٔ تراکنشهای همان آدرس را در دفتر عمومی شبکه ببیند. بنابراین آدرس «رمز» نیست، اما «ناشناس» هم نیست.
آدرس با عبارت بازیابی فرق دارد
آدرس برای دریافت است و دادن آن به فرستنده عادی است. عبارت بازیابی (Seed Phrase) و کلید خصوصی برای خرج کردناند و هیچ فرستنده، صرافی یا پشتیبانیای به آنها نیاز ندارد. اگر کسی برای «فرستادن پول به شما» چیزی جز آدرس خواست، با یک درخواست مشکوک روبهرو هستید.
قالبهای مختلف آدرس
آدرسها یک شکل واحد ندارند. هر شبکه و گاهی هر نسل از یک شبکه، قالب خودش را دارد و نرمافزار کیف پول از روی همین قالب تشخیص میدهد که آدرس به کدام نوع تعلق دارد.
در شبکهٔ اصلی بیتکوین، آدرسهای قدیمی از نوع P۲PKH با «۱» و آدرسهای P۲SH با «۳» شروع میشوند و هر دو با کدگذاری Base۵۸Check ساخته میشوند [۲]. این کدگذاری از ۵۸ نویسه استفاده میکند و نویسههای گیجکنندهای مثل صفر، حرف O بزرگ، حرف I بزرگ و حرف l کوچک را کنار میگذارد تا خواندن و نوشتن آدرس کمخطاتر شود [۲].
نسل بعدی آدرسهای بیتکوین قالب Bech۳۲ است. استاندارد BIP-۱۷۳ این قالب را برای خروجیهای سگویت تعریف میکند و هر آدرس آن چهار بخش دارد: بخش خوانا برای انسان («bc» برای شبکهٔ اصلی و «tb» برای شبکهٔ آزمایشی)، جداکنندهٔ «۱»، دادههای کدشده و یک کد تشخیص خطای ۶ نویسهای [۳]. به همین دلیل آدرسهای Bech۳۲ شبکهٔ اصلی همیشه با «bc۱» شروع میشوند [۳]. برای سگویت نسخهٔ ۱ به بعد، استاندارد BIP-۳۵۰ چکسام تازهای به نام Bech۳۲m را جایگزین کرد [۳].
در اتریوم، آدرس همان ۲۰ بایت برگرفته از هش کلید عمومی است که به شکل هگزادسیمال و با پیشوند «۰x» نمایش داده میشود [۱]. نکتهٔ مهم این است که بسیاری از شبکههای سازگار با اتریوم نیز از همین قالب استفاده میکنند؛ یعنی یک آدرس با ظاهر یکسان میتواند در چند شبکهٔ متفاوت معتبر باشد. در بخش شبکهٔ درست به این موضوع برمیگردیم.
| نوع آدرس | شروع آدرس | ویژگی اصلی |
|---|---|---|
| بیتکوین P۲PKH | ۱ | کدگذاری Base۵۸Check با چکسام داخلی |
| بیتکوین P۲SH | ۳ | کدگذاری Base۵۸Check با چکسام داخلی |
| بیتکوین Bech۳۲ | bc۱ | کد تشخیص خطای ۶ نویسهای |
| اتریوم و شبکههای سازگار | ۰x | هگزادسیمال؛ چکسام با حروف بزرگ و کوچک |
شروع آدرس فقط نوع را نشان میدهد
دیدن «bc۱» یا «۰x» در ابتدای آدرس فقط میگوید آدرس از چه نوعی است، نه اینکه درست است یا به چه کسی تعلق دارد. آدرس یک کلاهبردار هم دقیقاً با همین نویسهها شروع میشود.
چکسام؛ محافظ در برابر خطای تایپ
چکسام (Checksum) چند نویسهٔ کنترلی است که از روی بقیهٔ آدرس محاسبه میشود و درون خود آدرس جای میگیرد. وقتی آدرسی را در کیف پول وارد میکنید، نرمافزار دوباره همین محاسبه را انجام میدهد؛ اگر نتیجه با نویسههای کنترلی جور نباشد، آدرس را نامعتبر اعلام میکند و اجازهٔ ارسال نمیدهد. کدگذاری Base۵۸Check در بیتکوین چنین چکسام داخلیای دارد [۲] و کد ۶ نویسهای انتهای آدرسهای Bech۳۲ نیز برای تشخیص خطا طراحی شده است [۳].
در اتریوم ماجرا کمی متفاوت است، چون قالب اولیهٔ آدرس چکسام نداشت. استاندارد EIP-۵۵ برای جلوگیری از ازدسترفتن وجه در اثر ارسال به آدرس نامعتبر ایجاد شد و با بزرگ یا کوچک نوشتن انتخابی حروف هگزادسیمال، یک چکسام را درون خود آدرس جای میدهد [۴]. روش کار این است که از نسخهٔ حروفکوچک آدرس هش Keccak-۲۵۶ گرفته میشود و هر حرفی که رقم متناظرش در هش بزرگتر از ۷ باشد، بزرگ نوشته میشود؛ به این ترتیب نرمافزار کیف پول خطای تایپی را تشخیص میدهد [۴]. به همین دلیل آدرسهای اتریوم را اغلب با ترکیبی از حروف بزرگ و کوچک میبینید. اگر آدرسی تماماً با حروف کوچک نوشته شده باشد، این اطلاعات کنترلی در آن وجود ندارد و بخشی از این لایهٔ محافظ از دست میرود.
با این همه، چکسام فقط یک کار را خوب انجام میدهد: گرفتن خطای تصادفی مثل جاافتادن یا جابهجا شدن یک نویسه. چکسام نمیداند آدرس به چه کسی تعلق دارد. اگر آدرسی کاملاً معتبر اما متعلق به شخص دیگری را کپی کرده باشید، کیف پول هیچ هشداری نمیدهد.
آدرس معتبر لزوماً آدرس درست نیست
بدافزارهایی وجود دارند که آدرس کپیشده را در حافظهٔ موقت (کلیپبورد) با آدرس مهاجم عوض میکنند، و ترفندهایی هست که آدرسی شبیه آدرس شما را در تاریخچهٔ تراکنشها مینشاند. هر دو آدرس جایگزین از نظر چکسام کاملاً معتبرند. شرح این حملهها و راه تشخیص آنها در راهنمای تشخیص کیف پول فیشینگ و آدرس جعلی آمده است.
شبکهٔ درست و ممو یا تگ
یک آدرس درست، بهتنهایی کافی نیست؛ شبکهای که تراکنش روی آن فرستاده میشود هم باید درست باشد. برخی توکنها، بهویژه استیبلکوینها، همزمان روی چند شبکه وجود دارند. وقتی از یک صرافی برداشت میکنید، معمولاً باید علاوه بر آدرس، شبکه را هم انتخاب کنید. اگر گیرنده دارایی را روی شبکهٔ «الف» انتظار دارد و شما آن را روی شبکهٔ «ب» بفرستید، ممکن است دارایی در جایی برسد که کیف پول یا حساب گیرنده آن را نمیبیند.
این خطر در شبکههای سازگار با اتریوم بیشتر است، چون آدرسها در آنها ظاهر یکسانی دارند و کیف پول مقصد با دیدن آدرس، شبکهٔ نادرست را رد نمیکند. پیش از برداشت دارایی از صرافی به کیف پول شخصی، مطمئن شوید شبکهٔ انتخابی در صفحهٔ برداشت با شبکهای که کیف پول مقصد پشتیبانی میکند یکی است.
ممو (Memo) یا تگ (Tag) یک شناسهٔ تکمیلی است که در برخی شبکهها کنار آدرس میآید. کاربرد رایج آن در صرافیهاست: صرافی ممکن است برای واریز همهٔ کاربران از یک آدرس مشترک استفاده کند و ممو مشخص میکند واریز به حساب کدام کاربر تعلق دارد. اگر ممو را فراموش کنید یا اشتباه وارد کنید، دارایی به آدرس صرافی میرسد اما به حساب شما اضافه نمیشود. در این حالت بازگشت دارایی به روال پشتیبانی همان صرافی وابسته است و ممکن است طولانی یا ناممکن باشد.
اگر صفحهٔ واریز ممو نشان میدهد
آدرس و ممو را دو جزء جدانشدنی یک مقصد بدانید. هر دو را از صفحهٔ واریز مقصد کپی کنید، هر دو را در فرم ارسال وارد کنید و هر دو را پیش از تأیید نهایی با منبع مقایسه کنید. خالی گذاشتن خانهٔ ممو، حتی اگر فرم ارسال آن را «اختیاری» نوشته باشد، در این حالت یکی از رایجترین دلیلهای گمشدن واریز است.
اشتباههای رایج و پیامد برگشتناپذیر
در سیستم بانکی، تراکنش اشتباه گاهی از راه بانک پیگیری و برگشت داده میشود. در بلاکچین، وقتی تراکنشی تأیید و در بلاک ثبت شد، هیچ مرجع مرکزیای اختیار لغو آن را ندارد. پیامد هر اشتباه به مقصد بستگی دارد: اگر آدرس متعلق به شخص دیگری باشد، بازگشت دارایی فقط به همکاری او بستگی دارد؛ اگر آدرس صاحب شناختهشدهای نداشته باشد، دارایی عملاً برای همیشه قفل میماند؛ و اگر مقصد یک صرافی باشد، پیگیری در اختیار پشتیبانی آن صرافی است.
اشتباههایی که بیشتر دیده میشوند اینها هستند:
- تایپ دستی آدرس. چکسام بیشتر خطاهای تایپی را میگیرد، اما تایپ دستی بیدلیل احتمال خطا را بالا میبرد. آدرس را کپی کنید یا کد QR آن را اسکن کنید.
- بررسی فقط چند نویسهٔ اول و آخر. آدرسهای جعلی دقیقاً برای فریب همین عادت ساخته میشوند؛ بخشهای میانی آدرس را هم مقایسه کنید.
- برداشتن آدرس از تاریخچهٔ تراکنشها. تاریخچه ممکن است آدرسهای شبیهسازیشده داشته باشد. آدرس را از منبع اصلی، یعنی صفحهٔ دریافت کیف پول یا صفحهٔ واریز حساب، بردارید.
- انتخاب شبکهٔ نادرست. آدرس درست روی شبکهٔ نادرست، به مقصدی میرسد که گیرنده انتظارش را ندارد.
- فراموش کردن ممو یا تگ. دارایی به صرافی میرسد، اما به حساب شما اضافه نمیشود.
- فرستادن به آدرس شبکهٔ آزمایشی. آدرسهایی که با «tb» شروع میشوند متعلق به شبکهٔ آزمایشی بیتکویناند [۳] و برای دریافت بیتکوین واقعی نیستند.
- استفاده از آدرس قدیمی صرافی. آدرس واریز صرافی ممکن است عوض شده باشد؛ هر بار آن را از صفحهٔ واریز تازه بردارید.
دلیل وجود استانداردهای چکسام
استاندارد EIP-۵۵ بهصراحت با هدف جلوگیری از ازدسترفتن وجه در اثر ارسال به آدرس نامعتبر ایجاد شد [۴]. همین هدف نشان میدهد که خطای آدرس یک نگرانی نظری نیست و طراحان شبکهها برای کاهش آن لایهٔ محافظ ساختهاند؛ اما این لایه فقط بخشی از مسئولیت را برمیدارد و بقیه با کاربر است.
چرا آدرس دریافت گاهی عوض میشود
بسیاری از کاربران تازهکار وقتی میبینند کیف پول بیتکوینشان در هر بار دریافت آدرس تازهای نشان میدهد، نگران میشوند. این رفتار عادی است. کیف پولهای امروزی میتوانند از یک عبارت بازیابی، تعداد زیادی کلید و آدرس بسازند و با نشان دادن آدرس تازه، ارتباط دادن همهٔ دریافتهای شما به هم را برای ناظران بیرونی دشوارتر میکنند. آدرسهای قبلی معمولاً همچنان معتبرند و هر داراییای که به آنها برسد، در همان کیف پول دیده میشود.
در کیف پولهای اتریوم و شبکههای سازگار، معمولاً برای هر حساب یک آدرس ثابت نمایش داده میشود. در صرافیها هم آدرس واریز را صرافی تعیین میکند و ممکن است برای هر شبکه متفاوت باشد. از آنجا که صرافی مالک کلیدهای آن آدرس است، نه شما، بهتر است دربارهٔ خطرهای نگهداری دارایی در کیف پول صرافی هم آگاه باشید.
روال دوبار چک کردن پیش از ارسال
بهترین محافظ، یک روال ثابت است که هر بار، بدون استثنا، تکرار شود. عجله و فشار زمانی، که اغلب در پیامهای کلاهبرداری هم دیده میشود، دشمن اصلی این روال است.
روال پیش از هر ارسال
- آدرس را از منبع اصلی بگیرید: صفحهٔ دریافت کیف پول گیرنده یا صفحهٔ واریز حساب مقصد، نه پیام قدیمی یا تاریخچهٔ تراکنش.
- شبکهٔ مقصد را بپرسید یا در صفحهٔ واریز ببینید و همان شبکه را در فرم ارسال انتخاب کنید.
- اگر مقصد ممو یا تگ دارد، آن را جداگانه کپی و وارد کنید.
- پس از جایگذاری، آدرس را با منبع مقایسه کنید؛ ابتدا، میانه و انتها را، نه فقط چند نویسهٔ اول و آخر.
- اگر از کیف پول سختافزاری استفاده میکنید، آدرس نمایشدادهشده روی صفحهٔ خود دستگاه را هم بررسی کنید.
- برای مبلغ بزرگ یا مقصد تازه، ابتدا یک تراکنش کوچک آزمایشی بفرستید.
- فقط پس از تأیید رسیدن تراکنش آزمایشی به مقصد، باقی مبلغ را ارسال کنید.
گام ششم و هفتم مهمترین بخش این روالاند. توصیهٔ رسمی پشتیبانی لجر این است که همیشه ابتدا مقدار کمی بفرستید و پس از تأیید رسیدن تراکنش به نشانی گیرنده، مبالغ بزرگتر را ارسال کنید [۵]. هزینهٔ این کار یک کارمزد شبکهٔ اضافه است؛ در برابر، اگر آدرس، شبکه یا ممو اشتباه باشد، فقط همان مبلغ کوچک در خطر قرار میگیرد. در راهنمای ساخت کیف پول جدید هم تراکنش آزمایشی بهعنوان یکی از گامهای راهاندازی آمده است.
عادت را همیشگی کنید
این روال زمانی مؤثر است که به عادت تبدیل شود، نه اینکه فقط برای مبلغهای بزرگ به یاد آید. برای مرور منظم عادتهای امنیتی دیگر، چکلیست امنیت کیف پول برای مبتدیان را هم ببینید.
خودتان را بسنجید
اگر آدرس، شبکه یا ممو را اشتباه وارد کنم، دارایی برمیگردد؟
تراکنش بلاکچینی پس از تأیید، مرجعی ندارد که آن را لغو کند. اگر آدرس متعلق به شخص دیگری باشد، بازگشت دارایی فقط به همکاری او بستگی دارد و اگر آدرس صاحبی نداشته باشد، دارایی برای همیشه قفل میماند. تنها استثنای رایج، ارسال به صرافی با شبکه یا ممو نادرست است که گاهی پشتیبانی همان صرافی میتواند پیگیری کند، بیآنکه نتیجهای تضمین شده باشد.
ممو یا تگ چیست و کی لازم است؟
ممو یا تگ یک شناسهٔ تکمیلی است که در برخی شبکهها کنار آدرس میآید تا مقصد نهایی دقیقتر مشخص شود. بیشتر وقتی لازم است که به یک صرافی واریز میکنید و صرافی برای چند کاربر از یک آدرس مشترک استفاده میکند. اگر صفحهٔ واریز مقصد ممو نشان میدهد، آن را هم مثل آدرس کپی و بررسی کنید.
چرا آدرس من در هر بار دریافت عوض میشود؟
بسیاری از کیف پولهای بیتکوین برای حفظ حریم خصوصی، در هر بار دریافت یک آدرس تازه نشان میدهند. همهٔ این آدرسها از همان عبارت بازیابی ساخته میشوند و معمولاً آدرسهای قبلی هم معتبر میمانند. در کیف پولهای اتریوم اغلب یک آدرس ثابت برای هر حساب نمایش داده میشود.
آدرس صرافی من ثابت است؟
آدرس واریز صرافی را صرافی تعیین میکند و ممکن است برای هر شبکه متفاوت باشد یا به مرور عوض شود. به همین دلیل بهتر است هر بار آدرس را از صفحهٔ واریز خود حساب بردارید، نه از تاریخچهٔ تراکنشها یا یادداشت قدیمی.
منابع
- Ethereum accounts | ethereum.org مشاهدهٔ منبع Ethereum accounts | ethereum.org
- Keys, Addresses - Mastering Bitcoin, 2nd Edition [Book] مشاهدهٔ منبع Keys, Addresses - Mastering Bitcoin, 2nd Edition [Book]
- bips/bip-0173.mediawiki at master · bitcoin/bips مشاهدهٔ منبع bips/bip-0173.mediawiki at master · bitcoin/bips
- ERC-55: Mixed-case checksum address encoding مشاهدهٔ منبع ERC-55: Mixed-case checksum address encoding
- Send crypto assets مشاهدهٔ منبع Send crypto assets