به سوی یک لجر کیف پول قابل اطمینان بیت کوین با MINISCRIPT

به سوی یک لجر کیف پول قابل اطمینان بیت کوین با MINISCRIPT

چیزهایی که درباره لجر کیف پول قابل اطمینان بیت کوین با MINISCRIPT باید بدانید:

– Miniscript ساخت کیف پول های نرم افزاری بیت کوین را امکان پذیر می کند که بهره برداری از یک درب پشتی را غیرممکن می کند. خوشحالیم که بگوییم لجر اولین تولید کننده کیف پول سخت افزاری تجاری است که از miniscript پشتیبانی می کند.

– ویژگی های اضافی را می توان بدون به خطر انداختن تجربه کاربر پیاده سازی کرد.

دستگاه‌های امضای سخت‌افزار به گونه‌ای طراحی شده‌اند که از کاربر در برابر بردارهای حمله رایج مختلف محافظت کنند، مانند:

  • دسترسی غیرمجاز و استخراج بذر
  • بدافزاری که کیف پول نرم افزار مرتبط شما را آلوده می کند.
  • آسیب پذیری های نرم افزاری روی خود دستگاه

مانند هر کسب و کاری، این به نفع سازنده است که دستگاه ها را تا آنجا که می توانند نشکن کنند. موفقیت در این ماموریت بسیار مهم است و شرکت های امنیتی مانند Ledger به شهرت و اعتباری که بر اساس سابقه خود ساخته شده است، متکی هستند.

با این حال، برخی از کاربران ممکن است همچنان نگرانی داشته باشند. چه چیزی باعث می شود که خود شرکت نتواند یک درب پشتی را در دستگاه ها پنهان کند؟

در حضانت خود، ما اعتماد نداریم، ما تأیید می کنیم.
اما آیا کاربر واقعاً می تواند تأیید کند که یک دستگاه دارای درب پشتی نیست؟

این سوال کلیدی است که این مقاله به آن می پردازد. به طور دقیق تر، این مقاله به موضوعات زیر می پردازد:

  • درپشتی چیست، و چرا اثبات وجود ندارد، اگر غیرممکن نباشد، دشوار است.
  • چرا فقط کاربران می توانند از خود در برابر این خطر محافظت کنند.
  • چگونه مینی اسکریپت راه حل های عملی را برای این چالش برای کیف پول بیت کوین ممکن می کند.

با این که اولین کیف پول سخت افزاری برای پشتیبانی از miniscript هستیم، امیدواریم توسعه دهندگان را برای ایجاد راه حل های ایمن و ارتقای کل صنعت خود ترغیب کنیم و احتمال تحقق چنین ریسک سیستمی را از بین ببریم.

نحوه ساخت دستگاه امضای بدون درب پشتی در لجر کیف پول قابل اطمینان بیت کوین

اجازه دهید آن را به وضوح بیان کنیم: شما نمی توانید.

برای دفاع از خود در برابر یک درب پشتی احتمالی، به مدل حمله متفاوتی نسبت به مدلی که در بالا توضیح دادیم نیاز دارید: در این سناریو، حریف می‌تواند خود فروشنده یا یک خودی فاسد باشد.

راه حلی که اغلب برای این مشکل تبلیغ می شود منبع باز است: در نهایت، اگر بتوانید کد را بررسی کنید، چه چیزی ممکن است اشتباه پیش برود؟

با این حال، حقیقت پیچیده تر است. از آنجایی که فروشنده سخت افزار را مونتاژ می کند، یک درب پشتی می تواند به طور کامل درون آن قرار گیرد. این سخت افزار می تواند به گونه ای طراحی شود که نرم افزار را در نقاط خاصی نادیده بگیرد و به جای آن کدهای مخرب را اجرا کند.

بر خلاف نرم افزارهایی که بر روی دستگاه های محاسباتی همه منظوره (مانند لپ تاپ یا تلفن شما) اجرا می شوند، بررسی دقیق سخت افزار با فناوری امروزی عملا غیرممکن است. حتی اگر مشخصات سخت‌افزاری کاملاً متن‌باز و با جزئیات تک تک گیت‌ها در مدار باشد، همچنان به تجهیزات پرهزینه‌ای نیاز دارید تا تأیید کنید که یک تراشه خاص مطابق با آنها ساخته شده است.

نحوه درب پشتی کیف پول سخت افزاری

در اینجا چند مورد از ساده‌ترین روش‌هایی که یک فروشنده سخت‌افزار مخرب می‌تواند برای معرفی درب پشتی استفاده کند، همراه با روش‌هایی که کاربران قدرتمند می‌توانند امروزه از خود محافظت کنند، آورده شده است.

تولید بذر در لجر کیف پول قابل اطمینان بیت کوین

بسیاری از دستگاه‌ها این امکان را به شما می‌دهند که با استفاده از یک True Random Generator، یک دانه (که عبارت Secret Recovery نیز نامیده می‌شود) مستقیماً روی دستگاه تولید کنید.

😈 دستگاه شیطانی می تواند دانه هایی تولید کند که تصادفی به نظر می رسند اما در واقع برای مهاجم قابل پیش بینی هستند.

🛡️ کاربران قدرتمند می توانند با ایجاد حافظه آفلاین این مشکل را دور بزنند. علاوه بر این، ترکیب یک عبارت عبور قوی همچنین می تواند یک دانه کاملا مستقل ایجاد کند که فروشنده سخت افزار نمی تواند آن را پیش بینی کند. مبادله این است که کاربران باید اطمینان حاصل کنند که علاوه بر کلمات یادگاری، از عبارت عبور به درستی پشتیبان تهیه می کنند.

استخراج کلید عمومی در لجر کیف پول قابل اطمینان بیت کوین

کیف پول‌های سخت‌افزاری کلیدهای عمومی را استخراج و صادر می‌کنند (همچنین xpubs نامیده می‌شوند، که مخفف کلید عمومی گسترده همانطور که در BIP-32 تعریف شده است. xpubs برای تولید آدرس‌های ممکن برای دریافت سکه‌ها استفاده می‌شود.

😈 دستگاه شیطانی می تواند کلیدهای عمومی کنترل شده توسط مهاجم را به جای کلیدهای صحیح مشتق شده از seed بازگرداند.

🛡️ کاربران می توانند xpub مشتق شده را در دستگاه آفلاین دیگری تأیید کنند. با این حال، وارد کردن دانه در دستگاه های دیگر خطرات خاص خود را دارد. کاربران آگاه از امنیت ممکن است هر دستگاهی را که به seed دسترسی داشته باشد، خطرناک بدانند که به طور بالقوه در حد نابود کردن آنهاست. کاربر معمولی ممکن است در اجرای صحیح این روش در حین مدیریت خطرات اضافی با مشکل مواجه شود.

درز اطلاعات در لجر کیف پول قابل اطمینان بیت کوین

airgap ( شکاف هوا ) اغلب به عنوان راه حلی برای جلوگیری از نفوذ یک دستگاه مخرب یا در معرض خطر از کلیدهای خصوصی پیشنهاد می شود. به هر حال، اگر دستگاهی نتواند با دنیای بیرون ارتباط برقرار کند، نمی‌تواند کار مضری انجام دهد، درست است؟

نه کاملا!

وقتی دستگاه در حال استفاده است همیشه می تواند ارتباط برقرار کند: امضا تولید می کند. این امضاها در داخل تراکنش هایی قرار می گیرند که برای همیشه در بلاک چین پخش و ذخیره می شوند.

امضا یک رشته بایت تصادفی با حداقل 64 بایت است. با این حال، از آنجایی که بیش از یک امضای معتبر می‌تواند با یک پیام مطابقت داشته باشد، یک دستگاه مخرب می‌تواند هر بار که امضایی تولید می‌شود، چند بیت از اطلاعات را با تولید چندین امضا و انتخاب انتخابی که برای انتشار منتشر می‌کند، با یکدیگر ارتباط برقرار کند.

😈 یک دستگاه سرکش ممکن است امضاهای غیر تصادفی تولید کند که در بسیاری از تراکنش‌ها، بذر را برای مهاجم آشکار می‌کند!

مهاجمی که موفق به نصب چنین درب پشتی شده است، فقط باید منتظر باشد تا امضاهای مخرب در بلاک چین ظاهر شوند تا زمانی که اطلاعات کافی برای بازسازی کل دانه را داشته باشند.

🛡️ برای امضاهای ECDSA، استفاده از یک روش استاندارد شده برای استخراج غیر قطعی (مانند RFC6979) این حمله را خنثی می کند، مشروط بر اینکه تایید شود که امضای تولید شده با امضای مورد انتظار مطابقت دارد. با این حال، اطمینان از این امر مستلزم بارگیری دستگاه دوم با همان دانه است که منجر به همان مشکلات عملی ذکر شده در بخش قبل می شود.

🛡️ یک رویکرد جالب استفاده از یک روش هوشمند برای وادار کردن دستگاه به انتخاب یک غیر تصادفی است. پروتکلی برای این منظور که با نام anti-exfil یا anti-klepto شناخته می شود، در حال حاضر در کیف پول های سخت افزاری Blockstream Jade و ShiftCrypto BitBox02 پیاده سازی شده است. در وبلاگ ShiftCrypto بیشتر بخوانید، که شامل توضیحات فنی در مورد نحوه اجرای چنین حمله ای نیز می شود.

خوب پس امیدی نیست؟

اکثر دفاع‌های فهرست‌شده در بالا عمدتاً به کاربر نیاز دارند تا اقدامات آشکار و مداخله‌ای را انجام دهد تا از خود محافظت کند: یا با تولید دانه به تنهایی (در اصل، استفاده از مغز خود برای جایگزینی عملکرد از کیف پول سخت‌افزاری)، یا استفاده از یک دستگاه اضافی برای تأیید درستی انجام محاسبات.

با این حال، پروتکل ضد exfil برجسته است: با توجه به اینکه همیشه یک ماشین میانجی بین امضاکننده سخت افزار و دنیای خارج وجود دارد، این دستگاه می تواند کمک کند. از طریق یک پروتکل تعاملی با امضاکننده سخت‌افزار، می‌تواند استفاده از یک غیر تصادفی واقعی را اعمال کند، در نتیجه شانس دستکاری امضای نهایی را کاهش داده یا از بین می‌برد.

در این پست وبلاگ، ما در درجه اول به این نوع اقدامات علاقه مندیم: در حالی که استراتژی هایی که به طور قابل توجهی UX را بدتر می کنند می توانند برای کاربران قدرتمند جذاب باشند، احتمالاً در عمل برای کاربرانی که از نظر فنی کمتر خبره هستند – که اکثریت قریب به اتفاق هستند، اوضاع را بدتر می کنند.

مدل امنیتی

مدل استاندارد برای امضاکنندگان سخت افزار

هدف تولیدکنندگان امضاکننده سخت افزار محافظت از کاربران در برابر انواع تهدیدات بالقوه است. در این مقاله، ما بر روی یک ویژگی بسیار مهم تمرکز می کنیم که می توان آن را به شرح زیر خلاصه کرد:

کاربران را نمی توان فریب کاری داد که منجر به از دست دادن وجوه می شود، مشروط بر اینکه اطلاعات روی صفحه را قبل از تأیید درک کرده و تأیید کنند.

برای هر اقدام حساس، به ویژه امضا، تأیید لازم است. اگر بدافزار بتواند امضایی برای پیام‌های دلخواه تولید کند، مانند تراکنش‌هایی که تمام سرمایه‌ها را تخلیه می‌کند، محافظت از دانه بیهوده خواهد بود!

بسیار مهم است که تأکید کنیم ویژگی فوق باید صادق باشد حتی اگر کیف پول نرم افزار کاملاً در معرض خطر باشد. آنچه در صفحه نمایش لپ تاپ/تلفن شما نمایش داده می شود قابل اعتماد نیست: بدافزار می تواند جایگزین آدرس ها شود، شما را فریب دهد که کدام آدرس متعلق به شماست، یک تراکنش ارائه کند اما سپس یک مورد دیگر را برای امضا به دستگاه ارسال کند و غیره.

بنابراین، سفت‌افزار و برنامه‌هایی که روی دستگاه امضای سخت‌افزار اجرا می‌شوند، کیف پول نرم‌افزار را ذاتاً غیرقابل اعتماد و غیرقابل اعتماد می‌دانند.

مدل امنیتی ضد درب پشتی برای کیف پول های نرم افزاری

در این قسمت نقش ها را به طور کامل ورق می زنیم. اکنون می‌خواهیم یک کیف پول نرم‌افزاری طراحی کنیم که از سرقت یا از دست دادن سرمایه توسط سازنده سخت‌افزار جلوگیری کند، حتی اگر دستگاه کاملاً مخرب باشد.

از این رو، این نمی‌تواند یکی از ویژگی‌های دستگاه باشد: بلکه یکی از ویژگی‌های تنظیمات کیف پول نرم‌افزاری است. می توانیم آن را به صورت زیر خلاصه کنیم:

به شرطی که کیف پول نرم افزاری به خطر نیفتد، سازنده سخت افزار نمی تواند باعث از دست دادن وجه کاربر شود.

این ممکن است غیر منطقی به نظر برسد، زیرا مستقیماً با مدل امنیتی استاندارد که در بالا توضیح داده شد در تضاد است. با این حال، “نداشتن درب پشتی” به معنای “انجام دادن دقیقاً همان کاری است که قرار است انجام دهند”. از آنجایی که کیف پول نرم‌افزار تنها رابط بین دستگاه امضاکننده و دنیای خارجی است، این تنها جایی است که می‌توان حفاظت در برابر رفتار نادرست را اعمال کرد – چه به دلیل یک اشکال یا به خطر افتادن صریح دستگاه.

توجه داشته باشید که این مدل به طور قابل توجهی فراتر از خرابی دستگاه، مانند یک باگ قابل بهره برداری است. در این مورد، ما در سناریویی کار می کنیم که دستگاه به طور فعال به دنبال از دست دادن سرمایه است.

البته، اگر سازنده با موفقیت هم دستگاه و هم دستگاه شما را که کیف پول نرم‌افزاری را اجرا می‌کند، به خطر بیاندازد، هیچ محافظت احتمالی وجود ندارد. بنابراین، اطمینان از اینکه کیف پول نرم افزار شما منبع باز و قابل بازرسی است، کاملاً حیاتی است، به خصوص اگر توسط همان فروشنده ای ساخته شده باشد که سخت افزار را تولید می کند.

نقش مینی اسکریپت MINISCRIPT

Miniscript توسعه دهندگان کیف پول را به توانایی استفاده کامل از ویژگی های پیشرفته بیت کوین اسکریپت مجهز می کند. برای مروری بر احتمالات باورنکردنی باز کردن قفل های کوچک، به پست وبلاگ قبلی ما مراجعه کنید. همچنین ممکن است بخواهید به قسمت 452 پادکست استفان لیورا گوش دهید تا در مورد آنچه که مینی اسکریپت به چشم انداز بیت کوین می آورد بحث کنید.

برنامه Ledger Bitcoin از زمان انتشار نسخه 2.1.0 خود، که در فوریه 2023 به کار گرفته شد، از miniscript پشتیبانی می کند. در کنفرانس بیت کوین 2023 در میامی، Wizardsardine انتشار نسخه 1.0 کیف پول Liana خود را اعلام کرد، اولین کیف پول مستقر بر اساس miniscript.

ایده اصلی این پست این است که یک حساب کیف پول بیت کوین را می توان نه تنها با یک کلید، بلکه با چندین کلید محافظت کرد. این به چارچوب‌های امنیتی انعطاف‌پذیر اجازه می‌دهد که در آن‌ها حتی شکست کامل یا به خطر افتادن یک کلید فاجعه‌بار نباشد.

تفکرات چندگانه

Multisig ارتقاء قابل توجهی در قدرت راه حل خود سرپرستی است. با استفاده از قابلیت برنامه ریزی بیت کوین اسکریپت، امکان ایجاد کیف پول هایی را فراهم می کند که به جای یک کلید، به چندین کلید نیاز دارند. یک کیف پول چند علامتی k-of-n به ترکیبی از k امضای معتبر از مجموع n امضای ممکن نیاز دارد.

با این حال، multisig همچنین بار کاربری UX را بر دوش کاربر قرار می دهد و فرصت های جدیدی را برای خطاها معرفی می کند. یک راه‌اندازی مولتی‌سیگ 3 از 3، شامل سه کلید مختلف که به‌طور ایمن در مکان‌های جداگانه پشتیبان‌گیری می‌شوند، امنیت قوی را ارائه می‌دهد… اما همچنین به این معنی است که اگر حتی یک کلید گم شود، سکه‌ها برای همیشه غیرقابل دسترس می‌شوند!

بنابراین، تنظیماتی که افزونگی بیشتری ارائه می‌کنند (مانند 2-از-3 یا 3-از-5) معمولاً محبوب‌تر هستند: اگر یک کلید گم شود، کلیدهای دیگر همچنان می‌توانند بازیابی را تسهیل کنند. اما این یک معاوضه ایجاد می کند: اگر یک کلید بدون اطلاع شما به خطر بیفتد، امنیت کلی به میزان قابل توجهی کاهش می یابد!

شرکت‌هایی مانند Casa و Unchained Capital در راه‌حل‌های خودسرپرستی تخصص دارند که در آن تعداد کمی از کلیدها را برای مشتریان خود نگه می‌دارند. آن‌ها همچنین با راهنمایی کاربران خود در فرآیند ورود و ساده‌سازی استفاده از سیستم‌های نگهداری، که می‌تواند برای اکثر کاربران غیر فنی دلهره‌آور باشد، کمک می‌کنند.

مینی اسکریپت و مسیرهای بازیابی قفل شده با زمان

لیانا از مینی اسکریپت برای ایجاد کیف پول هایی استفاده می کند که راه های مختلفی برای خرج کردن دارند:

  • یک شرط هزینه اولیه، که بلافاصله در دسترس است.
  • یک یا چند شرط هزینه اضافی که پس از یک دوره معین در دسترس قرار می گیرد (به اصطلاح قفل زمانی).

این موارد استفاده جالب بسیاری را امکان پذیر می کند:

  • بازیابی:
    یک کیف پول استاندارد با یک امضا یا چند علامت به عنوان مسیر هزینه اولیه. اما یک مکانیسم بازیابی جداگانه (یک کلید با یک دانه متفاوت، یک مولتی سیگ، یک دوست با فناوری، یک متولی) پس از 6 ماه در دسترس قرار می گیرد.
  • حاکمیت:
    شرکتی با دو مدیر می تواند یک 2 از 2 برای خزانه شرکت ایجاد کند. در صورت عدم توافق، یک وکیل مورد اعتماد می تواند پس از 6 ماه به وجوه دسترسی پیدا کند.
  • محو شدن مرحله ای :
    کیف پول به صورت 3 از 3 شروع می شود، پس از 6 ماه به 2 از 3 تبدیل می شود و پس از 9 ماه به 1 از 3 تبدیل می شود.
  • وراثت خودکار:
    مسیر بهبودی پس از 6 ماه شامل 2 از 3 فرزند از سه فرزند شما می شود. شاید راه دوم بهبودی پس از 1 سال شامل یک دفتر اسناد رسمی باشد، در صورتی که وراث نتوانند به توافق برسند.

نکته: تمام مثال‌های بالا از قفل زمانی نسبی استفاده می‌کنند که به سن سکه‌ها اشاره دارد (یعنی آخرین باری که وجوه جابجا شده است). مبادله این است که کاربر باید به خاطر داشته باشد که سکه ها را (با ارسال آنها برای خود) در صورتی که قفل زمانی نزدیک به پایان است، خرج کند.

اینها فقط چند نمونه هستند، اما باید برای متقاعد کردن خواننده کافی باشند که miniscript یک گام مهم رو به جلو در جهت تحقق پتانسیل بیت کوین به عنوان پول قابل برنامه ریزی است.

ثبت سیاست کیف پول لجر کیف پول قابل اطمینان بیت کوین

برای حساب‌های کیف پول بیت‌کوین که از کلیدهای چندگانه استفاده می‌کنند (چه چند سیگ یا راه‌حل‌های پیچیده‌تر مبتنی بر miniscript)، آموزش دستگاه برای شناسایی آدرس‌های متعلق به آن حساب بسیار مهم است. این تنها راهی است که دستگاه می تواند به کاربر کمک کند تا اطمینان حاصل کند که از آدرس های صحیح دریافت می کند یا هزینه می کند…

اعتبارسنجی خط مشی و xpub های ارسال کننده در برابر یک نسخه پشتیبان قابل اعتماد ضروری است، اما نسبتا وقت گیر است.
خبر خوب این است که فقط یک بار باید انجام شود:

هنگامی که یک خط‌مشی با نامی ثبت می‌شود (در مثال «Decaying 3of3»)، دستگاه شما می‌تواند هر زمان که چنین خط‌مشی به کار می‌رود، آن را تشخیص دهد.

علاقه مندان به جزئیات فنی می توانند اطلاعات بیشتری را در پروپوزال BIP بیابند.

پشتیبان گیری از خط مشی لجر کیف پول قابل اطمینان بیت کوین

یکی از جنبه‌های مهمی که باید به آن توجه داشت این است که در حالی که سیاست‌های چند کلیدی به زیرمجموعه‌ای از کلیدهای خصوصی اجازه می‌دهند تا تراکنش‌ها را مجاز کنند، دانش تمام کلیدهای عمومی (و خط‌مشی دقیق) مورد نیاز است.

با این حال، بر خلاف seed، پشتیبان‌گیری از خط‌مشی و کلیدهای عمومی ریسک بسیار کمتری دارد: اگر کسی آن را کشف کند، می‌تواند تمام تراکنش‌های مرتبط با آن خط‌مشی را ردیابی کند.
اگرچه این ایده آل نیست – حریم خصوصی مهم است! – به اندازه از دست دادن سکه های خود فاجعه آمیز نیست و برای مهاجمان احتمالی کمتر فریبنده است. در نتیجه، ذخیره چندین نسخه از این سیاست در کیف‌پول‌های داغ، چاپ و ذخیره آن در مکان‌های مختلف، رمزگذاری و ذخیره آن در فضای ذخیره‌سازی ابری و غیره، همه استراتژی‌های قابل اجرا هستند.

کیف پول تک امضایی بدون درب پشتی

بیایید یک قدم به عقب برگردیم. ما در مورد کیف پول‌های چند امضایی صحبت کرده‌ایم، اما اکنون برای ایجاد یک کیف پول تک امضا به اصول اولیه بازمی‌گردیم. به‌طور دقیق‌تر، ما کیف پولی می‌خواهیم که پس از مرحله راه‌اندازی اولیه، ظاهری شبیه کیف پول تک امضایی داشته باشد. با این حال، هدف ما ایجاد کیف پولی است که سازنده نتواند وجوه شما را حتی اگر مخرب باشد از آن بدزدد 😈 و دستگاه امضای سخت افزار به روش های غیرقابل پیش بینی رفتار می کند.

این رویکرد را می توان به راحتی برای کیف پول های چند امضایی تعمیم داد.

مثال‌های زیر به‌جای خط‌مشی به زبانی به نام سیاست نوشته می‌شوند. خواندن و فکر کردن در مورد خط مشی برای انسان آسان‌تر است و می‌توان آن را با ابزارهای خودکار در قالب کوتاه کامپایل کرد. در مورد مینی اسکریپت و خط مشی بیشتر بخوانید.

کیف پول سخت افزاری می تواند در مدل امنیتی استاندارد از شما محافظت کند. Miniscript می تواند از شما در مدل امنیتی ضد درپشتی محافظت کند (و خیلی بیشتر!).

گام صفر: وضعیت موجود

این سیاستی است که اکثر کاربران امروزه از آن استفاده می کنند: یک کلید واحد که از دانه تولید شده در کیف پول سخت افزاری مشتق شده است.

pk(key_ledger)

البته هیچ راهی برای اثبات عدم وجود درب پشتی وجود ندارد.

مرحله اول: آن کلیدها را دو برابر کنید.

اولین مرحله ساده است:

و (pk(key_ledger)، pk(key_client))
در اینجا، key_client بر روی ماشین کاربر تولید می‌شود، بنابراین یک کلید داغ. در اصل، این یک راه اندازی 2 از 2 چند سیگ است. جنبه کلیدی این است که کاربر زیاد با key_client تعامل نمی کند: کیف پول نرم افزاری این کلید را تولید می کند، آن را در نسخه پشتیبان کیف پول قرار می دهد و هر زمان که نیاز باشد امضا می کند (به عنوان مثال، زمانی که کاربر مشغول امضای امضاکننده سخت افزار خود است).

این در حال حاضر بسیار جالب به نظر می رسد: وجوه بدون key_client غیر قابل مصرف است، که برای فروشنده سخت افزار در دسترس نیست. حتی اگر فروشنده شرور اطلاعات کاملی از کلید موجود در دستگاه داشته باشد، باز هم قادر به جابجایی وجوه بدون هدف قرار دادن صریح کاربر نخواهد بود، برای مثال با به خطر انداختن دستگاهی که کیف پول نرم افزاری آنها را اجرا می کند.

با این حال، یک مشکل وجود دارد: در هنگام نصب کیف پول، امضاکننده سخت‌افزار تنها نهادی است که می‌تواند کلید عمومی (xpub) key_ledger مورد استفاده در کیف پول را ایجاد کند. از این رو، دستگاه می‌تواند عمداً یک xpub اشتباه ایجاد کند که توسط مهاجم کنترل می‌شود و بعداً امضاء را رد کند (یا نتواند). مسلماً، این یک سناریوی حمله نسبتاً شدید است: خالق درب پشتی نمی‌تواند وجوه را بدزدد، و بیشترین کاری که می‌تواند انجام دهد این است که کاربر را به‌صورت جداگانه هدف قرار داده و باج بخواهد («اگر نصف آن را به من بپردازید، می‌توانم به شما کمک کنم پولتان را پس بگیرید»).

واقع بینانه تر، این احتمال اشتباهات اشتباه را افزایش می دهد: اکنون دو دانه / کلید خصوصی دارید و برای اینکه بتوانید خرج کنید به هر دو نیاز دارید. هر دو را ببازید و سکه ها برای همیشه قفل می شوند.

مرحله دوم: بازیابی زمان بندی شده

ما یک کلید بازیابی جداگانه را معرفی می کنیم که فقط پس از یک قفل زمانی خاص قابل دسترسی است: and(older(25920)، pk(key_recovery))، که در آن 25920 تعداد تقریبی بلوک ها در 6 ماه است. خط مشی کامل می شود:

or( and(pk(key_ledger)، pk(key_client))، and(after(25920)، pk(key_recovery)))
این شبیه به سناریوی قبلی است، اما با یک پیچ: اگر key_ledger یا key_client به هر دلیلی در دسترس نباشد (معمولاً، از دست دادن نسخه پشتیبان اولیه!)، یک مسیر بازیابی پس از 6 ماه قابل دسترسی است.

چندین گزینه برای key_recovery وجود دارد که هر کدام دارای معاوضه های خاص خود هستند:

آ. از کلید داغ دیگری استفاده کنید. این یک راه حل عملی است تا زمانی که کاربر به یاد داشته باشد که قفل زمانی را بازنشانی کند. با این حال، اگر کلیدهای داغ به خطر بیفتند (سناریویی که به طور کلی باید کاملاً محتمل در نظر گرفته شود!)، مهاجم می‌تواند به محض انقضای قفل زمانی به وجوه دسترسی پیدا کند و مسابقه ای را با مالک قانونی آغاز کند.

ب از یک دستگاه امضای سخت افزاری جداگانه استفاده کنید. این یک راه حل قوی است و در صورت تمایل می تواند در ترکیب با یک فروشنده مختلف استفاده شود. با این حال، پیچیدگی راه اندازی و هزینه را برای کاربر از نظر تجربه کاربری افزایش می دهد.

ج از یک سرویس خارجی قابل اعتماد استفاده کنید. کیف پول نرم افزار می تواند یک xpub را از یک سرویس خارجی وارد کند و از آن به عنوان key_recovery استفاده کند. این شخص ثالث تنها در صورتی قابل اعتماد است که قفل زمانی منقضی شود، که می تواند برای برخی از کاربران یک معامله جذاب باشد.

همانطور که گفته شد، مانند هر خط مشی با قفل زمانی، مهم است که کاربر به یاد داشته باشد که سکه ها را قبل از انقضای قفل زمانی به روز کند.

مرحله سوم: شخص ثالث غیرقابل اعتماد
بیایید هر دو ایده (a) و (c) را با هم ترکیب کنیم: برای مسیر بازیابی، به یک کلید داغ محلی key_recovery_local و یک key_recovery_remote نیاز داریم که با یک سرویس نیمه مطمئن میزبانی شود. ما همچنین قفل زمانی را حفظ می کنیم.

یا(
و (pk(key_ledger)، pk(key_client))،
و(قدیمی(25920)
و (pk(key_recovery_local)، pk(key_recovery_remote))
)
)
این باعث کاهش سطح اعتماد مورد نیاز از خدمات بازیابی می شود. با این حال، ما باید احتیاط کنیم: خود سرویس می‌تواند زنجیره بلوکی را زیر نظر داشته باشد و UTXO‌های ما را شناسایی کند – در نهایت، آنها key_recovery_remote xpub را در اختیار ما قرار دادند، بنابراین می‌توانند UTXO‌هایی را که حاوی کلیدهای عمومی مشتق‌شده از key_recovery_remote هستند اسکن کنند. آنها می توانند در مورد تاریخچه مالی ما، حتی قبل از انقضای قفل زمانی، و حتی اگر هرگز از خدمات آنها استفاده نکرده باشیم، یاد بگیرند.

توجه: درختان Taproot می توانند این مشکل حفظ حریم خصوصی را برای سیاست های خاصی از بین ببرند، اما همیشه اینطور نیست و نیاز به ارزیابی دقیق بر اساس خط مشی خاص دارد.

مرحله چهارم: شخص ثالث را کور کنید 🙈

برای اینکه سرویس بازیابی اطلاعاتی درباره تاریخچه مالی ما نداشته باشد، به جای استفاده از pubkey که با ما در ارتباط است، می‌توانیم از تکنیک xpub blind که توسط mflaxman در اینجا توضیح داده شده است استفاده کنیم. به طور خلاصه، به جای استفاده از key_recovery_remote در خط مشی خود، چهار عدد تصادفی 31 بیتی a، b، c، d (عوامل کورکننده) را انتخاب می کنیم و از pubkey مشتق شده از BIP-32 زیر استفاده می کنیم:

key_recovery_remote_blind = key_recovery_remote_blind/a/b/c/d
بسیار مهم است که key_recovery_remote و عوامل کورکننده a، b، c و d را برای مراجعات بعدی به نسخه پشتیبان خود اضافه کنیم.

اگر زمانی نیاز به استفاده از سرویس بازیابی داشته باشیم، a، b، c، d را به آنها نشان خواهیم داد. تا آن زمان، آنها هیچ راهی برای کشف اینکه کلیدهای مشتق شده از key_recovery_remote آنها در زنجیره بلوکی منتشر می‌شوند، ندارند: تعداد ترکیب‌های ممکن برای 4 عامل کورکننده 2^(31*4) = 2^124 است که باعث می‌شود bruteforce همه آنها غیرممکن شود.

گام پنجم: تعداد زیاد کلیدهای داغ می تواند شما را بسوزاند 🔥

ما موفق شدیم کیف پول نرم افزاری خود را غیرقابل استفاده کنیم. با این حال، ما یک مشکل متفاوت را معرفی کردیم: هر دو شرایط هزینه از یک کلید داغ تولید شده محلی استفاده می کنند که توسط کیف پول سخت افزاری تأیید نشده است. بنابراین، اگر دستگاه میزبان به خطر بیفتد، ممکن است شما را فریب دهد تا با استفاده از pubkeys key_client و key_recovery_local خط‌مشی را ثبت کنید، اما کلیدهای خصوصی تصادفی و نامرتبط را در نسخه پشتیبان ما قرار دهید (به یاد داشته باشید، کلیدهای داغ بخشی از پشتیبان‌گیری ما هستند!).

این اساساً هر وجهی را که به کیف پول ارسال می شود غیرقابل مصرف می کند، زیرا هیچ کس کلیدهای خصوصی لازم برای امضا را کنترل نمی کند.

برای حل این مشکل چند راه حل وجود دارد:

در حین ورود، پس از چاپ نسخه پشتیبان روی کاغذ، می‌توانیم از دستگاه جداگانه‌ای استفاده کنیم تا بررسی کنیم که کلیدهای خصوصی و عمومی روی نسخه پشتیبان واقعاً مطابقت دارند. این رویکرد مشکل را از بین می برد، زیرا ما مطمئن هستیم که تمام کلیدهای مورد نیاز برای بازسازی و امضا را داریم.
ما می‌توانیم شرایط خرج کردن دیگری با قفل زمانی طولانی‌تر (9 ماه، 38880 بلوک) اضافه کنیم که فقط به یک key_ledger_failsafe از دستگاه سخت‌افزاری نیاز دارد. به این ترتیب، در بدترین سناریوی مطلق که همه چیز با شکست مواجه می‌شود، به امنیت یک دستگاه امضا برمی‌گردیم. در عملیات عادی، هرگز اجازه نمی دهیم قفل زمانی اول منقضی شود، بنابراین قفل زمانی دوم نیز منقضی نمی شود!
با رویکرد دوم، سیاست نهایی به این صورت خواهد بود

یا(
و (pk(key_ledger)، pk(key_client))،
یا(
و(قدیمی(25920)
و (pk(key_recovery_local)، pk(key_recovery_remote_blind))
)
and(older(38880)، pk(key_ledger_failsafe))
)
)
این پیکربندی کیف پول نرم افزار تمام ویژگی های امنیتی را که در ابتدا ادعا کردیم را برآورده می کند. علاوه بر این، در صورت گم شدن کلیدهای اصلی key_ledger، مسیر بازیابی را ارائه می دهد. یک ویژگی خوب برای داشتن!

ورود به کیف پول نرم افزاری غیرقابل درب پشتی

تجربه کاربر برای کیف پولی که از چنین خط مشی پیچیده ای استفاده می کند چگونه خواهد بود؟ در اینجا یک بررسی اجمالی است:

  • کاربر کیف پول نرم افزار را باز می کند و شروع به ایجاد یک حساب کاربری جدید می کند.
  • کیف پول نرم افزار از کاربر می خواهد که دستگاه امضای خود را متصل کند و xpub ها را برای key_ledger و key_ledger_failsafe بازیابی می کند.
  • کیف پول نرم افزار به طور مستقل کلید داغ key_client را تولید می کند.
  • کیف پول نرم افزار key_recovery_remote را از یک سرویس امضای مشترک دریافت می کند یا به کاربر اجازه می دهد یک کلید را به روش دیگری مشخص کند. به صورت اختیاری، key_recovery_remote_blind را با استفاده از تکنیک blinding که قبلا ذکر شد محاسبه می کند.
  • کیف پول نرم افزار یک نسخه پشتیبان از خط مشی تولید می کند که شامل خط مشی miniscript دقیق، تمام xpubs و کلید خصوصی توسعه یافته برای کلید داغ key_client است. این نسخه پشتیبان به طور ایمن ذخیره می شود (به عنوان مثال، روی کاغذ چاپ می شود یا در دستگاه جداگانه ذخیره می شود).
  • در نهایت، کیف پول نرم افزار به کاربر دستور می دهد تا خط مشی را روی دستگاه ثبت کند. کاربر نسخه پشتیبان (بر روی کاغذ یا هر رسانه ای غیر از صفحه نمایش کنترل شده توسط کیف پول نرم افزار) را بررسی می کند.

کیف پول نرم‌افزاری اکثر مراحل بالا را مدیریت می‌کند و باعث می‌شود که مشارکت کاربر بیش از تلاش مورد انتظار امروز برای راه‌اندازی کیف پول چند امضایی سنگین نباشد.

زمانی که یک UX خوب برای آن ساخته شد، نصب باید به چند دقیقه نیاز داشته باشد. پس از تکمیل، کیف پول نرم افزاری می تواند تجربه کاربری بسیار شبیه به کیف پول های تک امضایی معمولی را ارائه دهد. اینگونه مینی اسکریپت همه چیز را تغییر می دهد: با ناپدید شدن از دید کاربر!

بهبودهای Taproot لجر کیف پول قابل اطمینان بیت کوین

لجر از نسخه 2.1.0 اپلیکیشن بیت کوین که در ماه مارس منتشر شد، از miniscript پشتیبانی می کند. در حالی که پشتیبانی برای دریافت و خرج کردن از آدرس‌های taproot از زمان نرم‌افزار taproot در نوامبر 2021 فعال بود، ما اکنون در مرحله بعدی نقشه راه هستیم: پشتیبانی miniscript برای taproot.

Taproot تاثیر زیادی بر قابلیت استفاده از رویکردهای ارائه شده در این مقاله خواهد داشت. اگر مسیر هزینه اولیه یک شرط هزینه تک کلیدی باشد، وجود مسیرهای هزینه بازیابی در بلاک چین غیرقابل تشخیص خواهد بود مگر اینکه از آنها استفاده شود. این امر با حذف کامل هر گونه اثر انگشت برای مسیر هزینه های استاندارد، حریم خصوصی را تا حد زیادی بهبود می بخشد. علاوه بر این، مقیاس پذیری را بهبود می بخشد، زیرا مسیر هزینه های استاندارد تا حد امکان مقرون به صرفه می شود. این بدان معناست که به دلیل وجود مسیرهای بازیابی هیچ هزینه اضافی متحمل نخواهد شد، مگر اینکه از آنها استفاده شود. این یک ارتقای قابل توجه از تراکنش‌های SegWit است که نیاز به انتشار کل اسکریپت، از جمله همه شرایط هزینه، در طول هر هزینه دارد.

در نهایت، پروتکل‌های پیشرفته‌تر مانند MuSig2 (که اخیراً استاندارد شده است) و FROST مسیر کلیدی Taproot را افزایش می‌دهند. این پروتکل‌ها که بر اساس امضاهای Schnorr ساخته شده‌اند، امکان ایجاد یک pubkey مجموع را فراهم می‌کنند که می‌تواند برای نمایش یک n-of-n چند امضایی یا یک طرح آستانه k-of-n استفاده شود. این امکان استفاده از مسیر کلید taproot را حتی در مواردی که امروزه بیشتر با اسکریپت‌های چند علامتی خاص نشان داده می‌شوند را می‌دهد.

نتیجه گیری لجر کیف پول قابل اطمینان بیت کوین

این مقاله قسمت کوچک (اما مهم) فضای طراحی گسترده ای را که مینی اسکریپت برای کیف پول های نرم افزاری آزاد می کند، بررسی می کند.

ما نشان دادیم که چگونه می‌توان از مینی اسکریپت برای ایجاد یک کیف پول نرم‌افزاری غیرقابل درب پشتی استفاده کرد، در حالی که یک مسیر بازیابی اضافی را نیز اضافه کرد که اجازه می‌دهد از تلفات فاجعه‌بار کلید جلوگیری شود. در حالی که دستگاه‌های امضای سخت‌افزار نمی‌توانند مدل امنیتی ضد درپشتی را اجرا کنند، با پشتیبانی از miniscript، کیف پول‌های نرم‌افزاری را فعال می‌کنند که دقیقاً این کار را انجام می‌دهند!

با استفاده هوشمندانه از ترکیبی از طرح‌های چند امضایی، قفل‌های زمانی، xpubs کور و کلیدهای داغ، پیکربندی کیف پول امنی را نشان داده‌ایم که امنیت، حریم خصوصی و استحکام را متعادل می‌کند.

علاوه بر این، ما استدلال کردیم که این بدون تأثیر منفی بر تجربه کاربر امکان‌پذیر است، زیرا پیچیدگی راه‌اندازی به بار اضافی UX منجر نمی‌شود.

ما برای احتمالاتی که مینی اسکریپت برای نسل بعدی خود نگهبانی بیت کوین باز می کند هیجان زده هستیم.

سالواتوره اینگالا
مهندس بیت کوین

منبع Ledger