| CRYPTSETUP-BENCHMARK(8) | دستورهای مدیریتی و نگهداری | CRYPTSETUP-BENCHMARK(8) |
نام (NAME)
cryptsetup-benchmark - سنجش کارایی و بنچمارک الگوریتمهای رمزنگاری و KDF
خلاصه دستور (SYNOPSIS)
cryptsetup benchmark [<گزینهها>]
توضیحات (DESCRIPTION)
کارایی الگوریتمهای رمزنگاری و توابع اشتقاق کلید (KDF: key derivation function) را میسنجد. بدون پارامتر، تلاش میکند چند پیکربندی متداول را اندازهگیری کند.
برای سنجش کارایی سایر رمزها یا حالتها، گزینههای --cipher و --key-size را مشخص کنید.
برای سنجش کارایی PBKDF باید --pbkdf یا --hash را با پارامترهای اختیاری هزینه شامل --iter-time، --pbkdf-memory یا --pbkdf-parallel مشخص نمایید.
این بنچمارک تنها از حافظه (RAM) استفاده میکند و فقط جنبه اطلاعرسانی دارد. نمیتوانید مستقیماً سرعت واقعی رمزنگاری فضای ذخیرهسازی را بر اساس آن پیشبینی کنید.
برای آزمایش رمزهای بلوکی، این بنچمارک نیازمند در دسترس بودن رابط رمزنگاری فضای کاربر در هسته لینوکس (kernel userspace crypto API) است. اگر خودتان هسته را پیکربندی میکنید، گزینه «User-space interface for symmetric key cipher algorithms» را در بخش «Cryptographic API» فعال کنید (گزینه CRYPTO_USER_API_SKCIPHER در .config).
<گزینهها>
میتوانند
شامل موارد
زیر باشند:
[--cipher, --key-size, --hash, --pbkdf,
--iter-time, --pbkdf-memory, --pbkdf-parallel].
گزینهها (OPTIONS)
--batch-mode, -q
اگر گزینه --verify-passphrase مشخص نشده باشد، این گزینه بررسی و تایید صحت گذرواژه را نیز غیرفعال میکند.
--cipher, -c <cipher-spec>
--debug یا --debug-json
در صورت استفاده از --debug-json، ساختارهای داده JSON اضافی مربوط به LUKS2 چاپ میشوند.
--hash, -h <hash-spec>
--help, -?
--iter-time, -i <number of milliseconds>
--key-size, -s bits
برای اطلاعات بیشتر /proc/crypto را ببینید. توجه داشته باشید که اندازه کلید در /proc/crypto بر حسب بایت بیان شده است.
این گزینه میتواند برای open --type plain یا luksFormat استفاده شود. تمامی اقدامات دیگر LUKS از اندازه کلید مشخصشده در هدر LUKS استفاده خواهند کرد. برای مشاهده مقادیر پیشفرض زمان کامپایل از cryptsetup --help استفاده کنید.
--pbkdf <PBKDF spec>
برای 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 استفاده کنید. این کار مقادیر را بدون اجرای بنچمارک جایگزین میکند. توجه داشته باشید که این موضوع میتواند باعث زمان بازگشایی قفل فوقالعاده طولانی شود یا به دلیل کمبود حافظه (out-of-memory) منجر به خاتمه بیقیدوشرط فرآیند گردد. تنها در موارد خاص از آن استفاده کنید؛ به عنوان مثال اگر میدانید که دستگاه قالببندیشده روی یک سامانه تعبیهشده (embedded) کوچک به کار خواهد رفت.
حداقل و حداکثر هزینههای PBKDF: برای PBKDF2، حداقل تعداد تکرار ۱۰۰۰ و حداکثر ۴۲۹۴۹۶۷۲۹۵ است (حداکثر مقدار برای یک عدد صحیح ۳۲ بیتی بدون علامت). هزینههای حافظه و موازیسازی برای PBKDF2 پشتیبانی نمیشوند. برای Argon2i و Argon2id، حداقل تعداد تکرار (هزینه CPU) برابر ۴ و حداکثر ۴۲۹۴۹۶۷۲۹۵ است (حداکثر برای یک عدد صحیح ۳۲ بیتی بدون علامت). حداقل هزینه حافظه ۳۲ کیلوبایت (KiB) و حداکثر ۴ گیگابایت (GiB) است. اگر پارامتر هزینه حافظه با بنچمارک تعیین شود (با یک پارامتر مشخص نشده باشد)، همیشه در محدوده ۶۴ مگابایت (MiB) تا ۱ گیگابایت (GiB) خواهد بود. هزینه حافظه بالاتر از ۱ گیگابایت (تا حداکثر ۴ گیگابایت) تنها با پارامتر --pbkdf-memory قابل تنظیم است. حداقل هزینه موازیسازی ۱ و حداکثر ۴ است (در صورتی که هستههای پردازنده کافی موجود باشد، در غیر این صورت بر اساس هستههای موجود پردازنده کاهش مییابد).
هشدار: افزایش هزینههای محاسباتی PBKDF بالاتر از محدودیتهای ذکرشده، بهبود امنیتی ناچیزی ایجاد میکند. در حالی که افزایش هزینهها سرریز جستجوی فراگیر (brute-force) را به میزان قابل توجهی افزایش میدهد، حفاظت ناچیزی در برابر حملات فرهنگلغت (dictionary) ارائه میدهد. افزایش هزینه نهایی برای پردازش کل یک فرهنگلغت همچنان از اساس ناکافی است.
محدودیتهای سختکدشده PBKDF نشاندهنده مصالحهای مهندسیشده میان امنیت رمزشناختی و کاربردپذیری عملیاتی است. LUKS قابلیت حمل را حفظ میکند و باید بتواند در سامانههای با منابع محدود نیز ظرف مدتی منطقی استفاده شود.
Cryptsetup به دلیل محدودیتهای معماری (مانند سامانههای تعبیهشده و قدیمی)، پارامترهای حداکثر هزینه حافظه (۴ گیگابایت) و هزینه موازیسازی (۴) را به عمد محدود میکند.
هزینه حافظه PBKDF نیازمند تخصیص رم (RAM) فیزیکی واقعی همراه با عملیات نوشتن فشرده است که باید حتماً در حافظه فیزیکی باقی بماند. هرگونه استفاده از حافظه تعویض (swap) منجر به کاهش غیرقابلقبول کارایی میشود. مدیریت حافظه در سیستمعامل اغلب تخصیصها را فراتر از حافظه فیزیکی در دسترس متعهد میشود (overcommit)، با این انتظار که بیشتر حافظه تخصیصیافته دستنخورده باقی بماند. در چنین شرایطی، از آنجا که PBKDF همیشه از تمام حافظه تخصیصیافته استفاده میکند، مکرراً باعث خطاهای کمبود حافظه (out-of-memory) میشود که عملیات cryptsetup را متوقف و سقط میکند.
--pbkdf-memory number
--pbkdf-parallel number
--usage
--version, -V
گزارش باگها (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.
| 2026-07-21 | cryptsetup 2.8.7 |