تفعيل المصادقة القوية باستخدام WebAuthn

المشكلة

يُعد التصيد الاحتيالي من أهم مشكلات الأمان على الويب: استفادت نسبة 81% من عمليات اختراق الحسابات ذات الصلة بالقرصنة خلال العام الماضي من كلمات مرور ضعيفة أو مسروقة. لقد كانت الاستجابة الشاملة لهذه المشكلة في مجال المصادقة متعدّدة العوامل، غير أنّ عمليات التنفيذ مجزأة ومعظمها لا يعالج التصيد الاحتيالي بشكل كافٍ. نتعاون مع تحالف FIDO Alliance منذ عام 2013، ومع W3C مؤخرًا لتنفيذ بروتوكول موحّد لمنع التصيّد الاحتيالي يمكن استخدامه في أي تطبيق ويب.

ما هو WebAuthn؟

تتيح واجهة برمجة تطبيقات مصادقة الويب لتطبيقات الويب الوصول عبر وكيل المستخدم إلى أدوات المصادقة، وهي غالبًا ما تكون رموزًا مميّزة للأجهزة يتم الوصول إليها عبر USB/BLE/NFC أو وحدات مدمجة مباشرةً في النظام الأساسي، وذلك لأغراض إنشاء بيانات اعتماد المفتاح العام على مستوى التطبيق (eTLD+k). ويتيح ذلك إمكانية استخدام مجموعة متنوعة من حالات الاستخدام، مثل:

  • ميزة "المصادقة الثنائية" (2FA) والمقاومة للاحتكاك والتصيد الاحتيالي (للاستخدام مع كلمة المرور).
  • إعادة التفويض بدون كلمة مرور واستنادًا إلى المقاييس الحيوية
  • ميزة "التحقّق بخطوتين" (2FA) والمقاومة للتصيّد الاحتيالي بدون إدخال كلمة مرور (للاستخدام مع الحسابات التي لا تتطلّب استخدام كلمات مرور).

واجهة برمجة التطبيقات في المسار الصحيح ليتم تنفيذها من قبل معظم المتصفحات الرئيسية، وهي تهدف إلى تبسيط واجهة المستخدم التي تواجهها عند إثبات هويتك على الإنترنت والحد من التصيّد الاحتيالي بشكل كبير.

يعمل WebAuthn على توسيع نطاق واجهة برمجة تطبيقات إدارة بيانات الاعتماد وإضافة نوع بيانات اعتماد جديد يُطلق عليه اسم PublicKeyCredential. يختبر WebAuthn التواصل بين المتصفّح وبرنامج المصادقة ويسمح للمستخدم بإجراء ما يلي:

  1. إنشاء بيانات اعتماد المفتاح العام وتسجيلها لموقع إلكتروني
  2. المصادقة على موقع ويب من خلال إثبات امتلاك المفتاح الخاص المقابل.

المصادقات هي أجهزة يمكنها إنشاء أزواج مفاتيح خاصة/عامة وجمع الموافقات. يمكن منح الموافقة على التوقيع بنقرة بسيطة أو قراءة بصمة رقمية ناجحة أو بطرق أخرى ما دامت تستوفي متطلبات FIDO2 (هناك برنامج اعتماد للمصادقين من قِبل تحالف FIDO Alliance). يمكن تضمين أدوات المصادقة في النظام الأساسي (مثل ماسحات الأصابع على الهواتف الذكية) أو توصيلها من خلال USB أو بلوتوث منخفض الطاقة (BLE) أو الاتصال قصير المدى (NFC).

آلية العمل

إنشاء زوج مفاتيح وتسجيل مستخدم

عندما يريد المستخدم تسجيل بيانات اعتماد على أحد المواقع الإلكترونية (يُشار إليها من خلال WebAuthn باسم "الطرف المعتمد"):

  1. المجموعة المعتمدة تشكل تحديًا.
  2. تطلب الجهة المعتمَدة من المتصفِّح، من خلال واجهة برمجة تطبيقات "مدير بيانات الاعتماد"، إنشاء بيانات اعتماد جديدة للطرف المعتمِد، مع تحديد إمكانيات الجهاز، على سبيل المثال، ما إذا كان الجهاز يوفّر مصادقة المستخدم الخاصة به (باستخدام المقاييس الحيوية وما إلى ذلك).
  3. بعد أن يحصل برنامج المصادقة على موافقة المستخدم، ينشئ برنامج المصادقة زوج مفاتيح ويعرض المفتاح العام وتصديقًا اختياريًا موقَّعًا إلى الموقع الإلكتروني.
  4. يعيد تطبيق الويب توجيه المفتاح العام إلى الخادم.
  5. ويخزن الخادم المفتاح العام، إلى جانب هوية المستخدم، لتذكر بيانات الاعتماد من أجل عمليات المصادقة المستقبلية.
let credential = await navigator.credentials.create({ publicKey: {
  challenge: new Uint8Array([117, 61, 252, 231, 191, 241, ...]),
  rp: { id: "acme.com", name: "ACME Corporation" },
  user: {
    id: new Uint8Array([79, 252, 83, 72, 214, 7, 89, 26]),
    name: "jamiedoe",
    displayName: "Jamie Doe"
  },
  pubKeyCredParams: [ {type: "public-key", alg: -7} ]
}});

مصادقة مستخدم

عندما يحتاج موقع إلكتروني إلى الحصول على دليل يثبت أنّه يتفاعل مع المستخدم الصحيح:

  1. تنشئ المجموعة المعتمدة تحديًا وتزود المتصفح بقائمة بيانات الاعتماد التي تم تسجيلها للمستخدم. يمكن أن تشير أيضًا إلى مكان البحث عن بيانات الاعتماد، على سبيل المثال، في برنامج مصادقة محلي مدمج أو جهاز خارجي عبر USB أو تقنية BLE أو ما إلى ذلك.
  2. يطلب المتصفّح من برنامج المصادقة توقيع الاختبار.
  3. إذا كانت أداة المصادقة تحتوي على إحدى بيانات الاعتماد المقدَّمة، تعرِض أداة المصادقة الموقَّعة تأكيدًا موقَّعًا إلى تطبيق الويب بعد تلقّي موافقة المستخدم.
  4. يعيد تطبيق الويب توجيه التأكيد الموقَّع إلى الخادم لكي يتحقّق منه الطرف المعتمِد.
  5. وبعد التحقق من قِبل الخادم، يعتبر تدفق المصادقة ناجحًا.
let credential = await navigator.credentials.get({ publicKey: {
  challenge: new Uint8Array([139, 66, 181, 87, 7, 203, ...]),
  rpId: "acme.com",
  allowCredentials: [{
    type: "public-key",
    id: new Uint8Array([64, 66, 25, 78, 168, 226, 174, ...])
  }],
  userVerification: "required",
}});

جرِّب WebAuthn بنفسك على https://webauthndemo.appspot.com/.

ما التالي؟

يتوفر الإصدار التجريبي 67 من Chrome متوافق مع navigator.credentials.get({publicKey: ...}) وnavigator.credentials.create({publicKey:... })، كما يتيح استخدام أدوات المصادقة U2F/CTAP 1 على نقل البيانات باستخدام USB على أجهزة الكمبيوتر المكتبي.

ستوفّر الإصدارات القادمة إمكانية استخدام المزيد من وسائل النقل، مثل تقنية BLE وNFC والبروتوكول الأحدث من نوع CTAP 2. نعمل أيضًا على تطوير مسارات أكثر تقدّمًا يتم تفعيلها من خلال CTAP 2 وWebAuthn، مثل برامج المصادقة المحمية برقم التعريف الشخصي والاختيار المحلي للحسابات (بدلاً من كتابة اسم مستخدم أو كلمة مرور) والتسجيل باستخدام بصمة الإصبع.

ملاحظة: يتوافق Microsoft Edge أيضًا مع واجهة برمجة التطبيقات ويتوافق Firefox مع WebAuthn بدءًا من الإصدار 60 من Firefox.

المراجِع

نحن نعمل على إعداد مستندات أكثر تفصيلاً:

تناولت جلسة "الميزات الجديدة في الاشتراك وتسجيل الدخول على الويب" في مؤتمر Google I/O لعام 2018 معلومات حول WebAuthn.