مولّد رموز HMAC

اكتب رسالة ومفتاحاً سرياً. تحصل على HMAC للرسالة بأربع دوال تجزئة، بالنظام السداسي العشري وبـ Base64، ويُحسب كل ذلك داخل متصفحك.

مجانية تعمل داخل متصفحك آخر مراجعة: الثلاثاء، 30 جمادى الأولى 1448 بعد الهجرة

البيانات المراد توثيقها. يُقرأ النص بترميز UTF-8 كما كُتب. أما السداسي العشري أو Base64 فيُقرأ بايتات.

ترميز الرسالة

طريقة كتابة الرسالة.

المفتاح السري. لا يستطيع صنع HMAC نفسه إلا من يملك المفتاح نفسه، لذلك احتفظ به سرياً.

ترميز المفتاح

طريقة كتابة المفتاح. يقرأ Base64 أيضاً أبجدية الروابط الآمنة لقيمة ”k“ في JWK.

النتيجة

قيم HMAC

تعمل هذه الأداة داخل متصفحك. ما تكتبه فيها لا يُرسل إلينا.

طريقة الاستخدام

  1. اكتب البيانات في الرسالة. وللبيانات الثنائية اختر سداسي عشري أو Base64 تحت ترميز الرسالة.
  2. اكتب السر في المفتاح واختر طريقة كتابته تحت ترميز المفتاح.
  3. اقرأ الصفوف الأربعة في قيم HMAC. انسخ القيمة التي تحتاجها، أو قارنها بالقيمة التي يعطيها نظامك.
  4. إن اختلفت القيم عن نظام آخر، فتحقق من البايتات أولاً، لأن اختلاف سطر النهاية أو الترميز يعطي HMAC مختلفاً.

ما هو HMAC؟

HMAC (RFC 2104) رمز توثيق للرسالة: قيمة قصيرة لا يصنعها إلا من يعرف المفتاح السري. يُبنى من دالة تجزئة H معيّنة، تُطبَّق مرتين على الرسالة والمفتاح، لذلك يمكن استخدام الدالة نفسها للصفوف الأربعة في الجدول. ولأن المفتاح لازم، فإن تطابق HMAC يدل على أن الرسالة لم تتغير، وأن مرسلها يحمل المفتاح.

لا يخفي HMAC الرسالة. يستطيع من يملك الرسالة أن يقرأها، ولا يتيح له HMAC إلا التحقق منها.

HMAC(K, m) = H((K XOR opad) || H((K XOR ipad) || m))

ipad = البايت 0x36 مكرراً B مرة
opad = البايت 0x5C مكرراً B مرة
B    = حجم كتلة H: 64 بايتاً لـ SHA-1 وSHA-256، و128 بايتاً لـ SHA-384 وSHA-512

أي دالة ومفتاح؟

HMAC-SHA-256 هو الخيار المعتاد، وهو الذي تستخدمه كثير من Webhooks وواجهات API. وHMAC-SHA-512 هو البنية نفسها بخرج أطول. ما زال HMAC-SHA-1 يظهر في الأنظمة القديمة، ولا يُختار للتصاميم الجديدة.

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

السداسي العشري وBase64

الشكلان يعرضان البايتات نفسها. يكتب السداسي العشري كل بايت برقمين، فيكون لـ SHA-256 64 رقماً. ويكتب Base64 كل ثلاثة بايتات بأربعة أحرف، فيكون لـ SHA-256 44 حرفاً، وآخرها = للحشو (RFC 4648).

  • HMAC-SHA-1: 40 رقماً سداسياً عشرياً، و28 حرفاً بـ Base64
  • HMAC-SHA-256: 64 رقماً سداسياً عشرياً، و44 حرفاً بـ Base64
  • HMAC-SHA-384: 96 رقماً سداسياً عشرياً، و64 حرفاً بـ Base64
  • HMAC-SHA-512: 128 رقماً سداسياً عشرياً، و88 حرفاً بـ Base64

مثال محلول: RFC 4231، الحالة 2

المفتاح Jefe والرسالة what do ya want for nothing? هما الحالة الثانية في RFC 4231 لـ SHA-256 وSHA-384 وSHA-512، وفي RFC 2202 لـ SHA-1. الجدول أدناه هو ما تعرضه الصفحة لهما، وقيمة HMAC-SHA-256 فيه هي القيمة التي يطبعها RFC: 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843.

الخوارزمية السداسي العشري Base64
HMAC-SHA-1 effcdf6ae5eb2fa2d27416d5f184df9c259a7c79 7/zfauXrL6LSdBbV8YTfnCWafHk=
HMAC-SHA-256 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM=
HMAC-SHA-384 af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649 r0XS43ZIQDFhf3jStYprG5x+9GT1oBtH5C7Dc2MiRF6OIkDKXmnix4syOez6shZJ
HMAC-SHA-512 164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737 Fkt6e/z4GeLjlfvnO1bgo4e9ZCIugx/WECcM1+olBVSXWL91wFqZSm0DT2X48Ob9yuqxo01Ka0tjbgcKOLznNw==

الأسئلة الشائعة

هل HMAC هو تشفير الرسالة نفسه؟

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

ما الفرق بين التجزئة وHMAC؟

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

لماذا يختلف HMAC عن القيمة التي تعطيها مكتبتي؟

يختلف المفتاح أو بايتات الرسالة. فالمفتاح المكتوب نصاً هو بايتات UTF-8 الخاصة به، والأحرف نفسها إذا كُتبت بالنظام السداسي العشري تعطي بايتات مختلفة. كما يغيّر سطر الانتهاء في آخر الرسالة الـ HMAC.

أي طول للمفتاح أستخدم؟

مفتاح عشوائي بطول خرج دالة التجزئة على الأقل: 32 بايتاً لـ HMAC-SHA-256. ينصح RFC 2104 بشدة بألا يكون المفتاح أقصر، والمفتاح المكوّن من كلمات أو عبارة قصيرة يسهل تخمينه.

هل أستطيع فحص توقيع Webhook بهذه الصفحة؟

نعم، إن استخدمت البايتات الدقيقة التي وُقّعت. وتُحسب توقيعات Webhook عادةً على جسم الطلب الخام، فالصق الجسم دون تغيير، لأن JSON أُعيد تنسيقه يعطي HMAC مختلفاً.

هل يُرسل مفتاحي أو رسالتي إلى أي مكان؟

لا. يُحسب HMAC في متصفحك بواسطة SubtleCrypto الخاصة به، ولا يُرفع المفتاح ولا الرسالة ولا يُخزَّنان.

المصادر

آخر مراجعة للأرقام والنص: الثلاثاء، 30 جمادى الأولى 1448 بعد الهجرة.

نستخدم ملفات تعريف ارتباط ضرورية لتشغيل الموقع. وبموافقتك، تستخدم Google أيضاً ملفات تعريف ارتباط للإعلانات، لعرض إعلانات مخصصة. وإذا رفضتها، فستظل ترى إعلانات، لكنها لن تكون مخصصة لك.