- الملخص
- الوصف
- الإجراءات الأساسية
- وضع عادي
- امتداد LUKS
- امتداد LOOP-AES
- امتداد TCRYPT (متوافق مع TRUECRYPT و VERACRYPT)
- امتداد BITLK (متوافق مع BITLOCKER لنظام WINDOWS)
- توسيع FVAULT2 (متوافق مع APPLE MACOS FILEVAULT2)
- توسيع SED (محرك التشفير الذاتي) OPAL
- إجراءات متنوعة
- الوضع العادي أو LUKS؟
- تحذيرات
- أمثلة
- رموز الإرجاع
- ملاحظات
- معالجة كلمة المرور لوضع PLAIN
- معالجة العبارة السرية لـ LUKS
- سلوك غير متسق عند استخدام عبارات مرور/مفاتيح غير صحيحة
- التشفيرات، الأوضاع، الدوال التجزئة، وأحجام المفاتيح المدعومة
- ملاحظات حول عبارات المرور
- ملاحظات حول مولدات الأرقام العشوائية
- تشفير القرص المصادق عليه (تجريبي)
- ملاحظات حول استخدام جهاز loopback
- تأمين رأس LUKS2 على القرص
- مواصفات تنسيق LUKS على القرص
- المؤلفون
- الإبلاغ عن الأخطاء
- انظر أيضًا
- CRYPTSETUP
cryptsetup - أداة لتكوين وإدارة أجهزة التخزين المشفرة
الملخص
cryptsetup <الإجراء> [<الخيارات>] <وسائط الإجراء>
الوصف
Cryptsetup هي أداة لتكوين وإدارة التشفير الكامل للقرص على أجهزة التخزين. يمكنها تشفير أجهزة الكتلة (مثل محركات الأقراص الصلبة أو الأقسام) والحاويات (صور الأقراص المخزنة كملفات).
عندما تقوم بفتح وحدة تخزين مشفرة، يقوم cryptsetup بإنشاء تعيين جهاز جديد يمكن للتطبيقات الوصول إليه مثل أي جهاز تخزين عادي. يتم تنفيذ العمل الفعلي للتشفير وفك التشفير بشفافية بواسطة برنامج تشغيل dm-crypt الخاص بالنواة.
يعمل cryptsetup مع نوعين رئيسيين من وحدات التخزين: وحدات التخزين المشفرة العادية ووحدات LUKS (Linux Unified Key Setup). توفر وحدات التخزين العادية تشفيرًا أساسيًا، بينما تتضمن وحدات LUKS رأس بيانات تعريف يسمح بميزات متقدمة مثل فتحات مفاتيح متعددة وإدارة المفاتيح. بالإضافة إلى ذلك، يمكن استخدام LUKS لإدارة التشفير القائم على الأجهزة على محركات التخزين المتوافقة مع OPAL.
يوفر cryptsetup أيضًا دعمًا محدودًا لوحدات التخزين التي تم إنشاؤها بواسطة أنظمة تشفير أخرى، بما في ذلك loop-AES و TrueCrypt و VeraCrypt و BitLocker و FileVault2.
لمزيد من المعلومات حول إجراء معين في cryptsetup، راجع cryptsetup-<الإجراء>(8)، حيث <الإجراء> هو اسم إجراء cryptsetup.
يمكن تنشيط أجهزة cryptsetup أثناء التشغيل من خلال crypttab(5)، والتي هي جزء من systemd(1) أو نصوص تهيئة النظام الأخرى.
الإجراءات الأساسية
الإجراءات التالية صالحة لجميع أنواع الأجهزة المدعومة.
OPEN
open <الجهاز> <الاسم> --type <نوع_الجهاز>
يفتح (ينشئ تعيينًا) <الاسم> مدعومًا بالجهاز <الجهاز>. انظر cryptsetup-open(8).
CLOSE
close <الاسم>
يزيل التعيين الحالي <الاسم> ويمسح المفتاح من ذاكرة النواة. انظر cryptsetup-close(8).
STATUS
status <الاسم>
يعرض حالة التعيين <الاسم>. انظر cryptsetup-status(8).
RESIZE
resize <الاسم>
يغير حجم التعيين النشط <الاسم>. انظر cryptsetup-resize(8).
REFRESH
refresh <الاسم>
يجدد معلمات التعيين النشط <الاسم>. انظر cryptsetup-refresh(8).
REENCRYPT
reencrypt <الجهاز> أو --active-name <الاسم> [<الاسم_الجديد>]
قم بتشغيل إعادة تشفير جهاز LUKS. انظر cryptsetup-reencrypt(8).
وضع عادي
يقوم dm-crypt العادي بتشفير الجهاز قطاعًا تلو الآخر باستخدام تجزئة مفردة وغير مملحة لعبارة المرور. لا يتم إجراء أي عمليات فحص، ولا يتم استخدام أي بيانات تعريف. لا توجد عملية تهيئة. عند تعيين الجهاز الخام (فتحه)، يمكن استخدام عمليات الجهاز العادية على الجهاز الذي تم تعيينه، بما في ذلك إنشاء نظام الملفات. توجد الأجهزة التي تم تعيينها عادةً في /dev/mapper/<الاسم>.
الإجراءات الصالحة لأنواع الأجهزة العادية هي:
OPEN
open --type plain <device> <name>
create <name> <device> (صيغة قديمة)
يفتح (ينشئ تعيينًا باسم)
امتداد LUKS
LUKS، أو Linux Unified Key Setup، هو معيار لتشفير القرص. يضيف رأسًا موحدًا في بداية الجهاز، ومنطقة تخزين مفاتيح مباشرة خلف الرأس، ومنطقة البيانات الرئيسية خلف ذلك. المجموعة بأكملها تسمى "حاوية LUKS". الجهاز الذي تقع عليه حاوية LUKS يسمى "جهاز LUKS". لأغراض معظم الاستخدامات، يمكن استخدام كلا المصطلحين بالتبادل.
يمكن لـ LUKS إدارة عبارات مرور متعددة يمكن إلغاؤها أو تغييرها بشكل فردي. تستخدم كل عبارة مرور فتحة مفاتيح فردية تحتوي على مفتاح وحدة لتشفير البيانات. يمكن مسح فتحات المفاتيح بشكل آمن من وسائط التخزين الدائمة بسبب استخدام الشرائط المضادة للطب الشرعي. يتم حماية عبارات المرور ضد هجمات القوة الغاشمة بواسطة دالة اشتقاق المفاتيح المستندة إلى كلمة المرور (PBKDF). عبارة المرور المخزنة في ملف تسمى "ملف مفتاح". الفرق الوحيد بين عبارة المرور وملف المفتاح هو أن ملف المفتاح يمكن أن يحتوي على بيانات ثنائية. يتم معالجة كليهما بنفس الطريقة.
LUKS الإصدار 1 (أو LUKS1) هو تنسيق البيانات الوصفية الأصلي، في حين أن LUKS2 هو إصدار جديد يسمح بامتدادات إضافية مثل خوارزميات PBKDF المختلفة أو التشفير المصادق عليه. يمكنك تنسيق الجهاز بإصدار LUKS معين باستخدام --type luks1 أو --type luks2 في الأمر luksFormat. عادةً، لا تحتاج إلى تحديد أي إصدار حيث يتم التعرف عليه تلقائيًا. التنسيق الافتراضي هو LUKS2.
يمكن أيضًا تحديد معلمة <device> عن طريق UUID الخاص بـ LUKS بالتنسيق UUID=<uuid>.
يمكن فصل رأس LUKS عن البيانات (وتخزينه بشكل منفصل). لتحديد رأس منفصل، يمكن استخدام المعلمة --header في جميع أوامر LUKS ويأخذ دائمًا الأسبقية على معلمة <device> الموضعية.
الإجراءات الصالحة لـ LUKS هي:
FORMAT
luksFormat <device> [<key file>]
يقوم بتهيئة قسم LUKS ويضبط عبارة المرور الأولية (لفتحة المفاتيح 0). انظر cryptsetup-luksFormat(8).
OPEN
open --type luks <device> <name>
luksOpen <device> <name> (صيغة قديمة)
يفتح جهاز LUKS
SUSPEND
luksSuspend <name>
يعلق جهازًا نشطًا (ستحظر جميع عمليات الإدخال/الإخراج وستنتظر الوصول إلى الجهاز إلى أجل غير مسمى) ويمسح مفتاح التشفير من ذاكرة النواة. انظر cryptsetup-luksSuspend(8).
RESUME
luksResume <name>
يستأنف جهازًا معلقًا ويعيد مفتاح التشفير. انظر cryptsetup-luksResume(8).
ADD KEY
luksAddKey <device> [<key file with new key>]
يضيف عبارة مرور جديدة باستخدام عبارة مرور موجودة. انظر cryptsetup-luksAddKey(8).
إزالة المفتاح
luksRemoveKey <الجهاز> [<ملف مفتاح مع عبارة المرور المراد إزالتها>]
يزيل عبارة المرور المحددة من جهاز LUKS. انظر cryptsetup-luksRemoveKey(8).
تغيير المفتاح
luksChangeKey <الجهاز> [<ملف مفتاح جديد>]
يغير عبارة مرور موجودة. انظر cryptsetup-luksChangeKey(8).
تحويل المفتاح
luksConvertKey <الجهاز>
يحول فتحة مفاتيح LUKS2 موجودة إلى معلمات PBKDF جديدة. انظر cryptsetup-luksConvertKey(8).
مسح الفتحة
luksKillSlot <الجهاز> <رقم>
يمسح الفتحة ذات الرقم <رقم> من جهاز LUKS. انظر cryptsetup-luksKillSlot(8).
مسح
erase <الجهاز>
luksErase <الجهاز> (الصيغة القديمة)
يمسح جميع الفتحات ويجعل حاوية LUKS غير قابلة للوصول بشكل دائم. انظر cryptsetup-erase(8).
UUID
luksUUID <الجهاز>
يطبع أو يضبط UUID لجهاز LUKS. انظر cryptsetup-luksUUID(8).
هل هو LUKS؟
isLuks <الجهاز>
يعيد القيمة true إذا كان <الجهاز> جهاز LUKS، وإلا يعيد القيمة false. انظر cryptsetup-isLuks(8).
تفريغ
luksDump <الجهاز>
يفريغ معلومات الرأس لجهاز LUKS. انظر cryptsetup-luksDump(8).
نسخ احتياطي للرأس
luksHeaderBackup <الجهاز> --header-backup-file <ملف>
يخزن نسخة احتياطية ثنائية من رأس LUKS ومنطقة فتحة المفاتيح. انظر cryptsetup-luksHeaderBackup(8).
استعادة الرأس
luksHeaderRestore <الجهاز> --header-backup-file <ملف>
يستعيد نسخة احتياطية ثنائية من رأس LUKS ومنطقة فتحة المفاتيح من الملف المحدد. انظر cryptsetup-luksHeaderRestore(8).
رمز
token <إضافة|إزالة|استيراد|تصدير> <الجهاز>
يتعامل مع كائنات الرمز المستخدمة للحصول على عبارات المرور. انظر cryptsetup-token(8).
تحويل
convert <الجهاز> --type <تنسيق>
يحول الجهاز بين تنسيق LUKS1 و LUKS2 (إذا أمكن). انظر cryptsetup-convert(8).
تكوين
config <الجهاز>
يضبط خيارات التكوين الدائمة (ويخزنها في رأس LUKS). انظر cryptsetup-config(8).
امتداد LOOP-AES
يدعم Cryptsetup تعيين قسم مشفر loop-AES باستخدام وضع توافق.
فتح
open --type loopaes <الجهاز> <الاسم> --key-file <ملف المفتاح>
loopaesOpen <الجهاز> <الاسم> --key-file <ملف المفتاح> (الصيغة القديمة)
يفتح جهاز loop-AES <الجهاز> ويقوم بإعداد تعيين <الاسم>. انظر cryptsetup-open(8).
انظر أيضًا القسم 7 من الأسئلة الشائعة و loop-AES [http://loop-aes.sourceforge.net] لمزيد من المعلومات حول loop-AES.
امتداد TCRYPT (متوافق مع TRUECRYPT و VERACRYPT)
يدعم Cryptsetup تعيين الأقسام المشفرة من TrueCrypt أو tcplay أو VeraCrypt باستخدام واجهة برمجة تطبيقات تشفير نظام Linux الأساسية. لا يتم دعم تنسيق الرأس وتغيير رأس TCRYPT؛ لا يقوم cryptsetup أبدًا بتغيير رأس TCRYPT على الجهاز.
يتطلب امتداد TCRYPT توفر واجهة المستخدم الخاصة بمساحة kernel. إذا كنت تقوم بتكوين kernel بنفسك، فقم بتمكين "واجهة مساحة المستخدم لخوارزميات التشفير المتماثلة" في قسم "واجهة برمجة تطبيقات التشفير" (خيار التكوين CRYPTO_USER_API_SKCIPHER).
نظرًا لأن رأس TCRYPT مشفر، يجب عليك دائمًا توفير عبارة مرور صالحة وملفات مفاتيح.
يجب أن يتعرف Cryptsetup على جميع تنسيقات الرأس، باستثناء سلاسل التشفير القديمة التي تستخدم وضع تشفير LRW مع حجم كتلة تشفير 64 بت (على وجه التحديد، لا يتم التعرف على Blowfish في وضع LRW؛ هذا يمثل قيودًا لواجهة برمجة تطبيقات التشفير في النواة).
VeraCrypt هو امتداد لـ TrueCrypt مع زيادة عدد التكرارات، لذلك قد يستغرق فتح الجهاز وقتًا طويلاً.
لفتح جهاز VeraCrypt باستخدام قيمة مُعدِّل التكرار الشخصي (PIM) مخصصة، استخدم إما الخيار --veracrypt-pim PIM لتحديد PIM مباشرةً في سطر الأوامر أو استخدم --veracrypt-query-pim ليتم مطالبتك بإدخال PIM.
تؤثر قيمة PIM على عدد التكرارات المطبقة أثناء اشتقاق المفتاح. يرجى الرجوع إلى PIM [https://veracrypt.io/en/Personal%20Iterations%20Multiplier%20(PIM).html] للحصول على مزيد من المعلومات التفصيلية.
إذا كنت بحاجة إلى تعطيل دعم جهاز VeraCrypt، فاستخدم الخيار --disable-veracrypt.
التنشيط باستخدام tcryptOpen مدعوم فقط لسلاسل التشفير التي تستخدم وضع تشفير LRW أو XTS.
يجب أن يعمل الأمر tcryptDump لجميع أجهزة TCRYPT التي تم التعرف عليها ولا يتطلب امتيازات المستخدم الخارق.
لتعيين جهاز النظام (الجهاز الذي يحتوي على محمل الإقلاع حيث يوجد النظام المشفر بالكامل)، استخدم الخيار --tcrypt-system. يرجى قراءة المعلومات المحددة في cryptsetup-tcryptOpen(8) -- قسم خيار --tcrypt-system لأن تعيين جهاز مشفر للنظام أمر صعب.
لاستخدام الرأس المخفي (وتعيين الجهاز المخفي، إذا كان متاحًا)، استخدم الخيار --tcrypt-hidden.
لاستخدام الرأس الاحتياطي (الثانوي) بشكل صريح، استخدم الخيار --tcrypt-backup.
لا توجد حماية للحجم المخفي إذا تم تحميل الحجم الخارجي. والسبب هو أنه إذا كانت هناك أي حماية، فستتطلب بعض البيانات الوصفية التي تصف ما يجب حمايته في الحجم الخارجي، وسيصبح الحجم المخفي قابلاً للاكتشاف.
فتح
`open --type tcrypt <device> <name>`
`tcryptOpen_ <device> <name>` (صيغة قديمة)
يفتح جهاز TCRYPT (متوافق مع TrueCrypt) <device> ويقوم بإعداد تعيين <name>. انظر cryptsetup-open(8).
إفراغ
`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 لنظام WINDOWS)
يدعم cryptsetup تعيين أقسام مشفرة بـ BitLocker و BitLocker to Go باستخدام واجهة برمجة تطبيقات التشفير الأصلية لنواة Linux. لا يتم دعم تنسيق الرأس وتغييرات رأس BITLK؛ لا يقوم cryptsetup أبدًا بتغيير رأس BITLK على الجهاز.
يتطلب امتداد BITLK أن تكون واجهة برمجة تطبيقات التشفير لمساحة المستخدم في النواة متاحة (للحصول على التفاصيل، انظر قسم TCRYPT).
يجب أن يتعرف cryptsetup على جميع إصدارات رأس BITLK، باستثناء الرأس القديم المستخدم في أنظمة Windows Vista والأجهزة التي تم فك تشفيرها جزئيًا. يتطلب تفعيل الأجهزة القديمة المشفرة في وضع CBC إصدار نواة Linux 5.3 على الأقل، وللأجهزة التي تستخدم ناشر Elephant، إصدار 5.6.
يجب أن يعمل الأمر bitlkDump لجميع أجهزة BITLK المدعومة ولا يتطلب امتيازات المستخدم الخارق.
لفتح الجهاز، يجب توفير كلمة مرور أو عبارة استرداد أو مفتاح بدء التشغيل.
بالإضافة إلى ذلك، يتم دعم فتح الجهاز باستخدام مفتاح وحدة التحكم. يجب توفير مفتاح تشفير وحدة التخزين الكاملة BitLocker (FVEK) باستخدام الخيار --volume-key-file. يجب فك تشفير المفتاح وإزالة الرأس (يجب أن يحتوي فقط على 128/256/512 بت من بيانات المفتاح، اعتمادًا على خوارزمية التشفير والوضع المستخدم).
لا يتم دعم طرق الفتح الأخرى (TPM و SmartCard).
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 (متوافق مع APPLE MACOS FILEVAULT2)
يدعم cryptsetup تعيين FileVault2 (تشفير القرص الكامل FileVault2) من Apple لنظام التشغيل macOS باستخدام واجهة برمجة تطبيقات التشفير الخاصة بنظام Linux kernel.
يدعم cryptsetup فقط FileVault2 بناءً على Core Storage ونظام الملفات HFS+ (تم تقديمه في MacOS X 10.7 Lion). لا يدعم الإصدار الجديد من FileVault المستند إلى نظام الملفات APFS المستخدم في إصدارات macOS الحديثة.
تنسيق الرأس وتغييرات رأس FVAULT2 غير مدعومة؛ لا يقوم cryptsetup أبدًا بتغيير رأس FVAULT2 على الجهاز.
يتطلب توسيع FVAULT2 أن تكون واجهة برمجة تطبيقات التشفير الخاصة بمساحة kernel متاحة (للحصول على التفاصيل، راجع قسم TCRYPT) وبرنامج تشغيل kernel لنظام الملفات HFS+ (hfsplus).
يجب أن يتعرف cryptsetup على التكوين الأساسي للأقراص المحمولة.
يجب أن يعمل الأمر fvault2Dump لجميع أجهزة FVAULT2 المدعومة ولا يتطلب امتيازات المستخدم الخارق.
لفتح الجهاز، يجب توفير كلمة مرور. لا يتم دعم طرق الفتح الأخرى.
OPEN
open --type fvault2 <device> <name>
fvault2Open <device> <name> (الصيغة القديمة)
يفتح جهاز FVAULT2 (متوافق مع FileVault2) <device> (عادةً القسم الثاني على الجهاز) ويقوم بإعداد تعيين <name>. راجع cryptsetup-open(8).
توسيع SED (محرك التشفير الذاتي) OPAL
يدعم cryptsetup استخدام التشفير المدمج للأجهزة على محركات الأقراص التي توفر واجهة OPAL، سواء كانت متداخلة مع dm-crypt أو قائمة بذاتها. يتم تخزين عبارات المرور والرموز والبيانات الوصفية باستخدام تنسيق رأس LUKS2، وبالتالي فهي متوافقة مع أي برنامج أو نظام يستخدم LUKS2 (على سبيل المثال، الرموز).
يتطلب دعم OPAL إصدار kernel على الأقل v6.4. لا يتم دعم تغيير حجم الأجهزة.
يمكن تحديد الخيار --hw-opal لـ OPAL + dm-crypt، ويمكن تحديد الخيار --hw-opal-only لاستخدام OPAL فقط، بدون طبقة dm-crypt.
تُشبه عمليات فتح وإغلاق وتسجيل الرموز (Tokens) تلك المستخدمة في LUKS2 و dm-crypt. المعلمات الجديدة ضرورية فقط عند التنسيق؛ سيتأكد رأس بيانات LUKS2 من إجراء الإعداد الصحيح عند الفتح أو الإغلاق.
إذا لم يتم تحديد تسمية نظام فرعي، فسيتم تعيينها تلقائيًا إلى HW-OPAL بحيث يكون من الواضح على الفور عندما يستخدم الجهاز OPAL.
التنسيق
luksFormat --type luks2 --hw-opal <الجهاز> [<ملف المفتاح>]
بالإضافة إلى ذلك، حدد --hw-opal-only بدلاً من --hw-opal لتجنب طبقة dm-crypt. بخلاف كلمة المرور المعتادة، يجب تحديد كلمة مرور المسؤول عند تنسيق القسم الأول من القرص، ويجب إعادة تقديمها عند تنسيق أي أقسام أخرى حتى يتم إجراء إعادة ضبط المصنع.
المسح
erase <الجهاز>
امسح قسمًا أو جهازًا بشكل آمن. يتطلب كلمة مرور المسؤول. بالإضافة إلى ذلك، حدد --hw-opal-factory-reset لإجراء إعادة ضبط كاملة للمصنع للقرص، باستخدام PSID الخاص بالقرص (عادةً ما يكون مطبوعًا على الملصق) بدلاً من كلمة مرور المسؤول.
يجب إدخال PSID بدون شرطات أو مسافات أو شرطات سفلية.
تحذير: ستؤدي إعادة ضبط المصنع إلى فقدان جميع البيانات الموجودة على الجهاز، بغض النظر عن القسم الذي يتم تشغيلها عليه، إن وجد، وبغض النظر عن أي نسخة احتياطية لرأس بيانات LUKS2.
إجراءات متنوعة
الإصلاح
repair <الجهاز>
يحاول إصلاح بيانات التعريف للجهاز إذا أمكن. مدعوم حاليًا فقط لنوع جهاز LUKS. راجع cryptsetup-repair(8).
القياس
benchmark <الخيارات>
يقيس أداء التشفير و KDF (دالة اشتقاق المفتاح). راجع cryptsetup-benchmark(8).
الوضع العادي أو LUKS؟
إلا إذا كنت تفهم جيدًا الخلفية التشفيرية، فاستخدم LUKS. في الوضع العادي، هناك عدد من الأخطاء المحتملة التي يرتكبها المستخدم والتي تقلل بشكل كبير من الأمان. في حين أن LUKS لا يمكنه إصلاحها جميعًا، إلا أنه يمكن أن يقلل من تأثيرها في كثير من الحالات.
تحذيرات
يمكن العثور على الكثير من المعلومات الجيدة حول مخاطر استخدام التخزين المشفر، وكيفية التعامل مع المشكلات، والجوانب الأمنية في الأسئلة الشائعة لـ Cryptsetup. اقرأها. ومع ذلك، تستحق بعض المخاطر الذكر هنا.
النسخ الاحتياطي: تتعطل وسائط التخزين. لا يؤثر التشفير على ذلك. النسخ الاحتياطي إلزامي للبيانات المشفرة أيضًا، إذا كانت البيانات ذات قيمة. راجع الأسئلة الشائعة لـ Cryptsetup للحصول على نصائح حول كيفية إجراء نسخ احتياطي لوحدة تخزين مشفرة.
ترميز الأحرف: إذا أدخلت عبارة مرور برموز خاصة، فقد تتغير عبارة المرور اعتمادًا على ترميز الأحرف. يمكن أيضًا تغيير إعدادات لوحة المفاتيح، مما قد يجعل الإدخال الأعمى صعبًا أو مستحيلًا. على سبيل المثال، يمكن أن يؤدي التبديل من بعض متغيرات ASCII ذي 8 بت إلى UTF-8 إلى ترميز ثنائي مختلف وبالتالي عبارة مرور مختلفة يراها cryptsetup، حتى لو كان ما تراه على المحطة الطرفية هو نفسه تمامًا. لذلك، يوصى بشدة باختيار أحرف عبارة المرور فقط من ASCII ذي 7 بت، حيث يظل ترميز ASCII ذي 7 بت كما هو لجميع متغيرات ASCII و UTF-8.
رأس LUKS: إذا تعرض رأس وحدة تخزين LUKS للتلف، فستفقد جميع البيانات بشكل دائم ما لم يكن لديك نسخة احتياطية من الرأس. إذا تعرضت فتحة مفاتيح للتلف، فلا يمكن استعادتها إلا من نسخة احتياطية من الرأس أو إذا كانت هناك فتحة مفاتيح نشطة أخرى بعبارة مرور معروفة غير تالفة. هذا الخطر هو نتيجة للمفاضلة بين الأمان والسلامة، حيث تم تصميم LUKS للمسح السريع والآمن ببساطة عن طريق الكتابة فوق رأس البيانات ومنطقة فتحة المفاتيح.
الأقسام المستخدمة سابقًا: إذا كان قد تم استخدام قسم مسبقًا، فمن الجيد جدًا مسح توقيعات نظام الملفات والبيانات وما إلى ذلك قبل إنشاء حاوية LUKS أو dm-crypt عادية. لإزالة سريعة لتوقيعات نظام الملفات، استخدم wipefs(8) مع الخيار --all. لاحظ أنه لا يزيل البيانات؛ بل يقوم فقط بإبطال التوقيعات المعروفة. للحصول على مسح كامل، قم بالكتابة فوق القسم بأكمله قبل إنشاء حاوية. إذا كنت لا تعرف كيفية القيام بذلك، يصف قسم الأسئلة الشائعة في cryptsetup العديد من الخيارات.
أمثلة
المثال 1: إنشاء حاوية LUKS 2 على جهاز الكتلة /dev/sdX. sudo cryptsetup --type luks2 luksFormat /dev/sdX
المثال 2: إضافة كلمة مرور إضافية إلى فتحة المفاتيح 5. sudo cryptsetup luksAddKey --key-slot 5 /dev/sdX
المثال 3: إنشاء نسخة احتياطية من رأس LUKS وحفظها في ملف. sudo cryptsetup luksHeaderBackup /dev/sdX --header-backup-file /var/tmp/NameOfBackupFile
المثال 4: فتح حاوية LUKS على /dev/sdX وربطها بـ sdX_crypt. sudo cryptsetup open /dev/sdX sdX_crypt
تحذير: الأمر الموجود في المثال 5 سيمحو جميع فتحات المفاتيح.
لا يمكنك استخدام حاوية LUKS الخاصة بك بعد ذلك إلا إذا كان لديك نسخة احتياطية لاستعادتها.
المثال 5: مسح جميع فتحات المفاتيح على /dev/sdX. sudo cryptsetup erase /dev/sdX
المثال 6: استعادة رأس LUKS من ملف النسخة الاحتياطية. sudo cryptsetup luksHeaderRestore /dev/sdX --header-backup-file /var/tmp/NameOfBackupFile
رموز الإرجاع
يرجع cryptsetup 0 في حالة النجاح وقيمة غير صفرية في حالة حدوث خطأ.
رموز الخطأ هي: 1 معلمات خاطئة، 2 لا يوجد إذن (كلمة مرور خاطئة)، 3 نفاد الذاكرة، 4 تم تحديد جهاز خاطئ، 5 الجهاز موجود بالفعل أو الجهاز مشغول.
ملاحظات
معالجة كلمة المرور لوضع PLAIN
لاحظ أنه لا يتم إجراء أي تكرار للتجزئة أو إضافة ملح في الوضع العادي. إذا تم إجراء التجزئة، فهي تجزئة مباشرة واحدة. هذا يعني أن كلمات المرور منخفضة الإنتروبيا يسهل اختراقها في الوضع العادي.
من الطرفية: تتم قراءة كلمة المرور حتى السطر الجديد الأول، أي '\n'. تتم معالجة الإدخال بدون حرف السطر الجديد باستخدام التجزئة الافتراضية أو التجزئة المحددة باستخدام --hash. سيتم اقتطاع نتيجة التجزئة إلى حجم مفتاح التشفير المستخدم، أو الحجم المحدد باستخدام -s.
من stdin: سيستمر القراءة حتى سطر جديد (أو حتى الوصول إلى الحد الأقصى لحجم الإدخال)، مع إزالة حرف السطر الجديد الأخير. يتم تحديد الحد الأقصى لحجم الإدخال من خلال نفس الافتراضي المضمن كحد أقصى لحجم ملف المفتاح ويمكن استبداله باستخدام الخيار --keyfile-size.
سيتم تجزئة البيانات التي تمت قراءتها باستخدام التجزئة الافتراضية أو التجزئة المحددة باستخدام --hash. سيتم اقتطاع نتيجة التجزئة إلى حجم مفتاح التشفير المستخدم، أو الحجم المحدد باستخدام -s.
لاحظ أنه إذا تم استخدام --key-file=- لقراءة المفتاح من الإدخال القياسي، فلن تتم إزالة الأسطر الجديدة الزائدة من الإدخال.
إذا تم استخدام "plain" كوسيطة لـ --hash، فلن يتم تجزئة بيانات الإدخال. بدلاً من ذلك، سيتم حشوها بالأصفار (إذا كانت أقصر من حجم المفتاح) أو اقتطاعها (إذا كانت أطول من حجم المفتاح) واستخدامها مباشرةً كمفتاح ثنائي. هذا مفيد لتحديد مفتاح ثنائي مباشرةً. لن يتم إصدار أي تحذير إذا كان مقدار البيانات التي يتم قراءتها من الإدخال القياسي أقل من حجم المفتاح.
من ملف مفتاح: سيتم اقتطاعها إلى حجم المفتاح الخاص بالشفرة المستخدمة أو الحجم المحدد بواسطة -s واستخدامها مباشرةً كمفتاح ثنائي.
يتم تجاهل الوسيطة --hash. يمكن استخدام خيار --hash فقط لإدخال الإدخال القياسي في الوضع العادي.
إذا كان ملف المفتاح أقصر من المفتاح، فسوف يخرج cryptsetup بخطأ. يتم تحديد الحد الأقصى لحجم الإدخال بنفس القيمة الافتراضية المضمنة لحجم ملف المفتاح الأقصى ويمكن تجاوزها باستخدام خيار --keyfile-size.
معالجة العبارة السرية لـ LUKS
من الطرفية: تتم قراءة العبارة السرية حتى أول سطر جديد ثم تتم معالجتها بواسطة PBKDF2 بدون حرف السطر الجديد.
من الإدخال القياسي: سيقوم LUKS بقراءة العبارات السرية من الإدخال القياسي حتى أول سطر جديد أو الحد الأقصى لحجم ملف المفتاح المضمن. إذا تم إعطاء --keyfile-size، فسيتم تجاهله.
من ملف مفتاح: تتم قراءة ملف المفتاح بأكمله حتى الحد الأقصى للحجم المضمن. لا تنهي أحرف الأسطر الجديدة الإدخال. يمكن استخدام خيار --keyfile-size للحد من ما يتم قراءته.
يستخدم LUKS دالة اشتقاق المفتاح المستندة إلى كلمة المرور (PBKDF) للحماية من هجمات القوة الغاشمة ولتوفير بعض الحماية للعبارات السرية ذات الإنتروبيا المنخفضة (راجع أسئلة وأجوبة cryptsetup). يدعم LUKS1 خوارزمية PBKDF2 فقط، بينما يدعم LUKS2 أيضًا خوارزمية Argon2 المعقدة. يتم تكوين PBKDFs بتكاليف: المدة التي يجب أن يستغرقها التكرار (تكلفة وحدة المعالجة المركزية أو عدد التكرارات)، وكمية الذاكرة المستخدمة (تكلفة الذاكرة)، وعدد العمليات المتوازية المستخدمة (التكلفة المتوازية). تدعم PBKDF2 فقط عدد التكرارات. يستخدم Cryptsetup معيار PBKDF لحساب التكاليف المثلى بناءً على الكمبيوتر الذي تتم فيه تهيئة العبارة السرية الجديدة. إذا لزم الأمر، يمكن أيضًا تجاوز هذه التكاليف. لاحظ أنه توجد بعض الحدود المحددة، للحصول على التفاصيل، راجع قسم التكاليف الدنيا والقصوى لـ PBKDF في وصف خيار --pbkdf.
في أي وقت يتم فيه إضافة عبارة سرية إلى رأس LUKS (luksAddKey، luksFormat)، يمكن للمستخدم تحديد المدة التي يجب أن تستغرقها معالجة العبارة السرية. يتم استخدام الوقت لتحديد عدد التكرارات لـ PBKDF2، وسوف توفر الأوقات الأطول حماية أفضل للعبارات السرية ذات الإنتروبيا المنخفضة، ولكن ستستغرق عملية luksOpen وقتًا أطول لإكمالها. بالنسبة للعبارات السرية التي تحتوي على إنتروبيا أعلى من طول المفتاح المستخدم، لن تزيد أوقات التكرار الأعلى من الأمان.
الإعداد الافتراضي الذي يبلغ ثانية أو ثانيتين كافٍ لمعظم الحالات العملية. الاستثناء الوحيد هو العبارة السرية ذات الإنتروبيا المنخفضة المستخدمة على جهاز مزود بوحدة معالجة مركزية بطيئة، حيث سيؤدي ذلك إلى عدد تكرارات منخفض. على جهاز بطيء، قد يكون من المستحسن زيادة وقت التكرار باستخدام خيار --iter-time للحصول على عدد تكرارات أعلى. هذا يبطئ جميع عمليات luksOpen اللاحقة وفقًا لذلك.
سلوك غير متسق عند استخدام عبارات مرور/مفاتيح غير صحيحة
يقوم LUKS بالتحقق من صحة عبارة المرور عند فك تشفير فتحة مفاتيح.
يختلف سلوك dm-crypt العادي. سيقوم دائمًا بفتح الجهاز باستخدام عبارة المرور المقدمة. إذا كانت عبارة المرور المقدمة خاطئة، فسيستخدم الجهاز الذي تم تعيينه بواسطة dm-crypt العادي مفتاح تشفير خاطئ، ولن تكون البيانات قابلة للقراءة.
التشفيرات، الأوضاع، الدوال التجزئة، وأحجام المفاتيح المدعومة
تعتمد مجموعات التشفيرات، والأوضاع، والدوال التجزئة، وأحجام المفاتيح المتاحة على دعم النواة. راجع /proc/crypto للحصول على قائمة بالخيارات المتاحة. قد تحتاج إلى تحميل وحدات تشفير إضافية للنواة للحصول على المزيد من الخيارات.
تقوم Cryptsetup بمعالجة العديد من العمليات خارج النواة، لذلك يجب أن يدعم المكتبة المشفرة التي تم تكوينها أيضًا الخوارزميات المحددة. قد تكون بعض الخوارزميات مفقودة حيث يمكن تجميع Cryptsetup مع العديد من المكتبات الخلفية المشفرة.
ملاحظات حول عبارات المرور
لا يمكن رشوة الرياضيات. تأكد من الحفاظ على أمان عبارات المرور الخاصة بك. هناك بعض الحيل الجيدة لإنشاء بديل في حالة نسيان عبارة المرور فجأة. تتطلب هذه البدائل استخدام LUKS، حيث من الممكن فقط الحصول على عبارات مرور متعددة باستخدام LUKS. ومع ذلك، إذا كان نموذج التهديد الخاص بك لا يمنع ذلك، فقد يكون تخزين عبارة المرور الخاصة بك في ظرف مغلق جيدًا فكرة جيدة.
ملاحظات حول مولدات الأرقام العشوائية
مولدات الأرقام العشوائية (RNGs) المستخدمة في Cryptsetup هي دائمًا مولدات الأرقام العشوائية الخاصة بالنواة دون أي تعديلات أو إضافات إلى تدفق البيانات الذي يتم إنتاجه.
هناك نوعان من العشوائية التي تحتاجها Cryptsetup/LUKS. يتم استخدام أحد الأنواع لإنشاء القيم الأولية، ومُقسّم AF، ولمسح فتحات المفاتيح المحذوفة. يتم استخدام النوع الآخر لإنشاء مفتاح وحدة التخزين.
مع الإصدارات الحديثة من النواة (نواة Linux 5.6)، لا تحتاج إلى القلق بشأن تحديد RNG (/dev/random أو /dev/urandom). في حالة العشوائية المنخفضة (النظام المضمن)، قد يستغرق تهيئة مولد الأرقام العشوائية للنواة وقتًا طويلاً، ولكن يحدث هذا قبل أن يتمكن Cryptsetup من البدء. استخدم cryptsetup --help لعرض مولد الأرقام العشوائية الافتراضي المجمع. راجع urandom(4) لمزيد من المعلومات.
تشفير القرص المصادق عليه (تجريبي)
الأوضاع العادية لتشفير القرص تحافظ على الطول (يكون قطاع النص العادي بنفس حجم قطاع النص المشفر) ويمكنها توفير حماية السرية فقط، وليس حماية تكامل البيانات بشكل آمن.
تتطلب الأوضاع المصادق عليها مساحة إضافية لكل قطاع لوضع علامة المصادقة وتستخدم خوارزميات التشفير المصادق عليها مع بيانات إضافية (AEAD).
إذا قمت بتكوين جهاز LUKS2 مع حماية تكامل البيانات، فسيكون هناك جهاز dm-integrity أساسي، والذي يوفر مساحة بيانات إضافية لكل قطاع وميزات حماية السجل لضمان الذرية لتحديثات البيانات والبيانات الوصفية. نظرًا لوجود مساحة إضافية للبيانات الوصفية والسجل، ستكون المساحة المتاحة للجهاز أصغر من الأوضاع التي تحافظ على الطول.
ثم يوجد جهاز dm-crypt فوق جهاز dm-integrity هذا. يتم إجراء جميع عمليات تفعيل وإلغاء تفعيل هذه المجموعة من الأجهزة بواسطة cryptsetup؛ ولا يوجد فرق في استخدام luksOpen للأجهزة المحمية بواسطة التحقق من السلامة. إذا كنت تريد تهيئة جهاز LUKS2 مع حماية تكامل البيانات، فاستخدم الخيار --integrity (راجع cryptsetup-luksFormat(8)). على الرغم من أن نواة Linux 5.7 أضافت دعم TRIM للأجهزة المستقلة من نوع dm-integrity، إلا أن cryptsetup(8) لا يمكنها تقديم دعم لعمليات التخلص (TRIM) في وضع التشفير المصادق عليه، لأن وحدة dm-crypt الأساسية في النواة لا تدعم هذه الوظيفة عند استخدام dm-integrity كمخصص لمساحة علامة المصادقة (راجع --allow-discards في cryptsetup-open(8)). تتطلب بعض أوضاع التحقق من السلامة مفتاحين مستقلين (مفتاح للتشفير ومفتاح للمصادقة). يتم تخزين كلا هذين المفتاحين في فتحة مفاتيح واحدة في LUKS. الدعم للأوضاع المصادق عليها تجريبي، وفقط بعض الأوضاع متاحة الآن. لاحظ أن عددًا قليلاً جدًا من خوارزميات التشفير المصادق عليها مناسبة لتشفير القرص. ولا يمكنك أيضًا استخدام مجموع اختبار CRC32 أو غيرها من المجموعات غير المشفرة (باستثناء وضع التحقق من السلامة الخاص "none"). إذا، لسبب ما، كنت تريد الحصول على التحكم في السلامة دون استخدام وضع المصادقة، فيجب عليك تهيئة dm-integrity بشكل منفصل عن LUKS2.
ملاحظات حول استخدام جهاز loopback
عادةً ما يتم استخدام cryptsetup مباشرةً على جهاز كتلة (قسم قرص أو وحدة تخزين LVM). ومع ذلك، إذا كان الوسيطة هي ملف، فإن cryptsetup تحاول تخصيص جهاز loopback وتعيينه إلى هذا الملف. بالطبع، يمكنك دائمًا تعيين ملف إلى جهاز loop يدويًا. راجع الأسئلة الشائعة حول cryptsetup للحصول على مثال. عندما يكون تعيين الجهاز نشطًا، يمكنك رؤية ملف النسخ الاحتياطي في ناتج أمر status. راجع أيضًا losetup(8).
تأمين رأس LUKS2 على القرص
يتم تحديث البيانات الوصفية لـ LUKS2 على القرص في عدة خطوات، ولتحقيق تحديث ذري مناسب، توجد آلية قفل. بالنسبة لصورة في ملف، يستخدم الكود استدعاء النظام flock(2). بالنسبة لجهاز كتلة، يتم إجراء القفل على ملف خاص مخزن في دليل قفل (افتراضيًا /run/cryptsetup). يجب إنشاء دليل القفل مع السياق الأمني المناسب بواسطة التوزيعة أثناء مرحلة الإقلاع. يستخدم LUKS2 فقط الأقفال؛ التنسيقات الأخرى لا تستخدم هذه الآلية.
مواصفات تنسيق LUKS على القرص
للحصول على مواصفات البيانات الوصفية لـ LUKS على القرص، راجع LUKS1 [https://gitlab.com/cryptsetup/cryptsetup/wikis/Specification] و LUKS2 [https://gitlab.com/cryptsetup/LUKS2-docs].
المؤلفون
تمت كتابة cryptsetup في الأصل بواسطة Jana Saout <_>. تمت كتابة ملحقات LUKS والصفحة الرئيسية الأصلية بواسطة Clemens Fruhwirth <_>. ملحقات الصفحة الرئيسية بواسطة Milan Broz <_>. إعادة كتابة وتوسيع الصفحة الرئيسية بواسطة Arno Wagner <_>.
الإبلاغ عن الأخطاء
يُرجى الإبلاغ عن الأخطاء في قائمة بريدية cryptsetup <_> أو في قسم "Issues" الخاص بالمشروع [https://gitlab.com/cryptsetup/cryptsetup/-/issues/new].
يرجى إرفاق ناتج الأمر الفاشل مع إضافة الخيار --debug.
انظر أيضًا
أسئلة وأجوبة Cryptsetup الشائعة [https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions]
cryptsetup(8) و integritysetup(8) و veritysetup(8)
CRYPTSETUP
جزء من مشروع cryptsetup [https://gitlab.com/cryptsetup/cryptsetup/].