إعداد المفتاح الموحد لنظام لينكس

إعداد المفاتيح الموحد لنظام Linux ( LUKS ) هو مواصفات تشفير القرص التي أنشأها كليمنس فروويرث في عام 2004 وكانت مخصصة في الأصل لنظام Linux .

يُطبّق نظام LUKS تنسيقًا قياسيًا مستقلًا عن المنصة على القرص لاستخدامه في أدوات متنوعة. وهذا يُسهّل التوافق والتشغيل البيني بين البرامج وأنظمة التشغيل المختلفة، ويضمن أن تُطبّق جميعها إدارة كلمات المرور بطريقة آمنة وموثقة. [ 1 ]

وصف

تُستخدم خوارزمية LUKS لتشفير وحدة تخزين كتلية . محتويات الوحدة المشفرة عشوائية، وبالتالي يمكن تشفير أي نظام ملفات، بما في ذلك أقسام التبديل . [ 2 ] يوجد رأس غير مشفر في بداية وحدة التخزين المشفرة، يسمح بتخزين ما يصل إلى 8 مفاتيح تشفير (LUKS1) أو 32 مفتاح تشفير (LUKS2) بالإضافة إلى معلمات التشفير مثل نوع التشفير وحجم المفتاح. [ 3 ] [ 4 ]

يُعدّ وجود هذا العنوان فرقًا جوهريًا بين LUKS و dm-crypt ، إذ يسمح هذا العنوان باستخدام عبارات مرور متعددة ومختلفة، مع إمكانية تغييرها وإزالتها. في حال فقدان العنوان أو تلفه، يصبح الجهاز غير قابل للفك التشفيري. [ 5 ]

يتم التشفير باستخدام أسلوب متعدد الطبقات. أولًا، يُشفّر جهاز التخزين باستخدام مفتاح رئيسي. يُشفّر هذا المفتاح الرئيسي مع كل مفتاح مستخدم نشط . [ 6 ] تُستمد مفاتيح المستخدمين من عبارات المرور، أو مفاتيح أمان FIDO2 ، أو وحدات TPM ، أو البطاقات الذكية . [ 7 ] [ 8 ] يتيح أسلوب التشفير متعدد الطبقات للمستخدمين تغيير عبارة المرور الخاصة بهم دون الحاجة إلى إعادة تشفير جهاز التخزين بالكامل. يمكن أن تحتوي خانات المفاتيح على معلومات للتحقق من عبارات مرور المستخدمين أو أنواع أخرى من المفاتيح.

يوجد إصداران من LUKS، يتميز LUKS2 بمقاومته لتلف الترويسة، ويستخدم دالة اشتقاق المفاتيح Argon2 افتراضيًا، بينما يستخدم LUKS1 دالة PBKDF2 . [ 9 ] يمكن التحويل بين كلا الإصدارين في بعض الحالات، ولكن قد لا تتوفر بعض الميزات في LUKS1، مثل Argon2. [ 3 ] يستخدم LUKS2 تنسيق JSON كبيانات وصفية. [ 3 ] [ 10 ]

تعتمد خوارزميات التشفير المتاحة على دعم نواة النظام المضيف. يمكن استخدام مكتبة Libgcrypt كخلفية للتجزئة، وهي تدعم جميع خوارزمياتها. [ 11 ] يعود اختيار الخوارزمية الافتراضية إلى مُصنِّع نظام التشغيل. [ 12 ] يستخدم LUKS1 تقنية مضادة للتحليل الجنائي تُسمى AFsplitter ، مما يسمح بمسح البيانات وحمايتها بشكل آمن. [ 13 ]

LUKS مع LVM

يمكن استخدام إدارة وحدات التخزين المنطقية جنبًا إلى جنب مع LUKS. [ 14 ]

LVM على LUKS
عند استخدام LVM على حاوية LUKS غير مقفلة، يمكن تشفير جميع الأقسام الأساسية (وهي وحدات تخزين منطقية LVM) باستخدام مفتاح واحد. وهذا يُشبه تقسيم حاوية LUKS إلى أقسام متعددة. ولا يظهر هيكل LVM إلا بعد فك تشفير القرص. [ 15 ]
LUKS على LVM
عند استخدام LUKS لتشفير وحدات التخزين المنطقية LVM، يمكن أن تمتد وحدة التخزين المشفرة عبر أجهزة متعددة. وتكون مجموعة وحدات التخزين LVM الأساسية مرئية دون الحاجة إلى فك تشفير وحدات التخزين المشفرة. [ 16 ]

تشفير القرص الكامل

يعرض برنامج تثبيت دبيان خيارًا للتقسيم التلقائي باستخدام LVM على LUKS

يتمثل أحد الاستخدامات الشائعة لـ LUKS في توفير تشفير كامل للقرص ، والذي يتضمن تشفير القسم الجذر لتثبيت نظام التشغيل، مما يحمي ملفات نظام التشغيل من التلاعب بها أو قراءتها من قبل جهات غير مصرح لها . [ 14 ]

في نظام لينكس، يمكن تشفير قسم الإقلاع ( ) إذا كان مُحمِّل الإقلاع نفسه يدعم LUKS (مثل GRUB ). يُجرى ذلك لمنع التلاعب بنواة لينكس . مع ذلك، لا يمكن تشفير مُحمِّل الإقلاع في المرحلة الأولى أو قسم نظام EFI (انظر تشفير القرص الكامل# مشكلة مفتاح الإقلاع ). [ 14 ]/boot

في أنظمة لينكس المحمولة، طورت postmarketOS برنامج osk-sdl للسماح بفتح نظام مشفر بالكامل باستخدام شاشة تعمل باللمس.

بالنسبة للأنظمة التي تعمل بنظام systemd ، systemd-homedيمكن استخدام المكون لتشفير الدلائل الرئيسية الفردية . [ 17 ]

دعم نظام التشغيل

يعمل التطبيق المرجعي لبروتوكول LUKS على نظام لينكس، وهو مبني على نسخة محسّنة من برنامج cryptsetup ، ويستخدم dm-crypt كخلفية لتشفير القرص. في نظام مايكروسوفت ويندوز ، يمكن استخدام الأقراص المشفرة ببروتوكول LUKS عبر نظام ويندوز الفرعي لنظام لينكس . [ 18 ] (كان هذا ممكنًا سابقًا باستخدام LibreCrypt ، [ 19 ] الذي يعاني حاليًا من ثغرات أمنية جوهرية، [ 20 ] [ 21 ] والذي خلف FreeOTFE ، المعروف سابقًا باسم DoxBox).

يدعم نظام DragonFly BSD نظام LUKS. [ 22 ]

في نظام macOS، يوفر برنامج anylinuxfs إمكانية الوصول إلى الأقراص المهيأة بنظام LUKS، بالإضافة إلى تنسيقات أخرى. [ 23 ]

دعم المُثبِّت

تسمح العديد من توزيعات لينكس بتشفير جهاز الجذر عند تثبيت نظام التشغيل. تشمل هذه المثبتات Calamares ، [ 24 ] وUbiquity ، [ 25 ] و Debian-Installer ، [ 26 ] وغيرها.

تنسيق على القرص

تتميز رؤوس LUKS بالتوافق مع الإصدارات السابقة؛ حيث تستطيع الإصدارات الأحدث من LUKS قراءة رؤوس الإصدارات السابقة. [ 27 ]

LUKS1

رأس LUKS1 [ 27 ]
إزاحةنوع البياناتوصف
0 0 سداسي عشريchar[6]الرقم السحري {'L', 'U', 'K', 'S', 0xBA, 0xBE}
6 6 سداسي عشريuint16_tإصدار LUKS (0x0001 لـ LUKS1)
8 8 سداسي عشريchar[32]خوارزمية التشفير (مثل "twofish" أو "aes")
40 28 سداسيchar[32]وضع التشفير (على سبيل المثال "cbc-essiv:sha256")
72 48 سداسيchar[32]دالة التجزئة المشفرة (مثل "sha1"، "ripemd160")
104 68 سداسيuint32_tإزاحة الحمولة (موضع البيانات المشفرة) بإزاحات 512 بايت
108 6C سداسيuint32_tعدد بايتات المفتاح
112 70 سداسيchar[20]مجموع التحقق من المفتاح الرئيسي PBKDF2
132 84 سداسي عشريchar[32]معلمة ملح المفتاح الرئيسي PBKDF2
164 A4 سداسيuint32_tعدد مرات تكرار المفتاح الرئيسي PBKDF2 (الافتراضي: 10)
168 A8 سداسيchar[40]UUID للقسم (على سبيل المثال "504c9fa7-d080-4acf-a829-73227b48fb89")
208 D0 سداسي(48 بايت)فتحة المفتاح 1
...
544220 سداسي(48 بايت)فتحة المفتاح 8
إجمالي 592 بايت
تنسيق كل فتحة مفتاح
إزاحةنوع البياناتوصف
0uint32_tحالة فتحة المفتاح: نشط = 0x00AC71F3؛ معطل = 0x0000DEAD
4uint32_tمعلمات تكرار PBKDF2
8char[32]معامل ملح PBKDF2
40uint32_tقطاع البداية الرئيسي
44uint32_tعدد الشرائط المضادة للأدلة الجنائية (الافتراضي: 4000)
إجمالي 48 بايت

LUKS2

يحتوي رأس LUKS2 على منطقة ثنائية ومنطقة JSON ، ومنطقة ثنائية وJSON ثانية، ومنطقة فتحات المفاتيح. تتكرر المنطقتان الثنائية وJSON مرتين مع اختلافات طفيفة. [ 10 ]

المنطقة الثنائية

يبلغ حجم المناطق الثنائية دائمًا 4 كيلوبايت. ويمكن أن يكون حجم المنطقة الثنائية بالإضافة إلى منطقة JSON عددًا من البايتات يساوي قوة العدد 2، ويتراوح بين 16 كيلوبايت و4 ميجابايت، مما يجعل حجم مناطق JSON يتراوح بين 12 كيلوبايت و4092 كيلوبايت لكل منها.

منطقة رأس LUKS2 الثنائية و JSON (16 كيلوبايت لكل منهما) [ 10 ]
إزاحةنوع البياناتوصف
المنطقة الثنائية الأولى
0 0 سداسي عشريchar[6]الرقم السحري {'L', 'U', 'K', 'S', 0xBA, 0xBE}، يسمح بالكشف السريع بواسطة blkid
6 6 سداسي عشريuint16_tإصدار LUKS (0x0002 لـ LUKS2)
8 8 سداسي عشريuint64_tحجم مساحة الملفات الثنائية وملفات JSON (عادةً 16 كيلوبايت، 4000 سداسي عشري )
16 10 سداسي عشريuint64_tيتم زيادة قيمة Epoch عند تعديل رأس الصفحة
24 18 سداسي عشريchar[48]تسمية قسم ASCII، منتهية بـ null
72 48 سداسي عشريchar[32]سلسلة تحدد خوارزمية التحقق (عادةً "sha256")، تنتهي بـ null
104 68 سداسي عشريuint8_t[64]الملح، فريد لكل منطقة ثنائية
168 A8 سداسي عشريchar[40]معرّف الجهاز الفريد (UUID )، ينتهي بـ null (مثال: "02f47c64-7e74-4711-8bd4-a37613d1ecd3")
208 D0 سداسي عشريchar[48]تسمية "النظام الفرعي" الثانوي، منتهية بصفر
256 100 سداسي عشريuint64_tإزاحة منطقة LUKS هذه على الجهاز (عادةً 0)
264 108 سداسي عشري_char[184]يجب تصفير الحشو
448 1C0 سداسي عشريuint8_t[64]تم حساب مجموع التحقق للمنطقة الثنائية الأولى باستخدام خوارزمية مجموع التحقق، مع إضافة أصفار إذا كانت أقصر
512 200 سداسي_char[3584]يجب تصفير الحشو
منطقة JSON الأولى
40961000 سداسيchar[12288]كائن JSON من نوع LUKS، ينتهي بـ null
المنطقة الثنائية الثانية
163844000 سداسيchar[6]الرقم السحري الثاني {'S', 'K', 'U', 'L', 0xBA, 0xBE}
مماثلة للمنطقة الثنائية الأولى
164884068 سداسيuint8_t[64]الملح، فريد لكل منطقة ثنائية
مماثلة للمنطقة الثنائية الأولى
166404100 سداسيuint64_tإزاحة منطقة LUKS هذه على الجهاز (عادةً 4000 سداسي عشري ، 16384 عشري )
166484108 سداسي_char[184]يجب تصفير الحشو
1683241C0 سداسيuint8_t[64]تم حساب مجموع التحقق للمنطقة الثنائية الثانية باستخدام خوارزمية مجموع التحقق، مع إضافة أصفار إذا كانت أقصر
168964200 سداسي_char[3584]يجب تصفير الحشو
المنطقة الثانية من بيانات JSON
مطابق لمنطقة JSON الأولى
إجمالي 32 كيلوبايت

منطقة JSON

يحتوي كائن بيانات تعريف JSON الأساسي لـ LUKS2 على 5 مفاتيح: config و keyslots و digests و segments و tokens . [ 10 ]

يحتوي ملف Config على الإعدادات العامة ومعلومات رأس LUKS وخيارات التثبيت الدائم.

تصف القطاعات مناطق على القرص تحتوي على بيانات ويمكن فك تشفيرها. كما تصف الخوارزمية التي يتم بها تشفير القطاع.

تصف ملخصات التشفير خانات المفاتيح التي تحتوي على مفاتيح مشفرة قادرة على فك تشفير أجزاء معينة . تحتوي هذه الملخصات على تجزئة للمفتاح الذي تم فك تشفيره في خانة المفتاح ، والذي يعمل كمجموع اختباري للتحقق من صحة كلمة المرور.

تحتوي فتحات المفاتيح على مفاتيح مشفرة. وتختلف طريقة التشفير، حيث يمكن استخدام مزيج من كلمات المرور وملفات المفاتيح ومفاتيح الأجهزة وغيرها من الطرق لفك تشفير المفاتيح الرئيسية الموجودة.

يمكن لكائن الرموز أن يحتوي على معلومات إضافية للأنظمة الخارجية التي تتكامل مع LUKS.

تُشفّر بيانات المستخدم، المُقسّمة إلى أجزاء ، باستخدام مفتاح رئيسي كبير وخوارزمية تشفير فعّالة. يُمكن بعد ذلك تشفير المفتاح الرئيسي باستخدام خوارزمية أكثر تعقيدًا ومفاتيح أخرى يُقدّمها المستخدم، والتي قد تكون أضعف. تُخزّن هذه المفاتيح الرئيسية المُشفّرة في خانات المفاتيح . يُبطئ هذا من محاولات التخمين العشوائي لكلمة المرور، كما يسمح بتغيير طرق فك التشفير وكلمات المرور دون الحاجة إلى إعادة تشفير قسم البيانات بالكامل، وذلك ببساطة عن طريق إعادة كتابة نفس المفتاح الرئيسي مُشفّرًا بطريقة مختلفة في خانات المفاتيح . [ 10 ]

منطقة JSON نموذجية في LUKS2، مع إضافة مسافات بادئة وفواصل أسطر:

{ "keyslots" : { "0" : { "type" : "luks2" , "key_size" : 64 , "af" : { "type" : "luks1" , "stripes" : 4000 , "hash" : "sha256" }, "area" : { "type" : "raw" , "offset" : "32768" , "size" : "258048" , "encryption" : "aes-xts-plain64" , "key_size" : 64 }, "kdf" : { "type" : "argon2id" , "time" : 4 , "memory" : 1048576 , "cpus" : 4 , "salt" : "YOvmrBmgFT7Ehm7ANZrn0quep1fUFisNCv4e+X8+CLk=" } } }, "tokens" : {}, "segments" : { "0" : { "type" : "crypt" , "offset" : "16777216" , "size" : "dynamic" , "iv_tweak" : "0" , "encryption" : "aes-xts-plain64" , "sector_size" : 512 } }, "digests" : { "0" : { "type" : "pbkdf2" , "keyslots" : [ "0" ], "segments" : [ "0" ], "hash" : "sha256" , "iterations" : 105703 , "salt" : "hrSZ0Sh6t3EVAyeH7XLSH1dEQrRmJwimbjHx85PLS/k=" , "digest" :"tXiDNw8fanGe8QcXewvtzF3AOTOqaIXBmhAGa8Kb42w=" } }, "config" : { "json_size" : "12288" , "keyslots_size" : "16744448" , "flags" : [ "allow-discards" ] } }

منطقة فتحات المفاتيح

تشغل خانات المفاتيح منطقة الجهاز بعد منطقتي البيانات الثنائية وبيانات JSON. في الحالة النموذجية الموضحة أعلاه، تبدأ هذه المنطقة من 32 كيلوبايت، وتصل إلى 4 ميجابايت أو 16 ميجابايت. سنستخدم هنا 16 ميجابايت كمثال.

عادةً ما يتم تغطية الجهاز بجزء واحد ، مع ضبط الإزاحة على 16 ميجابايت والحجم على ديناميكي. أثناء إعادة التشفير أو في حالة التكوين غير المعتاد، قد يكون هناك عدة أجزاء يجب أن تغطي الجهاز بالكامل دون فجوات أو تداخل.

يجب أن يحتوي كل جزء ( أجزاء) على ملخص واحد مرتبط به ، ويحتوي كل ملخص على خانة مفاتيح واحدة أو أكثر مرتبطة به . كما يمكن أن تكون خانات المفاتيح غير مرتبطة بأي ملخص وتُستخدم لأغراض أخرى.

يتم ربط خانات المفاتيح بمنطقة خانات المفاتيح، في المثال أعلاه بمنطقة واحدة بحجم 252 كيلوبايت تبدأ مباشرة بعد رأس الملف عند 32 كيلوبايت. يتم إخفاء هذه المنطقة بشرائط مضادة للتحليل الجنائي بنفس الطريقة المتبعة في LUKS1.

تُعدّ خوارزمية التجزئة الافتراضية ، pbkdf2، بالإضافة إلى نوع شرائط مكافحة الأدلة الجنائية "luks1"، مطابقةً لخوارزمية LUKS1. ويعتمد اشتقاق المفتاح افتراضيًا على خوارزميات أقوى غير مدعومة من قِبل LUKS1، ولكن يمكن ضبطه على خوارزمية pbkdf2 المدعومة. [ 10 ]

أمثلة

Cryptsetup هو التطبيق المرجعي لواجهة LUKS الأمامية.

لتشفير جهاز باستخدام المسار التالي /dev/sda1:

# cryptsetup luksFormat /dev/sda1 

لفتح جهاز مشفر، أين nameيوجد اسم الجهاز المُرتبط ؟

# cryptsetup open /dev/sda1 name 

إعادة التشفير

يمكن إعادة تشفير حاوية LUKS إما باستخدام cryptsetupالأداة نفسها، أو باستخدام أداة قديمة تُسمى cryptsetup-reencrypt. كما يمكن استخدام هذه الأدوات لإضافة تشفير إلى نظام ملفات غير مشفر موجود، أو لإزالة التشفير من جهاز تخزين كتلي. [ 11 ] [ 28 ]

تتشابه كلتا الطريقتين في الصيغة:

# إعادة تشفير cryptsetup /dev/sda1 
# cryptsetup-reencrypt /dev/sda1 

انظر أيضاً

مراجع

  1. فروويرث، كليمنس (2018-01-20). "مواصفات تنسيق LUKS على القرص، الإصدار 1.2.3" (ملف PDF) . تم الاطلاع عليه بتاريخ 2021-09-23 .
  2. "تشفير محركات الأقراص باستخدام LUKS" . وثائق فيدورا . تم الاطلاع عليه بتاريخ 6 مايو 2022 .
  3. 1 2 3 "الفصل 12. تشفير أجهزة الكتل باستخدام LUKS" . بوابة عملاء Red Hat .
  4. "كيفية تشفير القرص الصلب (القسم) باستخدام LUKS في نظام لينكس" . 27 فبراير 2019.
  5. "كيفية تشفير بياناتك باستخدام dm-crypt" . لينود . 22 نوفمبر 2022.
  6. بوسي، سيمون؛ فيسكونتي، أندريا (2015). "ما يجب أن يعرفه المستخدمون عن تشفير القرص الكامل القائم على LUKS" (PDF) .{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal=
  7. "systemd-cryptenroll - ArchWiki" . wiki.archlinux.org . تم الاطلاع عليه بتاريخ 22-11-2023 .
  8. "كيفية تشفير حاوية LUKS باستخدام بطاقة ذكية أو رمز مميز" . 20 أبريل 2014.
  9. "كيف يعمل LUKS مع تشفير القرص الكامل في لينكس" . 25 سبتمبر 2021.
  10. 1 2 3 4 5 6 "on-disk-format-luks2.pdf" (PDF) . 7 مارس 2024.
  11. 1 2دليل إدارة لينكس والأوامر ذات الامتيازاتcryptsetup(8)  
  12. "اختراق تشفير LUKS" . الطب الشرعي الإلكتروني . 21 أغسطس 2020. مؤرشف من الأصل في 26 أكتوبر 2021.
  13. "AFsplitter" .
  14. 1 2 3 "dm-crypt/تشفير نظام كامل" . تم الاطلاع عليه بتاريخ 6 مايو 2022 .
  15. "قوس مع LVM على LUKS" .
  16. "LUKS على LVM: وحدات تخزين منطقية مشفرة ونسخ احتياطية آمنة" . 12 سبتمبر 2014.
  17. "مجلدات المستخدمين" . systemd .
  18. "صيانة نظام ويندوز الفرعي لنظام لينكس (WSL) 2 نواة لينكس" . مدونات مطوري مايكروسوفت . 16 أبريل 2021.
  19. ^ “ليبركريبت” . جيثب . 27 يوليو 2022.
  20. "خلل في برنامج التشغيل يسمح بتصعيد الامتيازات. مطلوب ملاحظات · المشكلة رقم 38 · tdk/LibreCrypt" . GitHub . 30 سبتمبر 2015.
  21. "برنامج تشغيل يسمح بالكتابة إلى أجهزة عشوائية · المشكلة رقم 39 · tdk/LibreCrypt" . GitHub . 7 أكتوبر 2015.
  22. "قائمة الميزات الرئيسية لبرنامج DragonFly" . تم الاطلاع عليها بتاريخ 6 مايو 2022 .
  23. "anylinuxfs GitHub" . تم الاطلاع عليه بتاريخ 12 يوليو 2026 .
  24. مايكل لارابيل (8 مايو 2016). "برنامج تثبيت كالاماريس يضيف دعم تشفير LUKS" . فورونيكس .
  25. "كيفية تشفير القرص الصلب في أوبونتو" . اجعل التكنولوجيا أسهل . 13 يناير 2017.
  26. "PartmanCrypto" . ويكي دبيان . تم الاطلاع عليه بتاريخ 6 مايو 2022 .
  27. 1 2 "مواصفات تنسيق LUKS على القرص" (PDF) .
  28. "صفحة دليل CRYPTSETUP-REENCRYPT(8)" . man7.org .