למה מפתחות גישה בטוחים — מדריך מאויר לאימות שלא שולח סוד

· עודכן בתאריך: · · מפתחות גישה, WebAuthn, FIDO2, אבטחה, אימות, מניעת פישינג, מערכות מידע

חדשות ש«שוב דלפו סיסמאות משירות גדול» כבר לא מפתיעות אף אחד. מריצים תרגילי פישינג כל שנה, ומספר האנשים שנלכדים אף פעם אינו מגיע לאפס. «אל תעשו שימוש חוזר בסיסמאות, תאריכו אותן, ושינוי תקופתי… כבר לא צריך» — גם העצות התהפכו.

מפתחות גישה (passkeys), שהתפשטו במהירות בשנים האחרונות, הם שיטת אימות ש-Apple, Google ו-Microsoft מקדמים יחד כמענה למצב הזה.1 לעיתים קרובות מציגים אותם כ«נוח — אפשר להיכנס עם טביעת אצבע או פנים» — אבל זה לא באמת העניין. הערך האמיתי של מפתח גישה הוא שהוא מעביר את בסיס האבטחה מ«ערנות אנושית» ל«מבנה הפרוטוקול».

  • סיסמאות דולפות כי משתמשים לא זהירים, אז נחנך אותם → בני אדם תמיד טועים
  • נחנך אנשים לזהות אתרים מזויפים → אפשר לבנות אתר מזויף שאי אפשר לזהות
  • עם מפתח גישה → אין סוד לשלוח מלכתחילה, ובאתר מזויף חתימה אינה יכולה להתקיים

המאמר הזה עובר בתרשימים על למה מפתחות גישה בטוחים, מתוך מה ששבור בסיסמאות. אחר כך הוא עונה חזיתית לשאלות המובנות — «האם מפתחות גישה מסונכרנים באמת בטוחים?» ו«יש להם חולשות?» — ומסיים בסידור עיקרי הפריסה המעשית ליישומי Web ולסביבות Windows.

1. השורה התחתונה קודם

הסיבות שמפתחות גישה בטוחים מתכנסות לשלוש נקודות.

  1. אין סוד בשרת. כל מה שהשרת שומר הוא המפתח הציבורי, שזה מידע שאי אפשר לנצל לרעה גם אם דלף. גם אם כל מסד הנתונים נשאב, אין «חומר להתחזות» שהתוקף יכול לקחת הביתה.2
  2. הסוד אינו נע ברשת. כל מה שנשלח בכניסה הוא חתימה על ערך אקראי חד-פעמי (האתגר). מכיוון שהמפתח הפרטי אינו יוצא מהמאמת של המכשיר, האזנה או ממסור בכל מקום בנתיב אינם מניבים סוד.2
  3. חתימה אינה יכולה להתקיים באתר מזויף. מפתח גישה קשור לדומיין של האתר, והדפדפן כופה את התאמת הדומיין. גם אם משתמש מרומה באתר מזויף, מפתח הגישה של האתר האמיתי פשוט אינו מופיע כמועמד, וגם אם חתימה הייתה ממסרת איכשהו, האימות היה דוחה אותה.3

שלושת אלה אינם תחבולות נפרדות אלא כולם מסקנות משינוי תכנון אחד: מאימות של «חולקים סוד ושולחים אותו» לאימות של «מוכיחים בחתימה שמחזיקים בסוד». נעבור עליהם לפי הסדר.

הקשר בין המונחים — מפתח גישה, WebAuthn, FIDO2, CTAP

בתחום הזה יש הרבה מונחים, ומאמרים שונים מצביעים על טווחים שונים, אז קודם מקבעים רק את הקשר. מפתח גישה אינו פרוטוקול חדש, אלא «שם» שניתן לשילוב של תקנים קיימים.21

מונח שם רשמי למה הוא מתייחס
WebAuthn Web Authentication API (המלצת W3C) התקן בין הדפדפן לאתר. API שדורש יצירת זוג מפתחות וחתימה ב-navigator.credentials
CTAP Client to Authenticator Protocol (ברית FIDO) התקן בין הדפדפן למאמת חיצוני. החלק שמדבר עם מפתח אבטחה או טלפון דרך USB, NFC או Bluetooth
FIDO2 השם הכולל למסגרת שמחברת את שני אלה. FIDO2 = WebAuthn + CTAP
מפתח גישה (passkey) השם לאישורי FIDO2 שיכולים להיכנס לבדם במקום סיסמה (אישור ניתן-לגילוי)

טבלה 1: מפתח גישה הוא שם על בסיס FIDO2, לא שם תקן

כלומר «לתמוך במפתחות גישה» פירושו, בשפת המימוש, «לממש WebAuthn». CTAP הוא השכבה שהדפדפן ומערכת ההפעלה מטפלים בה כשמשתמשים במאמת חיצוני, ולכן מי שבונה יישום Web אינו נוגע בו ישירות.

מפת הידע של המאמר

מפתח גישה הוא אישור מבוסס הצפנת מפתח ציבורי על בסיס תקני WebAuthn ו-CTAP (יחד FIDO2): המפתח הפרטי אינו יוצא מהמאמת, ולשרת מופקד רק המפתח הציבורי שאי אפשר לנצל לרעה גם אם דלף. מכיוון שמפתח הגישה נוצר כקשור לדומיין של האתר (RP ID), באתר מזויף החתימה כלל אינה נוצרת והפישינג נמנע באופן מבני. מפתח גישה מסונכרן מקבל עמידות לאובדן תמורת תלות בחשבון ענן, ואילו הסוג הקשור למכשיר כולא את המפתח בחומרה. אחרי הטמעת מפתחות גישה, מוקד העבודה המעשית הוא צמצום האמצעים החלופיים המתקיימים במקביל וחיזוק תהליך שחזור החשבון.

מפת הידע של הסיבה שמפתחות גישה בטוחיםתרשים שמראה שמפתח גישה נשען על WebAuthn, ‏FIDO2, ‏CTAP והצפנת מפתח ציבורי; שהקישור לדומיין באמצעות RP ID מונע פישינג באופן מבני; את ההבדל בין סוג מסונכרן לסוג הקשור למכשיר ואת נקודות הכשל הבודדות של כל אחד; את מיקומו כ-MFA עמיד לפישינג; ואת הקשרים של הסיכונים שנותרים (אמצעי חלופי, שחזור חשבון, גניבת הפעלה)משתמש במשתמש במשתמש במשתמש במשתמש במשתמש במשתמש במשתמש במשתמש במשתמש במשתמש במחייבמשתמש במחייבמונעמונעמונעמצמצםעלול לגרום לעלול לגרום לעלול לגרום לעלול לגרום לעלול לגרום לשימוש לא מומלץ למענה מומלץ למשתמש במוגדר באמצעותנשמר באינו מתיישב עםמענה מומלץ לעלול לגרום למענה מומלץ לעלול לגרום למענה מומלץ לעלול לגרום למענה מומלץ לעלול לגרום לשימוש לא מומלץ למפתח גישהWebAuthnFIDO2הצפנת מפתח ציבוריCTAPמאמתTPMWindows Helloמפתח אבטחהמפתח גישה קשור למכשירדרישת הקשר מאובטח (HTTPS)אתגר (מספר אקראי חד-פעמי)RP ID (מזהה Relying Party)פישינגפישינג מסוג AiTM (אדם-בתווך)דליפת מסד נתוני אישוריםאימות בסיסמהשימוש חוזר בסיסמה (התקפת רשימות)השתלטות על חשבוןגניבת עוגיית הפעלהסיסמה חד-פעמית (TOTP)MFA עמיד לפישינגMicrosoft Entra IDמפתח גישה מסונכרןכספת האישורים של הפלטפורמהNIST AAL3 (רמת הבטחת מאמת 3)חיזוק ההגנה על חשבון הפלטפורמהניצול לרעה של תהליך שחזור החשבוןחיזוק אימות הזהות בתהליך השחזוראמצעי אימות חלופי המתקיים במקבילצמצום מתוכנן של אמצעים חלופיים

בתרשים, קו מלא מציין קשר שמתקיים תמיד וקו מקווקו מציין קשר מותנה (תנאי ההתקיימות מפורטים בהסבר של כל קשר בעמוד המפורט). רשימת כל הקשרים (סך הכול 38, עם אסמכתה ורמת ודאות) והגדרות המושגים המרכזיים מרוכזות בעמוד המפורט של מפת הידע (ביפנית). נתונים: JSON-LD / Turtle

2. מה שבור באימות בסיסמה

הדרך הקצרה להבין את בטיחות מפתחות הגישה היא לתפוס את חולשות הסיסמה לפי «מקום». באימות בסיסמה, הסוד עצמו נוסע בכל הקטעים בכל אימות.

שרתדפדפןמשתמששרתדפדפןמשתמשמחזיק את הסוד(סיסמה)בראש【חולשה ①】ניתן לניחוש / נעשה בו שימוש חוזר【חולשה ②】אפשר להזין באותו אופןגם באתר מזויף(אי אפשר להבחין במראה)【חולשה ③】הסוד זורם בנתיבמוגן ב-TLS אבל בקצה חוזר לטקסט גלוי【חולשה ④】סודות(גיבובים)של כל המשתמשים מצטבריםדליפה הופכת ליעד לכוח גס לא מקווןמזין סיסמהשולח את הסיסמה עצמהמשווה לגיבוב השמור

איור 1: באימות בסיסמה, הסוד עצמו קיים בכל הקטעים

מנקודת מבט של תוקף, זה מבנה עם הרבה מטרות שקל לפגוע בהן.

  • חולשה ① (המשתמש): חוזק שניתן לזכור בלבד, ושימוש חוזר בכמה אתרים. דליפה במקום אחד מתפשטת לכל החשבונות (התקפת רשימת סיסמאות).
  • חולשה ② (רגע ההזנה): אם מכינים אתר מזויף שאי אפשר להבדיל מהאמיתי, המשתמש מוסר את הסוד בעצמו (פישינג).
  • חולשה ③ (הנתיב): יש TLS ולכן האזנה לנתיב עצמו קשה, אבל אם משחילים «נקודת ממסור במראה לגיטימי» זה לא עוזר (AiTM בהמשך).
  • חולשה ④ (השרת): גם אם שומרים בגיבוב, אם מסד הנתונים דולף אפשר להריץ כוח גס לא מקוון. סיסמאות חלשות נשברות לפי הסדר.

«אז נוסיף קוד חד-פעמי (SMS או TOTP)» זו האימות הרב-גורמי המסורתי, אבל גם כאן מבנה שליחת סוד משותף אינו משתנה. ב-TOTP השרת ואפליקציית האימות חולקים את אותו זרע (סוד), ואת הקוד בן 6 הספרות שנוצר המשתמש יכול בסוף להזין גם באתר מזויף. בפועל, פישינג מסוג AiTM (Adversary-in-the-Middle) שממסר בזמן אמת לאתר האמיתי פורץ את צמד הסיסמה+קוד חד-פעמי כפי שהוא. CISA (סוכנות הסייבר של ארה”ב) מונה כ«MFA עמיד לפישינג» רק שניים: שיטת FIDO/WebAuthn, ואימות מבוסס PKI כמו כרטיס חכם (PIV/CAC), וממקמת את FIDO כסטנדרט הזהב — מסיבה זו.4

כלומר הבעיה אינה «חוזק» הסיסמה אלא עצם המבנה של «חולקים סוד ושולחים אותו בכל אימות».

3. מהות מפתח הגישה — לא שולחים סוד, מוכיחים שמחזיקים בו

מפתח גישה הוא אישור מבוסס הצפנת מפתח ציבורי שעומד על שני תקנים: WebAuthn של W3C ו-CTAP של ברית FIDO (יחד FIDO2).21 זה נשמע קשה, אבל המבנה פשוט.

שרתהמכשיר של המשתמשהתאמה מקומיתזוג מתמטי(צד שיוצר חתימה)מפתח ציבורישאי אפשר לנצל לרעה גם אם דלףמידע «לאימות בלבד»מאמת(כספת)Windows Hello / Face ID /נעילת מסך ב-Android / מפתח אבטחהמפתח פרטיאינו יוצא מכאן כללטביעת אצבע / פנים / PIN= רק לפתוח את דלת הכספתגם זה אינו יוצא החוצה

איור 2: מהות מפתח הגישה היא זוג מפתחות לכל אתר. צד הסוד אינו יוצא מהמכשיר, והשרת מחזיק רק מפתח ציבורי לאימות

  • המפתח הפרטי הוא המפתח בצד שיכול ליצור חתימה, נשמר במאמת במכשיר (Windows Hello, Face ID/Touch ID ב-iPhone, נעילת מסך ב-Android, או מפתח אבטחה כמו YubiKey), ואינו יוצא החוצה.
  • המפתח הציבורי הוא המפתח בצד שיכול רק לאמת חתימה, ואותו מפקידים בשרת. חישוב לאחור מהמפתח הציבורי למפתח הפרטי אינו אפשרי חישובית, ולכן זה מידע שבטוח גם אם ידלוף.
  • נתונים ביומטריים כמו טביעת אצבע או פנים משמשים רק לפתיחה מקומית של דלת הכספת, וגם הם אינם יוצאים מהמכשיר. נתונים ביומטריים אינם נשלחים לשרת.1

רישום: מוסרים «רק» את המפתח הציבורי

הזרימה ברישום מפתח גישה באתר.

מאמתדפדפןשרת(example.com)מאמתדפדפןשרת(example.com)כל מה שהשרת קיבל הוא«מידע שאי אפשר לנצל לרעה גם אם דלף» בלבדבקשת רישום(אתגר אקראי + מידע אתר)צור מפתח לאתר הזה(example.com)אימות זהות בטביעת אצבע / פנים / PIN(מקומי)יוצר זוג מפתחות חדשהמפתח הפרטי נשמר בפניםמפתח ציבורי + credential ID(תווית המפתח)שולח מפתח ציבורי + credential IDשומר כמפתח הציבורי של החשבון הזה

איור 3: ברישום, מה שזורם ברשת ונשמר בשרת הוא המפתח הציבורי בלבד

החשוב הוא שבשלב הזה זוג המפתחות נוצר קשור לדומיין של האתר (RP ID). מפתח גישה שנוצר ל-example.com עובד רק באתר example.com (RP ID הוא לפי דומיין, ולכן מדפי תת-דומיין באותו דומיין כמו login.example.com אפשר להשתמש, אבל מדומיין לא קשור אי אפשר). הקישור הזה הוא הבסיס לעמידות לפישינג בהמשך.3

בנוסף, זוג המפתחות נוצר מחדש לכל אתר בכל פעם. מפתחות הגישה של אתר A ואתר B אינם קשורים מתמטית, כך שעצם המושג «שימוש חוזר» אינו קיים, וגם אין חומר להצליב משתמשים בין אתרים.

אימות: מחזירים חתימה חד-פעמית

הזרימה בכניסה. השוו לאימות בסיסמה (איור 1).

מאמתדפדפןשרת(example.com)מאמתדפדפןשרת(example.com)בנתיב זורמת רק חתימה חד-פעמיתגם אם גונבים, אי אפשר להשתמש באתגר הבאבקשת כניסה(אתגר אקראי חד-פעמי)בקשת חתימה ל-example.comאימות זהות בטביעת אצבע / פנים / PIN(מקומי)יוצר חתימה במפתח הפרטימשלב אתגר + מקור + גיבוב RP IDחתימה(לא המפתח הפרטי עצמו)שולח את החתימהמאמת את החתימה במפתח הציבורי השמורוגם מאשר אתגר, מקור ו-RP ID

איור 4: גם באימות הסוד אינו זז. מה שזורם הוא רק «מסמך הוכחה חד-פעמי»

השרת מציג בכל פעם מספר אקראי חדש (אתגר), והמאמת חותם על «האתגר הזה + המקור שהדפדפן רואה כעת + גיבוב ה-RP ID». השרת מאמת את החתימה במפתח הציבורי השמור, ומוודא שהאתגר הוא זה שהוא הציג, ושהמקור וה-RP ID הם של האתר שלו.5

כמסקנה מהתכנון הזה, שתיים משלוש הסיבות שבתחילה כבר מתקיימות.

  • אין סוד בשרת: נשמר רק מפתח ציבורי. גם אם דולף, התוקף אינו יכול ליצור חתימה, כך שאי אפשר «לקחת הביתה ולשבור» כמו גיבוב סיסמה.
  • הסוד אינו זורם: גם אם גונבים את החתימה בנתיב, האתגר חד-פעמי ולכן אי אפשר לעשות שימוש חוזר (replay).

האחת שנותרה, «חתימה אינה יכולה להתקיים באתר מזויף», היא נקודת המכירה הגדולה ביותר של מפתחות גישה. נפריד לפרק.

4. למה פישינג «מבנית» אינו יכול להצליח

פישינג מול סיסמה מצליח כי אפשר להזין את הסוד האמיתי באתר מזויף. לבני אדם קשה (במיוחד כשעייפים) להבחין בין example.com ל-examp1e.com, ושדה הזנת סיסמה עובד באותו אופן בשני האתרים.

במפתחות גישה, את ההתאמה הזו עושה הדפדפן באופן מכני, לא האדם. לפי מפרט WebAuthn, הדפדפן יכול לקרוא למאמת רק כש«הדומיין של המקור שמוצג כעת» ו«ה-RP ID של מפתח הגישה» תואמים.3 נצייר מה קורה ברגע שניגשים לאתר מזויף.

השרת האמיתי(example.com)אתר מזויף(examp1e.com)פרוקסי AiTM שממסר לאמיתידפדפןמשתמשהשרת האמיתי(example.com)אתר מזויף(examp1e.com)פרוקסי AiTM שממסר לאמיתידפדפןמשתמשגם אם חתימה הייתה נוצרת בדרך כלשהי,examp1e.com משולב בחתימה ולכןהאימות בשרת האמיתי בהכרח נופלניגש למסך כניסה זהה במראה(מאחורי הקלעים)מתחיל את תהליך הכניסה האמיתיאתגרממסר את האתגר ודורש חתימההמקור הנוכחי הוא examp1e.comאי אפשר להציע מפתח גישה של example.comחתימה אינה נוצרת(המשתמש אינו יכול להיות מרומה)

איור 5: פישינג מסוג AiTM פורץ סיסמה+קוד חד-פעמי, אבל במפתח גישה זה אינו מתקיים כבר בשלב החתימה

שימו לב שההגנה כפולה.

  1. אינו מופיע כמועמד: הדפדפן מונה רק מפתחות גישה של RP ID שתואם למקור. בדומיין מזויף מפתח הגישה של האתר האמיתי אינו מופיע כאפשרות, כך שהמשתמש אינו יכול אפילו «להשתמש בטעות».
  2. החתימה אינה עוברת: ביעד החתימה כלולים המקור שהדפדפן אישר וגיבוב ה-RP ID. השרת האמיתי מצליב את זה באימות, ולכן חתימה שנוצרה במקור אחר נדחית בהכרח.5

ההגנה מפישינג של סיסמאות הסתמכה על מאמץ אנושי של «המשתמש מסתכל טוב ב-URL». במפתחות גישה המשתמש אינו צריך לזהות אתר מזויף מלכתחילה. זה המשמעות המדויקת של «עמיד לפישינג (phishing-resistant)», והסיבה ש-CISA ו-NIST (המכון הלאומי לתקנים וטכנולוגיה בארה”ב) מתייחסים לשיטת FIDO/WebAuthn כמיוחדת.46

נסדר את התוכן עד כאן לפי שיטת התקפה.

התקפה סיסמה סיסמה+TOTP מפתח גישה
ניחוש / כוח גס ✗ חלש △ הקוד מונע אבל הסיסמה המקורית נשארת חלשה ○ אין יעד לניחוש
שימוש חוזר (התקפת רשימה) ✗ דליפה במקום אחד מתפשטת לכול △ קורס מאתרים בלי קוד ○ מפתח נפרד לכל אתר
דליפת DB בשרת ✗ כוח גס לא מקוון על הגיבוב ✗ גם זרע ה-TOTP (סוד משותף) דולף ○ יש רק מפתח ציבורי
פישינג קלאסי (הזנה באתר מזויף) ✗ אפשר להזין ✗ אפשר להזין גם את הקוד ○ אינו מופיע כמועמד, והחתימה אינה עוברת
AiTM (ממסור בזמן אמת) ✗ ממסרים כמו שהוא ✗ ממסרים יחד עם הקוד ○ התאמת מקור מונעת קיום חתימה
Replay (שימוש חוזר בתקשורת) ✗ אותה סיסמה תקפה שוב ושוב △ קוד שנחטף לפני שהמשתמש משתמש בו תקף (קבלת קוד שכבר שומש נדחית במימוש נכון) ○ האתגר חד-פעמי בכל פעם

טבלה 2: השוואת עמידות לפי שיטת התקפה. כל «○» של מפתח גישה נובע ממבנה, לא מתפעול או תשומת לב

5. האם «מפתח גישה מסונכרן» בטוח

מי שקרא עד כאן שואל באופן טבעי. «אמרתם שהמפתח הפרטי אינו יוצא מהמכשיר, אז למה מפתח גישה שנוצר ב-iPhone עובד גם ב-iPad» — שאלה טובה, והתשובה היא «יש שני סוגים של מפתחות גישה».

קודם טבלת סיכום. הפרק הזה והבא מסבירים למה כל שורה בטבלה היא כפי שהיא.

היבט מפתח גישה מסונכרן מפתח גישה קשור-מכשיר
דוגמאות מייצגות iCloud Keychain, Google Password Manager, מנהלי סיסמאות כמו 1Password מפתח אבטחה (YubiKey וכו’), Windows Hello, מפתח גישה בתוך Microsoft Authenticator
מקום שמירת המפתח הפרטי כספת האישורים של הפלטפורמה. משוכפל בין מכשירי אותו חשבון בצורה מוצפנת מקצה לקצה בתוך חומרת המאמת. אינו יוצא מחוץ ל-TPM או לרכיב מאובטח
באובדן / החלפת דגם שחזור למכשיר חדש בכניסה לאותו Apple ID/חשבון Google מפתח הגישה של המאמת הזה אבוד. רישום כמה מאמתים מראש הוא הנחה
נקודת כשל יחידה חשבון הענן של הפלטפורמה המכשיר הפיזי עצמו
התאמה לניהול ארגוני המפתח נכנס לחשבון ענן אישי, ולכן קשה לארגון לדעת מיקום או לבטל בבת אחת. מתאים ל-BYOD ולקנה מידה קטן מנהל יכול להפיץ ולבטל, ומיקום המפתח ברור. מתאים לסביבות עם תקנון מחמיר
התאמה ל-AAL של NIST AAL2 אם עומדים בדרישות. אינו יכול לשמש ל-AAL3 כי המפתח הפרטי ניתן לייצוא6 מאמת מוגן בחומרה שאי אפשר לשלוף ממנו מפתח יכול לעמוד גם בדרישות AAL36

טבלה 3: טבלת סיכום של מסונכרן מול קשור-מכשיר. הבחירה נקבעת לפי מה לוקחים: חוזק מול אובדן, או יכולת לנהל את מיקום המפתח

מפתח גישה קשור-מכשירמפתח אבטחה(YubiKey וכו') /Windows Hello /Microsoft Authenticator(Entra ID)המפתח הפרטי אינו יוצאפיזית מהחומרה הזו(מוגן ב-TPM וכו')יתרון: מיקום המפתח ברור במקום אחדזהירות: רישום מרובה חובה מול אובדןמפתח גישה מסונכרן(ברירת מחדל לצרכן)iCloud Keychain /Google Password Manager /מנהלי סיסמאות כמו 1Passwordסנכרון מוצפן מקצה לקצהבין מכשירי אותו חשבוןגם הספק אינו יכול לקרואיתרון: חזק בהחלפת דגם / אובדןזהירות: נדרשת הגנה על חשבון הענן עצמו

איור 6: מסונכרן מול קשור-מכשיר. בשניהם «לא שולחים מפתח פרטי לשרת» זהה, ומרכז הכובד של ההגנה שונה

מפתח גישה מסונכרן הוא כזה שבו iCloud Keychain או Google Password Manager מסנכרנים את המפתח הפרטי בין מכשירי אותו חשבון. החשוב כאן הוא שהסנכרון מוצפן מקצה לקצה. גם Apple וגם Google מצהירות במפורש שמפתחות גישה מוצפנים במכשיר לפני הסנכרון, והספק עצמו אינו יכול לקרוא את התוכן.78 כלומר העיקרון «המפתח הפרטי אינו יוצא מהמכשיר» מרוכך בדיוק ל«המפתח הפרטי אינו יוצא מהמכשיר בטקסט גלוי», ובתמורה מקבלים עמידות להחלפת דגם ולאובדן.

איך הריכוך הזה משנה את מודל האיום צריך לומר במפורש. המקום שצריך להגן עליו מתכנס מ«השרת של כל אתר» ל«חשבון ענן אחד». מול דליפת DB של כל אתר ומול פישינג נשארים חזקים כרגיל, ועכשיו השתלטות על Apple ID/חשבון Google עצמו הופכת לנקודת כשל יחידה. לכן בדיוק, לחשבון הפלטפורמה שמפקידים בו מפתחות גישה שמים את ההגנה החזקה ביותר (נעילת מסך חזקה, סידור אמצעי שחזור, ואם אפשר מפתח אבטחה פיזי) כהנחה. גם NIST הוציא באפריל 2024 נספח ל-NIST SP 800-63B (Supplement 1: Incorporating Syncable Authenticators Into NIST SP 800-63B), ומיקם רשמית שמפתח גישה מסונכרן (syncable authenticator) יכול לעמוד בAAL2 (Authenticator Assurance Level 2, רמת הבטחת מאמת 2) של התקן הממשלתי אם עומד בדרישות. עם זאת, מכיוון שהמפתח הפרטי ניתן לייצוא, נקבע שלא להשתמש בסוג המסונכרן ל-AAL3 שדורש סביבה מבודדת בחומרה.6

מפתח גישה קשור-מכשיר הוא הסוג שבו המפתח הפרטי אינו יוצא מהחומרה. מפתח אבטחה כמו YubiKey הוא הטיפוסי, ובצד הארגוני גם מפתח גישה של Microsoft Entra ID (זה שנוצר בתוך Microsoft Authenticator) הוא קשור-מכשיר.9 גם Windows Hello ב-Windows, אם יש TPM, מגן על המפתח הפרטי תחת ה-TPM. מנגנון «כספת החומרה שלא מוציאה מפתחות» עצמו עומד על אותו בסיס שפורט במאמר על TPM.

שימו לב, אולי תהיתם למה כש«נכנסים בדפדפן המחשב עם מפתח גישה בטלפון» מבקשים לסרוק קוד QR. זה אינו מעבר מסך סתם, אלא שיטה היברידית (אימות חוצה-מכשירים של FIDO) שמאשרת קרבה פיזית בין הטלפון למחשב ב-Bluetooth. היא חוסמת בהתאמת קרבה התקפה שבה תוקף מרוחק גורם לאחר לאשר כניסה למחשב שלו דרך קוד QR.1

6. אין כדור כסף — החולשה אינה «נעלמת» אלא «זזה»

עד כאן הסברנו את חוזק מפתחות הגישה, אבל בכנות, מפתח גישה אינו מחסל התקפות אלא דוחק תוקפים למקום חלש יותר. כשכניסת האימות מתקשה, לאן התוקף פונה — בתרשים.

תוקףהאימות עצמוחתימה על אתגר【קשה】זרימת שחזור חשבוןמדווחים «איבדתי את מפתח הגישה»ומגדירים מחדש ב-SMS או בדוא״ל,ואז רושמים מפתח גישה של התוקףנפילה במקבילאם נשארו סיסמה / כניסת SMSהחוליה החלשה ביותר היא שםחשבון ענןבמסונכרן Apple ID /חשבון Google הם נקודת כשל יחידהסשןאם גונבים עוגייה אחרי כניסהשיטת האימות אינה רלוונטית

איור 7: כשהכניסה (האימות) מתקשה, ההתקפה עוברת לזרימת שחזור, אמצעים במקביל, חשבון ענן וסשן

סיכוני השארה שכדאי לקבע בפועל הם ארבעה.

  1. נפילה במקביל הופכת לחוליה החלשה ביותר. אם רק «גם» אפשר להשתמש במפתח גישה, וסיסמה או כניסת SMS נשארו, התוקף פשוט משתמש בהן. עמידות לפישינג, ברמת החשבון כולו, מוגבלת לרמת אמצעי הכניסה החלש ביותר. לב הפריסה אינו הוספת מפתח גישה אלא צמצום וביטול מתוכננים של הנפילה.
  2. זרימת השחזור הופכת למשטח התקפה חדש. התחבולה של להתחזות ל«איבדתי את המכשיר» ולהגיע להגדרה מחדש דרך דלפק או דוא״ל, ואז לרשום מפתח גישה של התוקף עצמו. בפועל, הנדסה חברתית שעוקפת אימות חזק ומרמה את דלפק התמיכה היא אמצעי שגרתי בפריצות גדולות. ככל שהאימות מתקשה, עולה השאלה איך מתכננים אימות זהות בבקשת שחזור.
  3. במסונכרן חשבון הענן הוא נקודת כשל יחידה. כבפרק הקודם. נדרשים הגנה על החשבון שמפקידים בו מפתחות גישה, ומדיניות ארגונית «לאיזו פלטפורמה מתירים סנכרון».
  4. גניבת סשן אינה נמנעת. מפתח גישה מגן רק על רגע הכניסה; אם גונבים את עוגיית הסשן אחרי הכניסה בתוכנה זדונית או XSS, שיטת האימות אינה רלוונטית. נשארת עבודה בשכבה אחרת: משך חיי אסימון, קישור, וניהול בריאות המכשיר.

אלה אינם סיפור של «עדיף לוותר על מפתחות גישה». זה הסיפור המובן מאליו שגם אם מחליפים את מנעול הדלת, נעילת החלונות היא עבודה נפרדת. דווקא כי מקום החולשה מתבהר, אפשר לרכז משאבי הגנה בזרימת השחזור ובניהול סשן.

7. פריסה בפועל — WebAuthn API וסביבת Windows

לבסוף, מקבעים עיקרי נקודות מנקודת המבט של מי שמיישם.

הוספת כניסה במפתח גישה לשירות Web שלכם

בצד הדפדפן אלה רק שתי פונקציות של WebAuthn API. רישום קורא ל-navigator.credentials.create(), ואימות ל-navigator.credentials.get().

// רישום (צד הדפדפן)
const credential = await navigator.credentials.create({
  publicKey: {
    challenge: challengeFromServer,   // מספר אקראי חד-פעמי שהשרת יוצר
    rp: { id: "example.com", name: "Example" },
    user: { id: userIdBytes, name: "taro@example.com", displayName: "Taro" },
    pubKeyCredParams: [{ type: "public-key", alg: -7 }],  // ES256
    authenticatorSelection: {
      residentKey: "required",        // הופך לאישור ניתן-לגילוי (= מפתח גישה)
      userVerification: "required",   // מחייב אימות זהות בביומטריה או PIN
    },
  },
});
// את המפתח הציבורי שולפים מ-credential.response, ואת ה-credential ID
// מ-credential.id / credential.rawId ברמה העליונה. גם את תשובת הרישום
// מאמתים בצד השרת (אתגר, מקור, RP ID) לפני השמירה,
// כמו בזמן האימות

משמעות הפרמטרים העיקריים היא כדלקמן.

פרמטר תפקיד זהירות במימוש
challenge מספר אקראי חד-פעמי שהשרת יוצר בכל פעם משתמשים במספר אקראי קריפטוגרפי שאי אפשר לנחש. בצד השרת מאמתים שזה «שלהם, שעדיין לא שומש» וצורכים אותו
rp.id הדומיין שאליו קושרים את האישור (RP ID) אם משמיטים, זה הדומיין האפקטיבי של מקור הקריאה. אפשר לציין רק בטווח הדומיינים הניתנים לרישום, כמו ציון example.com מ-login.example.com
user.id מזהה המשתמש הפנימי של השרת (user handle) ערך אטום עד 64 בתים. לא שמים כמו שהוא מידע מזהה כמו כתובת דוא״ל או שם משתמש2
user.name / user.displayName מחרוזות שמוצגות בממשק המאמת או הדפדפן כדי שהמשתמש יבחר חשבון לתצוגה בלבד. השרת אינו אמור לסמוך על הערך הזה כדי לזהות חשבון
pubKeyCredParams מונה אלגוריתמי מפתח ציבורי מקובלים לפי עדיפות בנוסף ל--7 (ES256) כדאי לציין גם -257 (RS256) כדי להרחיב את טווח המאמתים המתקבלים
authenticatorSelection תכונות שנדרשות מהמאמת residentKey: "required" הופך למפתח גישה (אישור ניתן-לגילוי), ו-userVerification: "required" מחייב אימות זהות בביומטריה או PIN

טבלה 4: הפרמטרים העיקריים של navigator.credentials.create()

זהירות בסביבת הבדיקה: WebAuthn API נחשף רק בהקשר מאובטח, ולכן בדף שמוגש ב-http:// גולמי קריאה ל-navigator.credentials נכשלת. החריג הוא http://localhost (וגם 127.0.0.1), שמטופלים כמקורות מהימנים, כך שבמכונת פיתוח אפשר לנסות בלי HTTPS. אבל RP ID חייב להיות הדומיין האפקטיבי של המקור (או דומיין האב שלו), כך שמפתח גישה שנוצר ב-localhost אינו עובד בדומיין הייצור. גם בלי מאמת ביד, הפעלת מאמת וירטואלי בלשונית «WebAuthn» בכלי המפתחים של Chrome מאפשרת להריץ רישום ואימות מקצה לקצה.

// אימות (צד הדפדפן)
const assertion = await navigator.credentials.get({
  publicKey: {
    challenge: challengeFromServer,
    rpId: "example.com",
    userVerification: "required",
  },
  // מציע את מפתח הגישה כמועמד למילוי אוטומטי בשדה הכניסה. בודקים
  // קודם תמיכה ב-PublicKeyCredential.isConditionalMediationAvailable(),
  // ובדפדפנים שאינם תומכים חוזרים לקריאה רגילה בלי mediation
  mediation: "conditional",
  // (ב-<input> היעד נדרש autocomplete="username webauthn")
});
// מאמתים בצד השרת את החתימה של assertion.response

הגוף הוא האימות בצד השרת. לכל הפחות, תמיד עושים את הבאים.5

  • הצלבת אתגר: האם זה אתגר שלא שומש שאתם הנפקתם. האם הוא חד-פעמי (הגנה מ-replay). בנוסף, שמירה קשורה לסשן הדפדפן (ניסיון הכניסה) בזמן ההנפקה, והתרת צריכה רק מתשובה מאותו סשן. אם זה רפוי, נפתח מקום לתוקף לשלוח דרך דפדפן הקורבן חתימה על אתגר שמיועד לו, ולהכניס את הקורבן לחשבון התוקף (login CSRF).
  • הצלבת מקור: האם origin ב-clientDataJSON הוא המקור החוקי של האתר (לב הגנת הפישינג).
  • הצלבת גיבוב RP ID: האם rpIdHash ב-authenticatorData תואם ל-SHA-256 של ה-RP ID של האתר.
  • אישור סוג הטקס והדגלים: האם type ב-clientDataJSON הוא webauthn.get באימות ו-webauthn.create ברישום. האם דגל UP (נוכחות משתמש) ב-authenticatorData דולק. אם דרשתם אימות משתמש (UV), האם גם דגל UV דולק.
  • אימות חתימה: האם החתימה מאומתת נכון במפתח הציבורי שנשמר ברישום.
  • קישור לחשבון: האם שולפים את credential ID (ו-userHandle) שהוצג במסד הנתונים שלכם, ומנפיקים סשן לבעלים של האישור הזה. אמון ללא תנאי בשם משתמש שהוזן בנפרד פותח חור של כניסה כאדם אחר עם חתימה נכונה.
  • שמירה והשוואה של מונה החתימה: שומרים את signCount ב-authenticatorData לפי אישור, ומאשרים שהערך הבא גדול מהקודם. ערך קטן או שווה לקודם (כולל שוויון) מטופל כסימן לשכפול (שיבוט) של מאמת. עם זאת, מפתחות גישה מסונכרנים לרוב מחזירים תמיד 0, ולכן 0 מול 0 מתירים כחריג.

לכתוב את האימות הזה ביד הוא מתכון לתאונה, ולכן משתמשים בספרייה עם ניסיון (fido2-net-lib ב-.NET, SimpleWebAuthn ב-Node.js וכו’). פרטי המפרט (פענוח CBOR, הסכמת אלגוריתם, ניהול אתגר) משאירים לספרייה, ואנחנו מתרכזים בשמירה ובביטול של אתגרים, בממשק ניהול של כמה מפתחות גישה, ובתכנון זרימת השחזור — זה חלוקת הכוח הנכונה.

במקרה של סביבת Windows ומערכות פנימיות

מקהל הקוראים של האתר הזה — «מי שאחראי למערכות עסקיות ב-Windows» — די בשלוש הנקודות הבאות.

  • לקוח Windows כבר תומך. Windows 11 תומך ביצירה, שימוש וניהול של מפתחות גישה עם Windows Hello כמאמת (הגדרות > חשבון > מפתחות גישה), והמפתח הפרטי מוגן בחומרה אם יש TPM.10 WebAuthn דרך דפדפן (Edge/Chrome) עובד גם ב-Windows 10.
  • בסביבת Entra ID מפעילים «מפתח גישה = שיטת אימות FIDO2». Microsoft Entra ID תומך במפתחות אבטחה ובמפתחות גישה בתוך אפליקציית Microsoft Authenticator (קשורי-מכשיר), ואם דורשים «MFA עמיד לפישינג» בעוצמת האימות של גישה מותנית, אפשר להגביל גישה למשאבים היעד למפתחות גישה וכדומה.9 המעבר מעולם NTLM ומדיניות תוקף סיסמה אינו מתקדם בקפיצה אחת, ולכן לצד מלאי תשתית האימות שטופל במאמר על NTLM ו-Kerberos, הנוהל הקבוע הוא לחייב קודם MFA עמיד לפישינג בחשבונות מנהל.
  • גם ביישום Web פנימי התועלת זהה. אבל HTTPS היא הנחה. WebAuthn API אינו פועל אלא בהקשר מאובטח, ולכן גם ביישום אינטראנט (מלבד localhost בפיתוח) HTTPS וסידור שם דומיין פנימי שניתן להשתמש בו כ-RP ID הם קודם. אחרי שזה סגור, RP ID פועל גם מול דומיין פנימי. במובן של פרידה מפתקיות סיסמה, לא נדיר שהאפקט יוצא מהר יותר בפנים מאשר בשירות חיצוני.

8. סיכום

  • חולשת הסיסמה אינה החוזק אלא המבנה של «חולקים סוד ושולחים אותו בכל אימות». הסוד קיים אצל המשתמש, בשדה הקלט, בנתיב ובשרת, ולכן יש הרבה יעדי התקפה. גם הוספת קוד חד-פעמי מפסידה לפישינג מסוג AiTM כי ממסרים אותו.
  • מפתח גישה הוא זוג מפתחות של הצפנת מפתח ציבורי לכל אתר, מוסרים לשרת רק מפתח ציבורי שאי אפשר לנצל לרעה גם אם דלף, ובכניסה שולחים רק חתימה על אתגר חד-פעמי. אין סוד בשרת, ואין סוד שזורם בנתיב.
  • בחתימה אפויים המקור וה-RP ID שהדפדפן אישר, ולכן באתר מזויף מפתח הגישה של האמיתי אינו מופיע כמועמד, וגם ממסור נופל באימות. שהמשתמש אינו צריך לזהות אתר מזויף הוא מהות «עמידות לפישינג», ובסיס ההגנה עבר מתשומת לב אנושית למבנה הפרוטוקול.
  • מפתח גישה מסונכרן מסונכרן בהצפנה מקצה לקצה, וחזק בהחלפת דגם ובאובדן. בתמורה המקום שצריך להגן עליו מתכנס לחשבון ענן, ולכן הגנה על Apple ID/חשבון Google עצמו הופכת להנחה. ארגון יכול גם לבחור קשור-מכשיר (מפתח אבטחה, מפתח גישה של Authenticator ב-Entra ID).
  • מפתח גישה אינו מחסל התקפות אלא דוחק אותן למקום חלש. סיסמה במקביל, זרימת שחזור חשבון וגניבת סשן נשארים משטח התקפה, ולב הפריסה הוא צמצום מתוכנן של הנפילה וחיזוק זרימת השחזור.
  • המימוש הוא שתי הפונקציות create / get של WebAuthn API + אימות שרת. את האימות לא כותבים לבד אלא משאירים לספרייה עם ניסיון, ומקצים כוח לניהול אתגרים, ממשק של כמה מפתחות גישה, ותכנון שחזור.

מאמרים קשורים

תחומי ייעוץ קשורים

KomuraSoft LLC מטפלת בסיוע למימוש WebAuthn של כניסה במפתח גישה למערכות Web פנימיות, בתכנון פריסת MFA עמיד לפישינג בסביבת Entra ID, וב-Custom Software Development שכולל שילוב אימות ביישומים עסקיים ל-Windows כמו WinForms/WPF.

  1. ברית FIDO, Passkeys ו-How FIDO Works. על כך שמפתח גישה הוא אישור FIDO שמחליף סיסמה; על כך שנתונים ביומטריים אינם נשלחים מהמכשיר ומשמשים רק להתאמה מקומית; על כך שבמאי 2022 Apple, Google ו-Microsoft הצהירו יחד על הרחבת התמיכה במעבר ללא סיסמה לפי תקן FIDO; ועל כך שבשימוש חוצה-מכשירים (cross-device) משתמשים בשיטה היברידית של קוד QR ואישור קרבה ב-Bluetooth.  2 3 4 5

  2. W3C, Web Authentication: An API for accessing Public Key Credentials Level 2 (המלצת W3C). על כך ש-WebAuthn הוא API ליצירה ולשימוש באישורים מבוססי הצפנת מפתח ציבורי; על כך שהמפתח הפרטי של האישור נשמר במאמת ורק המפתח הציבורי ו-credential ID נרשמים בשרת (Relying Party); על כך שהאימות נעשה בחתימה (assertion) על אתגר שהשרת שולח; ועל יעדי התכנון של היקף האישור וההגנה. בנוסף, המאמר מפנה לכך שה-API נחשף רק בהקשר מאובטח; לכך ש-RP ID כשמשמיטים הופך לדומיין האפקטיבי של מקור הקריאה; ולכך ש-user handle (user.id) הוא ערך אטום עד 64 בתים ושלא לכלול בו מידע מזהה כמו שם משתמש או כתובת דוא״ל (§14.6.1 User Handle Contents).  2 3 4 5

  3. W3C, Web Authentication Level 2 — §5.1.3 Create / RP ID validation, §13.4.9 Regarding phishing. על כך שאישור מפתח ציבורי מוגבל בהיקף ל-RP ID (מזהה Relying Party = דומיין); על כך שהדפדפן (הלקוח) מאמת את ההתאמה בין הדומיין הניתן לרישום של מקור הקריאה ל-RP ID, ומסרב ליצור או להשתמש באישור כשאין התאמה; ועל כך שבכך אי אפשר לגשת מאישור מקור מזויף לאישורים של אתר אחר, ול-WebAuthn יש עמידות להתקפות פישינג כולל סוג אדם-באמצע.  2 3

  4. CISA, Implementing Phishing-Resistant MFA (גיליון עובדות מאוקטובר 2022). על כך שמ-MFA שמשתמש ב-SMS, קול, התראת דחיפה או OTP פגיע לפישינג, להתקפות AiTM (ממסור) ולהתקפות עייפות MFA; על כך שכשיטות עמידות לפישינג מנויים אימות FIDO/WebAuthn ואימות מבוסס PKI (כרטיס חכם וכו’), ואימות FIDO/WebAuthn ממוקם כסטנדרט הזהב; ועל כך שארגון צריך לעבור קודם ל-MFA עמיד לפישינג מחשבונות בסיכון גבוה.  2

  5. W3C, Web Authentication Level 2 — §7.2 Verifying an Authentication Assertion. על כך שנוהל האימות בצד השרת קובע אימות type, challenge (התאמה למה שהנפיק בעצמו) ו-origin ב-clientDataJSON; אימות ש-rpIdHash ב-authenticatorData תואם לגיבוב SHA-256 של ה-RP ID הצפוי; אישור דגלי User Present / User Verified; ואימות חתימה במפתח הציבורי השמור.  2 3

  6. NIST, Incorporating Syncable Authenticators Into NIST SP 800-63B (נספח מאפריל 2024, משולב במהדורה 4 של SP 800-63B). על כך שמאמת ניתן-לסנכרון (מפתח גישה מסונכרן) יכול לעמוד ב-AAL2 כשהמפתח הפרטי נשמר ומשוכפל בבד הסנכרון באופן שעומד בדרישות; על כך שמאידך מאמתי הצפנה של AAL3 דורשים סביבה מוגנת ומבודדת בחומרה, ולכן מאמת מסונכרן שהמפתח הפרטי שלו ניתן לייצוא אינו בשימוש ב-AAL3; ועל כך ששיטות שמבצעות אימות מקור כמו WebAuthn מאורגנות כבעלות עמידות להתחזות מאמת (עמידות לפישינג). PDF המקור ב-NIST SP 800-63B Supplement 1 2 3 4

  7. תמיכת Apple, About the security of passkeys. על כך שמפתחות גישה מסונכרנים ב-iCloud Keychain; על כך ש-iCloud Keychain מוצפן מקצה לקצה וגם Apple אינה יכולה לקרוא; ועל כך שהסנכרון מוגן במפתחות במכשירי המשתמש, ומוכן שחזור דרך נאמנות עם הגבלת קצב. 

  8. Google, Security of Passkeys in the Google Password Manager. על כך שהמפתח הפרטי של מפתח הגישה מוצפן במכשיר ואז מסונכרן; על כך שהצפנה מקצה לקצה מונעת מ-Google עצמה לגשת לתוכן המפתח הפרטי; ועל כך שהשחזור דורש הגנה המבוססת על נעילת המסך של המכשיר וכו’. 

  9. Microsoft Learn, Enable passkeys (FIDO2) for Microsoft Entra ID. על כך ש-Entra ID תומך באימות ללא סיסמה עמיד לפישינג במפתחות אבטחה FIDO2 ובמפתחות גישה של Microsoft Authenticator (קשורי-מכשיר); ועל כך שאפשר להפעיל במדיניות שיטות אימות ולדרוש בעוצמת אימות של גישה מותנית (MFA עמיד לפישינג).  2

  10. Microsoft Learn, Support for passkeys in Windows. על כך ש-Windows 11 תומך ביצירה ובשימוש במפתחות גישה עם Windows Hello; על כך שאפשר לנהל מפתחות גישה שמורים מ-הגדרות > חשבון > מפתחות גישה; על כך שאישורי Windows Hello מוגנים בחומרה בסביבה שבה TPM זמין; ועל כך שאפשר להשתמש במפתחות גישה במכשיר נייד דרך קוד QR. 

מאמרים עדכניים עם אותן תגיות, להעמקה בנושאים קרובים.

העמודים האלה ממקמים את הנושא בהקשר רחב יותר של שירותים והחלטות.

שאלות נפוצות

שאלות נפוצות בפניות בנושא המאמר.

מה ההבדל היסודי בין מפתחות גישה לסיסמאות?
סיסמה היא מנגנון שבו המשתמש והשרת חולקים את אותו סוד ושולחים את הסוד הזה בכל כניסה. מכיוון שהסוד קיים בכל מקום — בראש המשתמש, בשדה הקלט, בקו ובהתאם במסד הנתונים של השרת — כל אחד מהמקומות האלה הופך ליעד התקפה. מפתח גישה משתמש בזוג מפתחות של הצפנת מפתח ציבורי, והמפתח הפרטי אינו נשלח לשרת. במפתח גישה קשור-מכשיר המפתח הפרטי אינו יוצא מהמאמת כלל; גם במפתח גישה מסונכרן הוא יוצא מהמכשיר רק בצורה מוצפנת מקצה לקצה. כל מה שהשרת שומר הוא המפתח הציבורי — מידע שאי אפשר לנצל לרעה גם אם דלף — וכל מה שנשלח בכניסה הוא חתימה על אתגר חד-פעמי. כלומר הסוד המשותף שהיה החולשה היסודית של הסיסמה פשוט אינו קיים. מעל זה, מכיוון שזוג מפתחות נוצר בנפרד לכל אתר, עצם הרעיון של שימוש חוזר אינו חל.
האם נתונים ביומטריים (טביעת אצבע, פנים) נשלחים לשרת?
לא. נתוני טביעת אצבע או פנים משמשים רק להתאמה מקומית בתוך המכשיר — לפתוח את דלת הכספת שמחזיקה את המפתח הפרטי — ולפי תכנון FIDO, נתונים ביומטריים אינם מועברים מחוץ למכשיר. כל מה שהשרת מקבל הוא חתימה עם הדגל שסומן שאימות זהות (user verification) התבצע; אין בה דבר מטביעת האצבע עצמה, ואף לא וקטור מאפיינים ביומטרי שנגזר ממנה. במקום שבו ביומטריה אינה אפשרית, PIN יכול להחליף, וגם PIN הזה, כמו PIN של Windows Hello, מותאם רק מקומית במכשיר — ההבדל המכריע מסיסמה הוא שהוא אינו נע ברשת.
למה מפתחות גישה עמידים לפישינג?
כי לפי התכנון, המשתמש אינו צריך לזהות אתר מזויף מלכתחילה. מפתח גישה נוצר קשור לדומיין של האתר (RP ID), והדפדפן מציע רק מפתחות גישה שתואמים לדומיין של האתר שמוצג כעת. גם אם נכנסים לדומיין מזויף שנראה זהה לאמיתי, מפתח הגישה של האתר האמיתי פשוט אינו מופיע כאפשרות, כך שלמשתמש אין דרך להיות מרומה. מעל זה, לחתימה אפויים המקור שהדפדפן אישר וגיבוב של ה-RP ID, כך שגם אם החתימה הייתה ממסרת, האימות בשרת האמיתי היה דוחה אותה. אי-האפשרות המבנית של התאונה שפוגעת בסיסמאות ובקודי SMS — הזנת אישורים אמיתיים לאתר מזויף — הוא ההבדל היסודי מאמצעים שמסתמכים על הדרכה וערנות.
אם איבדתי את הטלפון, אהיה נעול מחוץ לחשבונות?
אם זה מפתח גישה מסונכרן — כזה שנשמר ב-iCloud Keychain או ב-Google Password Manager — אפשר לשחזר אותו למכשיר חדש שנכנס לאותו Apple ID או חשבון Google. עם זאת, שחזור הכספת המוצפנת מקצה לקצה דורש לא רק את סיסמת החשבון אלא אימות זהות נוסף, כמו הזנת נעילת המסך (קוד גישה) של המכשיר הקודם, כך שאם מאבדים גם את אמצעי השחזור האלה, השחזור עלול להיות בלתי אפשרי. חשוב לא להפקיד הכול בטלפון אחד. מפתחות גישה קשורי-מכשיר (מפתחות אבטחה, Windows Hello וכדומה) חולקים את גורל המכשיר, ולכן הנוהל הקבוע לחשבונות חשובים הוא לרשום יותר ממפתח גישה אחד. רוב השירותים מאפשרים לרשום כמה מפתחות גישה בחשבון אחד. שימו לב שאיך מבטלים מפתח גישה שאבד משתנה לפי הסוג. למפתח גישה מסונכרן, מכיוון שהעותקים בכל מכשיר הם אותו אישור אחד, קודם מסירים את המכשיר שאבד או מבצעים מחיקה מרחוק בצד חשבון הפלטפורמה כדי להשבית את העותק במכשיר (מחיקת מפתח הגישה בהגדרות החשבון של השירות עצמו מבטלת את העותקים בכל המכשירים בבת אחת). למפתח גישה קשור-מכשיר, מחיקת מפתח הגישה של המאמת בצד השירות מבטלת רק את המפתח שאבד. לשימוש ארגוני, חשוב לתכנן יחד גם «יתירות כדי שמשתמשים יוכלו לשחזר בעצמם» וגם «נוהל למנהלים לבטל באובדן».
יש גם חולשות למפתחות גישה?
כן. אף שדיוק יותר לומר שמקום החולשה זז. מכיוון שהאימות עצמו מתחזק בהצפנת מפתח ציבורי, תוקפים מכוונים במקום זאת לאזורים החלשים יותר מסביב. בפועל: אם שיטות ישנות כמו סיסמאות או SMS עדיין מתקיימות במקביל, זה נשאר החוליה החלשה ביותר; יש את התחבולה של ניצול זרימת שחזור החשבון כדי לרשום מפתח גישה של התוקף עצמו; ולמפתחות גישה מסונכרנים, השתלטות על חשבון הענן עצמו הופכת לנקודת כשל יחידה חדשה. בנוסף, התקפה שגונבת את עוגיית הסשן אחרי הכניסה אינה נעצרת במפתח גישה, כך שאיומים לא קשורים אינם נעלמים סתם. פריסה צריכה לכסות לא רק «הוספת מפתחות גישה» אלא גם חיזוק זרימת השחזור וצמצום מתוכנן של אמצעי נפילה.

פרופיל הכותב

עמוד היכרות עם כותב המאמר.

Go Komura

מנהל KomuraSoft LLC

מתמחה בפיתוח תוכנה עבור Windows, ייעוץ טכני וחקירת תקלות, בעיקר בפרויקטים עם מערכות קיימות ובאגים שקשה לשחזר.

קישורים ציבוריים

חזרה לבלוג