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

HMAC

من ويكيبيديا، الموسوعة الحرة
اذهب إلى التنقل اذهب إلى البحث
N write.svg
تعرَّف على طريقة التعامل مع هذه المسألة من أجل إزالة هذا القالب.هذه مقالة غير مراجعة. ينبغي أن يزال هذا القالب بعد أن يراجعها محرر؛ إذا لزم الأمر فيجب أن توسم المقالة بقوالب الصيانة المناسبة. يمكن أيضاً تقديم طلب لمراجعة المقالة في الصفحة المخصصة لذلك. (أبريل 2020)
Edit-clear.svg
تعرَّف على طريقة التعامل مع هذه المسألة من أجل إزالة هذا القالب.تحتاج هذه المقالة إلى تهذيب لتتناسب مع دليل الأسلوب في ويكيبيديا. فضلاً، ساهم في تهذيب هذه المقالة من خلال معالجة مشكلات الأسلوب فيها.
Icon Translate to Arabic.png
تعرَّف على طريقة التعامل مع هذه المسألة من أجل إزالة هذا القالب.تحتوي هذه المقالة ترجمة آلية، يجب تدقيقها وتحسينها أو إزالتها لأنها تخالف سياسات ويكيبيديا.(نقاش)
Crystal Clear app kedit.svg
تعرَّف على طريقة التعامل مع هذه المسألة من أجل إزالة هذا القالب.تحتاج هذه المقالة كاملةً أو أجزاءً منها لإعادة الكتابة حسبَ أسلوب ويكيبيديا. فضلًا، ساهم بإعادة كتابتها لتتوافق معه.
الجيل 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. الوسيط |CitationClass= تم تجاهله (مساعدة); Cite journal requires |journal= (مساعدة)