בקריפטוגרפיה ובאבטחת מידע, סיסמה חד-פעמית, או בקיצור OTP (One-Time Password), היא סיסמה שמשתמשים בה לצורך אימות אחד בלבד ולאחר מכן משמידים אותה. בגלל השימוש החד-פעמי, מערכת כזו מספקת מה שקרוי "אימות חזק" והיא עמידה בפני התקפת שידור חוזר (replay attack). מצותת פסיבי שמאזין לרשת התקשורת, מיירט סיסמאות ומנסה להשתמש בהן מאוחר יותר כדי להתחזות למישהו אחר, לא יוכל לעשות זאת כי הסיסמאות אינן בתוקף מיד לאחר השימוש הראשוני בהן.
ישנן כמה דרכים לניהול מערכת סיסמה חד-פעמית. דרך אחת היא שהשרת והלקוח מחזיקים ברשימת סיסמאות זהה ובכל פעם שהלקוח צריך לאמת את זהותו מול השרת הוא משתמש בסיסמה הבאה ברשימה, מסמן אותה לאחר השימוש בה ואינו חוזר להשתמש בה שוב. כאשר הרשימה מנוצלת עד תומה, מכינים רשימה חדשה ומתחילים מהתחלה. דרך אחרת היא לייצר את הסיסמה החד-פעמית באופן רקורסיבי מתוך סיסמה ראשונית המשותפת לשרת והלקוח עם פונקציה חד-כיוונית בטוחה כמו פונקציית גיבוב. כדי לייצר את רשימת הסיסמאות אפשר להפעיל מחולל פסאודו-אקראי. היתרון בזה שהסיסמאות הן בלתי תלויות הדדית. מערכת כזו כוללת בדרך כלל אלגוריתם להכנת סיסמאות ומנגנון לתיאום בין השרת והלקוח המסתמך על מונה כלשהו שמנוהל במקביל או חותם זמן כדי למנוע שימוש חוזר. חותם הזמן גם מקל על האילוץ של שימוש מידי בסיסמה. כאשר חותם הזמן מאפשר חלון זמנים לניצול יחיד, או למספר ניצולים, עד התפוגה, הכינוי הוא TOTP (Time based One-Time Password).
שיטת אימות באמצעות סיסמה קבועה מספקת הגנה חלשה מאוד מפני התחזות. זאת מכמה סיבות: ראשית, משתמשים נוטים בדרך כלל לבחור סיסמאות קלות לניחוש, מה שמקל מאוד על האקרים לבצע התקפת מילון למשל, ברשימת הסיסמאות הגרועות ביותר לשנת 2015[1] עדיין מככבת במקום הראשון הסיסמה "123456"[2]. שנית, במהלך האימות המשתמש חייב לשדר את הסיסמה (או את ערך הגיבוב שלה) במצב קריא, כך שהיא חשופה לציתות, מה שמסייע להאקרים לבצע מה שנקרא "התקפת שידור חוזר" (replay attack). בהתקפה כזו המתקיף פשוט מקליט את הסיסמה ששודרה באמצעות רחרחן ומשתמש בה מאוחר יותר כדי להתחזות לבעל הסיסמה.
קיימות דרכים להתמודד עם הבעיות שהוזכרו. למשל, שרתים בדרך כלל מנסים לאכוף "כללי סיסמה" על מנת למנוע ממשתמש לבחור סיסמה חלשה, וכן דורשים פרט מידע נוסף כגון כתובת דואר אלקטרוני וכדומה, מה שקרוי אימות דו-שלבי או אימות רב-שלבי (MFA). או מעבר לאימות חזק יותר באמצעות פרוטוקול אתגר מענה. סיסמה חד-פעמית הוצעה לראשונה על ידי לזלי למפורט ב-1981[3] והיא טובה משיטת סיסמה קבועה אך חלשה יותר לעומת פרוטוקול אתגר מענה.
כיום, שרתים נוטים לעבור לשיטות אימות חזקות יותר שהן גרסאות של פרוטוקול אתגר מענה (בדומה לשיטת האימות של GSM) או סיסמה חד-פעמית כמו S/KEY. משנת 2011 הציעה גוגל ללקוחותיה להשתמש בטכנולוגית אימות דו-שלבי עם אפליקציה הנקראת מאמת גוגל (Google Authenticator) (אנ') המשתמשת בסיסמה חד-פעמית[4]. מיקרוסופט מציעה שירות דומה Microsoft Authenticator[5] הכולל אימות דו שלבי עם אפשרות להתקנת אפליקציה המכילה קוד אימות חד-פעמי.
חברות רבות מייצרות טכנולוגיות אימות המבוססות על סיסמה חד-פעמית כמו חברת HID או חברת RSA. הטכנולוגיות מתחלקות לשני סוגים עיקריים, בקרת גישה פיזית ובקרת גישה לוגית. בקרת גישה פיזית היא בדרך כלל מכשיר אלקטרוני קטן (חסין מגע) שנקרא אסימון אבטחה (Security token) המייצר קוד אימות חד-פעמי כמתואר בתרשים משמאל. בקרת גישה לוגית מבצעת פעולה דומה אך בתוכנה או אפליקציה, ההבחנה אינה מדויקת כי גם מכשיר אימות נשלט בדרך כלל באמצעות תוכנה.
ניהול פרוטוקול סיסמה חד-פעמית (OTP) אפשרי בכמה צורות:
הלקוח והשרת מתחילים עם סוד משותף הידוע רק להם וכן פונקציה חד-כיוונית (OWF) המסומנת המשמשת להכנת רקורסיבית של הסדרה . כך הסיסמה ה- מוגדרת על ידי כאשר הוא קבוע המגודר מראש המייצג את מספר הסיסמאות המקסימלי שמותר לייצר מסיסמה אחת. כאשר מגיעים ל- סיסמאות מתחילים עם סוד משותף חדש.
הפרוטוקול פועל כדלהלן:
צריך לזכור שסיסמה חד-פעמית אינה בטוחה לגמרי מסיבה שעדיין קיים חשש שהאקר יצליח לפרוץ למערכת ולגנוב סיסמאות חד-פעמיות שטרם השתמשו בהן. אם מניחים שניתן לאחסן סיסמאות מוצפנות בצד השרת אפשר לבצע אלטרנטיבה כזו: השרת והלקוח מתחילים בסוד משותף ובכל בקשת אימות הלקוח תחילה בוחר מספר חד-פעמי ושולח לשרת את ואת . השרת מוודא את זהות הלקוח על ידי חישוב הפונקציה של עותק הסיסמה הסודית השמור אצלו יחד עם ומשווה את תוצאות הגיבוב לעומת מה שקיבל. כדי למנוע התקפת שידור חוזר רצוי ש- יהיה חד פעמי לדוגמה מספר סידורי או חותם זמן. החסרון העיקרי של סיסמת למפורט הוא שכל סיסמה תלויה בסיסמה קודמת. מסיבה זו אם המתקיף יצליח לנחש סיסמה אחת, כל הסיסמאות הבאות אחריה אינן בטוחות לשימוש.
בדומה לסיסמאות רגילות, גם סיסמאות חד פעמיות פגיעות להתקפות הנדסה חברתית שבהן משתמשים בדיוג כגי לגנוב סיסמאות רגילות או חד פעמיות. כמו כן, כמו סיסמאות רגילות, גם סיסמאות חד פעמיות פגיעות להתקפות man-in-the-middle, ולכן חשוב מאד לתקשר אותן באמצעות ערוץ תקשורת מאובטח.
סיסמאות חד פעמיות שלא משתמשות בסנכרון זמן או רכיב תגובה לאתגר, כמו למשל רשימות מודפסות של סיסמאות חד פעמיות, יהיו בהכרח פגיעות לאורך תקופה ארוכה. מתקפת דיוג כזו בוצעה בסוף שנת 2005 על לקוחות של בנק אינטרנט שוודי. הלקוחות קיבלו אימייל ובו נדרשו לספק לאתר התוקף את פרטי חשבון הבנק שלהם ואת הסיסמה החד פעמית הבאה ברשימת הסיסמאות החד פעמיות הפרטית שלהם. [6]
העובדה ששני סוגי הסיסמאות פגיעים להתקפות דומות הייתה מניע מרכזי בפיתוח אימות רב שלבי שנועד להיות עמיד יותר בפני התקפות דיוג.
בגלל שטכנולוגיות סיסמה חד-פעמית רבות מוגנות בפטנטים קשה למצוא תקנים בתחום זה. בכל זאת קיימים מספר תקנים ידועים ביניהם: