مركز إدارة النفايات الصلبة

الجيل HMAC-SHA1

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

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

تفاصيل

يمكن استخدام أي دالة تجزئة تشفيرية، مثل SHA-2 أو SHA-3 ، في حساب HMAC؛ تسمى خوارزمية MAC الناتجة HMAC- x ، حيث x هي دالة التجزئة المستخدمة (على سبيل المثال HMAC-SHA256 أو HMAC-SHA3-512). تعتمد القوة التشفيرية لـ HMAC على القوة التشفيرية لدالة التجزئة الأساسية وحجم ناتج التجزئة وحجم وجودة المفتاح. [1]

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

تقوم دالة التجزئة التكرارية (التي تستخدم بنية Merkle–Damgård ) بتقسيم الرسالة إلى كتل ذات حجم ثابت وتكرارها باستخدام دالة ضغط . على سبيل المثال، تعمل SHA-256 على كتل ذات 512 بت. يكون حجم إخراج HMAC هو نفس حجم دالة التجزئة الأساسية (على سبيل المثال، 256 و512 بت في حالة SHA-256 وSHA3-512 على التوالي)، على الرغم من أنه يمكن تقليصه إذا رغبت في ذلك.

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

تم نشر تعريف وتحليل بنية HMAC لأول مرة في عام 1996 في ورقة بحثية كتبها Mihir Bellare و Ran Canetti و Hugo Krawczyk ، [1] [2] وكتبوا أيضًا RFC 2104 في عام 1997. [3] : §2  كما حددت ورقة عام 1996 أيضًا متغيرًا متداخلًا يسمى NMAC (Nested MAC). يعمم FIPS PUB 198 ويوحد استخدام HMACs. [4] يتم استخدام HMAC داخل بروتوكولات IPsec و [2] و SSH و TLS ورموز الويب JSON .

تعريف

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

أين

هي دالة تجزئة تشفيرية.
هي الرسالة التي يجب التحقق من صحتها.
هو المفتاح السري.
هو مفتاح بحجم كتلة مشتق من المفتاح السري، K ؛ إما عن طريق الحشو إلى اليمين بالأصفار حتى حجم الكتلة، أو عن طريق التجزئة إلى أقل من أو يساوي حجم الكتلة أولاً ثم الحشو إلى اليمين بالأصفار.
يدل على الترابط .
يشير إلى البتات الحصرية أو (XOR).
هي الحشوة الخارجية بحجم الكتلة، وتتكون من بايتات متكررة بقيمة 0x5c.
هو الحشو الداخلي بحجم الكتلة، ويتكون من بايتات متكررة بقيمة 0x36. [3] : §2 
دالة التجزئة H b، بايتات L، بايتات
إم دي 5 64 16
شا-1 64 20
إس إتش إيه-224 64 28
إس إتش إيه-256 64 32
SHA-512/224 128 28
SHA-512/256 128 32
إس إتش إيه-384 128 48
إس إتش إيه-512 128 64 [5]
SHA3-224 144 28
SHA3-256 136 32
SHA3-384 104 48
SHA3-512 72 64 [6]
out = H(in)
L = length(out)
b = H's internal block length[3] : §2 

تطبيق

يوضح الكود الزائف التالي كيفية تنفيذ HMAC. يبلغ حجم الكتلة 512 بت (64 بايت) عند استخدام إحدى وظائف التجزئة التالية: SHA-1، MD5، RIPEMD-128. [3] : §2 

دالة hmac هي 
    المدخل: 
        key: Bytes     // مجموعة من البايتات 
        message: Bytes     // مجموعة من البايتات المراد تجزئتها 
        hash: Function // دالة التجزئة التي سيتم استخدامها (على سبيل المثال SHA-1) 
        blockSize: Integer   // حجم كتلة دالة التجزئة (على سبيل المثال 64 بايت لـ SHA-1) 
        outputSize: Integer   // حجم إخراج دالة التجزئة (على سبيل المثال 20 بايت لـ SHA-1)

    // احسب حجم المفتاح للكتلة
    block_sized_key = computeBlockSizedKey(المفتاح، التجزئة، حجم الكتلة)

    o_key_pad ← block_sized_key xor [0x5c blockSize]    // مفتاح مبطن خارجي 
    i_key_pad ← block_sized_key xor [0x36 blockSize]    // مفتاح مبطن داخلي

    إرجاع   hash(o_key_pad ∥ hash(i_key_pad ∥ message))

دالة computeBlockSizedKey هي 
    المدخل: 
        key: Bytes     // مجموعة من البايتات 
        hash: Function // دالة التجزئة التي سيتم استخدامها (على سبيل المثال SHA-1) 
        blockSize: Integer   // حجم كتلة دالة التجزئة (على سبيل المثال 64 بايت لـ SHA-1)
 
    // يتم تقصير المفاتيح الأطول من blockSize عن طريق التجزئة الخاصة بها 
    if (length(key) > blockSize) then
        المفتاح = هاش (مفتاح)

    // يتم حشو المفاتيح الأقصر من blockSize إلى blockSize عن طريق الحشو بالأصفار على اليمين 
    if (length(key) < blockSize) then 
        return   Pad(key, blockSize) // حشو المفتاح بالأصفار لجعله blockSize طويلًا

      مفتاح
 العودة

مبادئ التصميم

كان الدافع وراء تصميم مواصفات HMAC هو وجود هجمات على آليات أكثر بساطة لدمج مفتاح مع دالة تجزئة. على سبيل المثال، قد يفترض المرء أن نفس الأمان الذي توفره HMAC يمكن تحقيقه باستخدام MAC = H ( المفتاحالرسالة ). ومع ذلك، تعاني هذه الطريقة من خلل خطير: مع معظم وظائف التجزئة، من السهل إلحاق البيانات بالرسالة دون معرفة المفتاح والحصول على MAC صالح آخر (" هجوم تمديد الطول "). البديل، إلحاق المفتاح باستخدام MAC = H ( الرسالةالمفتاح )، يعاني من مشكلة مفادها أن المهاجم الذي يمكنه العثور على تصادم في دالة التجزئة (غير المفتاحية) لديه تصادم في MAC (حيث أن الرسالتين m1 وm2 اللتين تنتجان نفس التجزئة ستوفران نفس شرط البداية لدالة التجزئة قبل تجزئة المفتاح المضاف، وبالتالي فإن التجزئة النهائية ستكون هي نفسها). يعد استخدام MAC = H ( المفتاحالرسالةالمفتاح ) أفضل، ولكن العديد من أوراق الأمان اقترحت وجود ثغرات أمنية مع هذا النهج، حتى عند استخدام مفتاحين مختلفين. [1] [7] [8]

لم يتم العثور على أي هجمات تمديد معروفة ضد مواصفات HMAC الحالية والتي تم تعريفها على أنها H ( مفتاحH ( مفتاحرسالة )) لأن التطبيق الخارجي لدالة التجزئة يخفي النتيجة الوسيطة للتجزئة الداخلية. لا تعتبر قيم ipad و opad بالغة الأهمية لأمن الخوارزمية، ولكن تم تعريفها بطريقة تجعل المسافة بين كل من المفتاحين الداخلي والخارجي كبيرة وبالتالي سيكون عدد البتات المشتركة بين المفتاحين الداخلي والخارجي أقل. يتطلب تقليل أمان HMAC أن تكون مختلفة في بت واحد على الأقل. [ بحاجة لمصدر ]

لا تحتاج دالة التجزئة Keccak ، التي تم اختيارها من قبل NIST كفائزة في مسابقة SHA-3 ، إلى هذا النهج المتداخل ويمكن استخدامها لتوليد MAC ببساطة عن طريق إضافة المفتاح إلى الرسالة، لأنها ليست عرضة لهجمات تمديد الطول. [9]

حماية

تعتمد القوة التشفيرية لخوارزمية HMAC على حجم المفتاح السري المستخدم وأمان دالة التجزئة الأساسية المستخدمة. وقد ثبت أن أمان بناء HMAC مرتبط بشكل مباشر بخصائص أمان دالة التجزئة المستخدمة. الهجوم الأكثر شيوعًا ضد خوارزميات HMAC هو القوة الغاشمة للكشف عن المفتاح السري. تتأثر خوارزميات HMAC بشكل أقل بكثير بالتصادمات مقارنة بخوارزميات التجزئة الأساسية وحدها. [2] [10] [11] على وجه الخصوص، أثبت ميهير بيلاير أن HMAC عبارة عن دالة شبه عشوائية (PRF) تحت افتراض وحيد هو أن دالة الضغط عبارة عن PRF. [12] لذلك، لا تعاني HMAC-MD5 من نفس نقاط الضعف التي تم العثور عليها في MD5. [13]

تتطلب RFC 2104 أن " يتم أولاً تجزئة المفاتيح التي يزيد طولها عن بايت واحد باستخدام H " مما يؤدي إلى شبه تصادم مربك: إذا كان المفتاح أطول من حجم كتلة التجزئة (على سبيل المثال 64 بايت لـ SHA-1)، HMAC(k, m)فسيتم حسابه على أنه HMAC(H(k), m). يتم طرح هذه الخاصية أحيانًا كنقطة ضعف محتملة لـ HMAC في سيناريوهات تجزئة كلمة المرور: فقد تم إثبات أنه من الممكن العثور على سلسلة ASCII طويلة وقيمة عشوائية سيكون تجزئتها أيضًا سلسلة ASCII، وستنتج كلتا القيمتين نفس إخراج HMAC. [14] [15] [16]

في عام 2006، أظهر جونجسونج كيم وأليكس بيريوكوف وبارت برينيل وسيوكي هونغ كيفية التمييز بين HMAC مع الإصدارات المخفضة من MD5 وSHA-1 أو الإصدارات الكاملة من HAVAL و MD4 و SHA-0 من دالة عشوائية أو HMAC مع دالة عشوائية. تسمح المميزات التفاضلية للمهاجم بتصميم هجوم تزوير على HMAC. علاوة على ذلك، يمكن أن تؤدي المميزات التفاضلية والمستطيلة إلى هجمات الصورة الأولية الثانية . يمكن تزوير HMAC مع الإصدار الكامل من MD4 بهذه المعرفة. لا تتعارض هذه الهجمات مع إثبات أمان HMAC، ولكنها توفر نظرة ثاقبة على HMAC بناءً على وظائف التجزئة التشفيرية الموجودة. [17]

في عام 2009، قدم شياويون وانج وآخرون هجومًا مميزًا على HMAC-MD5 دون استخدام مفاتيح ذات صلة. يمكنه التمييز بين إنشاء مثيل لـ HMAC باستخدام MD5 وإنشاء مثيل بوظيفة عشوائية مع 2 97 استعلامًا باحتمالية 0.87. [18]

في عام 2011، تم نشر RFC 6151 معلوماتي لتلخيص الاعتبارات الأمنية في MD5 وHMAC-MD5. بالنسبة لـ HMAC-MD5، يلخص RFC أنه - على الرغم من تعرض أمان دالة التجزئة MD5 نفسها للخطر بشكل كبير - فإن "الهجمات على HMAC-MD5 المعروفة حاليًا لا يبدو أنها تشير إلى ثغرة عملية عند استخدامها ككود مصادقة للرسالة" ، لكنه يضيف أيضًا أنه "بالنسبة لتصميم بروتوكول جديد، لا ينبغي تضمين مجموعة تشفير تحتوي على HMAC-MD5" . [13]

في مايو 2011، تم نشر RFC 6234 الذي يوضح بالتفصيل النظرية المجردة والرمز المصدري لـ HMACs المستندة إلى SHA. [19]

أمثلة

فيما يلي بعض قيم HMAC، بافتراض ترميز ASCII مكون من 8 بتات للإدخال وترميز سداسي عشري للإخراج:

HMAC_MD5("key", "يقفز الثعلب البني السريع فوق الكلب الكسول") = 80070713463e7749b90c2dc24911e275

HMAC_SHA1("key", "يقفز الثعلب البني السريع فوق الكلب الكسول") = de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9

HMAC_SHA256("key", "يقفز الثعلب البني السريع فوق الكلب الكسول") = f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8

HMAC_SHA512("key", "يقفز الثعلب البني السريع فوق الكلب الكسول") = b42af09057bac1e2d41708e48a902e09b5ff7f12ab428a4fe86653c73dd248fb82f948a549f7b791a5b41915ee4d1ec3935357e4e2317250d0372afa2ebeeb3a

انظر أيضا

مراجع

  1. ^ اي بي سي بيلاري، ميهير ؛ كانيتي، ران؛ كراوزيك ، هوغو (1996). "وظائف التجزئة المفتاحية لمصادقة الرسائل" (PDF) . ص  1 – 15. CiteSeerX  10.1.1.134.8430 .
  2. ^ اي بي سي بيلاري، ميهير؛ كانيتي، ران؛ كراوزيك ، هوغو (ربيع 1996). "مصادقة الرسائل باستخدام وظائف التجزئة - إنشاء HMAC" (PDF) . كريبتوبايتس . 2 (1).
  3. ^ abcd H. Krawczyk; M. Bellare; R. Canetti (فبراير 1997). HMAC: Keyed-Hashing for Message Authentication. Network Working Group. doi : 10.17487/RFC2104 . RFC 2104. إعلامي. تم التحديث بموجب RFC 6151.
  4. ^ "FIPS 198-1: رمز مصادقة الرسائل ذات التجزئة المفتاحية (HMAC)". معايير معالجة المعلومات الفيدرالية . 16 يوليو 2008.
  5. ^ "FIPS 180-2 مع إشعار التغيير 1" (PDF) . csrc.nist.gov .
  6. ^ دوركين، موريس (4 أغسطس 2015). "معيار SHA-3: التجزئة القائمة على التباديل ووظائف الإخراج القابلة للتمديد". معايير معالجة المعلومات الفيدرالية – عبر منشورات المعهد الوطني للمعايير والتكنولوجيا.
  7. ^ Preneel, Bart ; van Oorschot, Paul C. (1995). "MDx-MAC وبناء MACs سريعة من وظائف التجزئة". CiteSeerX 10.1.1.34.3855 .  {{cite journal}}: تتطلب المجلة الاستشهاد بها |journal=( مساعدة )
  8. ^ برينيل ، بارت ؛ فان أورشوت، بول سي. (1995). “حول أمان خوارزميتين MAC”. سيتيسيركس 10.1.1.42.8908 .  {{cite journal}}: تتطلب المجلة الاستشهاد بها |journal=( مساعدة )
  9. ^ فريق Keccak . "فريق Keccak – التصميم والأمان" . تم الاسترجاع في 31 أكتوبر 2019. على عكس SHA-1 وSHA-2، لا يعاني Keccak من ضعف تمديد الطول، وبالتالي لا يحتاج إلى بناء HMAC المتداخل. بدلاً من ذلك، يمكن إجراء حساب MAC ببساطة عن طريق إضافة الرسالة بالمفتاح.
  10. ^ Schneier, Bruce (August 2005). "SHA-1 Broken" . تم الاسترجاع في 9 يناير 2009. على الرغم من أنه لا يؤثر على التطبيقات مثل HMAC حيث لا تكون التصادمات مهمة
  11. ^ H. Krawczyk؛ M. Bellare؛ R. Canetti (فبراير 1997). HMAC: Keyed-Hashing for Message Authentication. Network Working Group. doi : 10.17487/RFC2104 . RFC 2104. معلوماتي. القسم 6. تم التحديث بواسطة RFC 6151. يعتمد أقوى هجوم معروف ضد HMAC على تكرار الاصطدامات لوظيفة التجزئة H ("هجوم عيد الميلاد") [PV,BCK2]، وهو غير عملي تمامًا لوظائف التجزئة المعقولة إلى الحد الأدنى.
  12. ^ بيلاري، ميهير. "أدلة جديدة لـ NMAC وHMAC: الأمان بدون مقاومة التصادم" (PDF) . مجلة التشفير . تم الاسترجاع في 15 ديسمبر 2021. تثبت هذه الورقة أن HMAC عبارة عن PRF تحت افتراض وحيد هو أن دالة الضغط عبارة عن PRF. وهذا يستعيد ضمانًا قائمًا على الإثبات نظرًا لعدم وجود هجمات معروفة تعرض شبه عشوائية دالة الضغط للخطر، كما يساعد أيضًا في تفسير مقاومة الهجوم التي أظهرتها HMAC حتى عند تنفيذها باستخدام وظائف التجزئة التي تكون مقاومتها للتصادم (الضعيفة) معرضة للخطر.
  13. ^ ab S. Turner; L. Chen (مارس 2011). اعتبارات أمنية محدثة لخلاصة رسالة MD5 وخوارزميات HMAC-MD5. IETF . doi : 10.17487/RFC6151 . RFC 6151. إعلامي. تحديثات RFC 2104 و1321.
  14. ^ "شرح تصادمات التجزئة PBKDF2+HMAC · Mathias Bynens". mathiasbynens.be . تم الاسترجاع في 7 أغسطس 2019 .
  15. ^ "آرون توبونس: كسر HMAC" . تم الاسترجاع في 7 أغسطس 2019 .
  16. ^ "RFC 2104 Errata Held for Document Update · Erdem Memisyazici". www.rfc-editor.org . تم الاسترجاع في 23 سبتمبر 2016 .
  17. ^ جونغسونغ، كيم؛ بيريوكوف، أليكس؛ برينيل، بارت؛ هونغ، سيوكي (2006). "حول أمن أنظمة HMAC وNMAC القائمة على أنظمة HAVAL وMD4 وMD5 وSHA-0 وSHA-1" (PDF) . SCN 2006. Springer-Verlag.
  18. ^ وانغ ، شياويون. يو، هونغبو؛ وانغ، وي. تشانغ، هاينا؛ زان ، تاو (2009). “تحليل التشفير على HMAC/NMAC-MD5 وMD5-MAC” (PDF) . تم الاسترجاع 15 يونيو 2015 . {{cite journal}}: تتطلب المجلة الاستشهاد بها |journal=( مساعدة )
  19. ^ Eastlake, 3rd, D.; Hansen, T. (مايو 2011). خوارزميات التجزئة الآمنة الأمريكية (SHA وSHA-based HMAC وHKDF). فريق عمل هندسة الإنترنت . doi : 10.17487/RFC6234 . ISSN  2070-1721. RFC 6234. إعلامي. يجعل RFC 4634 قديمًا.  تحديث RFC  3174
  • أداة إنشاء/اختبار HMAC عبر الإنترنت
  • FIPS PUB 198-1، رمز مصادقة الرسائل ذات التجزئة الرئيسية (HMAC)
  • تنفيذ HMAC
  • تنفيذ HMAC في بايثون
  • تنفيذ جافا
  • تنفيذ Rust HMAC
Retrieved from "https://en.wikipedia.org/w/index.php?title=HMAC&oldid=1251804772"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate