הפעלת אימות חזק באמצעות WebAuthn

הבעיה

פישינג הוא בעיית האבטחה העיקרית באינטרנט: 81% מפריצות לחשבונות שקשורים לפריצה בשנה שעברה השתמשו בסיסמאות חלשות או שנגנבו. התגובה הקולקטיבית של התעשייה לבעיה הזו הייתה אימות רב-שלבי, אבל ההטמעות חלקיות ורובן עדיין לא מטפלות בצורה הולמת בפישינג. אנחנו עובדים בשיתוף עם FIDO Alliance מאז 2013, ולאחרונה, עם W3C, כדי להטמיע פרוטוקול סטנדרטי של עמידות בפני פישינג, שאפשר להשתמש בו בכל אפליקציית אינטרנט.

מה זה WebAuthn?

באמצעות Web Authentication API תוכלו לגשת לאפליקציות אינטרנט במנגנון המשתמש-סוכן של מאמתי החשבונות, שהם לרוב אסימוני חומרה שהגישה אליהם מתבצעת דרך USB/BLE/NFC או מודולים שמובְנים ישירות בפלטפורמה – כדי ליצור ולאתגר פרטי כניסה של מפתח ציבורי ברמת האפליקציה (eTLD+k). הדפוס הזה מאפשר שימוש במגוון תרחישים, למשל:

  • חיכוך נמוך ואפשרות 2FA עמידה בפני פישינג (לשימוש בשילוב עם סיסמה).
  • הרשאה מחדש ללא סיסמה שמבוססת על מידע ביומטרי.
  • רמת חיכוך נמוכה ועמידות בפני פישינג באמצעות אימות דו-שלבי, ללא סיסמה (לשימוש בחשבונות ללא סיסמה).

רוב הדפדפנים המובילים יטמיעו את ה-API, והוא נועד לפשט את ממשק המשתמש שבו צריך להוכיח את הזהות שלכם באינטרנט וגם לצמצם משמעותית את הפישינג.

WebAuthn מרחיב את Credential Management API ומוסיף סוג חדש של פרטי כניסה שנקרא PublicKeyCredential. WebAuthn מפשט את התקשורת בין הדפדפן לבין מאמת החשבונות, ומאפשר למשתמש:

  1. ליצור ולרשום פרטי כניסה למפתח ציבורי עבור אתר.
  2. כדי לבצע אימות לאתר, באמצעות הוכחת בעלות על המפתח הפרטי הרלוונטי.

מאמתי חשבונות הם מכשירים שיכולים ליצור צמדים של מפתחות פרטיים ומפתחות ציבוריים ולקבל הסכמה. אפשר להביע הסכמה לחתימה בהקשה פשוטה, בקריאה של טביעת אצבע תקינה או בשיטות אחרות, כל עוד הן עומדות בדרישות של FIDO2 (יש תוכנית אישור לאימות על ידי FIDO Alliance). אפשר להתקין את מאמת החשבונות בפלטפורמה (כמו סורקי טביעות אצבע בסמארטפונים), או לחבר אותם באמצעות USB, Bluetooth עם צריכת אנרגיה נמוכה (BLE) או תקשורת מטווח קצר (NFC).

איך זה עובד

יצירת זוג מפתחות ורישום משתמש

כשמשתמש רוצה לרשום פרטי כניסה לאתר (נקרא ב-WebAuthn כ'הגורם המהימן'):

  1. הצד המסתמך יוצר אתגר.
  2. הצד המסתמך מבקש מהדפדפן, באמצעות ה-API של מנהל האישורים, ליצור פרטי כניסה חדשים עבור הצד המסתמך, ולציין את יכולות המכשיר. למשל, אם המכשיר מספק אימות משתמש משלו (עם מידע ביומטרי וכו').
  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. אם מאמת החשבונות מכיל אחד מפרטי הכניסה האלה, מאמת החשבונות מחזיר טענת נכוֹנוּת (assertion) חתומה לאפליקציית האינטרנט אחרי קבלת ההסכמה של המשתמש.
  4. אפליקציית האינטרנט מעבירה לשרת את טענת הנכוֹנוּת (assertion) החתומה כדי שהצד המסתמך יאמת אותה.
  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/.

מה צפוי בהמשך?

גרסת הבטא של Chrome 67 נשלחת עם תמיכה ב-navigator.credentials.get({publicKey: ...}) וב-navigator.credentials.create({publicKey:... }) ומאפשרת להשתמש במאמתי U2F/CTAP 1 באמצעות העברת USB במחשב.

בגרסאות הבאות נוסיף תמיכה בהעברות נוספות, כמו BLE ו-NFC, ובפרוטוקול החדש יותר של קווי CTAP 2. אנחנו גם עובדים על תהליכי עבודה מתקדמים יותר שאפשר להפעיל ב-CTAP 2 וב-WebAuthn, כמו כלים לאימות זהות (PIN), בחירה מקומית של חשבונות (במקום להקליד שם משתמש או סיסמה) והרשמה באמצעות טביעת אצבע.

חשוב לדעת ש-Microsoft Edge תומך גם ב-API ו-Firefox תומך ב-WebAuthn החל מ-Firefox 60.

משאבים

אנחנו עובדים על תיעוד מפורט יותר:

המפגש "What's new with הרשמה וכניסה באינטרנט" ב-Google I/O 2018 מכסה את WebAuthn.