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

ndctl-update-passphrase - به‌روزرسانی یا تنظیم گذرواژه امنیتی کلیدهای NVDIMM

ndctl update-passphrase <nmem0> [<nmem1>..<nmemN>] [<گزینه‌ها>]

به‌روزرسانی گذرواژه امنیتی برای یک یا چند NVDIMM. پیش‌نیازها برای اجرای موفقیت‌آمیز دستور:

1.کلید kek در جاکلیدی کاربری هسته بارگذاری شده باشد.
2.دستور setup-passphrase با موفقیت روی NVDIMM اجرا شده باشد.
•یا در غیر این صورت، قفل NVDIMM باز (unlocked) باشد.

داده‌های دودویی (blob) به‌روزرسانی‌شده کلید در دایرکتوری ‎/etc/ndctl/keys با فرمت نام فایل "nvdimm_<dimm-unique-id>_<hostname>.blob" ایجاد خواهند شد.

<dimm>

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

-b, --bus=

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

-k, --key_handle=

شناسه دسترسی (Handle) برای kek اصلی (کلید رمزگذاری کلید یا key-encryption-key) که برای پلمپ کردن گذرواژه(ها) برای DIMM(های) داده‌شده استفاده خواهد شد. قالب به این صورت است: <نوع کلید>:<توضیحات کلید> مانند trusted:nvdimm-master
نکته: انتظار می‌رود kek از قبل در جاکلیدی کاربر بارگذاری شده باشد.

-m, --master-passphrase

نشان می‌دهد که ما در حال مدیریت گذرواژه اصلی (master passphrase) به جای گذرواژه کاربری (user passphrase) هستیم.

-v, --verbose

نمایش پیام‌های اشکال‌زدایی (دیباگ).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2026-06-30 ndctl