NDCTL-SANITIZE-DIMM(1) ndctl Manual NDCTL-SANITIZE-DIMM(1)

ndctl-sanitize-dimm - تخریب رمزنگاری‌شده یا رونویسی محتویات NVDIMM(های) مشخص‌شده

ndctl sanitize-dimm <nmem0> [<nmem1>..<nmemN>] [<options>]

دستور sanitize-dimm یک تخریب رمزنگاری‌شده از محتویات NVDIMM مشخص‌شده را انجام می‌دهد. این دستور داده‌ها و هرگونه فراداده یا بلوک‌های اطلاعاتی (info-blocks) را درهم‌ریزی (scramble) می‌کند، اما برچسب‌های فضای نام (namespace labels) را تغییر نمی‌دهد. بنابراین، فضاهای نام روی نواحی مرتبط با NVDIMM مشخص‌شده حفظ می‌شوند، اما در نهایت در حالت خام (raw) قرار خواهند گرفت.

علاوه بر این، پس از اتمام اجرای این دستور، امنیت و عبارت عبور برای NVDIMM مشخص‌شده غیرفعال می‌شود و عبارت عبور و تمامی کلیدهای مربوطه نیز از جاکلیدی (keyring) و دایرکتوری کلیدهای ndctl در مسیر /etc/ndctl/keys حذف خواهند شد.

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

<dimm>

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

-b, --bus=

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

-c, --crypto-erase

جایگزینی کلید رمزگذاری رسانه در NVDIMM که باعث می‌شود تمام داده‌های موجود با کلید جدید به عنوان متن رمزشده خوانده شوند. این کار داده‌های برچسب را تغییر نمی‌دهد. فضاهای نام به حالت خام (raw) بازمی‌گردند.

-o, --overwrite

پاک‌سازی و امحاء کامل DIMM، شامل داده‌های برچسب. این فرایند می‌تواند زمان قابل‌توجهی ببرد و دستور غیرمسدودکننده (non-blocking) است. با این گزینه، درخواست رونویسی صرفاً به NVDIMM ارسال می‌شود و تکمیل آن ناهمگام (asynchronous) است. بسته به نوع رسانه و ظرفیت، رونویسی ممکن است از ده‌ها دقیقه تا چندین ساعت طول بکشد.

-m, --master-passphrase

مشخص می‌کند که برای انجام پاک‌سازی از عبارت عبور ارشد (master passphrase) استفاده می‌شود. این گزینه فقط برای حالت crypto-erase کاربرد دارد.

-z, --zero-key

ارسال یک کلید با محموله‌ای که تماماً صفر (0) است.

--verbose

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

مشخصات روش‌های اختصاصی دستگاه اینتل (Intel DSM) نگارش‌های ۱.۷ و ۱.۸ [1] عملیات مدیریت امنیتی زیر را معرفی کرده‌اند: فعال‌سازی عبارت عبور، به‌روزرسانی عبارت عبور، بازگشایی قفل DIMM، غیرفعال‌سازی امنیت، انجماد امنیت، پاک‌سازی امن (رمزنگاری‌شده)، رونویسی و امحاء، فعال‌سازی عبارت عبور ارشد، به‌روزرسانی عبارت عبور ارشد، و پاک‌سازی امن با عبارت عبور ارشد.

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

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

فرایند امنیتی با تولید یک کلید ارشد (master key) آغاز می‌شود که برای مهر و موم کردن (رمزگذاری) عبارت عبور DIMM به کار می‌رود. می‌تواند یک کلید ارشد مشترک برای رمزگذاری عبارت عبور همه DIMMها وجود داشته باشد، یا برای هر DIMM یک کلید جداگانه تولید شود. به کلید ارشد، key-encryption-key (یا kek) نیز گفته می‌شود. kek می‌تواند توسط ماژول بستر معتمد (TPM) روی سیستم ایجاد شود، یا متناوباً از کلید ارشد سیستم به عنوان 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

بخش‌های زیر ویژگی‌های خاص هر قابلیت امنیتی را شرح می‌دهند.

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

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

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

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

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

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

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

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

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

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

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

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

ndctl-wait-overwrite(1), https://trustedcomputinggroup.org/wp-content/uploads/TCG_SWG_SIIS_Version_1_07_Revision_1_00.pdf

2026-06-30 ndctl