نظرة معمّقة على عملية "إثبات هوية المستخدم"

يناقش هذا المستند طبيعة userVerification في WebAuthn، وسلوكيات المتصفِّح التي تنتج عند تحديد userVerification أثناء إنشاء مفتاح المرور أو المصادقة عليه.

ما المقصود بـ "التحقق من المستخدم" في WebAuthn؟

تم إنشاء مفاتيح المرور استنادًا إلى تشفير المفتاح العام. عند إنشاء مفتاح مرور، يتم إنشاء مفتاحَي تشفير أحدهما عام والآخر خاص، ويخزّن موفّر مفاتيح المرور المفتاح الخاص، ثم يتم إرجاع المفتاح العام إلى خادم الجهة المعتمدة (RP) لتخزينه. يمكن للخادم مصادقة مستخدم من خلال التحقق من توقيع موقَّع باستخدام مفتاح المرور نفسه باستخدام المفتاح العام المقترن. "يقدم المستخدم" تشير العلامة (UP) في بيانات اعتماد المفتاح العام إلى تفاعل أحد الأشخاص مع الجهاز أثناء المصادقة.

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

لقطة شاشة لمربّع حوار للتحقّق من المستخدم في iCloud Keychain على نظام التشغيل macOS يطلب مربع الحوار من المستخدم تسجيل الدخول باستخدام ميزة Touch ID، ويعرض المصدر الذي يطلب المصادقة، بالإضافة إلى اسم المستخدم. في أعلى يسار مربّع الحوار، يظهر زر بعنوان "إلغاء".
مربّع حوار لتأكيد هوية المستخدم في iCloud Keychain على نظام التشغيل macOS
لقطة شاشة لمربّع حوار التحقّق من المستخدم في Chrome على أجهزة Android يطلب مربّع الحوار من المستخدم إثبات هويته باستخدام ميزة التعرّف على الوجوه أو رصد بصمة الإصبع، ويعرض المصدر الذي يطلب المصادقة. يتوفّر في أسفل يمين الصفحة خيار إثبات الملكية باستخدام رقم التعريف الشخصي.
مربّع حوار للتحقّق من هوية المستخدم في Chrome على نظام التشغيل Android

كيف يتم التحقّق من صحة الأشعة فوق البنفسجية والأشعة فوق البنفسجية على الخادم

يتم إرسال العلامات المنطقية الخاصة بتواجد المستخدم (UP) والعلامة المنطقية التي تم التحقّق منها من خلال المستخدم (UV) إلى الخادم في حقل بيانات برنامج المصادقة. أثناء المصادقة، يمكن التحقق من محتوى حقل بيانات برنامج المصادقة عن طريق التحقق من التوقيع باستخدام المفتاح العام المخزن. ما دام التوقيع صالحًا، يمكن للخادم اعتبار العلامات حقيقية.

تصوير لبنية بيانات المصادقة. من اليسار إلى اليمين، يقرأ كل قسم من بنية البيانات "RP ID HASH" (32 بايت)، "FLAGS" (1 بايت)، 'COUNTER' (4 بايت، uint32 كبير الحجم)، 'ATTESTE CRED. البيانات' (متغيرة الطول إن كانت موجودة)، و'extensionS' (متغير الطول إن وجد (CBOR)). The 'FLAGS' تم توسيع القسم لعرض قائمة علامات محتملة مصنّفة من اليمين إلى اليسار: "ED" و"AT" و"0" و"BS" و"BE" و"UV" و"0" و"UP".
حقول بيانات Authenticator في بيانات اعتماد مفتاح عام.

عند تسجيل مفتاح المرور والمصادقة، يجب أن يتحقّق الخادم من أنّ علامة UV هي true، وما إذا كانت علامة UV هي true أو false، بناءً على المتطلبات.

تحديد المَعلمة userVerification

وفقًا لمواصفات WebAuthn، يمكن للجهة المحظورة طلب إثبات هوية المستخدم باستخدام مَعلمة userVerification في كل من إنشاء بيانات الاعتماد وتأكيدها. ويتم قبول 'preferred' أو 'required' أو 'discouraged'، أي ما يلي على التوالي:

  • 'preferred' (تلقائي): يُفضَّل استخدام طريقة للتحقق من المستخدم على الجهاز، ولكن يمكن تخطّيها في حال عدم توفّرها. تحتوي بيانات اعتماد الاستجابة على قيمة علامة الأشعة فوق البنفسجية true في حال إجراء التحقق من المستخدم، وfalse في حال عدم إجراء الأشعة فوق البنفسجية.
  • 'required': يجب استدعاء إحدى طرق التحقّق من المستخدم المتوفّرة على الجهاز. وإذا لم تتوفّر بيانات، سيتعذّر تنفيذ الطلب على الجهاز. يعني هذا أنّ بيانات اعتماد الاستجابة تعرض دائمًا عند ضبط علامة الأشعة فوق البنفسجية على true.
  • 'discouraged': لا يُنصح باستخدام طريقة للتحقق من المستخدمين. ومع ذلك، استنادًا إلى الجهاز، يمكن أن يتم إثبات هوية المستخدم على أي حال، ويمكن أن تحتوي العلامة فوق البنفسجية على الرمزين "true" أو "false".

رمز نموذجي لإنشاء مفتاح المرور:

const publicKeyCredentialCreationOptions = {
  // ...
  authenticatorSelection: {
    authenticatorAttachment: 'platform',
    residentKey: 'required',
    requireResidentKey: true,
    userVerification: 'preferred'
  }
};

const credential = await navigator.credentials.create({
  publicKey: publicKeyCredentialCreationOptions
});

رمز نموذجي لمصادقة مفتاح المرور:

const publicKeyCredentialRequestOptions = {
  challenge: /* Omitted challenge data... */,
  rpId: 'example.com',
  userVerification: 'preferred'
};

const credential = await navigator.credentials.get({
  publicKey: publicKeyCredentialRequestOptions
});

ما هو الخيار الذي يجب تحديده لـ "userVerification

تعتمد قيمة userVerification التي عليك استخدامها على متطلبات التطبيق، بالإضافة إلى متطلبات تجربة المستخدم.

حالات استخدام "userVerification='preferred'"

استخدِم userVerification='preferred' إذا كنت تمنح الأولوية لتجربة المستخدم على الحماية.

هناك بيئات تمثّل فيها عملية التحقّق من المستخدمين صعوبات أكثر من الحماية. على سبيل المثال، يُطلب من المستخدم إدخال كلمة مرور النظام، على سبيل المثال، في نظام التشغيل macOS الذي لا تتوفّر فيه ميزة Touch ID (لأنّ الجهاز لا يتوافق مع هذه الميزة أو إذا تم إيقافها أو كان الجهاز في وضع "صدفة المحار"). وهذا يسبب بعض المشكلات، وقد يتجاهل المستخدم المصادقة تمامًا. وإذا كان التخلّص من المعوقات أكثر أهمية بالنسبة إليك، يمكنك استخدام userVerification='preferred'.

لقطة شاشة لمربّع حوار مفتاح مرور على نظام التشغيل macOS تظهر عندما لا تتوفّر ميزة Touch ID يحتوي مربّع الحوار على معلومات، مثل المصدر الذي يطلب المصادقة، بالإضافة إلى اسم المستخدم. في أعلى يسار مربّع الحوار، يظهر زر بعنوان "إلغاء".
مربّع حوار مفتاح مرور يظهر على نظام التشغيل macOS عندما لا تتوفّر ميزة Touch ID

في حال استخدام userVerification='preferred'، تكون علامة UV هي true في حال تم إثبات هوية المستخدم بنجاح، وfalse في حال تخطّي عملية التحقق من المستخدم. على سبيل المثال، على نظام التشغيل macOS الذي لا تتوفّر فيه ميزة Touch ID، يطلب من المستخدم النقر على زر لتخطّي عملية إثبات هوية المستخدم، وتتضمّن بيانات اعتماد المفتاح العام علامة UV false.

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

حالات استخدام "userVerification='required'"

استخدِم userVerification='required' إذا كنت تعتقد أنّ كلاً من UV والأشعة فوق البنفسجية ضروريان للغاية.

ومن الجوانب السلبية لهذا الخيار أن المستخدم قد يواجه المزيد من الصعوبات عند تسجيل الدخول. على سبيل المثال، على نظام التشغيل macOS الذي لا تتوفّر فيه ميزة Touch ID، سيُطلَب من المستخدم إدخال كلمة مرور النظام.

باستخدام userVerification='required'، يمكنك التأكد من تنفيذ عملية التحقق من المستخدم على الجهاز. تأكَّد من أنّ الخادم يتحقّق من أنّ علامة UV هي true.

الخاتمة

من خلال الاستفادة من عملية إثبات هوية المستخدم، يمكن للجهات التي تعتمد على مفتاح المرور قياس احتمالية تسجيل دخول مالك الجهاز له. يمكن للمستخدمين الاختيار بين طلب التحقّق من المستخدم أو جعله اختياريًا حسب مدى تأثير آلية تسجيل الدخول الاحتياطي في مسار المستخدم. تأكَّد من أنّ الخادم يتحقّق من علامة UV وعلامة UV لمصادقة المستخدم باستخدام مفتاح المرور.