
دارندگان بیت کوین که تصدی ارز دیجیتال خود را به عهده دارند باید نگران گپ ها و روشهای مختلف از دست دادن یا سرقت کلیدهای خود باشند. اما موضوعی که کمتر به آن پرداخته شده است، از دست دادن رد و نشانی بیت کوین است، در حالی که همچنان کلیدهای مورد نیاز برای خرج کردن بیت کوینهای موردنظر در دسترس است.
پیشزمینه
در روزهای ابتدایی بیت کوین، کیف پولها صرفا مجموعهای از کلیدها بودند؛ یعنی به صورت تصادفی به تولید کلیدهای مورد نیاز میپرداختند و در صدد حفظ تعداد مشخصی کلید استفاده نشده بودند. نکته منفی این بود که هربار که کیف پول یک کلید جدید ایجاد میکرد، کاربر باید بکآپ جدیدی تهیه میکرد. معمولا کیف پولها این موضوع را به کاربران اطلاع نمیدادند و کاربران نیز به دلیل عدم تهیه بکآپ از کیف پول خود به صورت منظم، به صورت دائمی دسترسی به سرمایههای خود را از دست میدادند.
کیف پولهای قطعی سلسله مراتبی (Hierarchical Deterministic Wallet) به منظور سادهسازی فرایند تهیه بکآپ توسعه یافتند. هرچند، کیف پولهای HD مسأله جدیدی را به وجود آوردند.
بازیابی یا ایمپورت کلید مبتنی بر کیف پول بسیار ساده است. کلیدهایی که ایمپورت میکنید همان کلیدهایی است که در اختیار دارید. با وجود کیف پولهای HD، سید (Seed) کیف پول شما درگاهی به تعداد کلیدهای تقریبا نامحدود است. از آنجایی که نمیخواهیم از سید، بینهایت کلید ایجاد کنیم، ایمپورت کیف پول باید از فرایند کشف (Discovery) پیروی کند که شامل تعداد محدود و منطقی در خصوص تولید کلید است. با در نظر گرفتن عبارت سید، پارامترهای اسکریپت بازخرید (redeem) و مسیر دریافت، کیف پول باید مسیرهای استاندارد حساب را تا زمانی تغییر دهد که به گپ بزرگی از آدرسها برسد که سرمایهای دریافت نکردهاند. به این تعداد، “سقف گپ آدرس” گفته میشود.
همانطور که در BIP 44 و BIP 45 خاطرنشان شده است، سقف گپ آدرس توصیهشده، ۲۰ آدرس و فقط در مسیر دریافت خارجی است، نه در مسیر آدرس بقیه تراکنش. به توضیح BIP 44 دقت کنید:
سقف گپ آدرس در حال حاضر بر روی ۲۰ آدرس است. اگر نرمافزار به ۲۰ آدرس استفادهنشده متوالی برسد، تشخیص میدهد که بعد از این دیگر آدرس استفادهشدهای وجود ندارد و جستجو برای زنجیره آدرس را متوقف میکند. ما فقط زنجیرههای خارجی را اسکن میکنیم، زیرا زنجیرههای داخلی فقط کوینهایی را دریافت میکنند که از زنجیرههای خارجی متناظر حاصل شده باشد.
نرمافزار کیف پول باید هنگامی که کاربر با تولید آدرس جدید در صدد دستیابی و عبور از سقف گپ در زنجیره خارجی است، هشدار دهد.
متاسفانه فقط چند کیف پول معدود از توصیه BIP 44 برای هشدار به کاربران درباره گپهای آدرس پیروی میکنند.
فرضیات اشتباه
تمام مسائل مطرح شده در این مقاله به دلیل فرضیاتی است که همواره درست نیستند. اما این فرضیات چه چیزی هستند؟
- هیچ کاربری ۲۰ آدرس متوالی بدون دریافت ایجاد نخواهد کرد.
- مسیرهای آدرس باقی مانده تراکنش هرگز گپ نخواهند داشت.
ایجاد گپ
اولین بار در سال ۲۰۱۶ با مسأله گپ آدرس مواجه شدیم. این مسأله به دلیل زنجیره طولانی از تراکنشهای تأییدنشده به دلیل صحیح نبودن تراکنش مادر بود، در نتیجه تمام تراکنشهای بعد از آن نامعتبر شدند. چه موارد دیگری میتوانند گپهای آدرس را به وجود بیاورند؟
- بیش از ۲۰ آدرس ایجاد کنید، در حالی که هیچ سرمایهای توسط این ۲۰ آدرس دریافت نکرده باشید و توسط آدرسهای ایجادشده پس از این ۲۰ آدرس، سرمایه دریافت کنید.
- آدرسهای بسیار زیادی در سرویسهای شخص ثالث برای برداشت ایجاد کرده باشید، اما برداشت سرمایهای صورت نگرفته باشد.
- بیش از ۲۰ فاکتور در فروشگاه اینترنتی شما صادر شده باشد که پرداخت نشده است. این شرایط، نوعی از الگوی حمله DoS است زیرا این فرآیند و ایجاد فاکتورها هزینه آنچنانی ندارد.
- سرویسی در حال اجرا دارید که همانند صرافیها، واریزها را میپذیرد و آدرس واریز منحصربهفردی برای هر کاربر اختصاص دادهاید. اگر ۲۰ کاربر، حساب ایجاد کنند اما هرگز واریزی نداشته باشند از سقف گپ عبور میکنید.
- کیف پول مشترکی در دستگاههای مختلف داشته باشید که با یکدیگر همگامسازی نشده باشند و آدرسهای بسیار زیادی فقط در یک دستگاه ایجاد کنید.
- کیف پول فقط دریافتکننده (receive only) در دستگاهی داشته باشید که با نرم افزار کیف پولی که از آن برای خرج کردن سرمایه خود استفاده میکنید همگامسازی (sync) نشده باشد. اگر آدرسهای بسیار زیادی در کیف پول فقط دریافتکننده ایجاد کنید، کیف پول خرجکننده متوجه واریزهای سایر آدرسها نخواهد شد.
- چندین تراکنش امضا کنید اما آنها را منتشر نکنید و سپس تراکنشی که بعد از تراکنشهای موردنظر ایجاد کردهاید را منتشر کنید.
راهکارهای بالقوه
راهکارهای پیشگیرانه:
- ایجاد آدرسهای دریافتکننده را محدود کنید.
- برای کیف پول بین کوین تعریف کنید که آدرسهای استفادهنشده را جابجا کند و مکان آنها را تغییر دهد. اگر فردی فاکتور منقضی شده را پرداخت کند و آدرس تغییر کند، این موضوع ممکن است منجر به سردرگمی فروشندگان شود. حتی ممکن است سرویسهای مختلف نتوانند آدرسهایی را به حسابهای قدیمی خود اختصاص دهند.
- هزینه برای ایجاد آدرس جدید برای کاربران تعیین کنید. این هزینه باید مقرون به صرفه باشد. این موضوع میتواند منجر به حذف فعالیت اسپمرها شود.
راهکارهای بازیابی کننده:
- میتوان با ارسال مقادیر اندک بیت کوین به پر کردن گپهای ایجادشده پرداخت. این راهکار هزینهبر است و اندکی از فضای بلاک را هدر میدهد.
- سقف گپ کیف پول خود را افزایش دهید. تمام کیف پولها از این ویژگی پشتیبانی نمیکنند اما کیف پولهایی نظیر الکتروم و لجر دارای این ویژگی هستند.
تنظیمات سقف گپ کیف پول الکتروم را باید از کنسول فرمان انجام داد:
wallet.change_gap_limit(100)
wallet.storage.write()
بازیابی سرمایههای از دست رفته
افراد بسیار زیادی وجود دارند که هنگام بازیابی کیف پول خود توسط بکآپ شاهد از دست رفتن سرمایههای خود هستند. راهکار مناسب برای این شرایط، ایجاد مجدد کیف پول در الکتروم (ترجیحا بارگذاری سید در کیف پول سختافزاری) و سپس استفاده از کنسول فرمان برای بازیابی تمام آدرسها است:
for x in range(1000): wallet.create_new_address(False)
for x in range(1000): wallet.create_new_address(True)
در قسمت پایین سمت چپ پنجره الکتروم، عبارت همگامسازی (Synchronizing) را به مدت چند ثانیه مشاهده خواهید کرد . سپس موجودی و تراکنشهای از دست رفته نشان داده خواهد شد. اکنون میتوانید سرمایه خود را خرج کنید.
خوشبختانه کاربران BTCPay Server دارای ابزار اسکن مجدد هستند که سقف گپ آدرس را بر روی ۱۰,۰۰۰ آدرس قرار میدهد. این تنها کیف پول نرمافزاری است که با یک کلیک به این ویژگی دسترسی دارید.
مثالی از بازیابی سرمایه
اگر میخواهید بدانید جستجوی سرمایه از دست رفته چگونه است، ابتدا کیف پول الکتروم را نصب کنید و سپس کیف پول فقط دریافت کننده را طبق مراحل زیر ایجاد کنید:
۱- الکتروم را اجرا کنید.
۲- کیف پول جدید ایجاد کنید.
۳- کیف پول استاندارد را انتخاب کنید.
۴- استفاده از کلید اصلی (Master Key) را انتخاب کنید.
۵- کلید عمومی زیر را کپی و پیست کنید:
vpub5VbqiMAitbLcBPBLVaHWTudEfwaBwcAR4naUaM54kGTDqFFB9bTU5sAwD3SoM7pD2JVVqTuojBRcQcauBeiswgm8QL1x2qrpxuPwsLjtU2W
اکنون تمام موجودی شامل ۲۰ کوین TBTC را مشاهده میکنید.
سایر مشکلات
اگر از کیف پول با تایید پرداخت (SPV) با سقف گپ بسیار زیاد استفاده میکنید، ممکن است با مسائل پیچیدهای مواجه شوید. عبور از حداکثر اندازه ۳۶,۰۰۰ بایتی BIP 37 (که معادل با ۲۰,۰۰۰ آدرس است) ممکن است باعث شود که نود، درخواست شما را قبول نکند. از گپهای آدرس حتی میتوان در حملات باجافزاری نیز استفاده کرد.
نتیجهگیری
گپهای آدرس، نوعی از مشکل سطح پایینی است که کاربران بیت کوین نباید نگران آن باشند. هرچند، تا زمانی که تمام کیف پولهای محبوب بیت کوین به برطرف کردن این مشکل نپردازند، این موضوع همچنان میتواند به کابوسی برای کاربران تبدیل شود.