العربية

أدوات المطورين · SHA حاسبة التجزئة

SHA-256 خطوة بخطوة: الحشو وجدول الرسائل و64 الجولات

· كيف يعمل

شا-256 التشفير متصفح API جافا سكريبت

رسم تخطيطي يوضح مساحة الرسالة وتقسيم الكتلة و64-حلقة المعالجة المستديرة ومجموعة التجزئة النهائية
الرسم التوضيحي المتجه الأصلي ToolAcre

يقوم SHA-256 بتضمين مدخلاتك، وتقسيمها إلى كتل 512 بت وتشغيل كل منها خلال 64 من جولات الخلط. يشرح هذا المنشور كل مرحلة بلغة بسيطة دون الحاجة إلى خلفية تشفير.

ما الذي يحدث فعليًا لوحدات البايت الخاصة بك - الصندوق الأسود الذي لا يفتحه معظم المطورين أبدًا

SHA-256 عبارة عن خوارزمية حتمية تعمل على تحويل أي إدخال إلى بصمة إصبع تبلغ 256 بت (32 بايت). ما يبدو وكأنه صندوق أسود من الخارج هو في الواقع سلسلة من الخطوات المحددة جيدًا. إن فهم هذه الخطوات يزيل الغموض ويتيح لك التحقق من الصحة وتتبع الأخطاء وفهم سبب كون الإخراج على ما هو عليه. كل جزء من الخوارزمية متاح للعامة؛ القوة تأتي من التصميم، وليس من السرية.

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

الحشو - إلحاق 1 bit والأصفار وطول الرسالة 64 بت للوصول إلى مضاعفات 512 bits

خطوة الحشو حتمية ورسمية. بعد إدخالك الفعلي، قم بإلحاق 1 bit واحد (عمليًا، البايت 0x80 إذا كان إدخالك ينتهي عند حد البايت). ثم ألحق صفر بتات حتى تصبح 64 bits أقل من مضاعفات 512 bits. وأخيرًا، قم بإلحاق ترميز كبير النهاية 64 بت لطول الإدخال بالبتات. تضمن هذه الحشوة أن تكون كل رسالة من مضاعفات 512 bits وتقوم بتشفير الطول الأصلي بحيث لا يمكن للمدخلات المتماثلة ذات الأطوال المختلفة إنتاج نفس الملخص.

بالنسبة للإدخال abc (3 bytes = 24 bits)، تكون الرسالة المبطنة 512 bits (كتلة واحدة): البايتات الثلاثة 61 62 63، تليها 0x80، تليها الأصفار، تليها 64-بت ترميز 24 (وهو 0x00...0x18 في حقل كبير النهاية يبلغ 64 بت). تملأ الرسالة الآن كتلة واحدة بالضبط تبلغ 512 بت. بالنسبة للسلسلة الفارغة، تُلحق الحشوة 0x80، متبوعة بأصفار، متبوعة بـ 0x00...0x00 (تشير إلى 0 bits من الإدخال). بالنسبة للإدخال الأطول مثل ملف 100 بايت، فإن الحشو يملأ الكتلة الأخيرة إلى 512 bits ويشير إلى 800 bits من الطول الأصلي.

يتم إصلاح القيم والثوابت الأولية بواسطة الخوارزمية؛ اشتقاقها التاريخي هو خارج دليل المستودع

تبدأ الخوارزمية بثمانية متغيرات عمل ذات 32 بت، تمت تهيئتها إلى أول 32 bits من الأجزاء الكسرية للجذور التربيعية للأعداد الأولية الثمانية الأولى. هذه هي ثوابت ثابتة الترميز، ويمكن رؤيتها في أي تطبيق مرجعي وفي الكود المصدري لمكتبات التشفير. وهي موجودة لأن استخدام الثوابت الثابتة من الرياضيات يتجنب الشك بوجود باب خلفي مخفي. تستخدم أداة ToolAcre تطبيق Web Crypto الخاص بالمتصفح، والذي يطبق نفس هذه الثوابت.

تستخدم الخوارزمية أيضًا 64 ثوابت مستديرة، مشتقة من أول 32 bits من الأجزاء الكسرية للجذور التكعيبية للأعداد الأولية 64 الأولى. وهذه أيضًا ثابتة وعامة. الثوابت بمثابة مواد خلط إضافية. سيؤدي تغييرها إلى كسر الخوارزمية وإنتاج خلاصات مختلفة.

جدول الرسائل - توسيع 16 كلمة إلى 64 مع التحولات والتدوير

يقوم جدول الرسائل بتوسيع 16 كلمة (512 bits) إلى 64 كلمة (2048 bits) عبر صيغة محددة. بالنسبة للجولات 0-15، تأتي الكلمات مباشرة من كتلة الإدخال. بالنسبة للجولات 16-63، ​​يتم حساب كل كلمة جديدة عن طريق أخذ كلمتين سابقتين (بإزاحات محددة)، وتطبيق التدوير والإزاحة، وXORing في كلمة أخرى، وتخزين النتيجة. الصيغة حتمية وقابلة للعكس في سياق كتلة واحدة، ولكن التوسيع ينشر تأثير الإدخال عبر جميع جولات 64.

تستخدم صيغة التوسيع عمليات التدوير لليمين (إزاحة بت دائرية حيث تظهر البتات التي تسقط من أحد الطرفين في الطرف الآخر) وعمليات التحول لليمين. يحافظ التدوير على كافة البتات ولكنه يغير مواقعها؛ يتجاهل التحول الأيمن البتات. يضمن الجمع بين عمليات التدوير والتحولات وعمليات XOR أن كل جزء من الإدخال يؤثر على كلمات متعددة في الجدول.

جولة واحدة - وظائف Ch وMaj وSigma الموصوفة بعمليات خلط البتات، وكيفية تحديث ثمانية متغيرات عمل

تقوم كل دورة من جولات 64 بمعالجة كلمة واحدة من جدول الرسائل وتحديث متغيرات العمل الثمانية. تتضمن الوظيفة الأساسية ست عمليات: مزيج شرطي (غالبًا ما يسمى Ch، لـ "اختيار") يختار البتات بناءً على متغير التحكم، ووظيفة الأغلبية (Maj) التي تختار القيمة الأكثر شيوعًا بين ثلاثة متغيرات، ووظيفتي خلط خاصتين (Sigma_0 وSigma_1) تقومان بتدوير وتحويل متغيرات العمل، ووحدة الإضافة 2^32. تتم جميع العمليات الحسابية باستخدام كلمات ذات 32 بت، لذا يلتف الفائض حولها.

تأخذ وظيفة "الاختيار" ثلاثة مدخلات ذات 32 بت، ولكل موضع بت، تختار البت من الإدخال الأول إذا كان بت التحكم هو 1، أو البت من الإدخال الثاني إذا كان بت التحكم هو 0. تنظر وظيفة الأغلبية إلى ثلاثة مدخلات، ولكل موضع بت، تقوم بإخراج قيمة البت التي تظهر غالبًا بين الثلاثة. هذه هي العمليات غير الخطية التي تكسر الخطية وتضمن انتشار تغييرات المدخلات الصغيرة بشكل غير متوقع عبر الحالة.

تسلسل الكتل وإنتاج المخرجات - إضافة نتيجة كل كتلة إلى حالة التشغيل

تقوم كل جولة بتحديث جميع متغيرات العمل الثمانية عن طريق تدويرها ودمج قيمة جديدة محسوبة من ثابت الجولة الحالي وكلمة جدول الرسائل والحالة السابقة. تتغير متغيرات العمل السبعة الأولى: الثامن يصبح الأول، الأول يصبح الثاني، وهكذا. يتم حساب الثامن الجديد من المتغيرات القديمة باستخدام وظائف الخلط. بعد 64 من الجولات، لديك ثماني قيم جديدة تبلغ 32 بت. تتم إضافتها (modulo 2^32) إلى الثوابت الأولية، مما يؤدي إلى إنتاج حالة التجزئة النهائية لهذه الكتلة.

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

مثال عملي وما لا يغطيه - تتبع المساحة المتروكة وعدد الكتل لرسالة قصيرة؛ البراهين الأمنية خارج النطاق

بالنسبة للإدخال abc، يتم احتواء الرسالة في كتلة واحدة ذات 512 بت بعد الحشو. تضيف المساحة المتروكة 424 bits، مما يجعل الإجمالي 512 bits. يقوم جدول الرسائل بتوسيع هذا إلى 64 كلمة. تستهلك كل جولة كلمة واحدة وتقوم بتحديث متغيرات العمل الثمانية من خلال وظائف الخلط. بعد 64 من الجولات، يتم XORed للحالة باستخدام الثوابت الأولية، مما يؤدي إلى إنتاج الملخص النهائي ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad.

هذا عبارة عن متجه اختبار منشور: نفس الحساب على نفس المدخلات ينتج عنه دائمًا نفس المخرجات. تقوم أداة ToolAcre بإجراء هذه العملية الحسابية الدقيقة عبر تطبيق Web Crypto الخاص بالمتصفح. يمكنك التحقق من ذلك عن طريق تجزئة abc ومقارنة النتيجة بالمتجه المعروف. أي متصفح يقوم بتطبيق Web Crypto بشكل صحيح سوف ينتج نفس النتيجة؛ لا تعترف الخوارزمية بأي اختصارات أو مسارات بديلة.

الوجبات الجاهزة: يقوم Web Crypto بإجراء خلط حتمي SHA-256 دون الكشف عن سر

الخوارزمية عامة، وكل خطوة حتمية. تم اختيار وظائف الخلط (Ch، Maj، Sigma_0، Sigma_1) لتكون غير خطية، مما يعني أن تغيير بتة إدخال واحدة لا يؤدي بشكل متوقع إلى تغيير بتة إخراج واحدة. ويضمن توسيع 16 كلمات الرسالة إلى 64 أن يؤثر الإدخال بأكمله على الحساب بأكمله. تعني جولات 64 وتسلسل الحالة أن المخرجات حساسة لكل بت من المدخلات، ويستخدم المستودع المخرجات الناتجة كملخص حتمي. مقاومة الاصطدام هي خاصية أمنية لها حدود، وليست وعدًا باستحالة حدوث نتائج مكررة رياضيًا.

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