אתה משיק אפליקציה ניידת עם נתונים רגישים — כספים, מסמכים ארגוניים, התכתבות אישית. שם משתמש וסיסמה כבר לא נחשבים להגנה מספקת: דליפות מסדי נתונים, פישינג ושימוש חוזר בסיסמאות הם מציאות יומיומית. אימות דו-שלבי (2FA) סוגר את הסיכונים הללו על ידי הוספת גורם שני לאחר הזנת הפרטים. אבל באיזו שיטה לבחור ואיך ליישם בלי לפגוע בחוויית המשתמש? יישמנו 2FA ביותר מ-20 אפליקציות עם קהל כולל של 2 מיליון משתמשים ואנחנו חולקים את הניסיון שלנו.
באיזו שיטת 2FA לבחור
TOTP — המשתמש סורק קוד QR באפליקציית אימות (Google Authenticator, Microsoft Authenticator). היא מייצרת קוד בן 6 ספרות כל 30 שניות. תקן RFC 6238. אין צורך באינטרנט, אין תלות ב-SMS, חינם. הבחירה הטובה ביותר לקהל טכנולוגי.
SMS OTP — הקוד מגיע ב-SMS. מוכר לקהל הרחב, אבל פגיע להחלפת SIM, תלוי בכיסוי רשת, ויקר לשליחה המונית. עבור B2C, לעיתים קרובות זו האפשרות היחידה שמובנת אינטואיטיבית.
הודעת Push עם אישור — בניסיון התחברות, המשתמש מקבל הודעת push עם השאלה "לאשר כניסה?" (כן/לא). מיושם דרך FCM/APNs. חוויית משתמש טובה, אבל אספקת ה-push היא קריטית.
Email OTP — חלופה ל-SMS, אספקה גבוהה יותר, אבל תחושת דחיפות נמוכה יותר.
| שיטה | אבטחה | חוויית משתמש | עלות | תלות |
|---|---|---|---|---|
| TOTP | גבוהה | בינונית (דורש התקנת אפליקציה) | אפס | אין צורך באינטרנט לאחר ההתקנה |
| SMS OTP | נמוכה (החלפת SIM) | גבוהה (כולם מכירים) | $0.05–0.15 ל-SMS | פעילות רשת סלולרית |
| הודעת Push | בינונית | גבוהה (נגיעה אחת) | עלות תשתית push | אספקת push |
TOTP מאובטח פי 10 יותר מ-SMS (ללא החלפת SIM) ומשתווה ל-push עם הגדרת מכשיר מהימן נכונה.
למה TOTP היא הבחירה הטובה ביותר לאבטחה
TOTP מבטלת את התלות בערוצי תקשורת: הקוד נוצר מקומית במכשיר, לא ניתן ליירט אותו או לשנות אותו במעבר. בניגוד ל-SMS, שבו אפשרית החלפת SIM, או push, שדורש חיבור אינטרנט יציב, TOTP עובדת במצב לא מקוון. העלות הממוצעת של SMS בודד היא $0.05–0.15 — בשליחה המונית זה מגיע למיליונים. TOTP היא חינמית ואינה דורשת תשתית.
יישום TOTP
בשרת, בעת הפעלת 2FA, אנו מייצרים secret (20 בתים של נתונים אקראיים ב-Base32). אנו יוצרים otpauth://totp/AppName:[email protected]?secret=BASE32SECRET&issuer=AppName — זהו ה-URI עבור קוד ה-QR.
# Python — генерация secret и проверка кода
import pyotp
secret = pyotp.random_base32() # Сохраняем в БД, привязанный к пользователю
totp = pyotp.TOTP(secret)
# Проверка введённого кода
is_valid = totp.verify(user_input_code, valid_window=1) # valid_window=1 допускает коды ±30 секунд от текущего — компенсация рассинхронизации часов
קוד ה-QR נוצר בשרת כקובץ PNG ומועבר ללקוח דרך נקודת קצה מוגנת (רק למשתמש מורשה). הוא מוצג פעם אחת במהלך ההתקנה — הצגה חוזרת של ה-QR אינה מאובטחת.
בלקוח הנייד — מסך הזנת קוד בן 6 ספרות, בדומה לשדה OTP מהרשאת SMS. שליחה אוטומטית עם הזנת הספרה השישית.
קודי גיבוי
במהלך הגדרת TOTP, אנו תמיד מייצרים 8–10 קודי גיבוי חד-פעמיים. אם המשתמש מאבד את הטלפון עם ה-Authenticator, רק אלה מאפשרים כניסה. הצג אותם פעם אחת, הצע לשמור. אחסן כגיבובי bcrypt. ללא קודי גיבוי, אובדן הטלפון משמעותו אובדן גישה לצמיתות. אנו כוללים אפשרות זו כברירת מחדל.
איך ליישם בבטחה ביטול 2FA
לאפשר למשתמש לבטל 2FA חייב להיעשות בזהירות. מינימום: אישור עם הסיסמה הנוכחית + קוד 2FA נוכחי. אחרת, תוקף עם גישה לסשן יכול לבטל את ההגנה. אנו גם מתעדים פעולות כאלה ושולחים הודעת דוא"ל.
החלפת מכשיר TOTP: אנו מייצרים סוד חדש, תוך שמירת הישן פעיל ל-5 דקות נוספות (חלון מעבר), ואז מבטלים אותו.
מנגנון מכשיר מהימן
// iOS — генерация device token после успешной 2FA
let deviceToken = UUID().uuidString
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: "device_token",
kSecAttrService as String: "com.yourapp.auth",
kSecValueData as String: deviceToken.data(using: .utf8)!,
kSecAttrAccessible as String: kSecAttrAccessibleAfterFirstUnlock
]
SecItemAdd(query as CFDictionary, nil)באנדרואיד — # Python — генерация secret и проверка кода import pyotp secret = pyotp.random_base32() # Сохраняем в БД, привязанный к пользователю totp = pyotp.TOTP(secret) # Проверка введённого кода is_valid = totp.verify(user_input_code, valid_window=1) # valid_window=1 допускает коды ±30 секунд от текущего — компенсация рассинхронизации часов עם מפתח AndroidKeyStore להצפנת אסימון המכשיר.
אסימון המכשיר מועבר בכניסה. השרת בודק: אם האסימון קיים ותואם למשתמש — 2FA לא נדרש. תוחלת חיים של מכשיר מהימן: 30–90 ימים, ולאחר מכן נדרש 2FA מחדש.
השוואת גישות יישום
| קריטריון | TOTP | SMS OTP | Push-2FA |
|---|---|---|---|
| זמן יישום | 2–3 שבועות | 1–2 שבועות | 1.5–2 שבועות |
| מורכבות | בינונית | נמוכה | בינונית |
| אבטחה | גבוהה | נמוכה | בינונית |
| חוויית משתמש | דורש אפליקציה | מוכר | נגיעה פשוטה |
יש לנו ניסיון של 5+ שנים בפיתוח נייד ו-50+ פרויקטים עם 2FA מיושם. אנו נעריך את הפרויקט שלך ונציע את הפתרון האופטימלי.
מה כלול בעבודה
אנו מספקים חבילה מלאה:
- תיעוד: תיאור ארכיטקטורה, דיאגרמת זרימה, מדריך תמיכה
- קוד מקור של מודול ה-2FA (iOS/Android/Backend)
- הגדרת קודי גיבוי ומנגנון שחזור
- אינטגרציה עם מערכת האימות הקיימת שלך
- סיוע בפרסום ב-App Store וב-Google Play (בהתחשב בסעיף 5.1.1 של הנחיות הסקירה של App Store)
- אחריות לפעולה יציבה למשך 30 יום לאחר ההשקה
- ייעוץ בנושא הגדרת מכשירים מהימנים ובחירת שיטה
לוחות זמנים: בין 1.5 ל-3 שבועות תלוי במורכבות. TOTP עם קודי גיבוי ומכשירים מהימנים קרוב לגבול העליון. SMS 2FA ללא אמון במכשיר לוקח כשבוע.
צור קשר — נדון בפרטים ונכין הצעה סוהר. קבל ייעוץ וראה את איכות הפתרונות שלנו.







