الهاش و التشفير؟ما هو التجزئة، ما هو تشفير التجزئة، ما هو فك التجزئة

التجزئة مقابل التشفير

هناك اعتقاد خاطئ شائع بأن التجزئة والتشفير هما نفس الشيء. إنهم ليسوا كذلك. التجزئة لا رجعة فيها. خذ المثال التالي كمثال:

$ echo -n Password123 | md5sum
42f749ade7f9e195bf475f37a44cafcb -

نقوم بتمرير السلسلة "Password123" إلى خوارزمية MD5 (algo)، والتي تقوم بإجراء العمليات الرياضية وإرجاع التجزئة المشفرة سداسية عشرية التي تم إنشاؤها. الطريقة الوحيدة للحصول على نفس قيمة إخراج التجزئة هي إدخال algo الأصلي. هناك صراع ، ولكن يمكننا مناقشته لاحقا.

تنتج معظم خوارزميات التجزئة سلسلة ثنائية ذات طول ثابت مشفرة سداسية عشرية. البعض الآخر ، مثل هذا المثال ، يستخدم سلسلة مشفرة base64 كمخرجات. يرجى ملاحظة أن الطول هو نفسه دائمًا:

{SHA} uNF8eZRJ8jmr8WTjyocRJPVpe7w=
{SHA}lqdu/Zr6o2dgIER8Up1/7lcUtgw=
{SHA}qYUOwLMlDEuukA5HCT4LR1kQzco=
{SHA}MXZBCpyWJ7TTs1w2kgGJslwNwTg=
{SHA}2sAPLaUh9Mz0bI XxKEg7qyABe8=

TL ؛ Dr.

التشفير قابل للعكس والتجزئة ليست


لا أريد التحدث كثيرًا عن التشفير (لأن تلك الأشياء مخصصة للكتب) ، ولكن من المهم أن تكون قادرًا على التمييز بين سلاسل التجزئة والسلاسل المشفرة. عادةً ما يملأ التشفير السلسلة بطول معين قبل حدوث التشفير. كما يتطلب مفتاحًا (أو كلمة مرور) لفك التشفير. إذا كنت تستخدم كلمة مرور مشفرة ، فستختلف السلسلة اعتمادًا على طول الإدخال. إذا رأيت مجموعة من كلمات مرور النص المشفر بأطوال مختلفة ، فمن المحتمل أنك تتعامل مع التشفير بدلاً من التجزئة. مثال AES-256-CBC تشفير السلسلة والنص العادي المرتبط بها (بالمفتاح "ASDF"):

foobar             | U2FsdGVkX19G+KtytNHdj6yH2AVvX26pEmtunS/PRnU= 
foobarfoobar       | U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog= 
foobarfoobarfoobar | U2FsdGVkX1/EOnUt57TCW4Rh0EdNnWX lDatuQv2xEXXeAeowW0XG/EXJUe9aSUz 

$ cat كلمات_المرور المشفرة 
U2FsdGVkX19G KtytNHdj6yH2AVvX26pEmtunS/PRnU= 
U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog= 
U2FsdGVkX1/EOnUt57TCW4Rh0EdNnWX lDatuQv2xEXXeAeowW0XG/EXJUe9aSUz 

$ for i in `cat كلمات المرور المشفرة`;  do echo $i | openssl enc -base64 -d -aes-256-cbc - تمرير   تمرير: asdf ؛  صدى ؛  تم 
فوبار 
foobarfoobar 
foobarfoobarfoobar

الآن قد تفكر: قد تكون على حق. ومع ذلك ، يجب أن تكون المواد الرئيسية متاحة للنظام ، مما يعني أن كلمة مرور رئيسية نصية عادية موجودة في مكان ما - سواء كمفتاح RSA أو كلمة مرور أو في ملف ، أو مضمنة في قاعدة بيانات ، أو مشفرة بشكل ثابت في التطبيق ، أو كلمة مرور في مكان ما في الذاكرة. pfft ، لن يستخدم أحد asdf كمفتاح لتشفير كلمات مرور مستخدميه'

استخدم نفس السلسلة لـ MD5:

foobar             | 3858f62230ac3c915f300c664312c63f 
foobarfoobar       | 59faa421729e846dd800dce59943bfc0 
foobarfoobarfoobar | 1352aadab322d1a033c27964be0965db

كلمة مرور التجزئة بعيدة كل البعد عن الكمال ، في الواقع إنها سيئة بعض الشيء ، لكنها أسوأ من التشفير بسبب ما تحاول تحقيقه. يختار المستخدمون الحد الأدنى المطلق للمتطلبات بشكل متكرر أكثر من not ، ويمكنهم أيضًا استخدامه على مواقع متعددة. العديد من "الاختراقات" هي في الواقع مجرد هجمات إعادة استخدام بيانات الاعتماد. إذا كان الحل الوسط الأولي هو استخدام التشفير ، فإن الجهد الوحيد الذي يجب على المهاجم بذله هو العثور على المفتاح لفك تشفير جميع كلمات المرور. بالنسبة للتجزئة ، يحتاجون على الأقل إلى بذل جهد لاختراقها. عند استخدامها مع الخوارزميات الحديثة مثل sha512crypt أو bcrypt أو scrypt أو argon2 ، قد يتطلب التجزئة الكثير من الجهد لاختراقها.



Salted

Salted هو إضافة سلسلة إلى كلمة المرور قبل التجزئة. يجب أن يكون الملح لكل تجزئة فريدًا ، وعادةً ما يتم اختياره بشكل عشوائي ، حيث ينصب التركيز على جعل قيمة تجزئة "كلمة المرور" ذات النص العادي مختلفة في كل مرة. وهذا يجعل الحياة صعبة لمخترقي كلمات المرور ، لأنه من أجل التحقق من كلمة "كلمة المرور" لكل مستخدم من أصل 1000 مستخدم ، كل مستخدم لديه ملح فريد ، ويجب عليهم القيام بذلك 1000 مرة - لكل مستخدم / ملح مرة واحدة. وهذا يعني أيضًا أنهم لا يستطيعون استخدام القواميس المترجمة مسبقًا أو جداول قوس قزح بشكل فعال (عادةً...) لأنها تتطلب ملحًا مخصصًا لكل ملح.

يفسد موقع الويب هذا في بعض الأحيان ويستخدم الملح العالمي لجميع المستخدمين ؛ وهذا يتعارض مع الغرض.

فيما يلي قيمة تجزئة SHA1 المملحة:


b353977827f67a4ae0318f3a9447fae1c13d9d90:b8d18ca 
|___________________________________________| 
                  hash                  |  ملح 
                                        | 
                                                                        separator 

النص العادي لهذه التجزئة هو "كلمة مرور". لها قيمة ملح "b8d18ca" وتستخدم واجهة برمجة التطبيقات SHA1 ($salt.$pass). هذا يعني أن الخوارزمية تحصل على النص العادي لكلمة المرور ، وتولد salt ، وتضيفه إلى مقدمة النص العادي. عندما يحاول موقع الويب أو التطبيق التحقق من كلمة المرور الخاصة بك ، في المستقبل ، سيأخذ كلمة مرور النص العادي الخاصة بك كمدخل ، ويقرأ قيمة الملح في التجزئة المخزنة ، ويضيفها أمام كلمة المرور التي تختارها ، ويقارن قيمة التجزئة الناتجة مع قيمة التجزئة المخزنة. إذا كنت لا تعرف أن جزءًا منه عبارة عن ملح ، فإن التجزئة ستنتج النص العادي التالي:

b8d18capassword

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

إذا تم تنفيذها بشكل صحيح ، فإن التمليح يمكن أن يجعل التكسير أكثر استهلاكًا للوقت. باستخدام Random salt ، فإنك تجبر Cracker على إضاعة الوقت في محاولة كسر قيم التجزئة غير المتطابقة للملح. هذا هو تقريبا الجهد المطلوب لإكمال device_speed / number_of_salts لأننا بحاجة إلى إنشاء مرشح لكل ملح. إذا كان الملح ثابتًا ، فإن العملية الرياضية هي نفسها... سرعة_الجهاز / 1. طريقة أخرى لرؤية هذا:

Our GTX 980 cracks SHA1($salt.$pass) at 3576.8 MH/s or 3.5 مليار مرشح لكل ثانية 
تحتوي قائمة التجزئة   الخاصة بنا   على   1000   أملاح فريدة   

3,500,000,000 / 1000 = 3,500,000 مرشحين لكل ثانية

وهذا أبطأ بثلاثة أوامر من حيث الحجم ، حيث خسر 99.9 ٪. عند استخدام الملح الثابت ، يبدو الأمر على النحو التالي:

لدينا GTX 980 شقوق SHA1($salt.$pass) عند 3576.8 MH/s أو 3.5 مليار مرشح لكل ثانية 
تحتوي قائمة التجزئة   الخاصة بنا   على  1   فريدة من نوعها   ملح 
               
3,500,000,000 / 1 = 3,500,000,000 candidates per second

إذا لم يكن هذا منطقيًا ، فاستمر في القراءة وسيكون لدينا مخطط جميل لاحقًا...


التكرار

تحسين شائع آخر مقارنة ببساطة "تجزئة هذا النص العادي" هو أن "تجزئة هذا النص العادي ، ثم تجزئة تلك النتيجة ، ثم تجزئة تلك النتيجة" تتكرر آلاف المرات. بهذه الطريقة ، يجب على برنامج كسر كلمة المرور القيام بذلك آلاف المرات عند تجربة كلمة مرور مرشح واحدة. وهذا يسمى التكرار أو الحلقة أو التكلفة المتغيرة. تستخدم بعض خوارزميات تجزئة كلمة المرور جولات التكرار المشفرة بقوة ؛ Git الأخرى. ثم يجعلها قابلة للتكوين في جزء من التجزئة نفسها. على سبيل المثال ، يستخدم md5crypt () MD5 ، بما في ذلك salt ، ويتكرر 1000 مرة بالضبط. يستخدم sha512crypt() sha512 ، بما في ذلك ملح ، ويحلق عدد المرات القابلة للتكوين (الافتراضي هو 5000). يؤثر التكرار

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


تأثير أنواع التجزئة على سرعة التكسير

دعونا نلقي نظرة على بعض الأمثلة لتوضيح تأثير اختيار خوارزمية التجزئة سواء كانت مملحة أو باستخدام تكرارات متعددة وغيرها. لنفترض أن المهاجمين يجمعون قيم التجزئة لـ 1000 مستخدم من موقع ويب مصاب يريدون فقط تنفيذ هجوم بسيط لاختبار كل كلمة مرور قيمة التجزئة - 143 مليون كلمة مرور مرشحة.

سيكون لنوع التجزئة الذي يستخدمه موقع الويب المصاب تأثير كبير على الوقت الذي يستغرقه المهاجم من خلال هذا الهجوم. هذا رسم بياني (نسبيًا ، تقريبيًا) لعدد الثواني التي يستغرقها إكمال هذا الهجوم ، اعتمادًا على نوع التجزئة المستخدم ، حيث بطاقة الرسومات القياسية:

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

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



تحديد نوع التجزئة

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

يتم توفير بعض الموارد الممتازة لهذه المهمة هنا وهنا ، وكلها تظهر كيف تبدو قيمة التجزئة المشتركة.

تتوفر حزمة "hash-identifier" في Kali Linux (متوفرة هنا) للمساعدة في تحديد أنواع التجزئة غير المعروفة.



تصادم

يحدث تصادم عندما يؤدي اثنان من المدخلات المختلفة إلى نفس إخراج التجزئة. هذا سيء (على ما يبدو). بالنسبة لكلمات المرور ، قد يعني هذا أنني قد لا أكسر كلمة المرور الفعلية الخاصة بك ، ولكن بما أنني وجدت إدخالًا ينتج نفس قيمة التجزئة ، فيمكنني استخدام قيمة النص العادي لخداع النظام لجعله يعتقد أن كلمة المرور قانونية.

استخدم Microsoft Office خوارزمية كانت عرضة للتعارض لسنوات عديدة في حماية المستندات الخاصة به. ليس من غير المألوف العثور على تعارضات متعددة مع تجزئة واحدة ، وكلها تؤدي إلى فتح المستند.

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


المادة السابقةhashcat رمز كسر الأجهزة
المادة التاليةما هي Hashcat؟الخطوة الأولى في كسر كلمة المرور (البدء الأساسي)
  • Word/Excel/Pdf/PPT/RAR/zip/7z在线密码破解
  • offfice、PDF、压缩文件、WPS、在线密码恢复
  • hashcatonline.com在线密码破解版权所有2010-2025