إعداد المفتاح الموحد لنظام لينكس
إعداد المفاتيح الموحد لنظام 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 ]
تشفير القرص الكامل

يتمثل أحد الاستخدامات الشائعة لـ 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
| إزاحة | نوع البيانات | وصف | |
|---|---|---|---|
| 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 |
| ... | |||
| 544 | 220 سداسي | (48 بايت) | فتحة المفتاح 8 |
| إجمالي 592 بايت | |||
| إزاحة | نوع البيانات | وصف |
|---|---|---|
| 0 | uint32_t | حالة فتحة المفتاح: نشط = 0x00AC71F3؛ معطل = 0x0000DEAD |
| 4 | uint32_t | معلمات تكرار PBKDF2 |
| 8 | char[32] | معامل ملح PBKDF2 |
| 40 | uint32_t | قطاع البداية الرئيسي |
| 44 | uint32_t | عدد الشرائط المضادة للأدلة الجنائية (الافتراضي: 4000) |
| إجمالي 48 بايت | ||
LUKS2
يحتوي رأس LUKS2 على منطقة ثنائية ومنطقة JSON ، ومنطقة ثنائية وJSON ثانية، ومنطقة فتحات المفاتيح. تتكرر المنطقتان الثنائية وJSON مرتين مع اختلافات طفيفة. [ 10 ]
المنطقة الثنائية
يبلغ حجم المناطق الثنائية دائمًا 4 كيلوبايت. ويمكن أن يكون حجم المنطقة الثنائية بالإضافة إلى منطقة JSON عددًا من البايتات يساوي قوة العدد 2، ويتراوح بين 16 كيلوبايت و4 ميجابايت، مما يجعل حجم مناطق JSON يتراوح بين 12 كيلوبايت و4092 كيلوبايت لكل منها.
| إزاحة | نوع البيانات | وصف | |
|---|---|---|---|
| المنطقة الثنائية الأولى | |||
| 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 الأولى | |||
| 4096 | 1000 سداسي | char[12288] | كائن JSON من نوع LUKS، ينتهي بـ null |
| المنطقة الثنائية الثانية | |||
| 16384 | 4000 سداسي | char[6] | الرقم السحري الثاني {'S', 'K', 'U', 'L', 0xBA, 0xBE} |
| مماثلة للمنطقة الثنائية الأولى | |||
| 16488 | 4068 سداسي | uint8_t[64] | الملح، فريد لكل منطقة ثنائية |
| مماثلة للمنطقة الثنائية الأولى | |||
| 16640 | 4100 سداسي | uint64_t | إزاحة منطقة LUKS هذه على الجهاز (عادةً 4000 سداسي عشري ، 16384 عشري ) |
| 16648 | 4108 سداسي | _char[184] | يجب تصفير الحشو |
| 16832 | 41C0 سداسي | uint8_t[64] | تم حساب مجموع التحقق للمنطقة الثنائية الثانية باستخدام خوارزمية مجموع التحقق، مع إضافة أصفار إذا كانت أقصر |
| 16896 | 4200 سداسي | _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 انظر أيضاً
مراجع
- ↑ فروويرث، كليمنس (2018-01-20). "مواصفات تنسيق LUKS على القرص، الإصدار 1.2.3" (ملف PDF) . تم الاطلاع عليه بتاريخ 2021-09-23 .
- ↑ "تشفير محركات الأقراص باستخدام LUKS" . وثائق فيدورا . تم الاطلاع عليه بتاريخ 6 مايو 2022 .
- 1 2 3 "الفصل 12. تشفير أجهزة الكتل باستخدام LUKS" . بوابة عملاء Red Hat .
- ↑ "كيفية تشفير القرص الصلب (القسم) باستخدام LUKS في نظام لينكس" . 27 فبراير 2019.
- ↑ "كيفية تشفير بياناتك باستخدام dm-crypt" . لينود . 22 نوفمبر 2022.
- ↑ بوسي، سيمون؛ فيسكونتي، أندريا (2015). "ما يجب أن يعرفه المستخدمون عن تشفير القرص الكامل القائم على LUKS" (PDF) .
{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal= - ↑ "systemd-cryptenroll - ArchWiki" . wiki.archlinux.org . تم الاطلاع عليه بتاريخ 22-11-2023 .
- ↑ "كيفية تشفير حاوية LUKS باستخدام بطاقة ذكية أو رمز مميز" . 20 أبريل 2014.
- ↑ "كيف يعمل LUKS مع تشفير القرص الكامل في لينكس" . 25 سبتمبر 2021.
- 1 2 3 4 5 6 "on-disk-format-luks2.pdf" (PDF) . 7 مارس 2024.
- 1 2 – دليل إدارة لينكس والأوامر ذات الامتيازات
- ↑ "اختراق تشفير LUKS" . الطب الشرعي الإلكتروني . 21 أغسطس 2020. مؤرشف من الأصل في 26 أكتوبر 2021.
- ↑ "AFsplitter" .
- 1 2 3 "dm-crypt/تشفير نظام كامل" . تم الاطلاع عليه بتاريخ 6 مايو 2022 .
- ↑ "قوس مع LVM على LUKS" .
- ↑ "LUKS على LVM: وحدات تخزين منطقية مشفرة ونسخ احتياطية آمنة" . 12 سبتمبر 2014.
- ↑ "مجلدات المستخدمين" . systemd .
- ↑ "صيانة نظام ويندوز الفرعي لنظام لينكس (WSL) 2 نواة لينكس" . مدونات مطوري مايكروسوفت . 16 أبريل 2021.
- ^ “ليبركريبت” . جيثب . 27 يوليو 2022.
- ↑ "خلل في برنامج التشغيل يسمح بتصعيد الامتيازات. مطلوب ملاحظات · المشكلة رقم 38 · tdk/LibreCrypt" . GitHub . 30 سبتمبر 2015.
- ↑ "برنامج تشغيل يسمح بالكتابة إلى أجهزة عشوائية · المشكلة رقم 39 · tdk/LibreCrypt" . GitHub . 7 أكتوبر 2015.
- ↑ "قائمة الميزات الرئيسية لبرنامج DragonFly" . تم الاطلاع عليها بتاريخ 6 مايو 2022 .
- ↑ "anylinuxfs GitHub" . تم الاطلاع عليه بتاريخ 12 يوليو 2026 .
- ↑ مايكل لارابيل (8 مايو 2016). "برنامج تثبيت كالاماريس يضيف دعم تشفير LUKS" . فورونيكس .
- ↑ "كيفية تشفير القرص الصلب في أوبونتو" . اجعل التكنولوجيا أسهل . 13 يناير 2017.
- ↑ "PartmanCrypto" . ويكي دبيان . تم الاطلاع عليه بتاريخ 6 مايو 2022 .
- 1 2 "مواصفات تنسيق LUKS على القرص" (PDF) .
- ↑ "صفحة دليل CRYPTSETUP-REENCRYPT(8)" . man7.org .
روابط خارجية
- برامج التشفير
- تشفير القرص
- برامج أمان لينكس
