الرئيسيةعريقبحث

رمز مصادقة الرسالة استناداً على التجزئة هاش HMAC


الجيل HMAC-SHA1

في علم التشفير، HMAC (وهي اختصار لـ رمز مصادقة الرسالة استناداً على التجزئة ذات المفتاح أو رمز مصادقة الرسالة استناداً على التجزئة هاش) هي نوع معين من رمز مصادقة الرسائلة (MAC) متضمنةً لدالة التجزئة التشفيرية ولمفتاح تشفيري سري.

كما هو الحال مع أي رمز مصادقة الرسالة (MAC) يمكن استخدامه للتحقق من سلامة البيانات ومن صحة الرسالة في الوقت ذاته.

يمكن استخدام أيّة دالة تجزئة تشفيرية كـ SHA-256 أو SHA-3 في حساب HMAC (رمز مصادقة الرسالة استناداً على التجزئة)

وتسمى خوارزمية MAC الناتجة HMAC-X، حيث أنَّ X تعبر عن دالة التجزئة المستخدمة (مثال: HMAC-SHA256 أو HMAC-SHA3)

تعتمد قوة التشفير في الـ HMAC على قوة تشفير دالة التجزئة المستخدمة، وعلى حجم خرج التجزئة، وعلى حجم ونوعية المفتاح.

يستخدم HMAC مرورين (دورتين) في حساب التجزئة. أولا يستخدم المفتاح السري ليتم اشتقاق مفتاحين منه – واحد داخلي والآخر خارجي

ينتج في المرور الأول من الخوارزمية تجزئة/هاش داخلي وهو مشتق من الرسالة ومن المفتاح الداخلي. في المرور الثاني ينتج رمز الـ HMAC النهائي وهو مشتق من التجزئة/الهاش الداخلي الناتج ومن المفتاح الخارجي.

وهكذا توفر الخوارزمية حصانة أفضل ضد هجمات تمديد الطول (length extension attacks).

تجزأ دالة التجزئة التكرارية الرسالة إلى عدة كتل ذات حجم ثابت وتتكرر عليهم بوساطة دالة ضغط

على سبيل المثال: يعمل SHA-256  على كتل 512-بت

حجم خرج الـ HMAC يساوي حجم دالة التجزئة المستخدمة (مثال: 256 و1600 بت في حالة SHA-256 وSHA-3 على التوالي)، على الرغم من أنه يمكن اقتطاعه عند الرغبة.

الـHMAC لا يقوم بتشفير الرسالة. عوضا عن ذلك، يجب إرسال الرسالة (سوآءا مشفرة أم لا) إلى جانب تجزئة/هاش الـHMAC

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

نُشر تعريف وتحليل بناء HMAC لأول مرة في عام 1996 في ورقة كتبها Mihir Bellare و Ran Canetti و Hugo Krawczyk ، [1] وكتبوا أيضًا RFC 2104 في عام 1997. حددت ورقة عام 1996 أيضًا متغيرًا متداخلاً يسمى NMAC. يقوم FIPS PUB 198 بتعميم وتوحيد استخدام HMACs.

يتم استخدام HMAC داخل بروتوكولات IPsec و TLS و JSON Web Tokens.

تعريف

هذا التعريف مأخوذ من RFC 2104 :

حيث،

H هي دالة تجزئة تشفيرية
م هي الرسالة المراد توثيقها
K هو المفتاح السري
K ' هو مفتاح بحجم الكتلة مشتق من المفتاح السري K ؛ إما عن طريق الحشو إلى اليمين بصفر يصل إلى حجم الكتلة، أو بالتخفيض إلى أقل من حجم الكتلة أولاً ثم الحشو إلى اليمين باستخدام الأصفار
|| يدل على الضم
⊕ يدل على أحادي المعامل عملية الاستثناء أو (XOR)
opad عبارة عن حشوة خارجية بحجم الكتلة، تتكون من وحدات بايت متكررة بقيمة 0x5c
ipad هو حشوة داخلية بحجم الكتلة، تتكون من وحدات بايت متكررة بقيمة 0x36

التنفيذ

يوضح الكود الزائف التالي كيفية تنفيذ HMAC. حجم الكتلة هو 64 (بايت) وذلك عند استخدام إحدى دالات التجزئة التالية: SHA-1 ، MD5 ، RIPEMD-128/160.

function hmac is

input:

key: Bytes // مصفوفة البايتات

message: Bytes // مصفوفة بايتات المراد تجزئتها

hash: Function // دالةهاش التجزئة المستخدمة

blockSize: Integer // حجم كتلة دالة التجزئة المستخدمة

outputSize: Integer // حجم الخرج لدالة التجزئة المستخدمة

// يتم تقصير المفاتيح الأطول من حجم الكتلة عن طريق تجزئتها

if (length(key) > blockSize) then

key ← hash(key)

// يتم حشو المفاتيح الأقصر من كتلة الحجم بالحشو مع الأصفار على اليمين

if (length(key) < blockSize) then

key ← Pad(key, blockSize)

o_key_pad ← key xor [0x5c * blockSize] // مفتاح حشو خارجي

i_key_pad ← key xor [0x36 * blockSize] // مفتاح حشو داخلي

return hash(o_key_pad ∥ hash(i_key_pad ∥ message)) // حيث يتم الضم ∥

المراجع

  1. Bellare, Mihir; Canetti, Ran; Krawczyk, Hugo (1996). "Keying Hash Functions for Message Authentication": 1–15.


موسوعات ذات صلة :