يفتح
يغلق

محملات التمهيد Linux تدعم تشفير القرص بالكامل؟ أنظمة تشفير البيانات LUKS وEncFS وCryptoFS لنظام التشغيل Linux تشفير أقسام القرص باستخدام LUKS

سأحاول في هذه المقالة مقارنة أداء أنظمة التشفير المختلفة في نظام التشغيل Linux. من الناحية النظرية، بالطبع، من المعروف أي الأنظمة أكثر إنتاجية، وكانت هناك محاولات لحساب أداء الأنظمة المختلفة (). يحتوي Truecrypt أيضًا على مقياس أداء مدمج (ومع ذلك، يُظهر الأداء على ذاكرة الوصول العشوائي؛ ولا يمكن استخدامه إلا لتقييم سرعة خوارزميات التشفير المختلفة). سأفعل شيئًا مختلفًا بعض الشيء - سأقيس سرعة نظام الملفات المشفر بوسائل مختلفة كنسبة مئوية مقارنة بنظام الملفات العادي غير المشفر.


سنقوم بتشفير قسم منفصل على محرك أقراص ثابت منفصل، لا يحتوي على نظام الملفات الجذر، باستخدام الخوارزمية المستخدمة افتراضيًا في كل حالة محددة. كمستخدم عادي، لا أفهم الفروق الدقيقة في معايير التشفير (على سبيل المثال، كيف يختلف تجزئة RIPEMD-160 عن Whirpool، أي من هذه الأوضاع أسرع، والذي يوفر حماية أعلى)، لذلك سنعتمد ببساطة على حقيقة أن اختارت الشركات المصنعة لكل منتج برمجي الإعدادات الافتراضية للتشفير بشكل كافٍ. قد لا يكون هذا صحيحًا تمامًا، نظرًا لأن أداء خوارزميات التشفير المختلفة ليس هو نفسه. إذا كنت ترغب في ذلك، بالطبع يمكنك تغيير نوع التشفير، لكنني لست متأكدًا من أن جميع المنتجات التي تم اختبارها تحتوي على مجموعة متطابقة تمامًا من الخوارزميات. سنقوم باختبار:

3) eCryptfs هو النظام الافتراضي المقدم لمستخدمي Ubuntu لتشفير الدلائل الرئيسية، ولهذا السبب تم تضمينه في هذا الاختبار. يعمل على رأس نظام الملفات الموجود. يقوم بتشفير كل ملف على حدة، ليتمكن الجميع من رؤية الحقوق وتواريخ التعديل وعدد الملفات المشفرة؛ بشكل افتراضي، تكون أسماء الملفات مرئية أيضًا، على الرغم من وجود خيار لتشفيرها. المنتج الأكثر فعالية في المجموعة.

4) EncFS هو نظير تقريبي لـ eCryptfs، ولكنه يستخدم FUSE.

لذلك، للاختبار، تم تخصيص جهاز منفصل متقدم جدًا في التكوين التالي: وحدة المعالجة المركزية - Intel Celeron 2000 ميجا هرتز، ذاكرة الوصول العشوائي - 512 ميجا بايت DDR PC2700، نظام HDD - WD Caviar SE 5400 RPM 80Gb، اختبار HDD - WD Caviar SE 7200 RPM 80 جيجابايت.
نظام التشغيل - Ubuntu 12.04 LTS، إصدارات جميع البرامج الحالية لمستودعات نظام التشغيل هذا في وقت كتابة هذا التقرير (Truecrypt 7.1a-linux-x86 ليس من المستودعات).

سنقوم باختبار نظام الملفات ext4 الافتراضي لمعظم التوزيعات. لاختبار الأداء، سنستخدم الأداة المساعدة iozone3 وبرنامج نصي مكتوب "على الركبة" لقياس نسبة الفرق في الاختبارات.

البرنامج النصي للعد. ولم يتم إيلاء اهتمام خاص لنقاء الكود؛ وكان المعيار الوحيد عند الكتابة هو وجود النتيجة الصحيحة.

#!/bin/sh Gendifffile () ( # ينشئ الإجراء ملفًا مناسبًا للتحليل. أولاً، يتم اقتطاع الأسطر #غير الخاضعة للتحليل؛ ثانيًا، يتم اقتطاع أول رقمين في كل سطر، مما يشير إلى #حجم الملف وحجم السجل، على التوالي؛ ثالثًا، يتم إخراج الملف بأكمله سطرًا تلو الآخر - نتيجة اختبار واحدة لكل سطر $1 |.grep "^[[:space:]]*[[:digit:]]" |."(لـ (i=3;i<=NF;i++) {print $i}}" done > > $2 ) getline () ( #procedure يطبع السطر رقم $2 من الملف $1 head -n $2 "$1" | tail -n 1 ) قارن () ( #procedure يقارن الملفات $1 و $2 سطرًا تلو الآخر، مع حساب النسبة المئوية للفرق لكل منهما زوج من الاختبارات # ثم يحسب المتوسط ​​الحسابي لعدد النسبة المئوية الأسرع أو الأبطأ # الملف الذي يحتوي على المجموعة الأولى من الاختبارات من الملف الذي يحتوي على المجموعة الثانية P=0 MAX=0 L1=`cat "$1" wc -l` # | عدد الاختبارات في الملف L2=`cat "$2" |. wc -l` if [ $L1 -ne $L2 ]; ثم #if تحتوي الملفات على أعداد مختلفة من الاختبارات، فلن نقارنها بخطأ الإرجاع fi STEP =$(($L1*5/100)) J=0 لـ I في `seq 1 $L1`; do J=$(($J+1)) إذا [ $J -eq $STEP ]; 0 echo "$((100*$I/$ L1))% مكتمل ($I of $L1)" fi A=`getline "$1" $I` B=`getline "$2" $I` if [ `echo $A \> $B|bc -l` - eq 1 ]; ثم D=`echo "100-($B*100/$A)"|bc -l` if [ `echo $D \> $MAX| bc -l` -eq "1" ]; MAX=$D Sleep 5 fi else D=`echo "100-($A*100/$B)"|bc -l` if [ `echo $D \> $ MAX|.bc -l` -eq "1" ]; ثم MAX=$D Sleep 5 fi D="-$D" # إذا كانت القيمة تحتوي على علامة "-"، فسيتم تنفيذ هذا الاختبار بشكل أسرع # في الملف الثاني ، ليس في أول fi P=`echo "$P+ $D"| قبل الميلاد -l` تم P=`echo $P/$L1| bc -l` #حساب المتوسط ​​الحسابي echo PERCENT=$P MAX_PERCENT=$MAX ) genaverage () ( #إجراء لإنشاء ملف معد للتحليل، كل سطر منه هو #المتوسط ​​الحسابي للأسطر المقابلة لجميع ملفات التقرير يقع في الدليل الذي تم تحليله AVG=` mktemp` F=`ls "$1"|wc -l` # عدد الملفات التي تحتوي على تقارير في دليل معين # بشرط أن يتم تخزين هذه الملفات فقط هناك ولا شيء آخر # لن نتحقق من صحة هذا الافتراض إذا كان [ -d " $1" -o $F -lt 2 ]; f $AVGخرج fi TMP=` mktemp` ابحث عن "$1" -type f|. أثناء قراءة الملف؛ افعل #لكل ملف تقرير iozone موجود في الدليل المحدد I=`mktemp` #generate ملف مؤقت مُجهز لتحليل ملف Gendifffile "$ FILE" "$I" #names تكتب كل هذه الملفات إلى "TMP" سطرًا تلو الآخر echo "$I">>$TMP تم L=`cat \`getline "$TMP" 1\`|wc -l` cat " $TMP"| أثناء قراءة الخط؛ إجراء # بعض عمليات التحقق لن يضر L1=`cat "$LINE"| wc -l` #do تحتوي جميع الملفات على نفس عدد الاختبارات if [ $L -ne $L1 ]; ثم حدث خطأ صدى >/dev/stderr، تم إنهاء الأمر STEP=$(($L*5/100)) J=0 for I in `seq 1 $L`; افعل J=$(($J+1)) إذا [ $J -eq $STEP ]; ثم J=0 echo "$((100*$I/$L))% مكتمل ($I of $L)" >/dev/stderr fi SUMFILE=`mktemp` #بهذه الطريقة أحصل على قيمة المتغير SUM من الحلقة المتداخلة SUM=0 cat "$TMP"| أثناء قراءة الخط؛ do SUM=$((`getline "$LINE" $I`+$SUM)) echo $SUM > "$SUMFILE" تم echo `tail -n 1 "$SUMFILE"`/$F|bc -l >> $ AVG # احصل على المتوسط ​​الحسابي # واكتبه في المكان المناسب في ملف AVG rm -f "$SUMFILE" تم cat "$TMP"| أثناء قراءة الخط؛ افعل #حذف الملفات المؤقتة rm -f "$LINE" تم rm -f "$TMP" echo $AVG ) printf %b "\\033)