הפעלת אימות חזק באמצעות 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). יש פיצ'רים מובנים של מאמת החשבונות את הפלטפורמה (למשל סורקי טביעות אצבע בסמארטפונים) או מחוברת באמצעות USB, Bluetooth עם צריכת אנרגיה נמוכה (BLE) או תקשורת מטווח קצר (NFC).

איך זה עובד

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

כשמשתמש רוצה לרשום פרטי כניסה לאתר (WebAuthn) בתור "הצד הנסמך"):

  1. הצד הנסמך יוצר אתגר.
  2. הצד הנסמך מבקש מהדפדפן, דרך Credential Manager 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} ]
}});

אימות משתמש

כאשר אתר צריך להשיג הוכחה לכך שהוא מקיים אינטראקציה עם user:

  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, כמו מאמתי אימות מוגנים באמצעות קוד אימות, בחירת חשבונות (במקום להקליד שם משתמש או סיסמה), רישום באמצעות טביעת אצבע.

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

משאבים

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

הסשן "מה חדש בהרשמה ובכניסה באינטרנט" ב-Google I/O 2018 עסקו ב-WebAuthn.