NoctisNode
← أدلةالأمان2026-10-238 دقائق

LUKS2 مقابل LUKS1: الفروق، وكيف تتحقق، وكيف تحوّل

يضيف LUKS2 مقارنة بـ LUKS1 خوارزمية Argon2id، وترويسة JSON احتياطية، والرموز (tokens)، وسلامة البيانات. تحقق من إصدارك بالأمر cryptsetup luksDump وحوّل بأمان بعد نسخ الترويسة احتياطياً.

باختصار: LUKS2 هو الصيغة الحالية على القرص لتشفير الأقراص في Linux والافتراضية في cryptsetup منذ الإصدار 2.1. مقارنة بـ LUKS1 يضيف ترويسة بيانات وصفية بصيغة JSON مكررة ومزودة بمجموع تحقق، واشتقاق المفاتيح Argon2id كثيف الذاكرة بدلاً من PBKDF2، و32 خانة مفاتيح بدلاً من 8، ورموزاً لفك التشفير عبر TPM2 وFIDO2، وتشفيراً موثقاً اختيارياً. استخدم LUKS2 ما لم يكن على GRUB قديم أن يفك تشفير `/boot` بنفسه.

كلتا الصيغتين تشفران البيانات بالطريقة نفسها، عادةً AES-XTS. الفرق في الترويسة: كيف تُخزن المفاتيح، وما مدى صعوبة كسر عبارات المرور بالقوة الغاشمة، وأي الأدوات تستطيع قراءتها. يغطي هذا الدليل الفروق، وكيف تعرف أيهما لديك، وكيف تحوّل بالأمر `cryptsetup convert` دون فقدان القرص. إن كنت تشفّر خادماً جديداً لـ حزمة استضافة ذاتية على VPS صغير، فإن LUKS2 هو الصيغة التي يجب اختيارها.

LUKS2 مقابل LUKS1 في لمحة

الميزةLUKS1LUKS2
الترويسةترويسة ثنائية واحدة بحجم 592 بايت مع منطقة خانات المفاتيحترويستان ثنائيتان مع بيانات وصفية JSON، بمجموع تحقق ونسخة احتياطية
الإزاحة الافتراضية للترويسة / البيانات2 MiB16 MiB
خانات المفاتيح832
اشتقاق المفاتيح (PBKDF)PBKDF2 فقطArgon2id (افتراضي) أو Argon2i أو PBKDF2
الرموز (TPM2، FIDO2، PKCS#11، Clevis)لانعم
التشفير الموثق (dm-integrity)لااختياري، تجريبي
إعادة التشفير أثناء التشغيلدون اتصال فقطنعم، `cryptsetup reencrypt` على جهاز مركّب
أعلام دائمة وتسميةلانعم، مثلاً `--allow-discards --persistent`
فك التشفير بواسطة GRUB لـ /boot مشفرنعمخانات PBKDF2 فقط في GRUB الأصلي

صيغة الترويسة وخانات المفاتيح

ترويسة LUKS1 بنية ثنائية ثابتة تليها ثماني مناطق لخانات المفاتيح. إن كُتب فوق القطاعات الأولى من الجهاز، مثلاً بأمر `mkfs` خاطئ أو أداة تقسيم، تضيع كل خانات المفاتيح وتُفقد البيانات ما لم تكن لديك نسخة احتياطية من الترويسة.

يخزن LUKS2 ترويسة ثنائية ومنطقة بيانات وصفية JSON، ويحتفظ بنسخة ثانية من كليهما. تحمل كل نسخة مجموع تحقق، فيستطيع `cryptsetup` اكتشاف التلف والرجوع إلى النسخة الأخرى. تصف منطقة JSON خانات المفاتيح والمقاطع والملخصات والرموز، وهذا ما يتيح إضافة ميزات جديدة دون تغيير الصيغة مجدداً. ومع ذلك فالتكرار لا يغني عن نسخ الترويسة احتياطياً: الكتابة الكاملة فوق الميغابايتات الأولى تدمر النسختين.

Argon2id مقابل PBKDF2

لا تُستخدم عبارة المرور مباشرة كمفتاح أبداً. دالة اشتقاق المفاتيح تمددها بحيث تصبح كل محاولة تخمين مكلفة. لا يستطيع LUKS1 استخدام سوى PBKDF2، وهي رخيصة التشغيل على GPU وASIC، فيستطيع المهاجم الذي نسخ الترويسة اختبار عبارات المرور بالتوازي بسرعة عالية.

يعتمد LUKS2 افتراضياً Argon2id، التي تتطلب قدراً قابلاً للضبط من الذاكرة لكل تخمين (حتى 1 GiB افتراضياً، بحد أقصى هو الذاكرة المتاحة وقت التهيئة) ويصعب جداً تشغيلها بالتوازي. تبقى عبارة المرور القوية خط الدفاع الأساسي، لكن Argon2id ترفع كلفة كل تخمين بشكل كبير.

على الخوادم الصغيرة، ضع كلفة الذاكرة في الحسبان. خانة مفاتيح أُنشئت على جهاز بذاكرة كبيرة قد تحتاج لفك تشفيرها ذاكرة أكثر مما يستطيع VPS بسعة 1 GB، مثل خطة Wisp من NoctisNode، توفيره داخل initramfs. اضبطها صراحة بـ `--pbkdf-memory` (بوحدة KiB) عند التهيئة أو إضافة مفاتيح على جهاز كبير لصالح جهاز صغير.

# Inspect PBKDF parameters of each keyslot
cryptsetup luksDump /dev/vda3 | grep -A6 '^  [0-9]*: luks2'

# Re-derive keyslot 0 with Argon2id and 512 MiB memory cost
cryptsetup luksConvertKey /dev/vda3 --key-slot 0 \
  --pbkdf argon2id --pbkdf-memory 524288

الرموز والسلامة وتحفظات GRUB

الرموز كائنات JSON في ترويسة LUKS2 تخبر الأدوات كيف تحصل على مفتاح تلقائياً. يستخدمها `systemd-cryptenroll` لربط خانة مفاتيح بشريحة TPM2 أو مفتاح أمان FIDO2 أو بطاقة ذكية PKCS#11، ويستخدمها Clevis لفك التشفير المرتبط بالشبكة عبر خادم Tang. لا شيء من هذا موجود في LUKS1.

وضع السلامة (`cryptsetup luksFormat --integrity hmac-sha256`) يجمع التشفير مع dm-integrity بحيث تُنتج القطاعات المعبوث بها أخطاء قراءة بدلاً من بيانات معدّلة بصمت. يكلف مساحة على القرص وسرعة في الكتابة، ويتطلب مسحاً كاملاً عند التهيئة، ولا يزال موسوماً بأنه تجريبي. معظم الخوادم لا تستخدمه.

GRUB هو السبب الرئيسي لاستمرار مصادفة الناس لـ LUKS1. يستطيع GRUB الأصلي من الإصدار 2.06 فما بعده فتح LUKS2، لكن فقط خانات المفاتيح التي تستخدم PBKDF2، لأن دعم Argon2 ليس جزءاً من GRUB الأصلي. إن كان على GRUB نفسه فك تشفير `/boot` مشفر، فاستخدم LUKS1 أو خانة LUKS2 مع `--pbkdf pbkdf2`. يبقي مثبّتا Debian وUbuntu `/boot` غير مشفر، فتتولى النواة وinitramfs فك التشفير وتعمل Argon2id، بما في ذلك فك التشفير عن بُعد عبر SSH.

كيف تتحقق هل المجلد LUKS1 أم LUKS2

أي من هذه الطرق يعمل على نظام عامل بصلاحيات root. سطر `Version:` في `cryptsetup luksDump` هو الإجابة المعتمدة؛ ويعرض التفريغ أيضاً خانات المفاتيح ونوع PBKDF والرموز.

# Find encrypted partitions (FSVER column shows 1 or 2)
lsblk -f

# Authoritative: header version
cryptsetup luksDump /dev/vda3 | grep -E '^Version'
# Version:        2

# Exit code 0 only if the device is LUKS2
cryptsetup isLuks --type luks2 /dev/vda3 && echo LUKS2

التحويل بالأمر cryptsetup convert

يعيد `cryptsetup convert` كتابة الترويسة في مكانها؛ ولا تُمس البيانات المشفرة. يجب أن يكون الجهاز مغلقاً، لذا تشغّله لنظام ملفات الجذر من نظام إنقاذ أو نظام حي. الفشل أو انقطاع الكهرباء في منتصف التحويل قد يترك الترويسة غير صالحة، ولهذا فإن خطوة النسخ الاحتياطي ليست اختيارية.

  1. 01.أقلع نظام إنقاذ أو نظاماً حياً وتأكد أن جهاز LUKS غير مفتوح (`cryptsetup close` عند الحاجة).
  2. 02.انسخ الترويسة احتياطياً بالأمر `cryptsetup luksHeaderBackup` وانقل الملف خارج الخادم. أي شخص لديه هذا الملف وعبارة مرور قديمة يستطيع فتح القرص، لذا خزّنه مشفراً.
  3. 03.حوّل LUKS1 إلى LUKS2 بالأمر `cryptsetup convert --type luks2`. تبقى خانات المفاتيح الموجودة على PBKDF2.
  4. 04.رقِّ كل خانة مفاتيح إلى Argon2id بالأمر `cryptsetup luksConvertKey --pbkdf argon2id`، ما لم يكن على GRUB قراءتها.
  5. 05.اختبر أن الجهاز يُفتح، ثم أعد بناء initramfs بالأمر `update-initramfs -u` وأعد التشغيل.
  6. 06.للرجوع من LUKS2 إلى LUKS1، حوّل أولاً كل خانة مفاتيح إلى PBKDF2 وأزل الرموز والميزات الخاصة بـ LUKS2؛ وإلا يرفض `cryptsetup convert --type luks1` التنفيذ.
# From a rescue system, device closed
cryptsetup luksHeaderBackup /dev/vda3 --header-backup-file /root/vda3-luks-header.img

cryptsetup convert --type luks2 /dev/vda3
cryptsetup luksConvertKey /dev/vda3 --key-slot 0 --pbkdf argon2id

cryptsetup open /dev/vda3 cryptroot && cryptsetup close cryptroot

# Emergency restore (overwrites the current header!)
# cryptsetup luksHeaderRestore /dev/vda3 --header-backup-file /root/vda3-luks-header.img

Note · بعد استعادة الترويسة، تعود عبارات المرور التي كانت صالحة وقت النسخ الاحتياطي للعمل، بما فيها تلك التي أزلتها لاحقاً. احذف النسخ القديمة من الترويسة عند تدوير عبارات المرور. واحفظ النسخة الحالية في مكان منفصل، مثلاً في المستودع الموصوف في دليل النسخ الاحتياطي بـ restic.

الأسئلة الشائعة

Qهل LUKS2 أفضل من LUKS1؟

Aلكل إعداد جديد تقريباً، نعم. لدى LUKS2 ترويسة مكررة، واشتقاق مفاتيح Argon2id، ورموز لـ TPM2 أو FIDO2، وإعادة تشفير أثناء التشغيل؛ ولا حاجة إلى LUKS1 إلا عندما يكون على GRUB قديم فك تشفير `/boot` بنفسه.

Qكيف أتحقق من إصدار LUKS لديّ؟

Aشغّل `cryptsetup luksDump /dev/sdX | grep Version` بصلاحيات root؛ فيطبع 1 أو 2. ويعرض `lsblk -f` أيضاً الإصدار في عمود FSVER لأقسام crypto_LUKS.

Qهل يمكنني تحويل LUKS1 إلى LUKS2 دون فقدان البيانات؟

Aنعم. يعيد `cryptsetup convert --type luks2` كتابة الترويسة فقط بينما الجهاز مغلق. انسخ الترويسة احتياطياً أولاً بالأمر `cryptsetup luksHeaderBackup`، لأن التحويل المقطوع قد يجعل المجلد غير قابل للقراءة.

Qهل يدعم GRUB صيغة LUKS2؟

Aيستطيع GRUB الأصلي من الإصدار 2.06 فما بعده فتح LUKS2، لكن فقط خانات المفاتيح التي تستخدم PBKDF2، لا Argon2id. هذا لا يهم إلا عندما يكون `/boot` نفسه مشفراً؛ أما مع `/boot` غير مشفر، فإن initramfs يفتح LUKS2 مع Argon2id بشكل طبيعي.

Qما التشفير الذي يستخدمه LUKS2 افتراضياً؟

Aيعتمد cryptsetup الحالي افتراضياً `aes-xts-plain64` بمفتاح 512 بت (AES-256 في وضع XTS) وArgon2id لاشتقاق المفاتيح. شغّل `cryptsetup --help` لرؤية الإعدادات الافتراضية المضمّنة في نظامك، وراجع دليل تشفير الجذر بـ LUKS لإعداد كامل.

LUKS2 مقابل LUKS1: الفروق، وكيف تتحقق، وكيف تحوّل · NoctisNode