ویور

لایه انتزاعی سخت‌افزار ویور (HAL) ( IWeaver.aidl ) که در اندروید ۸.۱ معرفی شد، یک رابط کاربری امن برای احراز هویت کاربر با استفاده از فاکتور دانش قفل صفحه (LSKF) مانند پین، الگو و رمز عبور فراهم می‌کند.

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

در اندروید ۹ و بالاتر، CDD 9.11.2 دستگاه‌هایی را که از StrongBox پشتیبانی می‌کنند، ملزم به ارائه سخت‌افزار امن اختصاصی می‌کند که از احراز هویت امن کاربر پشتیبانی می‌کند. پیاده‌سازی Weaver HAL با استفاده از این سخت‌افزار امن، الزام «احراز هویت امن کاربر» را برآورده می‌کند.

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

قطعات

ویور از سه جزء تشکیل شده است:

  • رابط هوش مصنوعی ویور ( IWeaver ) : مشخصات رسمی HAL. اندروید ۱۳ و پایین‌تر به جای AIDL از HIDL استفاده می‌کرد.
  • سرویس لایه انتزاعی سخت‌افزار ویور (HAL) : یک فرآیند اندروید مختص فروشنده که رابط IWeaver را پیاده‌سازی می‌کند.
  • برنامه‌ی کاربردی قابل اعتماد ویور (TA) : منطق اصلی که در یک محیط امن اجرا می‌شود. این برنامه تأیید LSKF را انجام می‌دهد و محدودیت سرعت را اعمال می‌کند. سرویس HAL با استفاده از یک کانال امن مخصوص پیاده‌سازی با TA ارتباط برقرار می‌کند.

رابط

رابط کاربری ویور، آرایه‌ای با اندازه ثابت از اسلات‌های پایدار را ارائه می‌دهد که هر کدام شامل یک کلید با اندازه ثابت و یک مقدار با اندازه ثابت هستند. هر اسلات با شناسه (ID) خود، یک عدد صحیح در بازه [0, numSlots - 1] شناسایی می‌شود. مقدار یک اسلات تنها زمانی قابل دسترسی است که کلیدی مطابق با کلید ذخیره شده ارائه شود.

رابط کاربری ویور شامل موارد زیر است:

  • getConfig() : تعداد اسلات‌ها، اندازه کلید و اندازه مقدار پشتیبانی شده توسط پیاده‌سازی را بازیابی می‌کند.
  • write() : اسلات مشخص شده را با یک جفت کلید-مقدار جدید بازنویسی می‌کند. این عملیات اتمیک است و داده‌های قبلی را برای همیشه غیرقابل بازیابی می‌کند (حذف امن).
  • read() : تلاش می‌کند تا مقدار اسلات مشخص شده را بازیابی کند. این کار تنها زمانی موفقیت‌آمیز است که مهلت زمانی محدودکننده سرعت (که توسط TA اعمال می‌شود) فعال نباشد و کلید ارائه شده دقیقاً با کلید ذخیره شده مطابقت داشته باشد.

برای مشخصات کامل رابط، به IWeaver.aidl مراجعه کنید.

استفاده توسط اندروید

وقتی پیاده‌سازی Weaver در دسترس باشد، LockSettingsService در سرور سیستم اندروید از آن برای محافظت از داده‌های کاربر استفاده می‌کند. برای هر کاربر روی دستگاه، LockSettingsService یک اسلات Weaver را مدیریت می‌کند:

  • کلید اسلات ( weaverKey ): هش LSKF کاربر. اگر کاربر قفل صفحه نداشته باشد، از یک رشته پیش‌فرض استفاده می‌شود.
  • مقدار اسلات ( weaverSecret ): یک راز رمزنگاری‌شده با آنتروپی بالا و تولید شده به صورت تصادفی.

weaverSecret طوری طراحی شده است که فقط توسط یکی از دو روش زیر قابل بازیابی باشد:

  • ارائه weaverKey صحیح به TA ویور در چارچوب سیاست محدودکننده نرخ آن.
  • به خطر انداختن محیط امنی که Weaver TA در آن اجرا می‌شود. این کار قرار است بسیار دشوار باشد.

LockSettingsService از هر دو weaverKey و weaverSecret برای رمزگذاری رمز عبور مصنوعی کاربر استفاده می‌کند. از آنجا که رمز عبور مصنوعی از فضای ذخیره‌سازی رمزگذاری‌شده‌ی اعتبارنامه (CE) کاربر برای رمزگذاری مبتنی بر فایل (FBE) و کلیدهای احراز هویت کاربر در Android Keystore محافظت می‌کند، داده‌ها تا زمانی که Weaver رمز را منتشر نکند، غیرقابل دسترس باقی می‌مانند.

ویور در مقابل دروازه‌بان

از لحاظ تاریخی، HALِ دروازه‌بان، دو نقش متمایز را در یک فراخوانی verify() انجام می‌داد:

  1. تأیید : بررسی LSKF، با محدود کردن سرعت اعمال شده توسط TEE.
  2. گواهی : صدور یک HardwareAuthToken برای اطلاع‌رسانی به KeyMint (که قبلاً Keymaster نام داشت) مبنی بر موفقیت‌آمیز بودن احراز هویت LSKF.

چرا به ویور روی آوردید؟

با معرفی توکن‌های بازنشانی رمز عبور امن در اندروید ۸.۱، «رمز عبور مصنوعی» به راز رمزنگاری اصلی تبدیل شد. دو نقشی که در بالا توضیح داده شد، اکنون توسط ثبت‌های جداگانه‌ی Gatekeeper انجام می‌شوند، یکی برای LSKF تحت userId + 100000 و دیگری برای رمز عبور مصنوعی تحت userId .

ویور برای ایفای نقش اول معرفی شد و از یک رابط HAL ساده‌تر با پشتیبانی از پیاده‌سازی‌های مبتنی بر عنصر امن (SE) استفاده می‌کرد.

ویژگی ویور دروازه‌بان
حذف امن حذف امن مورد نیاز است و پیاده‌سازی آن آسان است زیرا رابط از تعداد ثابتی از اسلات‌های با اندازه ثابت استفاده می‌کند. حذف امن الزامی نیست و پیاده‌سازی آن دشوار است زیرا رابط کاربری از تعداد نامحدودی از ثبت‌نام‌ها پشتیبانی می‌کند.
سخت‌افزار برای SEها بهینه شده، اما در TEEها نیز کار می‌کند. عملاً فقط برای TEE. پیاده‌سازی آن در SE با طراحی فعلی، مزیت امنیتی ایجاد نمی‌کند.
مدیریت خطا کدهای خطای واضح‌تر کدهای خطای مبهم. در نتیجه، صفحه قفل بین LSKF های نادرست و خرابی های نامرتبط تفاوتی قائل نمی شود.
اتمی بودن کد موجود در LockSettingsService که از Weaver استفاده می‌کند، تغییرات LSKF را به صورت اتمی انجام می‌دهد. داده‌های جدید در یک اسلات جدید Weaver نوشته می‌شوند و اسلات قدیمی فقط زمانی پاک می‌شود که انجام این کار بی‌خطر باشد. کد موجود در LockSettingsService که از Gatekeeper استفاده می‌کند، تغییرات LSKF را به صورت خودکار انجام نمی‌دهد. اگر در حین تغییر LSKF مشکلی پیش بیاید، ممکن است تمام داده‌های کاربر از بین برود.

کد مرجع

کد مرجع برای پیاده‌سازی‌های Weaver در عناصر امن سازگار با ISO/IEC7816-4 در AOSP موجود است: external/libese/ .

آزمایش

برای اعتبارسنجی پیاده‌سازی Weaver، از VtsHalWeaverTargetTest استفاده کنید:

atest VtsHalWeaverTargetTest

یا:

vts-tradefed run vts -m VtsHalWeaverTargetTest