CRYPTSETUP-BENCHMARK(8) دستورهای مدیریتی و نگهداری CRYPTSETUP-BENCHMARK(8)

cryptsetup-benchmark - سنجش کارایی و بنچمارک الگوریتم‌های رمزنگاری و KDF

cryptsetup benchmark [<گزینه‌ها>]

کارایی الگوریتم‌های رمزنگاری و توابع اشتقاق کلید (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].

--batch-mode, -q

تمام پرسش‌های تاییدیه را لغو می‌کند. با احتیاط استفاده کنید!

اگر گزینه --verify-passphrase مشخص نشده باشد، این گزینه بررسی و تایید صحت گذرواژه را نیز غیرفعال می‌کند.

--cipher, -c <cipher-spec>

رشته مشخصه الگوریتم رمزنگاری را تنظیم می‌کند.

--debug یا --debug-json

اجرا در حالت اشکال‌زدایی با لاگ‌های تشخیصی کامل. خطوط خروجی اشکال‌زدایی همیشه با پیشوند # مشخص می‌شوند.

در صورت استفاده از --debug-json، ساختارهای داده JSON اضافی مربوط به LUKS2 چاپ می‌شوند.

--hash, -h <hash-spec>

هش مشخص‌شده برای PBKDF2 و تقسیم‌کننده AF استفاده می‌شود.

--help, -?

نمایش متن راهنما و پارامترهای پیش‌فرض.

--iter-time, -i <number of milliseconds>

مدت زمانی (به میلی‌ثانیه) که برای پردازش گذرواژه با PBKDF صرف می‌شود. تعیین 0 به عنوان آرگومان، مقدار پیش‌فرض زمان کامپایل را انتخاب می‌کند.

--key-size, -s bits

اندازه کلید را بر حسب بیت تنظیم می‌کند. شناسه باید مضربی از ۸ باشد. اندازه‌های ممکن کلید توسط رمز و حالت استفاده‌شده محدود می‌شوند.

برای اطلاعات بیشتر /proc/crypto را ببینید. توجه داشته باشید که اندازه کلید در /proc/crypto بر حسب بایت بیان شده است.

این گزینه می‌تواند برای open --type plain یا luksFormat استفاده شود. تمامی اقدامات دیگر LUKS از اندازه کلید مشخص‌شده در هدر LUKS استفاده خواهند کرد. برای مشاهده مقادیر پیش‌فرض زمان کامپایل از cryptsetup --help استفاده کنید.

--pbkdf <PBKDF spec>

تنظیم الگوریتم تابع اشتقاق کلید مبتنی بر گذرواژه (PBKDF) برای اسلات کلید LUKS. مقدار PBKDF می‌تواند شامل موارد زیر باشد: pbkdf2 (برای PBKDF2 طبق استاندارد RFC2898)، argon2i برای Argon2i یا argon2id برای Argon2id (برای اطلاعات بیشتر به Argon2 https://www.cryptolux.org/index.php/Argon2 مراجعه کنید).

برای 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 تنظیم می‌کند (برای Argon2i/id این عدد بیانگر کیلوبایت است). توجه داشته باشید که این حداکثر مقدار است؛ بنچمارک PBKDF یا حافظه فیزیکی در دسترس ممکن است آن را کاهش دهد. این گزینه برای PBKDF2 در دسترس نیست.

--pbkdf-parallel number

هزینه موازی‌سازی را برای PBKDF تنظیم می‌کند (تعداد رشته‌ها، تا ۴ عدد). توجه داشته باشید که این حداکثر مقدار است؛ در صورتی که تعداد هسته‌های فعال CPU کمتر باشد، به طور خودکار کاهش می‌یابد. این گزینه برای PBKDF2 در دسترس نیست.

--usage

نمایش راهنمای کوتاه گزینه‌ها.

--version, -V

نمایش نسخه برنامه.

گزارش باگ‌ها در لیست پستی cryptsetup <cryptsetup@lists.linux.dev> یا در بخش مسائل پروژه https://gitlab.com/cryptsetup/cryptsetup/-/issues/new.

لطفاً خروجی دستور ناموفق را همراه با گزینه --debug پیوست کنید.

Cryptsetup FAQ https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions

cryptsetup(8)، integritysetup(8) و veritysetup(8)

بخشی از پروژه cryptsetup https://gitlab.com/cryptsetup/cryptsetup.

2026-07-21 cryptsetup 2.8.7