| CRYPTSETUP-REENCRYPT(8) | دستورهای مدیریتی و نگهداری | CRYPTSETUP-REENCRYPT(8) |
نام (NAME)
cryptsetup-reencrypt - رمزنگاری مجدد یا تغییر الگوریتم یک دستگاه فعال یا غیرفعال LUKS2
خلاصه دستور (SYNOPSIS)
cryptsetup reencrypt [<گزینهها>] <دستگاه> یا --active-name <نام> [<نام_جدید>]
توضیحات (DESCRIPTION)
اجرای رمزنگاری مجدد دستگاه LUKS.
سه حالت عملکرد پایه وجود دارد:
پارامتر <دستگاه> یا --active-name <نام> (فقط LUKS2) الزامی است.
عملکرد reencrypt در cryptsetup میتواند برای تغییر پارامترهای رمزنگاری استفاده شود که در غیر این صورت نیازمند تغییر کامل دادههای روی دیسک (رمزنگاری مجدد) هستند. عملکرد reencrypt دادههای روی دستگاه LUKS را در جا (in-place) مجدداً رمزنگاری میکند.
شما میتوانید کلید حجم (کلید واقعی استفادهشده در رمزنگاری روی دیسک که توسط عبارت عبور بازگشایی میشود)، رمز (cipher)، حالت رمز (cipher mode) یا اندازه بخش رمزنگاری (sector size) (فقط LUKS2) را بازتولید کنید.
اگر نیاز به استفاده همزمان از luksChangeKey و reencrypt دارید (مثلاً برای بازیابی پس از افشای کلید)، باید آنها را دقیقاً به همین ترتیب استفاده کنید تا از افشای کلید حجم جدید جلوگیری شود.
فرایند رمزنگاری مجدد میتواند توسط کاربر با سیگنال SIGINT (کلیدهای ctrl+c) بهصورت ایمن متوقف شود. همین موضوع در مورد سیگنال SIGTERM (به عنوان مثال ارسالشده توسط systemd هنگام خاموش شدن سیستم) نیز صدق میکند.
برای حالت رمزنگاری در جا، عملکرد reencrypt علاوه بر این، تمامی گزینههای موجود برای عملکرد luksFormat را برای نسخه مربوطه LUKS میپذیرد (برای جزئیات بیشتر صفحه راهنمای cryptsetup-luksFormat را ببینید). ببینید: cryptsetup-luksFormat(8).
توجه داشته باشید که برای حالت رمزنگاری (encrypt) و رمزگشایی (decrypt)، کل دستگاه باید به عنوان رمزنگارینشده در نظر گرفته شود — هیچ تضمینی برای محرمانگی وجود ندارد زیرا بخشی از دستگاه حاوی متن خام (plaintext) است.
همیشه پیش از استفاده از این عملکرد روی دستگاه LUKS، مطمئن شوید که یک نسخه پشتیبان مطمئن در اختیار دارید.
<گزینهها> میتوانند شامل موارد زیر باشند: [--batch-mode, --block-size, --cipher, --debug, --debug-json, --decrypt, --device-size, --disable-locks, --encrypt, --force-offline-reencrypt, --hash, --header, --hotzone-size, --iter-time, --init-only, --keep-key, --key-file, --key-size, --key-slot, --keyfile-offset, --keyfile-size, --tries, --timeout, --pbkdf, --pbkdf-force-iterations, --pbkdf-memory, --pbkdf-parallel, --progress-frequency, --progress-json, --reduce-device-size, --resilience, --resilience-hash, --resume-only, --sector-size, --use-directio, --use-random, --use-urandom, --use-fsync, --uuid, --verbose, --volume-key-file, --write-log].
رمزنگاری مجدد LUKS2 (LUKS2 REENCRYPTION)
با پارامتر <دستگاه>، ابزار cryptsetup نگاشت فعال dm دستگاه <دستگاه> را بررسی میکند. اگر هیچ نگاشت فعالی شناسایی نشود، رمزنگاری مجدد آفلاین LUKS2 را آغاز میکند؛ در غیر این صورت، رمزنگاری مجدد آنلاین رخ میدهد.
برای ازسرگیری رمزنگاری مجدد اولیهسازیشده یا متوقفشده، کافی است دوباره دستور reencrypt در cryptsetup را اجرا کنید تا عملیات رمزنگاری مجدد ادامه یابد. رمزنگاری مجدد میتواند با مقادیر متفاوت --resilience یا --hotzone-size از سر گرفته شود، مگر اینکه از حالت تابآوری ضمنی انتقال داده (datashift) استفاده شده باشد: اعم از حالت رمزنگاری با گزینه --reduce-device-size یا حالت رمزگشایی با هدر اصلی LUKS2 صادرشده در فایل --header.
اگر فرایند رمزنگاری مجدد بهطور ناگهانی متوقف شده باشد (کرش کردن فرایند رمزنگاری مجدد، کرش سیستم یا قطع برق)، ممکن است نیاز به بازیابی داشته باشد. بازیابی در صورت نیاز بهصورت خودکار در فعالسازی بعدی (عملکرد open) یا بهطور صریح توسط کاربر (عملکرد repair) اجرا میشود.
پارامتر اختیاری <نام_جدید> فقط همراه با گزینه encrypt اعمال میشود و بلافاصله پس از اتمام اولیهسازی رمزنگاری، دستگاه <نام_جدید> را فعال میکند. این قابلیت زمانی مفید است که دستگاه باید در سریعترین زمان ممکن آماده شده و پیش از تکمیل رمزنگاری کامل ناحیه داده، سوار (mount) و استفاده شود.
رمزنگاری مجدد LUKS1 (LUKS1 REENCRYPTION)
دایرکتوری کاری فعلی باید قابل نوشتن باشد و فایلهای موقتی ایجادشده در طول رمزنگاری مجدد باید موجود باشند. در طول رمزنگاری مجدد، دستگاه LUKS1 غیرقابلدسترس علامتگذاری میشود و باید آفلاین باشد (بدون نگاشت dm-crypt یا سیستمفایل سوارشده).
هشدار: کد رمزنگاری مجدد LUKS1 در برابر خرابیهای سختافزاری یا هسته در طول رمزنگاری مجدد مقاوم نیست (در این حالت ممکن است دادههای خود را از دست بدهید).
گزینهها (OPTIONS)
--align-payload <تعداد سکتورهای ۵۱۲ بایتی> (منسوخشده، از --offset استفاده کنید)
اگر مشخص نشود، cryptsetup تلاش میکند از اطلاعات توپولوژی ارائهشده توسط هسته برای دستگاه زیربنایی جهت دستیابی به تراز بهینه استفاده کند. در صورت عدم دسترسی (یا اگر مقدار محاسبهشده مضربی از پیشفرض باشد)، دادهها بهطور پیشفرض در مرز ۱ مبیبایت (یعنی ۲۰۴۸ سکتور ۵۱۲ بایتی) تراز میشوند.
برای یک هدر LUKS جداشده (detached)، این گزینه آفست روی دستگاه داده را مشخص میکند. همچنین گزینه --header را ببینید.
این گزینه منسوخ شده است (DEPRECATED) و به دلیل گرد کردنهای پیچیده، تأثیر غیرمنتظرهای بر آفست داده و اندازه ناحیه اسلاتهای کلید (برای LUKS2) دارد. برای آفست ثابت دستگاه داده، بهجای آن از گزینه --offset استفاده کنید.
--batch-mode, -q
اگر گزینه --verify-passphrase مشخص نشده باشد، این گزینه بررسی تأیید عبارت عبور را نیز خاموش میکند.
--block-size مقدار (فقط LUKS1)
مقادیر میتوانند بین ۱ تا ۶۴ مبیبایت باشند.
--cipher, -c <مشخصات-رمز>
LUKS1: تنظیم رشته مشخصات رمزنگاری برای بخش دادهها و اسلاتهای کلید.
اگر در حالت رمزنگاری (encrypt) مشخصات رمز حذف شود، رمز پیشفرض اعمال میشود.
در حالت رمزنگاری مجدد (reencrypt)، اگر مشخصات رمز جدیدی درخواست نشود، رمز موجود حفظ خواهد شد. تنها استثنا زمانی است که رمز "cipher_null" باشد، که در این صورت از رمز پیشفرض استفاده میشود.
دستور cryptsetup --help پیشفرضهای کامپایلشده را نمایش میدهد.
اگر یک هش بخشی از مشخصات رمز باشد، به عنوان بخشی از تولید IV استفاده میشود. به عنوان مثال، ESSIV به یک تابع هش نیاز دارد، در حالی که "plain64" نیازی ندارد و از این رو هیچ هشی مشخص نمیشود.
برای حالت XTS، میتوانید بهصورت اختیاری با گزینه -s اندازه کلید را ۵۱۲ بیت تنظیم کنید. اندازه کلید برای حالت XTS برای همان سطح امنیت، دو برابر سایر حالتها است.
--debug یا --debug-json
اگر از --debug-json استفاده شود، ساختارهای داده JSON اضافی LUKS2 چاپ میشوند.
--decrypt
--device-size اندازه[واحدها]
LUKS2: هنگامی که همراه با --reduce-device-size استفاده شود، فقط مقدار اولیه اندازه (پارامتر --device-size) از دادهها همزمان با رمزنگاری به سمت عقب جابهجا (shift) میشود.
مجموع مقادیر --device-size و --reduce-device-size نباید از اندازه واقعی دستگاه تجاوز کند.
هشدار: این یک عملیات تخریبی است. دادههای فراتر از محدودیت --device-size ممکن است پس از پایان عملیات از بین بروند.
اگر هیچ پسوند واحدی مشخص نشود، اندازه بر حسب بایت است.
پسوند واحد میتواند S برای سکتورهای ۵۱۲ بایتی، K/M/G/T (یا KiB, MiB, GiB, TiB) برای واحدهای بر پایه ۱۰۲۴ یا KB/MB/GB/TB برای پایه ۱۰۰۰ (مقیاس SI) باشد.
--disable-blkid
--disable-keyring
--disable-locks
با غیرفعال بودن قفل، ایمیجهای LUKS2 موجود در فایلها را میتوان بهصورت آفلاین و بدون نیاز به دسترسیهای کاربر ارشد (superuser) بهطور کامل (مجدداً) رمزنگاری کرد، به شرطی که رمزهای بلوکی استفادهشده در بکاند رمزنگاری در دسترس باشند.
هشدار: از این گزینه استفاده نکنید مگر اینکه cryptsetup را در یک محیط محدود اجرا کنید که قفلگذاری در آن غیرممکن است (جایی که دایرکتوری /run قابل استفاده نیست).
--encrypt, --new, -N
--force-no-keyslots (فقط LUKS2)
اسلات کلید LUKS2 با کلید حجم جدید میتواند پس از پایان عملیات رمزنگاری مجدد اضافه شود. دستور cryptsetup-luksAddKey(8) را ببینید.
هشدار: با احتیاط بسیار زیاد استفاده کنید! اگر کلید حجم ذخیرهشده در فایل یا keyring هسته را قبل از افزودن اسلات کلید LUKS2 حاوی کلید حجم جدید گم کنید، دستگاه غیرقابل استفاده شده و تمام دادهها از بین خواهند رفت.
--force-offline-reencrypt (فقط LUKS2)
این گزینه بهویژه برای رمزنگاری مجدد ایمیجهای LUKS2 قرار داده شده در فایلها مفید است (تشخیص خودکار در این سناریو قابل اعتماد نیست).
همچنین ممکن است در صورتی که تشخیص خودکار دستگاه فعال روی یک دستگاه داده خاص کار نکند یا خطا گزارش کند، کمک کند.
هشدار: با احتیاط فراوان استفاده کنید! در صورتی که دستگاه فعال شده و/یا بهصورت فعال استفاده شود، این کار ممکن است دادهها را از بین ببرد.
--force-password
اگر cryptsetup بدون پشتیبانی از بررسی کیفیت گذرواژه ساخته شده باشد، این گزینه نادیده گرفته میشود.
برای اطلاعات بیشتر در مورد بررسی کیفیت گذرواژه، صفحه راهنمای pwquality.conf(5) و passwdqc.conf(5) را ببینید.
--hash, -h <مشخصات-هش>
اگر این پارامتر مشخص نشود، همیشه از الگوریتم هش پیشفرض برای هدر دستگاه جدید LUKS1 استفاده میشود.
LUKS2: نادیده گرفته میشود مگر اینکه الگوریتم pbkdf اسلات کلید جدید روی PBKDF2 تنظیم شده باشد (--pbkdf را ببینید).
--header <دستگاه یا فایل ذخیرهکننده هدر LUKS>
اگر با گزینه --encrypt/--new استفاده شود، فایل هدر ایجاد (یا رونویسی) خواهد شد. با احتیاط استفاده کنید.
LUKS2: برای حالت رمزگشایی، این گزینه میتواند برای صدور (export) هدر اصلی LUKS2 به یک فایل جداگانه استفاده شود. فایل مشخصشده نباید در زمان راهاندازی عملیات رمزگشایی وجود داشته باشد. این کار باعث آزاد شدن فضا در ابتدای دستگاه داده میشود تا دادهها بتوانند در محل هدر اصلی LUKS2 قرار گیرند. پس از آن، عملیات رمزگشایی به گونهای ادامه مییابد که گویی هدر جداشده معمولی منتقل شده است.
هشدار: هرگز فایل هدر صادرشده را در سیستمفایلی روی همان دستگاهی که قرار است رمزگشایی کنید قرار ندهید! این کار باعث بنبست (deadlock) میشود.
--help, -?
--hotzone-size اندازه (فقط LUKS2)
در حالت رمزگشایی برای دستگاههایی که هدر LUKS2 در ابتدای دستگاه داده قرار دارد، این گزینه مشخص میکند که اندازه نخستین بخش داده منتقلشده از نشانگر آفست داده اصلی چقدر است.
--init-only (فقط LUKS2)
--iter-time, -i <تعداد میلیثانیه>
--keep-key
LUKS1: تنها هدر و اسلاتهای کلید LUKS1 را مجدداً رمزنگاری میکند. از رمزنگاری مجدد در جای دادهها صرفنظر میکند.
--key-file, -d فایل
اگر نام دادهشده "-" باشد، عبارت عبور از stdin خوانده میشود. در این حالت، خواندن با نویسههای خط جدید (newline) متوقف نخواهد شد.
گزینه --key-file فقط در صورتی قابل استفاده است که تنها یک اسلات کلید فعال وجود داشته باشد، یا بهصورت جایگزین، اگر گزینه --key-slot مشخص شده باشد (در این صورت تمام اسلاتهای کلید دیگر در دستگاه جدید LUKS غیرفعال خواهند شد).
اگر از این گزینه استفاده نشود، cryptsetup عبارت عبور تمام اسلاتهای کلید فعال را درخواست خواهد کرد.
--keyfile-offset مقدار
--keyfile-size, -l مقدار
این گزینه برای مثال جهت حذف خطوط جدید پایانی مفید است. اگر --keyfile-offset نیز داده شده باشد، شمارش اندازه پس از آفست شروع میشود.
--key-size, -s بیتها
LUKS1: گزینه --new-key-size را ببینید.
--key-slot, -S <0-N>
برای حالت رمزنگاری مجدد، این گزینه یک اسلات کلید (و عبارت عبور) خاص را انتخاب میکند که میتواند برای بازگشایی کلید حجم جدید استفاده شود. در صورت استفاده، تمام اسلاتهای کلید دیگر پس از اتمام عملیات رمزنگاری مجدد حذف میشوند.
حداکثر تعداد اسلاتهای کلید بستگی به نسخه LUKS دارد. قالب LUKS1 میتواند تا ۸ اسلات کلید داشته باشد. قالب LUKS2 میتواند بر اساس اندازه ناحیه اسلاتهای کلید و اندازه کلید تا ۳۲ اسلات کلید داشته باشد، اما شناسه اسلات کلید معتبر برای LUKS2 همیشه میتواند بین ۰ و ۳۱ باشد.
--keyslot-cipher <مشخصات-رمز>
--keyslot-key-size <بیتها>
--label <برچسب>, --subsystem <زیرسیستم>
--luks2-keyslots-size اندازه
--luks2-metadata-size اندازه
--new-key-size بیتها
برای اطلاعات بیشتر /proc/crypto را ببینید. توجه داشته باشید که اندازه کلید در /proc/crypto بر حسب بایت بیان میشود.
LUKS1: اگر در حال افزایش اندازه کلید هستید، باید فضای کافی در هدر LUKS برای اسلاتهای کلید بزرگتر وجود داشته باشد (آفست داده باید به اندازه کافی بزرگ باشد)، در غیر این صورت رمزنگاری مجدد امکانپذیر نیست.
اگر فضای کافی برای اسلاتهای کلید با اندازه کلید جدید وجود ندارد، میتوانید با گزینه --reduce-device-size دستگاه را بهصورت تخریبی کوچک کنید.
--new-volume-key-file فایل
هشدار: اگر کلید حجم خود را ایجاد میکنید، باید مطمئن شوید که آن را بهدرستی انجام میدهید. در غیر این صورت، ممکن است با یک کلید حجم با انتروپی پایین یا تا حدی قابل پیشبینی مواجه شوید که امنیت را به خطر میاندازد.
--new-volume-key-keyring <توصیف کلید>
اندازه کلید ذخیرهشده در دسته کلید باید با رمز جدید مورد استفاده در عملیات رمزنگاری مجدد سازگار باشد. برای اطلاعات بیشتر /proc/crypto را ببینید. توجه داشته باشید که اندازه کلید در /proc/crypto بر حسب بایت بیان میشود.
مقدار <توصیف کلید> از نحو سازگار با keyctl استفاده میکند. این میتواند یک شناسه عددی کلید یا یک نام رشتهای در قالب %<نوع کلید>:<نام کلید> باشد. همچنین بخش KEY IDENTIFIERS در keyctl(1) را ببینید. هنگامی که هیچ پیشوند %<نوع کلید>: مشخص نشده باشد، فرض میکنیم نوع کلید user (نوع پیشفرض) است.
هشدار: اگر کلید حجم خود را ایجاد میکنید، باید مطمئن شوید که آن را بهدرستی انجام میدهید. در غیر این صورت، ممکن است با یک کلید حجم با انتروپی پایین یا تا حدی قابل پیشبینی مواجه شوید که امنیت را به خطر میاندازد.
--offset, -o <تعداد سکتورهای ۵۱۲ بایتی>
گزینه --offset آفست داده (بار مفید) دستگاه داده را تنظیم میکند و باید با سکتورهای ۴۰۹۶ بایتی تراز باشد (باید مضربی از ۸ باشد). این گزینه نمیتواند با گزینه --align-payload ترکیب شود.
--pbkdf <مشخصات PBKDF>
برای LUKS1، فقط PBKDF2 پذیرفته میشود (نیازی به استفاده از این گزینه نیست). الگوریتم PBKDF پیشفرض برای LUKS2 در زمان کامپایل تنظیم میشود و در خروجی cryptsetup --help موجود است.
یک PBKDF برای افزایش هزینه حملات فرهنگلغت (dictionary) و جستجوی فراگیر (brute-force) برای گذرواژههای اسلات کلید استفاده میشود. پارامترها میتوانند هزینه زمانی، حافظه و موازیسازی باشند.
برای PBKDF2، فقط هزینه زمانی (تعداد تکرارها) اعمال میشود. برای Argon2i/id، هزینه حافظه (حافظه مورد نیاز در طول فرایند اشتقاق کلید) و هزینه موازیسازی (تعداد رشتههایی که بهصورت موازی در طول اشتقاق کلید اجرا میشوند) نیز وجود دارد.
توجه داشته باشید که افزایش هزینه حافظه باعث افزایش زمان نیز میشود، بنابراین مقادیر نهایی پارامترها توسط بنچمارک سنجیده میشوند. بنچمارک تلاش میکند زمان تکرار (--iter-time) را با هزینه حافظه مورد نیاز --pbkdf-memory بیابد. اگر امکانپذیر نباشد، هزینه حافظه نیز کاهش مییابد. هزینه موازیسازی --pbkdf-parallel ثابت است و با هستههای CPU موجود بررسی میشود.
میتوانید تمام پارامترهای PBKDF را برای یک اسلات کلید خاص LUKS2 با دستور cryptsetup-luksDump(8) مشاهده کنید.
اگر نمیخواهید از بنچمارک استفاده کنید و میخواهید تمام پارامترها را مستقیماً مشخص کنید، از --pbkdf-force-iterations همراه با --pbkdf-memory و --pbkdf-parallel استفاده کنید. این کار مقادیر را بدون بنچمارک بازنویسی میکند. توجه داشته باشید که این میتواند باعث زمان بازگشایی بسیار طولانی شود یا با اتمام حافظه (OOM) منجر به پایان اجباری فرایند گردد. فقط در موارد خاص استفاده کنید، برای مثال اگر میدانید که دستگاه قالببندیشده در یک سیستم تعبیهشده (embedded) کوچک استفاده خواهد شد.
حداقل و حداکثر هزینههای PBKDF: برای PBKDF2، حداقل تعداد تکرار ۱۰۰۰ و حداکثر ۴۲۹۴۹۶۷۲۹۵ (حداکثر برای عدد صحیح ۳۲ بیتی بدون علامت) است. هزینههای حافظه و موازیسازی برای PBKDF2 پشتیبانی نمیشوند. برای Argon2i و Argon2id، حداقل تعداد تکرار (هزینه CPU) ۴ و حداکثر ۴۲۹۴۹۶۷۲۹۵ (حداکثر برای عدد صحیح ۳۲ بیتی بدون علامت) است. حداقل هزینه حافظه ۳۲ کیبیبایت و حداکثر ۴ گیبیبایت است. اگر پارامتر هزینه حافظه با بنچمارک سنجیده شود (توسط پارامتر مشخص نشده باشد)، همیشه در محدوده ۶۴ مبیبایت تا ۱ گیبیبایت است. هزینه حافظه بالاتر از ۱ گیبیبایت (تا حداکثر ۴ گیبیبایت) فقط میتواند توسط پارامتر --pbkdf-memory تنظیم شود. حداقل هزینه موازیسازی ۱ و حداکثر ۴ است (اگر هستههای CPU کافی در دسترس باشد، در غیر این صورت با تعداد هستههای CPU در دسترس کاهش مییابد).
هشدار: افزایش هزینههای محاسباتی PBKDF بالاتر از محدودیتهای ذکرشده، بهبود امنیتی ناچیزی ارائه میدهد. اگرچه هزینههای بالا سربار جستجوی فراگیر را بهطور قابل توجهی افزایش میدهد، اما حفاظت ناچیزی در برابر حملات فرهنگلغت فراهم میکند. افزایش حاشیهای هزینه برای پردازش یک فرهنگلغت کامل اساساً ناکافی باقی میماند.
محدودیتهای کدگذاریشده PBKDF نشاندهنده موازنههای مهندسیشده بین امنیت رمزنگاری و کارایی عملیاتی هستند. قالب LUKS قابلیت حمل را حفظ میکند و باید در زمان معقولی در سیستمهای با منابع محدود قابل استفاده باشد.
ابزار Cryptsetup به دلیل محدودیتهای معماری (مانند سیستمهای تعبیهشده و قدیمی)، حداکثر هزینه حافظه (۴ گیبیبایت) و هزینه موازیسازی (۴) را عمداً محدود میکند.
هزینه حافظه PBKDF نیازمند تخصیص رم فیزیکی واقعی با عملیات نوشتن متمرکز است که باید در حافظه رم فیزیکی باقی بماند. هرگونه استفاده از حافظه تعویض (swap) منجر به افت عملکرد غیرقابل قبولی میشود. مدیریت حافظه اغلب تخصیصها را فراتر از حافظه فیزیکی در دسترس متعهد میکند (overcommit)، با این انتظار که بیشتر حافظه تخصیصیافته بدون استفاده بماند. در چنین شرایطی، از آنجا که PBKDF همیشه از تمام حافظه تخصیصیافته استفاده میکند، مکرراً باعث خطاهای کمبود حافظه (out-of-memory) میشود که عملیات cryptsetup را لغو میکند.
--pbkdf-force-iterations تعداد
--pbkdf-memory تعداد
--pbkdf-parallel تعداد
--progress-frequency ثانیهها
--progress-json
{
"device":"/dev/sda", // دستگاه یا فایل زیربنایی
"device_bytes":"8192", // بایتهای ورودی/خروجی تا کنون
"device_size":"44040192", // کل بایتهای ورودی/خروجی باقیمانده
"speed":"126877696", // سرعت محاسبهشده بر حسب بایت در ثانیه (بر اساس پیشرفت تا کنون)
"eta_ms":"2520012", // زمان تخمینی برای اتمام عملیات بر حسب میلیثانیه
"time_ms":"5561235" // کل زمان صرفشده در عملیات ورودی/خروجی بر حسب میلیثانیه
}
نکته در مورد اعداد در خروجی JSON: به دلیل محدودیتهای تجزیهکننده JSON و نیاز به اعداد صحیح بدون علامت ۶۴ بیتی کامل، همه اعداد در قالب رشته نمایش داده میشوند.
--reduce-device-size اندازه
اگر فضایی به پارتیشن یا حجم منطقی زیربنایی اضافه کرده باشید میتواند مفید باشد (به طوری که آخرین اندازه سکتورها فاقد داده باشند).
برای پسوند واحدها، توضیحات پارامتر --device-size را ببینید.
هشدار: این یک عملیات تخریبی است و قابل برگشت نیست. با احتیاط فراوان استفاده کنید — سیستمفایلهایی که بهطور تصادفی رونویسی شدهاند معمولاً غیرقابل بازیابی هستند.
LUKS2: راهاندازی رمزنگاری مجدد LUKS2 با کاهش اندازه دستگاه داده (در حال حاضر، فقط حالت رمزنگاری پشتیبانی میشود). آخرین اندازه سکتورها در دستگاه اصلی متن خام برای ذخیره موقت اولین بخش داده اصلی استفاده میشود. بخش داده اول قبلی با هدر LUKS2 (نیمی از مقدار اندازه) جایگزین میشود، و دادههای متن خام در حین رمزنگاری به سمت عقب (مجدداً نیمی از مقدار اندازه) جابهجا میشوند.
حداقل اندازه توصیهشده دو برابر اندازه هدر پیشفرض LUKS2 است (--reduce-device-size 32M) برای حالت رمزنگاری.
مجموع مقادیر --device-size و --reduce-device-size نباید از اندازه واقعی دستگاه تجاوز کند.
LUKS1: بزرگ کردن آفست داده به مقدار مشخصشده از طریق کوچک کردن اندازه دستگاه.
شما نمیتوانید دستگاه را بیش از ۶۴ مبیبایت (۱۳۱۰۷۲ سکتور) کوچک کنید.
--resilience حالت (فقط LUKS2)
checksum: حالت پیشفرض، که در آن مجموعهای مقابلهای (checksum) مجزای سکتورهای ناحیه فعال متن رمزشده ذخیره میشود، بنابراین فرایند بازیابی میتواند تشخیص دهد کدام سکتورها قبلاً مجدداً رمزنگاری شدهاند. این حالت مستلزم اتمیک بودن نوشتن سکتور دستگاه است.
journal: ناحیه فعال در ناحیه باینری ژورنالبندی میشود (بنابراین دادهها دو بار نوشته میشوند).
none: حالت کارایی و عملکرد. هیچ حفاظتی وجود ندارد و تنها راه ایمن برای قطع رمزنگاری مجدد مشابه ابزار قدیمی رمزنگاری مجدد آفلاین است.
حالتهای تابآوری را میتوان تغییر داد مگر اینکه از حالت datashift برای راهاندازی عملیات استفاده شده باشد (رمزنگاری با گزینه --reduce-device-size).
--resilience-hash هش (فقط LUKS2)
--resume-only (فقط LUKS2)
--sector-size بایتها (فقط LUKS2)
هشدار: افزایش اندازه سکتور رمزنگاری ممکن است به سیستمفایل میزبانیشده آسیب برساند. اگر مطمئن نیستید سیستمفایل با چه اندازه بلوکی قالببندی شده است، رمزنگاری مجدد را با --force-offline-reencrypt اجرا نکنید.
توجه داشته باشید که استفاده از اندازه سکتور بزرگتر از اندازه سکتور فیزیکی دستگاه ذخیرهسازی زیربنایی ممکن است در هنگام قطع غیرمنتظره برق منجر به خراب شدن دادهها شود. قطع برق در طول عملیات نوشتن ممکن است منجر به تکمیل جزئی نوشتن سکتور رمزنگاری شود و دادههای رمزنگاریشده را در وضعیتی ناسازگار رها کند که نتوان آن را بهدرستی رمزگشایی کرد.
--timeout, -t ثانیهها
این گزینه زمانی مفید است که سیستم نباید در صورت عدم وارد کردن عبارت عبور توسط کاربر متوقف شود، مثلاً در هنگام بوت. مقدار پیشفرض ۰ ثانیه است که به معنای انتظار همیشگی است.
--token-id
ازسرگیری رمزنگاری مجدد LUKS2: مشخص میکند از کدام توکن استفاده شود و به اعلان PIN توکن اجازه میدهد تا بر اعلان تعاملی عبارت عبور اسلات کلید اولویت داشته باشد. در صورت حذف، تمام توکنهای موجود (که با PIN محافظت نشدهاند) قبل از ادامه با اعلان عبارت عبور بررسی خواهند شد.
--token-only
ازسرگیری رمزنگاری مجدد LUKS2: اگر بازگشایی اسلات کلید مبتنی بر توکن ناموفق بود، عملیات را ادامه ندهید. بدون این گزینه، عملیات برای ادامه درخواست عبارت عبور میکند.
این گزینه اجازه میدهد توکنهای LUKS2 محافظتشده با PIN بر اعلان تعاملی عبارت عبور اسلات کلید اولویت داشته باشند.
--token-type نوع
ازسرگیری رمزنگاری مجدد LUKS2: توکنهای واجد شرایط برای عملیات را به یک نوع توکن خاص محدود میکند. بیشتر زمانی مفید است که هیچ --token-id مشخص نشده باشد.
این گزینه به توکنهای نوع LUKS2 محافظتشده با PIN اجازه میدهد بر اعلان تعاملی عبارت عبور اسلات کلید اولویت داشته باشند.
--tries, -T
--type نوع
--usage
--use-directio (فقط LUKS1)
در صورتی که عملیات direct-io عملکرد بهتری نسبت به عملیات عادی بافرشده داشته باشد (مثلاً در محیطهای مجازی) مفید است.
--use-fsync (فقط LUKS1)
--use-random, --use-urandom
--uuid UUID
LUKS1 (فقط در حالت رمزگشایی): برای یافتن اینکه کدام UUID را ارسال کنید، به دنبال فایلهای موقت LUKS-UUID.[|log|org|new] فرایند رمزگشایی متوقفشده بگردید.
مقدار UUID باید در قالب استاندارد UUID ارائه شود، مانند 12345678-1234-1234-1234-123456789abc.
--verify-passphrase, -y
--version, -V
--volume-key-file فایل, --master-key-file فایل (نام مستعار منسوخشده)
LUKS1: گزینه --new-volume-key-file را ببینید.
--write-log (فقط LUKS1)
مثالها (EXAMPLES)
تا زمانی که قالب LUKS2 پیشفرض است، میتوانید گزینه --type luks2 را حذف کنید.
مثالهای رمزنگاری LUKS2
رمزنگاری دستگاه LUKS2 (در جا). اطمینان حاصل کنید که ۳۲ مبیبایت پایانی روی /dev/plaintext استفادهنشده است (مثلاً حاوی دادههای سیستمفایل نیست):
cryptsetup reencrypt --encrypt --type luks2 --reduce-device-size 32m /dev/plaintext_device
رمزنگاری دستگاه LUKS2 (در جا). تنها ۱ گیبیبایت اولیه از دادههای اصلی /dev/plaintext همزمان با جابهجایی به سمت عقب رمزنگاری میشود. اطمینان حاصل کنید که ۳۲ مبیبایت پایانی دستگاه داده استفادهنشده است (مثلاً فاقد هرگونه داده است):
cryptsetup reencrypt --encrypt --type luks2 --device-size 1g --reduce-device-size 32m /dev/plaintext_device
رمزنگاری دستگاه LUKS2 (در جا) با هدر جداشده، قرار داده شده در یک فایل:
cryptsetup reencrypt --encrypt --type luks2 --header my_luks2_header /dev/plaintext_device
فقط راهاندازی عملیات رمزنگاری در جای LUKS2 و فعالسازی دستگاه (هنوز رمزنگارینشده):
cryptsetup reencrypt --encrypt --type luks2 --init-only --reduce-device-size 32m /dev/plaintext_device my_future_luks_device
ازسرگیری رمزنگاری آنلاین روی دستگاه اولیهسازیشده در مثال بالا:
cryptsetup reencrypt --resume-only /dev/plaintext_device یا cryptsetup reencrypt --active-name my_future_luks_device
مثالهای رمزنگاری مجدد LUKS2
رمزنگاری مجدد دستگاه LUKS2 (فقط تازهسازی کلید حجم):
cryptsetup reencrypt /dev/encrypted_device
رمزنگاری مجدد دستگاه LUKS2 با استفاده از اسلات(های) کلید مرتبط با توکن ۳. تمام اسلاتهای کلید دیگر پس از پایان رمزنگاری مجدد حذف خواهند شد.
cryptsetup reencrypt --token-id 3 /dev/encrypted_device
رمزنگاری مجدد دستگاه LUKS2 با استفاده از اسلاتهای کلید مرتبط با تمام توکنهای 'systemd-tpm2'. تمام اسلاتهای کلید دیگر پس از پایان رمزنگاری مجدد حذف خواهند شد.
cryptsetup reencrypt --token-type systemd-tpm2 /dev/encrypted_device
مثالهای رمزگشایی LUKS2
رمزگشایی دستگاه LUKS2 با هدر قرارگرفته در ابتدای دستگاه داده (فایل هدر وجود ندارد):
cryptsetup reencrypt --decrypt --header /export/header/to/file /dev/encrypted_device
رمزگشایی دستگاه LUKS2 با هدر جداشده (فایل هدر وجود دارد):
cryptsetup reencrypt --decrypt --header detached-luks2-header /dev/encrypted_device
ازسرگیری رمزگشایی متوقفشده LUKS2:
cryptsetup reencrypt --resume-only --header luks2-hdr-file /dev/encrypted_device
گزارش باگها (REPORTING BUGS)
باگها را به لیست پستی cryptsetup <cryptsetup@lists.linux.dev> ارسال کنید یا در بخش مسائل پروژه https://gitlab.com/cryptsetup/cryptsetup/-/issues/new. گزارش دهید.
لطفاً خروجی دستور ناموفق را همراه با گزینه --debug ضمیمه کنید.
همچنین ببینید (SEE ALSO)
پرسشهای متداول cryptsetup https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions
CRYPTSETUP
بخشی از پروژه cryptsetup https://gitlab.com/cryptsetup/cryptsetup.
| 2026-07-21 | cryptsetup 2.8.7 |