ابتدا Vault را با گذرواژهٔ اصلی آن بسازید یا قفل آن را باز کنید. Settings ← Security (تنظیمات ← امنیت) را باز کنید، وضعیت ارائهدهنده را بررسی کنید و باز کردن قفل بیومتریک را فعال کنید. ثبتنام، احراز هویت تازهای از سیستم درخواست میکند. پس از آن، صفحهٔ ورود در کنار فرم گذرواژهٔ اصلی، باز کردن قفل با Touch ID، Windows Hello یا اثر انگشت را پیشنهاد میدهد. Disable and remove enrollment (غیرفعالسازی و حذف ثبتنام) کلید ذخیرهشدهٔ این برنامه را حذف میکند و هرگز اثر انگشتهای ثبتشده در سیستمعامل را حذف نمیکند.
گذرواژهٔ اصلی را نگه دارید: لغو، پایان مهلت، در دسترس نبودن سختافزار/keyring و ثبتنام باطلشده همگی به بازگشت به گذرواژه نیاز دارند. ثبتنام بیومتریک فقط برای همین کاربر، دستگاه و Vault محلی است. این سازوکار بازیابی یا پشتیبان نیست. بازنشانی Vault ثبتنام را باطل میکند و پروفایلهای رمزگذاریشده و اثر انگشتهای میزبان موجود را فقط پس از تأیید موجود SMAZAT حذف میکند.
| پلتفرم | احراز هویت و ذخیرهسازی | پیشنیازها و محدودیتها |
|---|---|---|
| macOS Apple Silicon | LocalAuthentication / Touch ID بومی؛ آیتم Keychain در Security.framework با biometryCurrentSet و WhenUnlockedThisDeviceOnly |
Touch ID ثبتشده، حسگر در دسترس و Keychain ورود قابل استفاده. تغییر اثر انگشتها آیتم را باطل میکند. برای بهروزرسانیهای تولیدی از امضای پایدار Developer ID استفاده کنید؛ امضای ad hoc نسخهٔ alpha میتواند اعتماد Keychain و ردیابی مجوز شبکهٔ محلی را مختل کند. |
| Windows x64 | تعامل بومی WinRT Windows Hello برای دسکتاپ، متصل به HWND اصلی؛ کلید رمزگذاریشده با DPAPI کاربر فعلی در Windows Credential Manager | اثر انگشت، چهره یا PIN پیکربندیشده در Hello. این یک باز کردن قفل برای راحتی است: تأیید Hello توسط برنامه اعمال میشود، در حالی که خود DPAPI با بیومتریک محافظت نمیشود. کد دیگری که با همان کاربر اجرا شود ممکن است اطلاعات احراز هویت را رمزگشایی کند. |
| Ubuntu x64 | اثر انگشت ثبتشدهٔ کاربر فعلی از طریق fprintd D-Bus؛ ذخیرهسازی صریح اطلاعات احراز هویت با libsecret / Secret Service | خوانندهٔ پشتیبانیشده، اثر انگشت ثبتشده، Secret Service دسکتاپ در حال اجرا و keyring پیشفرض. باز کردن قفل برای راحتی: اطلاعات احراز هویت در keyring از نظر رمزنگاری به راستیآزمایی اثر انگشت وابسته نیست. هیچ بازگشتی به basic_text یا فایل متن ساده وجود ندارد. |
در Ubuntu، بستههای اختیاری محیط اجرا عبارتاند از python3-gi، gir1.2-secret-1، gnome-keyring (یا Secret Service سازگار دیگر) و fprintd. بستههای ناموجود را با مدیر بستهٔ معمول سیستمعامل نصب کنید و سپس اثر انگشت را در تنظیمات سیستمعامل ثبت کنید. احراز هویت از کاربر فعلی استفاده میکند و به root نیاز ندارد و PAM را تغییر نمیدهد. نشست SSH بدون رابط گرافیکی و بدون keyring دسکتاپ «در دسترس نیست» گزارش میکند؛ کلید را بیصدا جای دیگری ذخیره نمیکند.
قواعد قفل
قفل خودکار برای نصبهای موجود خاموش است. با فعالسازی، بهطور پیشفرض 15 دقیقه انتخاب میشود؛ مقادیر پشتیبانیشده Never (هرگز)، 1، 5، 10، 15، 30 و 60 دقیقهاند. ورودی صفحهکلید و ماوس در پنجرههای برنامه فعالیت به شمار میآید؛ خروجی ورودی SSH نه. قفل اختیاری هنگام از دست رفتن تمرکز، پنجرههای افزونهٔ برنامه را بخشی از برنامه میداند و اجازه میدهد پیام احراز هویت سیستم که در حال انجام است کامل شود. تغییر این قواعد به گذرواژهٔ اصلی نیاز دارد.
هر قفل Vault، از جمله قفل ناشی از عدم فعالیت و از دست رفتن تمرکز، نشستهای فعال SSH را قطع میکند، افزونهها را میبندد و عیبیابی را متوقف میکند. پیش از قفل کردن، ویرایشهای راهدور را ذخیره کنید. این کار رفتار قفل دستی موجود را حفظ میکند؛ پس از قفل، هیچ اطلاعات احراز هویت SSH در اختیار افزونههای پسزمینه نمیماند.
سیاست اختیاری عملیات حساس برای حذف پروفایل، نصب/حذف افزونه، اجرای نصبکننده و بازنشانی Vault باز، احراز هویت تازهٔ سیستم را درخواست میکند. فرمانهای ترمینال راهدور و ویرایش فایل توسط افزونهها خارج از این سیاستاند. این سیاست جایگزین مجوزدهی سرور SSH نمیشود. اگر ارائهدهنده از کار افتاد، با گذرواژهٔ اصلی قفل را باز کنید و سیاست را با همان گذرواژه تغییر دهید. بازنشانی همچنان از صفحهٔ بازیابی قفلشده و پس از تأیید مخرب آن در دسترس است.
طراحی Vault و IPC
Vault نسخهٔ v1 موجود همچنان از AES-256-GCM با scrypt استفاده میکند؛ ثبتنام فایلهای آن را بازنویسی نمیکند و طرح آن را تغییر نمیدهد. فقط یک نسخه از کلید مشتقشدهٔ 32 بایتی آن به مخزن اطلاعات احراز هویت سیستمعامل میرود. گذرواژهٔ اصلی بهصورت متن ساده هرگز ذخیره نمیشود. فرادادهٔ محلی ثبتنام شامل شناسهٔ تصادفی اطلاعات احراز هویت، ارائهدهنده و پیوند SHA-256 به فرادادهٔ تغییرناپذیر Vault است. کلید بازیابیشده پیش از باز شدن نشست باید از رمزگشایی احراز اصالتشده عبور کند. بافرهای فرایند اصلی پس از استفاده پاک میشوند؛ رشتههای پروتکل بومی حافظهٔ موقت فرایندند و ادعایی برای پاکسازی کامل حافظه در محیطهای اجرای مدیریتشده نیستند.
برنامهٔ کمکی (helper) از طریق لولههای خصوصی و محدود stdin/stdout ارتباط برقرار میکند، فرمان پوسته نمیپذیرد، مهلت احراز هویت دارد و کدهای خطای پالایششده برمیگرداند. برنامههای کمکی بیرون از ASAR در resources/biometrics بستهبندی میشوند؛ آنها فایلهای اجرایی بومی مستقلاند، پس به ماژول بومی مبتنی بر ABI در Electron نیازی نیست. برنامهٔ کمکی Linux از Python و GI سیستم استفاده میکند. اشیای بومی و کلیدهای مشتقشده هرگز از پل renderer/افزونه عبور نمیکنند. IPC بیومتریک پنجرهٔ اصلی زنده و قاب اصلی آن را اعتبارسنجی میکند؛ افزونهها نمیتوانند آن را فراخوانی کنند. قفل صریح، کارهای در انتظار باز کردن قفل با بیومتریک و گذرواژه را لغو میکند تا تأیید دیرهنگام نتواند Vault را دوباره باز کند. حذف ثبتنام، پیوند محلی آن را حتی اگر مخزن سیستمعامل آفلاین باشد باطل میکند؛ مخزنی که در دسترس نیست ممکن است یک اطلاعات احراز هویت یتیم و غیرقابل استفاده را نگه دارد.
ساخت و راستیآزمایی
npm run biometrics:build برنامهٔ کمکی را برای پلتفرم میزبان آماده میکند؛ آغاز توسعه و آمادهسازی انتشار آن را بهطور خودکار فراخوانی میکنند. macOS به Swift/Apple SDK همراه با Security و LocalAuthentication نیاز دارد؛ Windows به Visual Studio C++ Build Tools، Windows SDK و C++/WinRT نیاز دارد؛ Linux برنامهٔ کمکی Python را کپی میکند. هیچ وابستگی جدید npm اضافه نشده است. روی هر سیستمعامل مقصد بهصورت بومی بسازید. برنامهٔ کمکی macOS در امضای بازگشتی بسته گنجانده میشود؛ به مجوز App Sandbox نیاز ندارد، زیرا این برنامهٔ دسکتاپ در sandbox اجرا نمیشود. توزیع تولیدی macOS همچنان به امضای Developer ID و تأیید (notarization) نیاز دارد، مستقل از امضاهای انتشار OpenPGP.
npm test، npm run test:biometrics:ui و npm run test:diagnostics:ui را اجرا کنید. آزمونهای Node بیومتریک و آزمون دود جداشدهٔ رابط کاربری از یک مبدل شبیهسازیشدهٔ سیستمعامل استفاده میکنند تا موفقیت، رد/لغو، کلیدهای نادرست، نبود سختافزار/ثبتنام، بازنشانی، پایان مهلت و نتایج دیرهنگام، در دسترس نبودن keyring در Linux، خطاهای اطلاعات احراز هویت سیستمعامل، پاسخهای Windows تأییدشده با PIN، تغییرات ثبتنام در macOS، سازگاری با Vault موجود، جداسازی IPC و پاکسازی SSH را پوشش دهند. این کار احراز هویت موفق روی سختافزار را اثبات نمیکند.
کامپایل بومی روی macOS arm64 و Windows x64 راستیآزمایی شده است. macOS در دسترس بودن Touch ID را گزارش میکند؛ ماشین مجازی Windows در دسترس نبودن Hello را گزارش میکند. ثبت اثر انگشت/چهره/PIN، بازیابی واقعی کلید محافظتشده، لغو گفتوگوی سیستمعامل و باطل شدن در اثر تغییر ثبتنام همچنان به آزمایش تعاملی سختافزاری روی هر سیستم پشتیبانیشده نیاز دارند. برنامهٔ کمکی Linux باید افزون بر این روی دسکتاپی با خوانندهٔ fprintd پشتیبانیشده آزمایش شود؛ ماشین مجازی بدون رابط گرافیکی نمیتواند این راستیآزمایی را اثبات کند.
منابع پلتفرم: کنترل دسترسی بیومتریک اپل، تعامل Hello در دسکتاپ Windows، چرخهٔ عمر دستگاه در fprintd، مشخصات Secret Service.
دسترسی SSH به شبکهٔ محلی در macOS
اگر همهٔ پروفایلهای SSH محلی با connect EHOSTUNREACH شکست میخورند اما همان اتصال در Terminal کار میکند، System Settings ← Privacy & Security ← Local Network ← CH-J Server Manager (تنظیمات سیستم ← حریم خصوصی و امنیت ← شبکهٔ محلی) را بررسی کنید، دسترسی را مجاز کنید، برنامه را کاملاً ببندید و دوباره باز کنید. اگر از پیش فعال است، مجوز آن را خاموش و روشن کنید و دوباره راهاندازی کنید. مسیریابی، Wi-Fi/Ethernet و VPN را نیز بررسی کنید: این خطا بهتنهایی مدرکی بر رد دسترسی بهدلیل حریم خصوصی نیست. بهخاطر این خطا Vault را بازنشانی نکنید و اثر انگشتهای مورد اعتماد SSH را دور نریزید.
برنامه NSLocalNetworkUsageDescription را اعلام میکند و برای خطاهای مجوز/مسیر شبکه در macOS راهنمای بومیسازیشده ارائه میدهد. برنامه نمیتواند خودش به خود مجوز بدهد. اپل هویت امضای صادرشده توسط اپل را توصیه میکند تا macOS بتواند حریم خصوصی شبکه را در نسخههای مختلف بهطور قابل اعتماد ردیابی کند؛ نسخههای alpha فعلی با امضای ad hoc همچنان این محدودیت را دارند. راهنمای اپل دربارهٔ حریم خصوصی شبکهٔ محلی را ببینید.
نماد برنامه در Ubuntu
بستههای Debian نماد موجود CH-J را در اندازههای استاندارد hicolor (16–512 px) همراه با مدخل دسکتاپ و کلاس پنجرهٔ Electron متناظر نصب میکنند. پنجرهٔ اصلی نیز هنگام ساخته شدن دوباره نماد را دریافت میکند. پس از بهروزرسانی یک اجراکنندهٔ قدیمی سنجاقشده، سنجاق آن را بردارید و برنامهٔ تازه نصبشده را سنجاق کنید؛ خروج و ورود دوباره به دسکتاپ میتواند حافظهٔ نهان قدیمی اجراکنندههای GNOME را تازه کند.