مزج الخوارزميات هو سلاح مهم في صندوق أدوات أي مٌشفر. تنتشر  أكواد الخوارزميات في كل مكان عبر الانترنت حيث يُستخدم معظمها لتأمين كلمات المرور ولكنها تُشكل أيضاً جزء لا يتجزأ من معظم العملات في خوارزميات صنع الهاش الرقمية مثل Bitcoin وLitecoin.

الميزة الأهم في مزج الخوارزميات مع الانظمة المختلفة هي انها تمثل طريق ذو اتجاه واحد – أو بمعنى آخر يمكنك الحصول على الناتج من المٌدخُل ولكن لا يمكنك الحصول على المٌدخل من الناتج- مثل منحنى التشفير الحلقي حيث لا يمكنك الحصول على المفتاح الخاص من المفتاح العام. الخاصية الأخرى هي ان نفس المٌدخَل يُعطي نفس الناتج.

معظم خوارزميات صنع الهاش بما فيهم الـ SHA و RIPEMD يأتي من نفس عائلة الـMD4. خوارزميات صنع الهاش الMD4 تم تطويره بواسطة Ronald Rivest خصيصا ليسمح بتطبيق البرامج بطريقة سهلة جداً. خوارزميات الMD4 وخوارزميات SHA التي تستخدم متغيرات ذات 32 bit مع وظائف المنطق المختصة بالبت bit مثل المشغلات المنطقية AND، OR وXOR لتعمل على المدخل لتحصل على الهاش الناتج.

اذاً كيف يتم صنع الهاش عبر الخوارزميات – في هذه الحالة سنلقي نظرة على SHA1:

  1. قم بإنشاء خمس متغيرات H0 – 01100111010001010010001100000001
    H1 – 11101111110011011010101110001001
    H2 – 10011000101110101101110011111110
    H3 – 00010000001100100101010001110110
    H4 – 11000011110100101110000111110000
  2. ثم اختار كلمة لمزجها. في هذه الحالة سنختار كلمة “CRYPTO”
  3. حول الكلمة إلى ASCII –”الكود الأمريكي النموذجي لتبادل المعلومات”. كل حرف له رقم خاص به. CRYPTO – 67-82-89-80-84-79
  4. حول كود ASCII إلى ثنائي CRYPTO – 01000011-01010010-01011001-01010000-01010100-01001111
  5. اجمع الاحرف ثم اضف 1 إلى النهاية. CRYPTO – 0100001101010010010110010101000001010100010011111
  6. اضف اصفار لجعل الرسالة مساوية ل 418 mod 512 – (وحدة حسابية مثل الساعة ما عدا مع 512 ساعة). لذلك رسالة  ذات 48 بت مع الواحد المضاف ستحتاج 399 صفراً ليضافوا إلى النهاية،  واذا كانت الرسالة بطول 64 حرف (او 512 بتس) ستحتاج 447 صفراً.
    01000011010100100101100101010000010101000100111110­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0
  7. اضف طول الرسالة الاصلية إلى الحقل ذو 64 بت المتبقي بعد ال448 وحدة حسابية. الرسالة بطول 48 حرف والتي يعبر عنها ثنائيا 110000. لذلك ستتم إضافة الآتي إلى نهاية الرسالة في الجزء السادس 0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­0­1­1­0­0­0­0
  8. اقسم الرسالة إلى ستة عشر جزءاً كل جزء مكون من 32 حرف لكل بتس 01000011010100100101100101010000
    010101000100111110­0­0­0­0­0­0­0­0­0­0­0000
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    00000000000000000000000000110000
  9. حول الكلمات ذات 16 x 32 حرف وبت إلى 80 كلمة باستخدام وظيفة الخطوة الحلقية (step loop function). قم باختيار اربع كلمات أولا للجولة الأولى خلال الحلقة وهي عبارة عن خيوط رقم 1،3،9 و14 من الخطوة الثامنة.
    المرة القادمة سنستخدم كلمات رقم 2،4،10،15 من الخطوة الثامنة خلال الحلقة.
    العملية التالية هي ان XoR الكلمات مع بعضها. Xoring هي وظيفة حسابية بسيطة تعطي الناتج الخاص بq فقط اذا كان      المدخلان يحتويان على a 1 في هذا المكان – اذ كانا لا يحتويان على a 1 فإن الناتج هو صفر. الوظيفة هي ((14 XOR 9) XOR 3) XOR 1) والتي ستكون:
    00000000000000000000000000000000
    XOR
    01000011010100100101100101010000
    Is
    01000011010100100101100101010000
  10. قُم بعمل تدوير لليسار للأرقام – بمعنى قُم بتحريك الرقم الأخير في اليسار إلى اليمين. لذا
    01000011010100100101100101010000
    تصبح
    10000110101001001011001010100000 يتم تكرار هذه العملية بعد ذلك إلى ان يصبح هناك 80 كلمة او خيط من ال32 بتس.
  11. الخطوة التالية هي ان تٌجري مجموعة من الوظائف على الكلمات بترتيب معين باستخدام المتغيرات الخمسة التي أٌعدت في الخطوة الأولى. الوظائف تتضمن المشغلات AND, OR & NOT مع Shift الايسر.

النتيجة النهائية انك ستحصل على خمس متغيرات من:
H0 – 01000100101010010111000100110011

H1- 01010000111001010011100001011000

H2-11110000010110000100011000111101 

H3-01001011111101111111000111100101

H4-01000010110110011100101001001011

 

  • حول متغيرات الH ل hex: H0- 44a97133
    H1- 50e53858
    H2- f058463d
    H3- 4bf7f1e5
    H4- 42d9ca4b
  • اجمع المتغيرات مع بعضها لتحصل على خلاصة الهاش: 44a9713350e53858f058463d4bf7f1e542d9ca4b

هذه هي العملية البسيطة خلف صنع الهاش باستخدام الخوارزميات – ببساطة حول أي رقم إلى ثنائي ثم قُم بعمل وظائف بسيطة التي ستعمل من خلال ترانزستور تقليدي بسيط  ومعالجات مثل AND, XOR, NOT ,Rotate &OR. لذلك فإن ASIC او الرقائق الخاصة بالتطبيقات يمكن تصميمها لتحسين الهاش. في حالة ال SHA-256 تم تصميم الرقائق لتحسن التكرارات خلال الخطوات لزيادة سرعة انشاء الهاش من المٌدخُل. هذا يعني انه في حالة التعدين بإمكانك حساب هاش اكثر لكل ثانية عن طريق التكرار خلال مقاييس الnonce والnonce الإضافية لتحصل على احتمالية اعلى لكسب جائزة البلوك.