هوش داده های تولیدی

چگونه کیف پول Kraken با چالش‌های امنیت رمزنگاری موبایل مقابله می‌کند

تاریخ:

ما بر این باوریم که امن ترین کیف پول رمزنگاری موبایل، کیفی است که بر محدودیت های ذاتی سیستم عامل موبایل خود غلبه کند. به عنوان مثال، در iOS، CryptoKit اپل از آن پشتیبانی نمی کند منحنی بیضوی secp256k1استانداردی برای بیت کوین، اتریوم و بسیاری از بلاک چین های دیگر.

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

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

Despite the inability to perform the signing on the secure elements directly, which would offer increased protection, we have committed to providing an open-source mobile crypto wallet that prioritizes security, transparency and user control.

معماری امنیتی ما برای موارد زیر ساخته شده است:

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

مزیت منبع باز

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

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

منبع باز نرم افزار ما دو هدف اساسی را که در ابتدا برای این محصول تعیین کرده بودیم برآورده می کند: به حداقل رساندن اعتماد قابل تأیید و ممیزی:

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

تولید کلید و واردات کلید

React Native اگرچه یک ابزار قدرتمند است، اما ماژول رمزنگاری داخلی ندارد. برای پیمایش در این مورد، ما از پیاده‌سازی Pure-js (Crypto-browserify) ماژول کریپتو NodeJS استفاده کردیم. روش crypto.randomBytes() - که بایت های تصادفی واقعی مورد نیاز ما را در طول تولید کلید تولید می کند - توسط react-native-get-random-values پلی پر

React-native-get-random-values ​​از کد بومی برای استفاده از Cryptographically Secure Pseudorandom Number Generator (CSPRNG) موجود در دستگاه برای تولید اعداد تصادفی استفاده می کند. عملاً در تمام دستگاه های مدرن، این مولد اعداد تصادفی توسط یک مولد اعداد تصادفی سخت افزاری ایمن پشتیبانی می شود.

در طول اولیه سازی کیف پول، ما آنتروپی را از CSPRNG ترسیم کرده و با استفاده از بسته های npm به خوبی تثبیت شده، آن را به یک دانه یادگاری تبدیل می کنیم.BIP32, BIP39).

کلیدها تحت استاندارد BIP39 تبدیل، ذخیره و به کاربر ارائه می‌شوند، که یک روش یادگاری با قابلیت پشتیبان‌گیری آسان را با قابلیت همکاری برای اکثر کیف‌های پول در اکوسیستم ارائه می‌دهد. ویژگی واردات از بازیابی دانه های سازگار با BIP39 پشتیبانی می کند که بهترین قابلیت همکاری را در اکوسیستم فراهم می کند. 

مدیریت کلیدی 

کیف پول Kraken دارای دو مقدار مخفی است - seed و یادگاری - و چندین مقدار غیر سری (اما همچنان خصوصی) مانند آدرس کیف پول، نام کیف پول و توضیحات تراکنش ها.

مواد کلید خصوصی (seed/mnemonic) در Keychain (در iOS) و Keystore (در اندروید) ذخیره می شود. مواد کلید عمومی و داده های غیر حساس (کلیدهای عمومی توسعه یافته، آدرس ها و توضیحات) در پایگاه داده رمزگذاری شده برنامه ذخیره می شوند (با استفاده از قلمرو).

چندین کنترل امنیتی وجود دارد که از داده ها محافظت می کند:

  • قفل برنامه: رشته ای 64 بایتی که به طور تصادفی تولید می شود و در Keychain یا Keystore ذخیره می شود. دسترسی به راز با الزامات حضور کاربر - احراز هویت بیومتریک یا رمز عبور محافظت می شود.
  • کلمه عبور: توسط کاربر ارائه شده و روی دستگاه نگهداری نمی شود. درعوض، کاربر باید رمز عبور را به صورت دستی هر زمان که برنامه درخواست می کند ارائه کند. کیف پول با مراجعه به دو پرچم (is_storage_encrypted و is_seed_encrypted) ذخیره شده در Keychain یا Keystore تعیین می کند که آیا رمز عبور مورد نیاز است یا خیر. الگوریتم Argon2 به عنوان تابع مشتق کلید استفاده می شود.
  • رمزگذاری پایگاه داده: پایگاه داده (Realm) برای ذخیره داده های غیر سری استفاده می شود. داده ها با یک کلید تصادفی 64 بایتی رمزگذاری می شوند.
  • مکانیسم قفل: وارد کردن یک رمز عبور نادرست باعث تاخیر قبل از تلاش های بعدی برای رمز عبور می شود. این مکانیسم به طور موثر از حملات brute-force رمز عبور جلوگیری می کند. اطلاعات مربوط به پارامترهای قفل، مانند تعداد تلاش ها و مدت تأخیرها، به طور ایمن در Keychain یا Keystore ذخیره می شود.

کلید رمزگذاری seed، mnemonic و پایگاه داده همیشه به صورت رمزگذاری شده ذخیره می شود

  • وقتی هیچ حفاظتی فعال نیست: کلید رمزگذاری seed، mnemonic و Realm مستقیماً در Keychain یا Keystore بدون کنترل دسترسی کاربر ذخیره می‌شوند.
  • وقتی قفل برنامه فعال می شود: حافظه و seed ابتدا با راز قفل برنامه رمزگذاری می شوند و سپس به طور ایمن در Keychain یا Keystore ذخیره می شوند. کلید رمزگذاری Realm نیز مستقیماً در Keychain یا Keystore ذخیره می شود.
  • هنگامی که محافظت از رمز عبور فعال است: حافظه و seed با رمز عبور رمزگذاری می شوند، در حالی که کلید رمزگذاری Realm تنها در صورتی با رمز عبور رمزگذاری می شود که is_storage_encrypted روی true تنظیم شده باشد.
  • وقتی هم قفل برنامه و هم محافظت با رمز عبور فعال هستند: یادگاری و seed با رمز عبور (اول) و قفل برنامه (دوم) رمزگذاری می شوند. کلید رمزگذاری Realm فقط با رمز عبور رمزگذاری می شود و فقط در صورتی که is_storage_encrypted روی true تنظیم شده باشد.

استفاده از کلید

Seed/Mnemonic در Keychain یا Keystore ذخیره می شود و نقش مهمی در عملیات رمزنگاری دارد. زمانی که یک آدرس کیف پول جدید باید ایجاد شود یا یک تراکنش باید امضا شود، اطلاعات لازم مانند کلید خصوصی را از این seed استخراج می کنیم.

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

  • امضای تراکنش (ارسال توکن)
  • امضای داده WalletConnect ( رسیدگی به درخواست‌های جلسه)
  • افزودن کیف پول جدید
  • فعال کردن زنجیره‌های شبکه آزمایشی (افزودن کیف پول‌های شبکه آزمایشی)
  • نمایش یادگاری
  • تایید یادگاری
  • فعال و غیرفعال کردن قفل برنامه
  • فعال و غیرفعال کردن رمز عبور

احراز هویت بیومتریک اضافی برای عملکردهای زیر انجام می شود:

  • فعال کردن قفل برنامه
  • پاک کردن تمام داده ها
  • حذف کیف پول (اکانت)
  • فعال یا غیرفعال کردن رمز عبور (علاوه بر بازیابی قفل برنامه)
  • باز کردن برنامه
  • انتقال برنامه به پیش زمینه
  • مشاهده کلیدهای عمومی توسعه یافته
  • اتصال به یک برنامه غیرمتمرکز (dApp)

علاوه بر این، ممکن است رمز عبور برای باز کردن برنامه مورد نیاز باشد. Keychain و Keystore همیشه از طریق استفاده می شود react-native-keychain لفاف:

  • بسته بندی یک کلید جدید در Keychain یا Keystore برای هر مورد ایجاد می کند
  • Wrapper مسئول ارسال پرچم های پیکربندی صحیح برای Keychain و Keystore است
  • کیف پول همیشه از wrapper درخواست می کند که پرچم ها را به گونه ای پیکربندی کند که دستگاه برای دسترسی به کلید باید قفل آن باز شود.
  • بررسی حضور کاربر (بیومتریک) به گونه‌ای پیکربندی شده است که بر اساس زمان باشد، و بررسی برای 5 ثانیه معتبر است. بررسی حضور کاربر در هر دسترسی انجام نمی شود

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

  • کلید با Argon2id از یک رمز نرمال شده با NFC مشتق شده است
  • نمک برای Argon2id شناسه منحصر به فرد دستگاه است
  • حالت رمزگذاری AES-GCM است
  • بردار اولیه (IV) برای AES 16 بایت تصادفی است
  • تگ auth برای AES باید 16 بایت باشد

امضای معامله

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

شبیه سازی تراکنش

ما از خدمات API خارجی (مانند بیتی Blowfish و دیگران) برای بررسی سطوح احتمالی "شدت" که یک تراکنش می تواند برای کاربر به ارمغان بیاورد (امتیاز ریسک). این از صفحه بلوک کامل برای تراکنش های مخرب احتمالی (یا امضای پیام) تا هشدارهایی در مورد سطوح مختلف احتیاط که کاربر باید قبل از امضا یا تأیید یک تراکنش داشته باشد، ادامه می یابد. 

اقدامات دیگر شامل موارد زیر است:

  • تأیید اعتبار آدرس برای اطمینان از عدم ارسال به آدرس اشتباه
  • آدرس هایی که همیشه به طور کامل قابل مشاهده هستند تا اطمینان حاصل شود که کاربر هدف حملات خاصی پیرامون ترکیب آدرس نیست
  • اعتبارسنجی شبکه و هشدارهایی برای اطمینان از اینکه کاربر به شبکه اشتباهی ارسال نمی کند
  • کارمزد سلامت عقل را بررسی می کند تا مطمئن شود کاربر برای یک تراکنش بیش از حد پرداخت نمی کند

حریم خصوصی شبکه

برای محافظت از حریم خصوصی و داده‌های شخصی کاربران به‌گونه‌ای که این داده‌ها در درخواست‌های شبکه – به‌ویژه سرویس‌های شخص ثالث – درز نکنند، ما یک دروازه API برای درخواست‌های پراکسی ایجاد کرده‌ایم. این پروکسی به ما امکان می دهد درخواست های کاربر را به سرویس های شخص ثالث منتقل نکنیم و IP مشتری را برای ارائه دهندگان خارجی یا عمومی فاش نمی کند. 

این سرویس باطن اساسا یک API برای پرس و جو از داده های بلاک چین عمومی است. در معماری امنیتی کیف پول، هدف آن کپسوله کردن این عملکرد در پشت یک API مشترک در تمام بلاک چین ها است تا Kraken Wallet مجبور نباشد رفتارهای خاص بلاک چین را برای پرس و جوی داده پیاده سازی کند.

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

مفروضات امنیتی

معماری امنیتی ما بر اساس چند فرض کلیدی برای حفاظت بهینه عمل می کند. ما فرض می کنیم:

  • دستگاه کاربر روت نشده است و همچنین سیستم عامل قدیمی و مستعد آسیب پذیری های حیاتی نیست که می تواند به مهاجم اجازه دسترسی به حافظه دستگاه بدهد.
  • بسته Keychain یا Keystore محافظت کافی را ارائه می دهد
  • سیستم‌عامل موبایل جعبه‌شنی محکمی را بین فرآیندهای برنامه‌ها ارائه می‌کند و تضمین می‌کند که حافظه حاوی داده‌های حساس مانند دانه‌ها به درستی مدیریت می‌شود.

قابلیت های اضافی

  • این برنامه بر اساس این اصل عمل می کند که تنها حداقل داده هایی را که برای اجرای کیف پول نیاز دارد ذخیره می کند
  • هیچ کیت توسعه نرم افزاری (SDK) تجزیه و تحلیل شخص ثالث یا گزارش خرابی در مشتری استفاده نمی شود
    • با تلاش‌های ما برای درز ندادن هیچ داده‌ای به اشخاص ثالث، ردیابی داده‌های اضافی منطقی نیست - به این معنی که هیچ نرم‌افزار تحلیلی یا گزارش خرابی را در مشتری پیدا نخواهید کرد.
  • هیچ به‌روزرسانی هوایی (خارج از جریان به‌روزرسانی عادی AppStore/Play Store) در پایگاه کد مجاز نیست یا اجرا می‌شود.
    • کاربر می‌تواند انتظار یک نرم‌افزار کامپایل‌شده را داشته باشد که نمی‌تواند بدون رضایت او به‌روزرسانی شود
  • لیست توکن ها و سیستم شهرت
    • به منظور کمک به کاربران برای مدیریت توکن های خود، ما یک لیست و سیستم شهرت را بر اساس دارایی های ارائه شده توسط Kraken و سایر اشخاص ثالث پیاده سازی کردیم.
  • هرزنامه های NFT
    • تلاش اولیه ای که قصد داریم به بهبود آن ادامه دهیم، شناسایی حملات مربوط به هرزنامه و هرزنامه است که در آن هرزنامه به طور خودکار در پوشه کاربر بایگانی می شود.

ممیزی امنیتی خارجی

The security of our self-custody wallet was rigorously evaluated through an audit conducted by دنباله بیت ها, a well-regarded security auditing firm in the industry. This audit encompassed a detailed examination of our codebase and client architecture, aimed at identifying and addressing potential security vulnerabilities.

برای اطمینان از شفافیت و ارائه بینشی در مورد امنیت پلت فرم ما، نتایج این ممیزی برای عموم در دسترس است. این دسترسی باز به کاربران و افراد علاقه مند اجازه می دهد تا یافته های تجزیه و تحلیل امنیتی انجام شده توسط Trail of Bits را بررسی کنند. این گزارش به عنوان یک منبع مهم برای درک اقدامات امنیتی ما و تعهد ما به حفظ یک محیط امن برای کاربرانمان عمل می کند.

اولویت دادن به امنیت، شفافیت و کنترل کاربر

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

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

نقطه_img

جدیدترین اطلاعات

نقطه_img