0Pricing
Cryptology Academy · درس

HMAC في واجهات API: توقيع الطلبات

نفّذ توقيع الطلبات المعتمد على HMAC ومنع هجمات إعادة الإرسال

HMAC في واجهات API: توقيع الطلبات درس مجاني في Cryptology Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cryptology Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cryptology Academy 4 دروس في المجموع.

مرحبًا

يُستخدم توقيع الطلبات المعتمد على HMAC من قِبل AWS وGitHub وStripe وTwilio لمصادقة استدعاءات API. في هذا الدرس سنبني نظامًا كاملًا لتوقيع الطلبات.

لماذا نوقّع طلبات API؟

قد تُسجَّل مفاتيح API الموجودة في عناوين URL في خوادم الوكلاء وسجل المتصفح وسجلات الخوادم. ويضمّن توقيع الطلبات كامل نص الطلب في MAC، ما يضمن عدم تعديل الحمولة وعدم كشف المفتاح بمفرده.

الإصدار الرابع من توقيع AWS

يحسب AWS SigV4 ما يلي: 1. الطلب القانوني (الطريقة + عنوان URL + الترويسات + تجزئة النص) 2. السلسلة المراد توقيعها (التاريخ + المنطقة + الخدمة + تجزئة الطلب القانوني) 3. مفتاح التوقيع = HMAC(HMAC(HMAC(HMAC('AWS4'+secret, date), region), service), 'aws4_request') 4. التوقيع = HMAC(signing_key, string_to_sign)

التحقق من خطافات GitHub على الويب

يوقّع GitHub حمولة كل خطاف على الويب: X-Hub-Signature-256: sha256=HMACHEX تحققوا كما يلي: import hmac expected = 'sha256=' + hmac.new(secret, payload, 'sha256').hexdigest() hmac.compare_digest(expected, received_signature)

تهديد هجوم إعادة الإرسال

إذا التقط مهاجم طلبًا صالحًا موقّعًا، فيمكنه إعادة إرساله مرات متعددة. فقد تُعاد معاملة تحويل بقيمة 100 دولار، وُقّعت مرة واحدة، 1000 مرة. ولا يمنع HMAC وحده هجمات إعادة الإرسال.

منع إعادة الإرسال باستخدام الطابع الزمني

ضمّنوا طابعًا زمنيًا في الرسالة الموقّعة. وارفضوا الطلبات التي يزيد عمرها على 5 دقائق. يرسل Stripe الترويسة X-Stripe-Signature مع طابع زمني. أما GitHub فيستخدم X-GitHub-Delivery (UUID)، وليس آلية تعتمد على الطابع الزمني.

منع إعادة الإرسال باستخدام nonce

ضمّنوا nonce عشوائيًا في كل طلب. ويخزّن الخادم قيم nonce المستخدمة (في Redis مع TTL). وارفضوا أي طلب يحتوي على nonce سبق رؤيته. وهذه الطريقة أكثر موثوقية من الطوابع الزمنية في الأنظمة الموزعة.

تنفيذ توقيع الطلبات

import hmac, hashlib, time, os def sign_request(secret, method, path, body, timestamp=None): ts = timestamp or str(int(time.time())) payload = f'{method}\n{path}\n{ts}\n' + hashlib.sha256(body).hexdigest() sig = hmac.new(secret.encode(), payload.encode(), 'sha256').hexdigest() return ts, sig

التحقق من جهة الخادم

def verify_request(secret, method, path, body, ts, received_sig): # Check timestamp freshness if abs(time.time() - int(ts)) > 300: # 5 minutes return False # Recompute and compare _, expected = sign_request(secret, method, path, body, ts) return hmac.compare_digest(expected, received_sig)

JWT باستخدام HMAC ‏(HS256)

تستخدم JWTs من نوع HS256 ‏HMAC-SHA256 مع سر مشترك. ويتولى الخادم التوقيع والتحقق معًا. والقيْد هنا أن أي جهة تملك المفتاح تستطيع تزوير الرموز. ولتحقيق ثقة غير متماثلة (في مصادقة جهة خارجية)، استخدموا RS256 أو ES256.

استراتيجية تدوير المفاتيح

دوّروا مفاتيح HMAC دوريًا: أنشئوا مفتاحًا جديدًا، وادعموا المفتاحين القديم والجديد خلال فترة انتقالية (24 ساعة)، ثم أوقفوا استخدام المفتاح القديم. ويشتق AWS SigV4 المفاتيح من أسرار مؤرخة لتمكين التدوير اليومي.

تحقق سريع

لماذا لا يكفي توقيع الطلبات باستخدام HMAC وحده لمنع هجمات إعادة الإرسال؟

مراجعة

لقد نُفّذ توقيع طلبات HMAC مع الحماية من إعادة الإرسال. سنقارن بعد ذلك بين CMAC وPoly1305 بوصفهما بديلين لـ MAC يعتمدان على الشفرات الكتلية.

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

هل درس «HMAC في واجهات API: توقيع الطلبات» مجاني؟

نعم — نص درس «HMAC في واجهات API: توقيع الطلبات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cryptology Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cryptology Academy 4 دروس في المجموع.

ماذا ستتعلم في «HMAC في واجهات API: توقيع الطلبات»؟

نفّذ توقيع الطلبات المعتمد على HMAC ومنع هجمات إعادة الإرسال تتمرن على Cryptology Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Cryptology Academy؟

لا تُشترط خبرة سابقة. Cryptology Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «HMAC في واجهات API: توقيع الطلبات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Cryptology Academy هذا؟

نعم. كل درس في Cryptology Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مفاهيم MAC وهجمات تمديد الطول
  2. بنية HMAC وبرهان الأمان
  3. HMAC في واجهات API: توقيع الطلبات
  4. CMAC وPoly1305: رموز MAC المعتمدة على تشفير الكتل
← العودة إلى Cryptology Academy