با اقتباس از How To Recover Funds Sent to a Wrong Public Address
امروز به توییتی از ضیا صدر عزیز برخوردم که توی اون نوشته بود «هرگز؛ هرگز؛ هرگز» نباید کلمات بازیابی رو جایی منتشر کنیم. قطعاً مقولهی امنیت همواره یکی از مهمترین بخشهای زندگی ماست و در مورد دنیای کریپتو هم اتفاقاً این موضوع باید اهمیت دوچندانی داشته باشه، اما آیا این قضیه با همین شدت و حدت قابلتعمیمه و هیچ حالتی وجود نداره که ما مجبور باشیم این ۱۲ کلمه (Mnemonicها در حال حاضر متشکل از ۱۲ تا ۲۴ کلمه هستند) رو یواشکی در گوش کسی بگیم؟ برای پاسخ دادن، اول بذارین ببینیم که عبارت یادآور یا نمانیک چی هست و چطوری میتونه این همه اطلاعات رو تو خودش نگه داره و تا این حد مهم باشه!
در واقع Mnemonic یا Seed phrase رو میتونیم بهعنوان کلید یادآوری اطلاعات زیادی بدونیم که توی بحث ما میتونن براساس استانداردهای مختلفی تولید بشن. بذارین یک مثال بزنم! توی دوران مدرسه احتمالا برای یادآوری رنگهای رنگینکمون از عبارت «قنزسانب» استفاده میکردین.
قرمز، نارنجی، زرد، سبز، آبی، نیلی و درنهایت بنفش.
نمانیک (عبارت یادآور) هم دقیقاً همین کارایی رو داره و میتونه با کمک تعدادی کلمه و یک استاندارد مشخص مثل BIP39، بینهایت آدرس، کلید عمومی و کلید خصوصی تولید کنه.
از اونجایی که آدرس شبکههای EVM-Based از یک ساختار مشخص تبعیت میکنه (منظور همون آدرسهایی هست که با 0x شروع میشه و اگر دقت کرده باشین میبینین که شما با یک Seed phrase به اون آدرس در تموم شبکههای بر پایه اتریوم دسترسی دارید و همین ممکنه موجب بشه شما بعضی وقتا بهخطا بیفتید)، پس تصور همچین سناریویی دور از ذهن نیست:
فکر کنین شما ۱۰۰۰ عدد از کوین TOMO رو روی یک صرافی دارین. از اونجایی که توکن تومو روی شبکهی اتریوم هم یک آدرس قرارداد داره، پس صرافی احتمالاً دو گزینه پیشپای شما میذاره؛ انتقال در شبکهی TomoChain یا ERC20.
شما قصد دارین این دارایی رو بفرستین به یک Multi-Chain wallet روی TrustWallet و قصد دارین اون رو روی شبکهی اتریوم نگهداری کنین. میرین آدرس اتریومتون رو کپی میکنین، اما فقط یک اشتباه کوچیک انجام میدین. شبکهی انتقال رو که بهصورت پیشفرض روی TomoChain بود تغییر نمیدین و مراحل ارسال رو پی میگیرین، اما هرچقدر منتظر میمونین چیزی روی والتتون دریافت نمیکنین.
چی شد؟ مشکل از کجاست؟ اگر آدرس رو اشتباه وارد کردین پس چرا صرافی هیچ خطایی درمورد شبکه ازتون نگرفت؟
خب، این برمیگرده به اینکه هردوی این شبکهها یک مسیر اشتقاق (Derivation Path) مشابه دارن و درواقع توموچین یک شبکهی برگرفته از اتریوم هست و آدرسهایی که این دو شبکه دارن کاملاً مشابهه، پس صرافی هم هیچ خطایی از شما نمیگیره، در حالی که شما دارایی رو به آدرسی فرستادین که در حالت عادی بهش دسترسی ندارین و توی یک فضای بینهایت گم شده.
نکته: مسیر اشتقاق رو میتونیم کدی بدونیم که هر شبکه برای خودش رزرو میکنه تا بهوسیلهی اون بتونه با کمک نمانیک، آدرسها، کلیدهای عمومی و خصوصی منحصر بهفرد خودش رو بسازه. بهطور مثال مسیر اشتقاق برای میننت اتریوم مقدار "m/44'/60'/0'/0
" و مسیر اشتقاق برای شبکهی تومو مقدار "m/44'/889'/0'/0
" هست.
در سناریوی فرضی ما، شما میخواستین مثلاً به آدرس زیر،که از تراستوالت کپی کردین، توکن تومو روی شبکهی اتریوم بفرستین.
0x801c349d96D54A03635c11aCF94aeb7aA15C9527
درحالیکه بهاشتباه به همین آدرس روی شبکهی توموچین، کوین تومو ارسال کردین. اگر آدرس کوین TOMO رو توی تراستوالت، چک بکنین، میبینین که آدرس متفاوتی نسبت به آدرس اتریومی مبنای والت داره و ما به آدرسی که بهاشتباه بهش دارایی ارسال کردیم، دسترسی نداریم.
خب حالا اگر بگم برگردوندن این دارایی (که در لحظهی نوشتن متنمون مبلغی معادل ۲۵۰۰ دلار ارزش داره) که به اشتباه فرستاده شده و بهحالت عادی بهش دسترسی وجود نداره غیرممکن نیست، چه واکنشی خواهید داشت؟
1. https://github.com/iancoleman/bip39
2. https://iancoleman.io/bip39/
فقط کافیه که اون والت رو برای اطمینان کاملتون از هرگونه سواستفادههای احتمالی، خالی کنین. بعد به سراغ پروژهای، که یانکلمن اون رو در دو نسخهی Online و Standalone آماده کرده، برین. البته شاید دسترسی به نسخهی ستندلون یا آفلاین برای هرکسی ساده نباشه و همینه که شاید مجبور بشیم از وبسایت همین پروژه استفاده کنیم.
باید گفت که وقتی پروژهای بهصورت متن-باز در اختیار ما قرار داره احتمال وجود در پشتی و نشت اطلاعات توش تقریباً صفره، ولی در هرحال ما برای اطمینانخاطر در هر دو نسخه از قبل تموم داراییهای دیگه رو خالی کردیم (صد البته انجام اینکار برای حالت آفلاین کمی خندهدار هم هست، ولی درهرحال کار از محکمکاری عیب نمیکنه!) تا بتونیم مراحلی که توی این راهنما نوشته شده رو انجام بدیم. با انجام مراحل ذکرشده توی راهنما میبینین که، خیلی راحت، شما حتی به اون آدرس اشتباهی که درظاهر توی والتتون بهش دسترسی نبوده دسترسی دارین و این رو مدیون این هستین که برای چند دقیقه رازداری رو گذاشتین کنار و دوازدهکلمتون رو راحت در اختیار پروژهی یانکلمن عزیز قرار دادین.
جمعبندی: همونطور که دیدین، آنچنان هم عجیب نیست اگر ما برای برگردوندن دارایی قابلتوجهمون دستبهدامن بعضی سرویسها بشیم، بهشون ۱۲ کلمهمون رو نشون بدیم و بعد ازشون بخوایم تا بهمون کلیدخصوصی اون آدرس مشخص رو بدن و بعد از انتقال دارایی برای همیشه با اون والت، آدرسهاش، دوازده کلمهاش و ... خداحافظی کنیم.
از اونجایی که من به مباحث رمزنگاری علاقه دارم (البته سوادم در این زمینه بهاندازهی علاقهام نیست)، سعی میکنم در ادامهی همین مطلب، مطالب دیگری درمورد رمزنگاری، امضا کردن، کلیدها و ... بنویسم. شاید هم از راههایی برای امنتر موندن نمانیک و والتهامون بنویسم که بهشدت مهمه و دغدغهی ضیا در این مورد، کاملاً هم بهجا و درسته.
ترجمهکردن مقالهی How To Recover Funds Sent to a Wrong Public Address هم خالی از لطف نیست، چون قطعاً میتونه به خیلیا برای بازگردوندن داراییهای گمشدشون کمک کنه (دیدم که میگم ?)، اما اگر کمی دقت کنین، میبینین که این مقالهی تراستوالت درواقع یک راهکار بسیار سادهتر و امنتر داره که، شرکتسازندهی این کیف پول سعی کرده فقط بهخاطر مسالهی رقابت با همقطارانش، اون رو نادیده بگیره و امنیت رو فدای رقابت بکنه، که حتما میشه در آینده راجعبهش نوشت، یا اینکه شما توی بخش نظرات، راهکارهای مشابهتون رو ذکر کنین.