ما هو مولّد HMAC؟
مولّد HMAC ينشئ رموز مصادقة الرسائل القائمة على التجزئة باستخدام مفتاح سري وخوارزمية تجزئة (SHA-256 وSHA-512 وغيرها). تتحقق رموز HMAC من سلامة البيانات وأصالتها معًا، وتُستخدم بشكل شائع في مصادقة واجهات برمجة التطبيقات وتوقيعات الـ Webhook ورموز JWT.
HMAC يخلط مفتاحاً سرّياً داخل التجزئة، فلا يستطيع التحقق من التوقيع إلا من يملك المفتاح. تدعم الأداة SHA-1 و SHA-256 و SHA-384 و SHA-512 مع إخراج بصيغة hex أو Base64 أو Base64URL أو ثنائي خام، إضافة إلى إعدادات مسبقة بنقرة واحدة لـ Webhook الخاص بـ GitHub و Stripe و Slack و Shopify تملأ الخوارزمية وبادئة الترويسة الصحيحة. يمكن كتابة الرسالة نصاً عادياً أو لصقها مرمَّزة مسبقاً بصيغة hex أو Base64 أو Base64URL، وتُفكّ شيفرتها إلى بايتات خام قبل التوقيع. يُظهر عدّاد البايتات الحيّ المفاتيح الأقصر من 32 بايت الآمنة للإنتاج، ويُعاد حساب التوقيع أثناء الكتابة، وحقل التحقق يتحمّل البادئات مثل sha256= أو v0= التي يرسلها هؤلاء المزوّدون. تتم معالجة الرسالة والمفتاح على جهازك.
كيفية الاستخدام
- الخطوة 1 — أدخل رسالتك والمفتاح السري.
- الخطوة 2 — اختر إعدادًا مسبقًا لـ Webhook (GitHub أو Stripe أو Slack أو Shopify)، أو اضبط بنفسك خوارزمية التجزئة (SHA-1 أو SHA-256 أو SHA-384 أو SHA-512) وترميز الإخراج (hex أو Base64 أو Base64URL أو ثنائي). للصق حمولة مرمَّزة مسبقاً، بدّل إدخال الرسالة إلى Hex أو Base64.
- الخطوة 3 — انسخ توقيع HMAC المُولَّد لاستخدامه في رؤوس API أو للتحقق من الـ Webhook.
متى تستخدم
- توقيع حمولات Webhook ليتأكد المستقبل أنها وصلت منك دون تعديل.
- توليد توقيعات الطلبات لـ AWS Signature Version 4 أو أي مخطط مصادقة API مشابه.
- إنتاج توقيعات JWT باستخدام خوارزميات HS256 و HS384 و HS512.
النتيجة
تتطلب واجهة برمجة الدفع لديك طلبات موقّعة بـ HMAC-SHA256. أدخل جسم الطلب كرسالة واستخدم مفتاح API السري كمفتاح، ثم انسخ التوقيع الناتج في رأس X-Signature.
الأسئلة الشائعة
- ما الفرق بين HMAC وحساب SHA-256 عادي للرسالة مع المفتاح؟
- يستخدم HMAC بنية تجزئة مزدوجة محددة مع مفاتيح داخلية وخارجية مبطنة. هذا يحميه من هجمات تمديد الطول التي تطال البنية الساذجة hash(key‖message) المبنية على SHA-1 أو SHA-256.
- أيهما أختار للإخراج: hex أم Base64؟
- اختر ما يطلبه واجهة API أو مزوّد Webhook. hex شائع في ترويسات HTTP (Stripe و GitHub)، و Base64 شائع داخل أجسام JSON و JWT. التوقيع نفسه، ويختلف الترميز فقط.
- كم يجب أن يكون طول المفتاح السري؟
- 32 بايت (256 بت) من البيانات العشوائية كحد أدنى، ويفضّل أن تكون من مصدر تشفيري. الأقصر يضعف الأمان؛ والأطول من حجم كتلة التجزئة (64 بايت لـ SHA-256) لا يضيف قوة لأن HMAC يضغطه داخليًا.
- لِمَ يختلف توقيعي عن التوقيع الذي يرسله API؟
- غالبًا الاختلاف في المحتوى الموقَّع نفسه. المسافات، رموز نهاية السطر، ترتيب معاملات الاستعلام، ترميز URL، وإدراج الطابع الزمني من عدمه كلها مؤثرة. اتبع وصفة المزوّد حرفًا بحرف.
- هل ما زال HMAC-SHA1 آمناً؟
- للأنظمة الجديدة فضّل HMAC-SHA256 أو أقوى. HMAC-SHA1 يبقى آمنًا تقنيًا لأن بنيته لا تعتمد على مقاومة الاصطدام، لكن الخروج من SHA-1 كليًا هو الخيار الأسلم بعيد المدى.