NDCTL-REMOVE-PASSPHRASE(1) ndctl Manual NDCTL-REMOVE-PASSPHRASE(1)

ndctl-remove-passphrase - جلوگیری از قفل شدن DIMM هنگام قطع برق و بی‌نیازی به عبارت عبور برای دسترسی به رسانه

ndctl remove-passphrase <nmem0> [<nmem1>..<nmemN>] [<options>]

جستجوی دسته‌کلید (keyring) کاربر برای یافتن عبارت عبور رمزگذاری‌شدهٔ NVDIMM مورد نظر. در صورت پیدا نشدن، برای بارگذاری حباب داده (blob) عبارت عبور تلاش می‌شود. پس از غیرفعال‌سازی عبارت عبور، شناسهٔ key-ID از keyring و همچنین blob عبارت عبور از سیستم فایل حذف می‌شود.

<dimm>

نام دستگاه nmemX یا شماره شناسه dimm. عملیات را به dimm(های) مشخص‌شده محدود می‌کند. کلمهٔ کلیدی all را می‌توان برای مشخص کردن عدم وجود هرگونه محدودیت تعیین کرد، هرچند این کار معادل مشخص نکردن گزینهٔ --dimm است.

-b, --bus=

شماره شناسه گذرگاه (bus id) یا یک رشتهٔ ارائه‌دهنده (مانند "ACPI.NFIT"). عملیات را به گذرگاه(های) مشخص‌شده محدود می‌کند. کلمهٔ کلیدی all را می‌توان برای مشخص کردن عدم وجود هرگونه محدودیت تعیین کرد، هرچند این کار همانند تعیین نکردن گزینهٔ --bus است.

-v, --verbose

نمایش پیام‌های اشکال‌زدایی.

-m, --master-passphrase

نشان می‌دهد که به جای عبارت عبور کاربر، عبارت عبور اصلی (master passphrase) مدیریت می‌شود.

مشخصات نگارش‌های ۱.۷ و ۱.۸ روش‌های خاص دستگاه اینتل (Intel DSM) [1] عملیات مدیریت امنیت زیر را معرفی کرد: فعال‌سازی عبارت عبور (enable passphrase)، به‌روزرسانی عبارت عبور (update passphrase)، باز کردن قفل DIMM (unlock DIMM)، غیرفعال‌سازی امنیت (disable security)، انجماد امنیت (freeze security)، پاک‌سازی امن رمزشناختی (secure (crypto) erase)، رونویسی (overwrite)، فعال‌سازی عبارت عبور اصلی (master passphrase enable)، به‌روزرسانی عبارت عبور اصلی (master passphrase update) و پاک‌سازی امن با عبارت عبور اصلی (master passphrase secure erase).

مدیریت امنیت برای NVDIMMها از دو بخش تشکیل شده است. بخش قدامی (front end) از چارچوب مدیریت کلید لینوکس (کلیدهای مورد اعتماد و رمزگذاری‌شده [2]) برای ذخیره عبارات عبور رمزگذاری‌شده در دسته‌کلید (keyring) مدیریت‌شده توسط هسته استفاده می‌کند. رابط کاربری این بخش ابزار keyutils است که از APIهای مدیریت کلید در هسته لینوکس استفاده می‌کند. بخش پسین (back end) بار داده رمزگشایی‌شده (که همان عبارت عبور DIMM است) را دریافت کرده و آن را به DIMM منتقل می‌کند.

برخلاف سایر DSMها که توسط libndctl ایجاد شده و از طریق یک ioctl به هسته ارسال می‌شوند، DSMهای امنیتی از طریق صفت sysfs با نام security زیر دستگاه dimm مدیریت می‌شوند. یک key-ID در صفت security نوشته می‌شود و هسته داده‌های کلید مرتبط را از دسته‌کلید کاربر (user keyring) که توسط هسته نگهداری می‌شود دریافت می‌کند.

فرایند امنیتی با ایجاد یک master key آغاز می‌شود که برای مهروموم (رمزگذاری) عبارت عبور DIMM به کار می‌رود. می‌تواند یک master key مشترک وجود داشته باشد که برای رمزگذاری عبارت عبور همهٔ DIMMها استفاده شود، یا یک کلید مجزا برای هر DIMM ایجاد گردد. master key همچنین با عنوان key-encryption-key (kek) نیز شناخته می‌شود. kek می‌تواند توسط TPM (ماژول بستر قابل اعتماد) روی سیستم ایجاد شود، یا به عنوان جایگزین، System Master Key نیز می‌تواند به عنوان kek مورد استفاده قرار گیرد.

برای اهداف آزمایشی، یک کلید کاربر با بار دادهٔ تصادفی نیز می‌تواند به عنوان یک kek استفاده شود. برای جزئیات به [2] مراجعه کنید. برای انجام هرگونه عملیات امنیتی، انتظار می‌رود که kek به دسته‌کلید کاربر در هسته اضافه شده باشد، همان‌طور که در مثال زیر نشان داده شده است:

# keyctl show
Session Keyring
 736023423 --alswrv      0     0  keyring: _ses
 675104189 --alswrv      0 65534   \_ keyring: _uid.0
 680187394 --alswrv      0     0       \_ trusted: nvdimm-master

پیش از انجام هر یک از عملیات‌های امنیتی، تمام ناحیه‌ها (regions) مرتبط با DIMM مورد نظر باید غیرفعال شوند. برای عملیات overwrite، علاوه بر regions، دستگاه dimm نیز باید غیرفعال شود.

[1] http://pmem.io/documents/NVDIMM_DSM_Interface-V1.8.pdf
[2] https://www.kernel.org/doc/Documentation/security/keys/trusted-encrypted.rst

زیربخش‌های زیر ویژگی‌های خاص هر قابلیت امنیتی را شرح می‌دهند..SS "قفل‌گشایی (UNLOCK)"

قفل‌گشایی توسط هسته انجام می‌شود، با این حال یک مرحله آماده‌سازی باید پیش از اینکه DSM قفل‌گشایی بتواند توسط هسته صادر شود، رخ دهد. انتظار می‌رود که از درون initramfs، یک دستور راه‌اندازی (ndctl load-keys) پیش از بارگذاری ماژول libnvdimm توسط modprobe اجرا شود. این دستور kek و عبارت‌های عبور رمزگذاری‌شده را به جاکلیدی کاربر هسته تزریق می‌کند. در طول مرحله probe درایور libnvdimm، اقدامات زیر انجام خواهد شد:

1.بررسی وضعیت امنیتی دستگاه و بررسی اینکه آیا DIMM قفل است یا خیر
2.درخواست عبارت عبور رمزگذاری‌شده مربوطه از جاکلیدی کاربر هسته
3.استفاده از kek برای رمزگشایی عبارت عبور
4.ایجاد DSM قفل‌گشایی، رونوشت از بار مفید (payload) رمزگشایی‌شده به درون DSM
5.صدور DSM برای قفل‌گشایی DIMM

اگر DIMM از قبل قفل‌گشایی شده باشد، هسته تلاش خواهد کرد تا عبارت عبور را مجدداً اعتبارسنجی کند. اگر اعتبارسنجی مجدد عبارت عبور ناموفق باشد، هسته امنیت را منجمد (freeze) کرده و هرگونه تغییر بعدی در پیکربندی امنیتی را غیرمجاز می‌کند. یک پارامتر ماژول هسته برای نادیده‌گرفتن (override) این رفتار در دسترس است.

برای راه‌اندازی عبارت عبور یک DIMM، انتظار می‌رود که kek مورد استفاده در جاکلیدی کاربر هسته موجود باشد. کلید kek عبارت عبور DIMM را با استفاده از قالب کلید enc32 رمزگذاری می‌کند. عبارت عبور متن آشکار (plaintext) هرگز توسط کاربر ارائه نمی‌شود و برای او قابل مشاهده نیست. در عوض، به‌طور تصادفی توسط هسته تولید می‌شود و فضای کاربری (userspace) به آن دسترسی ندارد. پس از رمزگذاری، یک بلاب باینری از عبارت عبور در دایرکتوری ذخیره‌سازی بلاب عبارت عبور (/etc/ndctl/keys) نوشته می‌شود. مسئولیت پشتیبان‌گیری از بلاب‌های عبارت عبور در مکانی امن بر عهده کاربر است.

عملیات به‌روزرسانی عبارت عبور کاربر از همان دستور DSM مربوط به فعال‌سازی عبارت عبور کاربر استفاده می‌کند. بیشتر کار در سمت مدیریت کلید انجام می‌شود. کاربر این گزینه را دارد که یک kek جدید برای عبارت عبور جدید ارائه دهد، اما ادامه استفاده از kek موجود نیز قابل قبول است. عملیات زیر برای update-passphrase انجام می‌شود:

1.حذف عبارت عبور رمزگذاری‌شده از جاکلیدی کاربر هسته.
2.تغییر نام بلاب عبارت عبور به old.
3.بارگذاری این بلاب عبارت عبور قدیمی در جاکلیدی با نام "old".
4.ایجاد عبارت عبور جدید و رمزگذاری آن با kek.
5.ارسال DSM به همراه عبارت‌های عبور رمزگشایی‌شده قدیم و جدید.
6.حذف عبارت عبور قدیم و بلاب عبارت عبور از جاکلیدی.

شناسه کلید (key-ID) عبارت عبوری که باید حذف شود در sysfs نوشته می‌شود. سپس هسته DSM را برای غیرفعال کردن امنیت ارسال می‌کند، عبارت عبور از keyring حذف شده و داده باینری (blob) مرتبط با عبارت عبور پاک می‌شود.

این عملیات مشابه remove-passphrase است. هسته قبل و بعد از این عملیات، یک دستورالعمل WBINVD صادر می‌کند تا اطمینان حاصل شود که هیچ داده‌ای بر اثر حافظه نهان (CPU cache) قدیمی دچار خرابی نمی‌شود. برای انجام این عملیات، از دستور sanitize-dimm ابزار ndctl به همراه گزینه --crypto-erase استفاده کنید.

این عملیات با استفاده از گزینه --overwrite برای دستور sanitize-dimm در ndctl فراخوانی می‌شود. عملیات بازنویسی کل NVDIMM را پاک می‌کند. این عملیات می‌تواند زمان قابل‌توجهی ببرد. نکته: بازگشت موفقیت‌آمیز دستور صرفاً به این معناست که بازنویسی با موفقیت آغاز شده است، نه اینکه بازنویسی تکمیل شده باشد. پس از آن، می‌توان از ndctl wait-overwrite برای انتظار کشیدن تا اتمام NVDIMMهایی که در حال انجام بازنویسی هستند استفاده کرد. پس از تکمیل موفقیت‌آمیز یک بازنویسی، دستورالعمل WBINVD توسط هسته صادر می‌شود. اگر هر دو گزینه --crypto-erase و --overwrite مشخص شده باشند، عملیات crypto-erase پیش از بازنویسی انجام می‌شود.

این عملیات نیازی به عبارت عبور ندارد. این کار باعث می‌شود هر دستور امنیتی دیگری به‌جز پرس‌وجوی وضعیت (status query)، تا راه‌اندازی مجدد (بوت) بعدی قفل شود.

این عملیات‌ها مشابه فعال‌سازی و به‌روزرسانی عبارت عبور کاربر هستند. تنها تفاوت این است که از عبارت عبور متفاوتی استفاده می‌شود. عبارت عبور اصلی هیچ ارتباطی با کلید اصلی (kek) که برای رمزنگاری هر یک از عبارات عبور استفاده می‌شود ندارد.

کپی‌رایت © 2016 - 2022، Intel Corporation. مجوز GPLv2: گنو GPL نسخه ۲ http://gnu.org/licenses/gpl.html. این نرم‌افزار آزاد است: شما برای تغییر و توزیع مجدد آن آزاد هستید. هیچ ضمانتی وجود ندارد، تا حدی که قانون اجازه می‌دهد.

ndctl-setup-passphrase(1), ndctl-update-passphrase(1)

2026-06-30 ndctl