| CRYPTSETUP(8) | دستورهای مدیریتی سیستم | CRYPTSETUP(8) |
نام (NAME)
cryptsetup - مدیریت دستگاههای رمزنگاریشده دیسک با dm-crypt
خلاصه دستور (SYNOPSIS)
cryptsetup [گزینهها] عملکرد [آرگومانهای عملکرد]
توضیحات (DESCRIPTION)
ابزار cryptsetup برای راهاندازی و پیکربندی آسان نگاشتهای مدیریتشده با dm-crypt در device-mapper به کار میرود. این نگاشتها شامل حجمهای ساده dm-crypt و حجمهای LUKS هستند. تفاوت در این است که LUKS از یک هدر فراداده استفاده میکند و بنابراین امکانات بیشتری نسبت به dm-crypt ساده ارائه میدهد. از سوی دیگر، این هدر آشکار بوده و در معرض آسیب یا رونویسی قرار دارد.
علاوه بر این، cryptsetup پشتیبانی محدودی از حجمهای loop-AES، حجمهای سازگار با TrueCrypt، VeraCrypt، BitLocker و FileVault2 و همچنین رمزنگاری مبتنی بر سختافزار روی درایوهای دارای قابلیت OPAL فراهم میکند.
برای اطلاعات بیشتر در مورد هر عملکرد خاص در cryptsetup به cryptsetup-<action>(8) مراجعه کنید، که در آن <action> نام عملکرد cryptsetup است.
عملکردهای پایه (BASIC ACTIONS)
موارد زیر عملکردهای معتبر برای تمام انواع دستگاههای پشتیبانیشده هستند.
باز کردن (OPEN)
open <device> <name> --type <device_type>
دستگاهی
با نام <name> را
با تکیه بر
دستگاه <device>
باز میکند
(یک نگاشت
ایجاد
میکند).
نگاه کنید
به cryptsetup-open(8).
بستن (CLOSE)
close <name>
نگاشت
موجود <name> را
حذف کرده و
کلید را از
حافظه هسته
پاک میکند.
نگاه کنید
به cryptsetup-close(8).
وضعیت (STATUS)
status <name>
وضعیت
نگاشت <name> را
گزارش
میدهد.
نگاه کنید
به cryptsetup-status(8).
تغییر اندازه (RESIZE)
resize <name>
اندازه
نگاشت فعال
<name> را تغییر
میدهد.
نگاه کنید
به cryptsetup-resize(8).
تازهسازی (REFRESH)
refresh <name>
پارامترهای
نگاشت فعال
<name> را
تازهسازی
میکند.
نگاه کنید
به cryptsetup-refresh(8).
رمزنگاری مجدد (REENCRYPT)
reencrypt <device> or --active-name <name> [<new_name>]
رمزنگاری
مجدد
دستگاه LUKS را
اجرا
میکند.
نگاه کنید
به cryptsetup-reencrypt(8).
حالت ساده (PLAIN MODE)
حالت ساده dm-crypt دستگاه را سکتور به سکتور با یک هش ساده و بدون Salt از عبارت عبور رمزنگاری میکند. هیچ بررسی اعتباری انجام نمیشود و هیچ فرادادهای به کار نمیرود. هیچ عملیات قالببندی اولیهای وجود ندارد. هنگامی که دستگاه خام نگاشت (باز) شد، عملیات معمول دستگاهها روی دستگاه نگاشتشده قابل انجام است، از جمله ایجاد سیستمفایل. دستگاههای نگاشتشده معمولاً در مسیر /dev/mapper/<name> قرار میگیرند.
موارد زیر عملکردهای معتبر برای دستگاههای نوع ساده (plain) هستند:
باز کردن (OPEN)
open --type plain <device> <name>
create <name> <device> (نحو
منسوخشده)
دستگاهی
با نام <name> را
با تکیه بر
دستگاه <device>
باز میکند
(یک نگاشت
ایجاد
میکند).
نگاه کنید
به cryptsetup-open(8).
افزونه لوکس (LUKS EXTENSION)
استاندارد LUKS (یا Linux Unified Key Setup) یک استاندارد برای رمزنگاری دیسک است. این افزونه یک هدر استانداردشده را در آغاز دستگاه، یک ناحیه اسلات کلید درست در پشت هدر، و ناحیه دادههای اصلی را پشت سر آن اضافه میکند. کل این مجموعه یک ’ظرف LUKS’ (یا LUKS container) نامیده میشود. دستگاهی که یک ظرف LUKS روی آن قرار دارد ’دستگاه LUKS’ نام دارد. در بیشتر موارد، هر دو اصطلاح را میتوان به جای یکدیگر به کار برد. اما توجه داشته باشید هنگامی که هدر LUKS در یک آفست غیرصفر از یک دستگاه قرار دارد، آن دستگاه دیگر یک دستگاه LUKS نیست، بلکه یک ظرف LUKS در یک آفست مشخص درون آن ذخیره شده است.
سامانه LUKS میتواند چندین عبارت عبور را مدیریت کند که هر یک به طور جداگانه قابل ابطال یا تغییر هستند و به دلیل استفاده از خطوط ضد جرمشناسی (anti-forensic stripes) میتوان آنها را با امنیت کامل از روی رسانه ماندگار پاک کرد. عبارتهای عبور در برابر حملات جستجوی فراگیر (brute-force) و فرهنگ لغت توسط توابع مشتقگیری کلید مبتنی بر گذرواژه (PBKDF) محافظت میشوند.
قالب LUKS2 نسخه جدیدی از ساختار هدر است که امکانات بیشتری از جمله الگوریتمهای مختلف PBKDF یا رمزنگاری احرازشده (authenticated encryption) را فراهم میکند. اگر در دستور luksFormat گزینه --type luks2 را مشخص کنید، میتوانید دستگاه را با هدر LUKS2 قالببندی نمایید. برای فعالسازی، این ساختار از قبل به طور خودکار شناسایی میشود.
هر عبارت عبور، که در این سند کلید نیز نامیده میشود، با یکی از ۸ اسلات کلید مرتبط است. عملیات کلیدی که اسلات مشخصی را تعیین نکنند، روی نخستین اسلاتی که با عبارت عبور ارائهشده مطابقت دارد یا در صورت افزودن عبارت عبور جدید، روی نخستین اسلات خالی اعمال میشوند.
پارامتر <device> میتواند با استفاده از شناسه UUID مربوط به LUKS در قالب UUID=<uuid> نیز مشخص شود. تبدیل به نام دستگاه واقعی از طریق پیوندهای نمادین در دایرکتوری /dev/disk/by-uuid انجام میشود.
برای تعیین یک هدر جداشده (detached header)، پارامتر --header میتواند در تمام دستورات LUKS استفاده شود و همواره بر پارامتر مکانی <device> اولویت دارد.
موارد زیر عملکردهای معتبر LUKS هستند:
قالببندی (FORMAT)
luksFormat <device> [<key file>]
یک
پارتیشن LUKS
را
مقداردهی
اولیه کرده
و عبارت
عبور اولیه
را تنظیم
میکند
(برای اسلات
کلید ۰).
نگاه کنید
به cryptsetup-luksFormat(8).
باز کردن (OPEN)
open --type luks <device> <name>
luksOpen <device> <name> (نحو
قدیمی)
دستگاه LUKS
مشخصشده
با <device> را باز
کرده و پس از
اعتبارسنجی
موفق عبارت
عبور
ارائهشده،
یک نگاشت به
نام <name> برپا
میکند.
نگاه کنید
به cryptsetup-open(8).
تعلیق (SUSPEND)
luksSuspend <name>
یک دستگاه
فعال را
معلق
میکند
(تمام
عملیات
ورودی/خروجی
مسدود شده و
دسترسیها
به دستگاه
به طور
نامحدود
منتظر
میمانند) و
کلید
رمزنگاری
را از حافظه
هسته پاک
میکند.
نگاه کنید
به cryptsetup-luksSuspend(8).
ازسرگیری (RESUME)
luksResume <name>
دستگاه
معلقشده
را از سر
گرفته و
کلید
رمزنگاری
را مجدداً
برقرار
میکند.
نگاه کنید
به cryptsetup-luksResume(8).
افزودن کلید (ADD KEY)
luksAddKey <device> [<key file with new key>]
یک عبارت
عبور جدید
را با
استفاده از
یک عبارت
عبور موجود
اضافه
میکند.
نگاه کنید
به cryptsetup-luksAddKey(8).
حذف کلید (REMOVE KEY)
luksRemoveKey <device> [<key file with passphrase to be removed>]
عبارت
عبور
ارائهشده
را از
دستگاه LUKS
حذف میکند.
نگاه کنید
به cryptsetup-luksRemoveKey(8).
تغییر کلید (CHANGE KEY)
luksChangeKey <device> [<new key file>]
یک عبارت
عبور موجود
را تغییر
میدهد.
نگاه کنید
به cryptsetup-luksChangeKey(8).
تبدیل کلید (CONVERT KEY)
luksConvertKey <device>
یک اسلات
کلید LUKS2
موجود را به
پارامترهای
جدید PBKDF
تبدیل
میکند.
نگاه کنید
به cryptsetup-luksConvertKey(8).
ابطال اسلات (KILL SLOT)
luksKillSlot <device> <key slot number>
اسلات
کلید شماره
<key slot> را از
دستگاه LUKS به
طور کامل
پاک و نابود
میکند.
نگاه کنید
به cryptsetup-luksKillSlot(8).
پاکسازی کامل (ERASE)
erase <device>
luksErase <device> (نحو
قدیمی)
تمام
اسلاتهای
کلید را
پاکسازی
کرده و ظرف LUKS
را برای
همیشه
غیرقابل
دسترس
میسازد.
نگاه کنید
به cryptsetup-erase(8).
شناسه یکتا (UUID)
luksUUID <device>
شناسه UUID یک
دستگاه LUKS را
چاپ کرده یا
تنظیم
میکند.
نگاه کنید
به cryptsetup-luksUUID(8).
بررسی لوکس بودن (IS LUKS)
isLuks <device>
اگر <device> یک
دستگاه LUKS
باشد مقدار
درست (true) و در
غیر این
صورت
نادرست (false)
بازمیگرداند.
نگاه کنید
به cryptsetup-isLuks(8).
تخلیه اطلاعات (DUMP)
luksDump <device>
اطلاعات
هدر یک
دستگاه LUKS را
استخراج
کرده و
نمایش
میدهد.
نگاه کنید
به cryptsetup-luksDump(8).
پشتیبانگیری از هدر (HEADER BACKUP)
luksHeaderBackup <device> --header-backup-file <file>
یک نسخه
پشتیبان
باینری از
هدر LUKS و
ناحیه
اسلاتهای
کلید ذخیره
میکند.
نگاه کنید
به cryptsetup-luksHeaderBackup(8).
بازیابی هدر (HEADER RESTORE)
luksHeaderRestore <device> --header-backup-file <file>
یک نسخه
پشتیبان
باینری از
هدر LUKS و
ناحیه
اسلاتهای
کلید را از
فایل
مشخصشده
بازیابی
میکند.
نگاه کنید
به cryptsetup-luksHeaderRestore(8).
توکن (TOKEN)
token <add|remove|import|export> <device>
اشیاء
توکن مورد
استفاده
برای
دریافت
عبارتهای
عبور را
مدیریت
میکند.
نگاه کنید
به cryptsetup-token(8).
تبدیل فرمت (CONVERT)
convert <device> --type <format>
در صورت
امکان،
دستگاه را
بین
قالبهای LUKS1
و LUKS2 تبدیل
میکند.
نگاه کنید
به cryptsetup-convert(8).
پیکربندی (CONFIG)
config <device>
گزینههای
پیکربندی
دائمی را
تنظیم
میکند (در
هدر LUKS ذخیره
میکند).
نگاه کنید
به cryptsetup-config(8).
افزونه LOOP-AES (LOOP-AES EXTENSION)
ابزار cryptsetup از نگاشت پارتیشن رمزنگاریشده loop-AES با استفاده از حالت سازگاری پشتیبانی میکند.
باز کردن (OPEN)
open --type loopaes <device> <name> --key-file
<keyfile>
loopaesOpen <device> <name> --key-file <keyfile>
(نحو
قدیمی)
دستگاه loop-AES
مشخص با <device>
را باز کرده
و یک نگاشت
به نام <name>
برپا
میکند.
نگاه کنید
به cryptsetup-open(8).
همچنین بخش ۷ از FAQ و loop-AES http://loop-aes.sourceforge.net را برای اطلاعات بیشتر در مورد loop-AES ببینید.
افزونه TCRYPT (سازگار با TRUECRYPT و VERACRYPT)
ابزار cryptsetup از نگاشت پارتیشنهای رمزنگاریشده TrueCrypt، tcplay یا VeraCrypt با استفاده از واسط بومی هسته لینوکس پشتیبانی میکند. قالببندی هدر و تغییر هدر TCRYPT پشتیبانی نمیشود؛ cryptsetup هرگز هدر TCRYPT را روی دستگاه تغییر نمیدهد.
افزونه TCRYPT نیازمند در دسترس بودن رابط رمزنگاری فضای کاربر در هسته لینوکس است (معرفیشده در هسته نسخه 2.6.38). اگر خودتان هسته را پیکربندی میکنید، گزینه "User-space interface for symmetric key cipher algorithms" را در بخش "Cryptographic API" فعال کنید (گزینه پیکربندی CRYPTO_USER_API_SKCIPHER).
از آنجا که هدر TCRYPT رمزنگاریشده است، همواره باید عبارت عبور و فایلهای کلید معتبر را ارائه دهید.
ابزار cryptsetup باید تمام انواع هدرها را شناسایی کند، به جز زنجیرههای رمز قدیمی که از حالت رمزنگاری LRW با اندازه بلوک ۶۴ بیت استفاده میکنند (بهویژه Blowfish در حالت LRW شناسایی نمیشود که از محدودیتهای رابط کریپتوی هسته است).
نرمافزار VeraCrypt توسعهیافته هدر TrueCrypt با تعداد تکرارهای افزایشیافته است، بنابراین باز کردن قفل آن ممکن است زمان زیادی طول بکشد.
برای باز کردن دستگاه VeraCrypt با یک مقدار سفارشی PIM (ضریب تکرار شخصی یا Personal Iteration Multiplier)، یا از گزینه --veracrypt-pim=<PIM> برای تعیین مستقیم PIM در خط فرمان استفاده کنید یا از --veracrypt-query-pim استفاده کنید تا مقدار PIM از شما پرسیده شود.
مقدار PIM بر تعداد تکرارهای اعمالشده در هنگام مشتقگیری کلید اثر میگذارد. لطفاً برای اطلاعات دقیقتر به PIM https://www.veracrypt.fr/en/Personal%20Iterations%20Multiplier%20%28PIM%29.html مراجعه کنید.
اگر نیاز به غیرفعال کردن پشتیبانی از دستگاههای VeraCrypt دارید، از گزینه --disable-veracrypt استفاده کنید.
نکته: فعالسازی با tcryptOpen تنها برای زنجیرههای رمزی که از حالتهای رمزنگاری LRW یا XTS استفاده میکنند پشتیبانی میشود.
دستور tcryptDump باید برای تمام دستگاههای شناساییشده TCRYPT کار کند و نیازی به دسترسی کاربر ارشد (ریشه) ندارد.
برای نگاشت دستگاه سیستمی (دستگاهی دارای بوتلودر که کل سیستم رمزنگاریشده روی آن قرار دارد) از گزینه --tcrypt-system استفاده کنید. میتوانید از یک دستگاه پارتیشن به عنوان پارامتر استفاده کنید (پارامتر باید یک دستگاه پارتیشن واقعی باشد، نه یک ایمیج در فایل)؛ در این صورت تنها این پارتیشن نگاشت میشود.
اگر کل دستگاه TCRYPT را به عنوان یک فایل ایمیج دارید و میخواهید چندین پارتیشن رمزنگاریشده با رمزنگاری سیستمی را نگاشت کنید، لطفاً ابتدا یک نگاشت لوپبک با پارتیشنها ایجاد کنید (losetup -P، برای اطلاعات بیشتر به صفحه راهنمای losetup(8) مراجعه کنید)، و از پارتیشن لوپ به عنوان پارامتر دستگاه استفاده نمایید.
اگر از کل دستگاه پایه به عنوان پارامتر استفاده کنید، یک دستگاه برای کل رمزنگاری سیستم نگاشت میشود. این حالت تنها برای سازگاری عقروعلی با نسخههای قدیمیتر cryptsetup در دسترس است که رمزنگاری سیستم TCRYPT را با استفاده از کل دستگاه نگاشت میکردند.
برای استفاده از هدر مخفی (و در صورت وجود، نگاشت دستگاه مخفی)، از گزینه --tcrypt-hidden استفاده کنید.
برای استفاده صریح از هدر پشتیبان (ثانویه)، از گزینه --tcrypt-backup استفاده کنید.
نکته: اگر حجم بیرونی سوار (mount) شده باشد، هیچ محافظتی برای حجم مخفی وجود ندارد. دلیل آن این است که هرگونه محافظت نیازمند فرادادههایی برای توصیف بخشهای محافظتشده در حجم بیرونی است و بدین ترتیب حجم مخفی قابل شناسایی خواهد شد.
باز کردن (OPEN)
open --type tcrypt <device> <name>
tcryptOpen <device> <name> (نحو
قدیمی)
دستگاه TCRYPT
(سازگار با
TrueCrypt) مشخصشده
با <device> را باز
کرده و
نگاشت <name> را
برپا
میکند.
نگاه کنید
به cryptsetup-open(8).
تخلیه اطلاعات (DUMP)
tcryptDump <device>
اطلاعات
هدر یک
دستگاه TCRYPT را
تخلیه و
نمایش
میدهد.
نگاه کنید
به cryptsetup-tcryptDump(8).
همچنین صفحات TrueCrypt https://en.wikipedia.org/wiki/TrueCrypt و VeraCrypt https://en.wikipedia.org/wiki/VeraCrypt را برای اطلاعات بیشتر مشاهده کنید.
لطفاً توجه داشته باشید که cryptsetup از کدهای TrueCrypt یا VeraCrypt استفاده نمیکند؛ لطفاً تمامی مشکلات مربوط به این افزونه سازگاری را به پروژه cryptsetup گزارش دهید.
افزونه BITLK (سازگار با BITLOCKER ویندوز)
ابزار cryptsetup از نگاشت پارتیشنهای رمزنگاریشده BitLocker و BitLocker to Go با استفاده از رابط بومی هسته لینوکس پشتیبانی میکند. قالببندی هدر و تغییرات هدر BITLK پشتیبانی نمیشود؛ cryptsetup هرگز هدر BITLK را روی دستگاه تغییر نمیدهد.
افزونه BITLK نیازمند در دسترس بودن رابط رمزنگاری فضای کاربر در هسته لینوکس است (برای جزئیات به بخش TCRYPT مراجعه کنید).
ابزار cryptsetup باید تمام انواع هدرهای BITLK را به جز هدر قدیمی مورد استفاده در سیستمهای Windows Vista و دستگاههای BitLocker که به طور جزئی رمزگشایی شدهاند شناسایی کند. فعالسازی دستگاههای قدیمی رمزنگاریشده در حالت CBC حداقل به هسته لینوکس نسخه 5.3 و برای دستگاههای دارای دیفیوزر Elephant به هسته 5.6 نیاز دارد.
دستور bitlkDump باید برای تمام دستگاههای شناساییشده BITLK کار کند و نیازی به دسترسی کاربر ارشد (ریشه) ندارد.
برای باز کردن قفل با دستور open، باید یک گذرواژه یا یک عبارت عبور بازیابی یا یک کلید راهاندازی (startup key) ارائه شود.
علاوه بر این، باز کردن قفل با استفاده از کلید حجم پشتیبانی میشود. شما باید کلید رمزنگاری کامل حجم BitLocker (یا FVEK) را با استفاده از گزینه --volume-key-file ارائه دهید. کلید باید رمزگشاییشده و بدون هدر باشد (تنها ۱۲۸/۲۵۶/۵۱۲ بیت دادههای کلید، بسته به رمز و حالت استفادهشده).
سایر روشهای بازگشایی قفل (مانند TPM یا کارت هوشمند) پشتیبانی نمیشوند.
باز کردن (OPEN)
open --type bitlk <device> <name>
bitlkOpen <device> <name> (نحو
قدیمی)
دستگاه BITLK
(سازگار با
BitLocker) با نام <device>
را باز کرده
و نگاشت <name>
را برپا
میکند.
نگاه کنید
به cryptsetup-open(8).
تخلیه اطلاعات (DUMP)
bitlkDump <device>
اطلاعات
هدر یک
دستگاه BITLK را
تخلیه و
نمایش
میدهد.
نگاه کنید
به cryptsetup-bitlkDump(8).
لطفاً توجه داشته باشید که cryptsetup از هیچیک از کدهای Windows BitLocker استفاده نمیکند؛ لطفاً تمامی مشکلات مربوط به این افزونه سازگاری را به پروژه cryptsetup گزارش دهید.
افزونه FVAULT2 (سازگار با FILEVAULT2 مکاواس اپل)
ابزار cryptsetup از نگاشت FileVault2 (رمزنگاری کامل دیسک FileVault2) ساخت اپل برای سیستمعامل macOS با استفاده از واسط بومی هسته لینوکس پشتیبانی میکند.
نکته: ابزار cryptsetup تنها از FileVault2 مبتنی بر Core Storage و سیستمفایل +HFS (معرفیشده در MacOS X 10.7 Lion) پشتیبانی میکند. این ابزار از نسخه جدید FileVault مبتنی بر سیستمفایل APFS که در نسخههای اخیر macOS به کار میرود پشتیبانی نمیکند.
قالببندی هدر و تغییرات هدر FVAULT2 پشتیبانی نمیشود؛ cryptsetup هرگز هدر FVAULT2 را روی دستگاه تغییر نمیدهد.
افزونه FVAULT2 نیازمند در دسترس بودن رابط رمزنگاری فضای کاربر در هسته لینوکس (برای جزئیات به بخش TCRYPT مراجعه کنید) و درایور هسته برای سیستمفایل +HFS (یا hfsplus) است.
ابزار cryptsetup باید پیکربندی پایه برای درایوهای قابل حمل را شناسایی کند.
دستور fvault2Dump باید برای تمام دستگاههای شناساییشده FVAULT2 کار کند و نیازی به دسترسی کاربر ارشد ندارد.
برای باز کردن قفل با دستور open، باید یک گذرواژه ارائه شود. سایر روشهای بازگشایی قفل پشتیبانی نمیشوند.
باز کردن (OPEN)
open --type fvault2 <device> <name>
fvault2Open <device> <name> (نحو
قدیمی)
دستگاه FVAULT2
(سازگار با
FileVault2) با مشخصه
<device> (معمولاً
دومین
پارتیشن
روی دستگاه)
را باز کرده
و نگاشت <name>
را برپا
میکند.
نگاه کنید
به cryptsetup-open(8).
افزونه SED (درایوهای خودرمزنگار) OPAL
ابزار cryptsetup از رمزنگاری بومی سختافزاری روی درایوهایی که واسط OPAL را فراهم میکنند، چه به صورت تودرتو با dm-crypt و چه به صورت مستقل، پشتیبانی میکند. عبارتهای عبور، توکنها و فرادادهها با استفاده از قالب هدر LUKS2 ذخیره میشوند و بنابراین با هر نرمافزار یا سیستمی که از LUKS2 استفاده میکند سازگار هستند (برای نمونه: توکنها).
هشدار: این پشتیبانی جدید و آزمایشی است و حداقل به هسته نسخه 6.4 نیاز دارد. تغییر اندازه دستگاهها پشتیبانی نمیشود.
گزینه --hw-opal را میتوان برای OPAL + dm-crypt مشخص کرد، و گزینه --hw-opal-only را میتوان برای استفاده از OPAL به تنهایی و بدون لایه dm-crypt به کار برد.
باز کردن، بستن و ثبت توکنها همانند LUKS2 و dm-crypt کار میکند. پارامترهای جدید تنها هنگام قالببندی ضروری هستند؛ فرادادههای LUKS2 اطمینان میدهند که هنگام باز کردن یا بستن تنظیمات درست اعمال شود. اگر هیچ subsystem مشخص نشود، به طور خودکار روی HW-OPAL تنظیم میشود تا به وضوح مشخص باشد که دستگاه از OPAL استفاده میکند.
قالببندی (FORMAT)
luksFormat --type luks2 --hw-opal <device> [<key file>]
علاوه بر این برای اجتناب از ایجاد لایه dm-crypt، به جای --hw-opal گزینه --hw-opal-only را مشخص کنید. به غیر از عبارت عبور معمول، هنگام قالببندی نخستین پارتیشن درایو باید یک گذرواژه مدیر مشخص شود و تا زمان انجام بازنشانی کارخانه، هنگام قالببندی هر پارتیشن دیگری باید مجدداً ارائه گردد.
پاکسازی (ERASE)
erase <device>
یک پارتیشن یا دستگاه را به طور امن پاکسازی میکند. نیازمند گذرواژه مدیر است. علاوه بر این، میتوانید گزینه --hw-opal-factory-reset را برای بازنشانی کامل درایو به تنظیمات کارخانه با استفاده از شناسه PSID درایو (که معمولاً روی برچسب آن چاپ شده است) به جای گذرواژه مدیر مشخص کنید. هشدار: بازنشانی کارخانهای سبب از بین رفتن تمام دادهها روی دستگاه میشود، صرف نظر از اینکه روی کدام پارتیشن اجرا شده باشد و صرف نظر از هرگونه نسخه پشتیبان از هدر LUKS2.
عملکردهای متفرقه (MISCELLANEOUS ACTIONS)
تعمیر (REPAIR)
repair <device>
تلاش
میکند در
صورت امکان
فراداده
دستگاه را
تعمیر کند.
در حال حاضر
تنها برای
نوع دستگاه
LUKS پشتیبانی
میشود.
نگاه کنید
به cryptsetup-repair(8).
سنجش کارایی (BENCHMARK)
benchmark <options>
سرعت
الگوریتمهای
رمزنگاری و
توابع KDF
(تابع
مشتقگیری
کلید) را
ارزیابی و
سنجش
میکند.
نگاه کنید
به cryptsetup-benchmark(8).
حالت ساده DM-CRYPT یا LUKS؟
مگر اینکه پیشزمینه رمزنگاری را به خوبی درک کرده باشید، از LUKS استفاده کنید. در حالت dm-crypt ساده خطاهای کاربری متعددی ممکن است رخ دهد که امنیت را به شدت کاهش میدهد. در حالی که LUKS نمیتواند همه آنها را برطرف کند، میتواند اثر نامطلوب بسیاری از آنها را تخفیف دهد.
هشدارها (WARNINGS)
اطلاعات بسیار مفیدی درباره خطرات استفاده از حافظههای رمزنگاریشده، نحوه مدیریت مشکلات و جنبههای امنیتی در Cryptsetup FAQ یافت میشود. آن را مطالعه کنید. با این حال، ذکر برخی خطرات در اینجا الزامی است.
پشتیبانگیری: رسانههای ذخیرهسازی از کار میافتند. رمزنگاری هیچ تأثیری بر این واقعیت ندارد. اگر دادهها ارزشی دارند، تهیه نسخه پشتیبان برای دادههای رمزنگاریشده نیز الزامی است. برای آگاهی از نحوه پشتیبانگیری از حجم رمزنگاریشده، به Cryptsetup FAQ مراجعه کنید.
کدگذاری نویسهها (Character encoding): اگر عبارت عبور را با نمادهای خاص وارد کنید، ممکن است بسته به کدگذاری نویسهها عبارت عبور تغییر یابد. تنظیمات صفحهکلید نیز میتواند تغییر کند که ورود کورکورانه متن را دشوار یا ناممکن میسازد. برای مثال، تغییر از یک نگارش ۸ بیتی ASCII به UTF-8 میتواند منجر به کدگذاری دودویی متفاوتی شود و از این رو cryptsetup عبارت عبور متفاوتی را ببیند، حتی اگر آنچه روی ترمینال مشاهده میکنید کاملاً یکسان باشد. از این رو اکیداً توصیه میشود نویسههای عبارت عبور را تنها از نویسههای اسکی ۷ بیتی (7-bit ASCII) انتخاب کنید، زیرا کدگذاری برای 7-bit ASCII در تمام گونههای ASCII و UTF-8 یکسان باقی میماند.
هدر LUKS: اگر هدر یک حجم LUKS آسیب ببیند، تمام دادهها برای همیشه از دست میروند، مگر اینکه نسخه پشتیبان از هدر داشته باشید. اگر یک اسلات کلید آسیب ببیند، تنها میتوان آن را از یک نسخه پشتیبان هدر بازیابی کرد یا در صورتی که یک اسلات کلید فعال دیگر با عبارت عبور معلوم آسیب ندیده باشد. آسیب رساندن به هدر LUKS کاری است که کاربران با بسامد شگفتانگیزی مرتکب آن میشوند! این خطر نتیجه یک سازش بین امنیت و ایمنی است، زیرا LUKS به گونهای طراحی شده است که با بازنویسی هدر و ناحیه اسلات کلید، بتوان دیسک را به سرعت و با امنیت کامل محو کرد.
پارتیشنهای از قبل استفادهشده: اگر یک پارتیشن قبلاً استفاده شده است، بسیار خوب است که پیش از ایجاد یک ظرف LUKS یا dm-crypt ساده روی آن، امضاهای سیستمفایل، دادهها و غیره را پاک کنید. برای حذف سریع امضاهای سیستمفایل، از wipefs(8) استفاده کنید. البته مراقب باشید که این کار ممکن است همه چیز را حذف نکند. بهویژه، ممکن است امضاهای MD RAID در انتهای دستگاه باقی بمانند. همچنین این ابزار دادهها را حذف نمیکند. برای یک پاکسازی کامل، کل پارتیشن را پیش از ایجاد ظرف بازنویسی کنید. اگر نحوه انجام این کار را نمیدانید، در Cryptsetup FAQ گزینههای مختلفی شرح داده شده است.
مثالها (EXAMPLES)
مثال ۱: ایجاد ظرف LUKS 2 روی دستگاه بلوکی /dev/sdX.
مثال ۲: افزودن یک عبارت عبور اضافی به اسلات کلید ۵.
مثال ۳: ایجاد نسخه پشتیبان از هدر LUKS و ذخیره آن در یک فایل.
مثال ۴: باز کردن ظرف LUKS روی /dev/sdX و نگاشت آن به sdX_crypt.
هشدار: دستور در مثال ۵ تمام اسلاتهای کلید را پاک میکند.
مثال ۵: پاکسازی تمام اسلاتهای کلید روی /dev/sdX.
مثال ۶: بازیابی هدر LUKS از یک فایل پشتیبان.
کدهای بازگشتی (RETURN CODES)
ابزار cryptsetup در صورت موفقیت مقدار 0 و در صورت بروز خطا مقداری غیرصفر بازمیگرداند.
کدهای خطا عبارتند از: 1 پارامترهای نادرست، 2 عدم دسترسی (عبارت عبور نامعتبر)، 3 کمبود حافظه، 4 دستگاه نادرست تعیین شده است، 5 دستگاه از قبل وجود دارد یا مشغول است.
نکات (NOTES)
پردازش عبارت عبور برای حالت ساده (Passphrase processing for PLAIN mode)
توجه داشته باشید که در حالت ساده هیچگونه هش تکرارشونده یا Salt انجام نمیشود. در صورت انجام هش، این یک هش مستقیم و یکباره است. این بدان معناست که عبارتهای عبور با آنتروپی پایین در حالت ساده به آسانی مورد حمله قرار میگیرند.
از یک ترمینال: عبارت عبور تا نخستین خط جدید، یعنی '\n' خوانده میشود. ورودی بدون نویسه خط جدید با هش پیشفرض یا هش مشخصشده با --hash پردازش میشود. نتیجه هش به اندازه کلید الگوریتم رمزنگاری استفادهشده، یا اندازه مشخصشده با -s بریده میشود.
از ورودی استاندارد (stdin): خواندن تا یک خط جدید (یا تا زمانی که حداکثر اندازه ورودی حاصل شود) ادامه مییابد و خط جدید پایانی حذف میگردد. حداکثر اندازه ورودی با همان مقدار پیشفرض کامپایلشده برای حداکثر اندازه فایل کلید تعریف میشود و میتواند با گزینه --keyfile-size بازنویسی شود.
دادههای خواندهشده با هش پیشفرض یا هش مشخصشده با --hash هش میشوند. نتیجه هش به اندازه کلید الگوریتم رمزنگاری استفادهشده، یا اندازه مشخصشده با -s بریده خواهد شد.
توجه داشته باشید که اگر از --key-file=- برای خواندن کلید از stdin استفاده شود، خطوط جدید پایانی از ورودی حذف نمیشوند.
اگر "plain" به عنوان آرگومان --hash استفاده شود، دادههای ورودی هش نمیشوند. در عوض، با صفر پر شده (اگر کوتاهتر از اندازه کلید باشد) یا بریده میشوند (اگر طولانیتر از اندازه کلید باشد) و مستقیماً به عنوان کلید باینری استفاده میشوند. این ویژگی برای مشخص کردن مستقیم یک کلید باینری مفید است. در صورتی که مقدار داده خواندهشده از stdin کمتر از اندازه کلید باشد هیچ هشداری داده نخواهد شد.
از یک فایل کلید: دادهها به اندازه کلید الگوریتم رمزنگاری استفادهشده یا اندازه ارائهشده توسط -s بریده میشوند و مستقیماً به عنوان یک کلید باینری استفاده میگردند.
هشدار: آرگومان --hash نادیده گرفته میشود. گزینه --hash تنها برای ورودی stdin در حالت ساده قابل استفاده است.
اگر فایل کلید کوتاهتر از اندازه کلید باشد، cryptsetup با خطا متوقف میشود. حداکثر اندازه ورودی توسط همان مقدار پیشفرض کامپایلشده برای حداکثر اندازه فایل کلید تعریف میشود و میتواند با استفاده از گزینه --keyfile-size بازنویسی شود.
پردازش عبارت عبور برای LUKS (Passphrase processing for LUKS)
سامانه LUKS از PBKDF برای محافظت در برابر حملات فرهنگ لغت و ارائه سطحی از محافظت برای عبارتهای عبور با آنتروپی پایین استفاده میکند (به Cryptsetup FAQ مراجعه کنید).
از یک ترمینال: عبارت عبور تا نخستین خط جدید خوانده میشود و سپس توسط PBKDF2 بدون نویسه خط جدید پردازش میگردد.
از ورودی استاندارد (stdin): سامانه LUKS عبارتهای عبور را از stdin تا نخستین نویسه خط جدید یا حداکثر طول فایل کلید کامپایلشده میخواند. اگر --keyfile-size داده شود، نادیده گرفته میشود. برای محدود کردن میزان خواندهشده میتوان از گزینه --keyfile-size استفاده کرد.
پردازش عبارت عبور: هر زمان که یک عبارت عبور به هدر LUKS اضافه شود (در luksAddKey، luksFormat)، کاربر میتواند مشخص کند که پردازش عبارت عبور چه مقدار زمان مصرف کند. این زمان برای تعیین تعداد تکرارها در PBKDF2 به کار میرود و زمانهای طولانیتر حفاظت بهتری برای عبارتهای عبور با آنتروپی پایین فراهم میآورند، اما باز کردن قفل زمان بیشتری برای تکمیل نیاز خواهد داشت. برای عبارتهای عبوری که آنتروپی بالاتری از طول کلید استفادهشده دارند، زمانهای تکرار طولانیتر امنیت را افزایش نمیدهند.
تنظیم پیشفرض یک یا دو ثانیه برای بیشتر موارد عملی کافی است. تنها استثنا یک عبارت عبور با آنتروپی پایین است که روی دستگاهی با پردازنده کند استفاده شود، زیرا منجر به تعداد تکرار پایین خواهد شد. در یک دستگاه کند، توصیه میشود زمان تکرار را با استفاده از گزینه --iter-time افزایش دهید تا تعداد تکرار بالاتری به دست آید. این کار به تناسب تمام عملیات بعدی luksOpen را کند میکند.
رفتار متناقض برای عبارتهای عبور/کلیدهای نامعتبر (Incoherent behavior for invalid passphrases/keys)
سامانه LUKS هنگام باز کردن یک پارتیشن رمزنگاریشده، معتبر بودن عبارت عبور را بررسی میکند. رفتار dm-crypt ساده متفاوت است؛ این حالت همواره با عبارت عبور ارائهشده اقدام به رمزگشایی میکند. اگر عبارت عبور ارائهشده نادرست باشد، دستگاه نگاشتشده توسط dm-crypt ساده در واقع همچنان شامل دادههای رمزنگاریشده بوده و غیرقابل خواندن خواهد بود.
رمزها، حالتها، هشها و اندازههای کلید پشتیبانیشده (Supported ciphers, modes, hashes and key sizes)
ترکیبهای در دسترس از الگوریتمها، حالتها، هشها و اندازههای کلید به پشتیبانی هسته بستگی دارد. برای فهرستی از گزینههای در دسترس به /proc/crypto مراجعه کنید. ممکن است برای دستیابی به گزینههای بیشتر لازم باشد ماژولهای کریپتوی اضافی هسته را بارگذاری کنید.
برای گزینه --hash، اگر بکاند کریپتو libgcrypt باشد، تمام الگوریتمهای پشتیبانیشده توسط کتابخانه gcrypt در دسترس خواهند بود. برای سایر بکاندهای کریپتو، ممکن است برخی الگوریتمها موجود نباشند.
نکاتی در مورد عبارتهای عبور (Notes on passphrases)
ریاضیات رشوه نمیپذیرد! اطمینان حاصل کنید که از عبارتهای عبور خود به خوبی محافظت میکنید. ترفندهای هوشمندانهای برای ایجاد یک راهکار پشتیبان برای زمانی که ناگهان حافظه یاری نمیکند وجود دارد. این راهکارهای پشتیبان نیازمند LUKS هستند، زیرا تنها با LUKS میتوان چندین عبارت عبور داشت. با این حال، اگر مدل تهدید شما مانع آن نیست، نگهداری عبارت عبور در یک پاکت نامهربوده و مهر و موم شده در مکانی امن نیز میتواند ایده خوبی باشد.
نکاتی در مورد تولیدکنندههای اعداد تصادفی (Notes on Random Number Generators)
تولیدکنندههای اعداد تصادفی (RNG) مورد استفاده در cryptsetup همواره همان RNGهای هسته هستند بدون هیچگونه اصلاح یا افزودنی به جریان داده تولیدشده.
دو نوع تصادفیسازی وجود دارد که cryptsetup/LUKS به آنها نیاز دارد. یک نوع (که همواره از /dev/urandom استفاده میکند) برای Saltها، جداکننده AF و برای محو کردن اسلاتهای کلید حذفشده به کار میرود.
نوع دوم برای کلید حجم استفاده میشود. در اینجا میتوانید بین استفاده از /dev/random و /dev/urandom جابهجا شوید؛ گزینههای --use-random و --use-urandom را ببینید. استفاده از /dev/random روی سیستمی فاقد منابع آنتروپی کافی میتواند سبب شود که luksFormat تا زمان جمعآوری مقدار تصادفی مورد نیاز مسدود شود. در وضعیت آنتروپی پایین (سیستمهای توکار)، این امر میتواند زمان بسیار زیادی ببرد و بالقوه برای همیشه طول بکشد. در عین حال، استفاده از /dev/urandom در شرایط با آنتروپی پایین کلیدهایی با کیفیت پایین تولید میکند. این یک مشکل جدی است، اما حل آن خارج از محدوده یک صفحه راهنمای ساده است. برای اطلاعات بیشتر به urandom(4) مراجعه کنید.
رمزنگاری احرازشده دیسک [آزمایشی] (Authenticated disk encryption - EXPERIMENTAL)
از نسخه 4.12 هسته لینوکس، dm-crypt از رمزنگاری احرازشده دیسک پشتیبانی میکند.
حالتهای عادی رمزنگاری دیسک حفظکننده طول هستند (اندازه سکتور متن آشکار با سکتور متن رمزشده یکسان است) و تنها میتوانند محرمانگی را تامین کنند، اما امنیت یکپارچگی دادهها را از نظر رمزنگاری فراهم نمیسازند.
حالتهای احرازشده نیازمند فضای اضافی به ازای هر سکتور برای برچسب احراز اصالت هستند و از الگوریتمهای رمزنگاری احرازشده با دادههای الحاقی (AEAD) استفاده میکنند.
اگر دستگاه LUKS2 را با محافظت یکپارچگی دادهها پیکربندی کنید، یک دستگاه dm-integrity زیرین وجود خواهد داشت که فضای فراداده اضافی به ازای هر سکتور فراهم میکند و همچنین ژورنال دادهها را برای تضمین اتمیک بودن بهروزرسانی دادهها و فرادادهها تامین مینماید. از آنجا که باید فضای اضافی برای فراداده و ژورنال وجود داشته باشد، فضای قابل استفاده برای دستگاه کمتر از حالتهای حفظکننده طول خواهد بود.
سپس دستگاه dm-crypt روی چنین دستگاه dm-integrity قرار میگیرد. تمامی فعالسازیها و غیرفعالسازیهای این پشته دستگاه توسط cryptsetup انجام میشود؛ هیچ تفاوتی در استفاده از luksOpen برای دستگاههای دارای محافظت یکپارچگی وجود ندارد. اگر میخواهید دستگاه LUKS2 را با محافظت یکپارچگی دادهها قالببندی کنید، از گزینه --integrity استفاده کنید (نگاه کنید به cryptsetup-luksFormat(8)).
اگرچه هسته لینوکس 5.7 پشتیبانی از TRIM را برای دستگاههای مستقل dm-integrity اضافه کرد، اما cryptsetup(8) نمیتواند از discardها (TRIM) در حالت رمزنگاری احرازشده پشتیبانی کند، زیرا ماژول dm-crypt زیربنایی هسته در زمانی که dm-integrity به عنوان تخصیصدهنده فضای برچسب احراز اصالت استفاده میشود از این قابلیت پشتیبانی نمیکند (نگاه کنید به --allow-discards در cryptsetup-luksFormat(8)).
برخی از حالتهای یکپارچگی به دو کلید مستقل نیاز دارند (کلید برای رمزنگاری و کلید برای احراز اصالت). هر دوی این کلیدها در یک اسلات کلید LUKS ذخیره میشوند.
هشدار: تمامی پشتیبانیها از حالتهای احرازشده آزمایشی هستند و در حال حاضر تنها برخی حالتها در دسترس میباشند. توجه داشته باشید که الگوریتمهای رمزنگاری احرازشده بسیار اندکی برای رمزنگاری دیسک مناسب هستند. همچنین نمیتوانید از CRC32 یا هر چکسام غیررمزنگاری دیگر استفاده کنید (به جز حالت یکپارچگی ویژه "none"). اگر بنا به دلیلی میخواهید بدون استفاده از حالت احراز هویت کنترل یکپارچگی داشته باشید، باید dm-integrity را جداگانه و مستقل از LUKS2 پیکربندی کنید.
نکاتی در مورد استفاده از دستگاه لوپبک (Notes on loopback device use)
ابزار cryptsetup معمولاً مستقیماً روی یک دستگاه بلوکی (پارتیشن دیسک یا حجم LVM) به کار میرود. با این حال، اگر آرگومان دستگاه یک فایل باشد، cryptsetup تلاش میکند یک دستگاه لوپبک را تخصیص داده و آن را به این فایل نگاشت کند. این حالت نیازمند هسته لینوکس 2.6.25 یا جدیدتر است که از فلگ loop autoclear پشتیبانی میکند (دستگاه لوپ با آخرین بستن به طور خودکار پاک میشود). البته همواره میتوانید یک فایل را به صورت دستی به یک دستگاه لوپ نگاشت کنید. برای دیدن یک مثال به Cryptsetup FAQ مراجعه کنید.
هنگامی که نگاشت دستگاه فعال است، میتوانید فایل پشتیبان لوپ را در خروجی دستور status مشاهده کنید. همچنین به losetup(8) مراجعه کنید.
قفلگذاری هدر LUKS2 (LUKS2 header locking)
فراداده روی دیسک LUKS2 در چندین مرحله بهروزرسانی میشود و برای دستیابی به بهروزرسانی اتمیک مناسب، یک سازوکار قفلگذاری وجود دارد. برای یک ایمیج در فایل، کد از فراخوان سیستمی flock(2) استفاده میکند. برای یک دستگاه بلوکی، قفلگذاری روی یک فایل ویژه ذخیرهشده در یک دایرکتوری قفل (بهطور پیشفرض /run/cryptsetup) انجام میشود. دایرکتوری قفل باید در مرحله راهاندازی و بوت توسط توزیع با زمینه امنیتی مناسب ایجاد شود. تنها LUKS2 از قفلها استفاده میکند و سایر فرمتها از این سازوکار بهره نمیبرند.
مشخصات فرمت روی دیسک LUKS (LUKS on-disk format specification)
برای مشخصات فراداده روی دیسک LUKS نگاه کنید به LUKS1 https://gitlab.com/cryptsetup/cryptsetup/wikis/Specification و LUKS2 https://gitlab.com/cryptsetup/LUKS2-docs.
نویسندگان (AUTHORS)
ابزار cryptsetup
در اصل توسط
Jana Saout <jana@saout.de>.
نوشته شده
است.
افزونههای
LUKS و صفحه
راهنمای
اصلی توسط Clemens
Fruhwirth <clemens@endorphin.org>.
نوشته
شدهاند.
توسعههای
صفحه
راهنما
توسط Milan Broz
<gmazyland@gmail.com>.
بازنویسی و
بسط صفحه
راهنما
توسط Arno Wagner
<arno@wagner.name>.
گزارش باگها (REPORTING BUGS)
باگها را در لیست پستی cryptsetup <cryptsetup@lists.linux.dev> یا در بخش مسائل پروژه https://gitlab.com/cryptsetup/cryptsetup/-/issues/new. گزارش دهید.
لطفاً خروجی دستور ناموفق را همراه با گزینه --debug پیوست کنید.
همچنین ببینید (SEE ALSO)
Cryptsetup FAQ https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions
CRYPTSETUP
بخشی از پروژه cryptsetup https://gitlab.com/cryptsetup/cryptsetup.
| 2025-05-04 | cryptsetup 2.7.5 |