ממהלכי הפרוטוקול המתוארים הושמטו מספר אלמנטים הקשורים בניהול ותחזוקה כמו תוויות, דגלים ושדות מידע מיוחדים. למעשה פרוטוקול OTR תומך בשמונה סוגי הודעות מיוחדות שקשורות בניהול ותחזוקה: הודעת אפס שמורה שממנה מתעלמים בדרך כלל, הודעת ניתוק או הודעת סיום שיחה, שש הודעות שונות המוקדשות לפרוטוקול SMP המתואר להלן וכן הודעת מפתח נוסף המיועדת להעברת מפתחות הצפנה סימטריים מאחד לשני. כמו כן כחלק ממהלכי הפרוטוקול שני הצדדים מחויבים לנהל מפתחות שיחה ומפתחות אימות, להיפטר מהם כאשר פג תוקפם או במידה שחלק מההודעות טרם הגיעו ליעדן לאחסן אותם זמנית במקום שמור. חיסרון בולט של הפרוטוקול הוא הצורך בפנקסנות והוא נעשה מסורבל במיוחד כאשר לא כל המשתתפים בשיחה מקוונים. למשל אם צד אחד שולח הודעה לצד השני שנמצא במצב אוף ליין ההודעה לא מגיעה מיד ליעדה, לכן השולח חייב לשמור את המפתחות המתאימים עד שיתקבל אישור שההודעה נקראה.
שיתוף מפתח מאומת.
בגלל ליקויים בטיחותיים שהתגלו בגרסה המקורית, כדי לסכל התקפת אדם באמצע, פרוטוקול OTR גרסה 2 משתמש בפרוטוקול משני הנקרא SIGMA כדי לבצע שיתוף מפתח מאומת (בקיצור AKE) בארבעה מהלכים. בתמצית הרעיון הוא שהמשתתפים בפרוטוקול תחילה יוצרים ערוץ בטוח באמצעות פרוטוקול דיפי הלמן ללא אימות, ולאחר מכן מבצעים אימות דו כיווני בתוך הערוץ הזה. ביתר פירוט בוב מתחיל במסר:
כאשר formula_38 הוא הצפנת AES של המפתח הציבורי הארעי של דיפי הלמן (formula_39 הוא ערך אקראי חד פעמי המשמש כמפתח הצפנה) ו-formula_40 היא פונקציית גיבוב. אליס מחזירה לבוב את:
לאחר בדיקה שהערכים תקינים ונמצאים בגבולות המותרים, בוב מחשב את המפתח המשותף על ידי formula_42 ומכין ממנו עם פונקציית גיבוב בתצורות שונות, שני מפתחות הצפנה formula_43 וארבעה מפתחות אימות formula_44 (מחציתם להצפנה ואימות המסרים שלו ומחציתם לפענוח ואימות המסרים של אליס). בוחר מזהה ייחודי טרי הנקרא formula_45, משתמש בפונקציית MAC כדי להכין תג אימות של האלמנטים הבאים: המפתחות הציבוריים שלו ושל אליס formula_6 ו-formula_7, מזהה המפתח שלו formula_45 ומפתח האימות הציבורי formula_49 של החתימה הדיגיטלית שלו: formula_50. חותם באמצעות החתימה הדיגיטלית שלו על תג האימות: formula_51 ומצרף לחתימה את המפתח האימות הציבורי שלו וכן את מזהה מפתח השיחה כך שמתקבל formula_52. ואז שולח לאליס את:
אליס פועלת בדרך דומה, תחילה היא מפענחת את ההצפנה של formula_7 עם המפתח formula_39 ובודקת את תקינות כל הערכים שקיבלה. אם הכול תקין היא מחשבת את מפתח השיחה המשותף formula_56 ומכינה ממנו באמצעות פונקציית הגיבוב באותה דרך את שני מפתחות ההצפנה וארבעה מפתחות האימות שהכין בוב אצלו. משתמשת במפתח formula_57 כדי לבדוק את תג האימות שקיבלה מבוב במסר האחרון, משתמשת במפתח formula_58 כדי לפענח את החתימה הדיגיטלית של בוב formula_59 מחשבת את תג האימות formula_60 עם המפתח formula_61 ומשתמשת במפתח הציבורי של החתימה הדיגיטלית של בוב formula_49 כדי לוודא ש-formula_60 אכן הגיע מבוב. כעת בוחרת מזהה מפתח משלה formula_64 ומחשבת את תג האימות שלה: formula_65 חותמת עליו עם החתימה הדיגיטלית שלה: formula_66 ומכינה את ההודעה formula_67 ושולחת לבוב את:
מה שנשאר לבוב זה לוודא תקינות ערכים, לבדוק את החתימה הדיגיטלית ואת תג האימות לפענח את החלקים הדרושים פענוח וכעת שניהם משתפים מפתח מאומת בצורה כזו שלא רק שהם בטוחים שאיש לא יודע מהו, אלא הם גם בטוחים בהסתמך על החתימה הדיגיטלית שלהם, שזהותם וודאית והם אינם מתחזים.
בעיית המיליונרים.
החסרון בפרוטוקול AKI הוא שבכל שלבי הפרוטוקול ההנחה היא שאליס מכירה את בוב ויודעת מהו המפתח הציבורי שלו וכן בוב מכיר את אליס ויודע מהו המפתח הציבורי שלה. אך אם בוב לא מכיר את אליס או שאליס אינה מכירה את בוב איב יכולה להתחזות לאחד מהם בקלות על ידי ביצוע כל מהלכי הפרוטוקול המתוארים אך עם המפתחות שלה במקום של אליס או בוב. ההתחזות לא תתגלה אלא אם כן אליס או בוב ינסו לברר מהו המפתח הציבורי שלהם באמצעים אחרים מחוץ לפרוטוקול. התקפה כזו קלה לביצוע במיוחד על ידי גורם מרכזי שיש לו שליטה על שרת ההודעות. למעשה קיים תוסף ל-Jabber (כיום נקרא XMPP) הנקרא mod_otr שמבצע באופן אוטומטי התקפת אדם באמצע נגד שיחת OTR. כדי לסכל את ההתקפה אפשר לפעול בדרך פשוטה. כל משתמש יאחסן רשימה של המפתחות הציבוריים של כל החברים איתם הוא משוחח. במידה שמצטרף לשיחה חבר חדש שהמפתח שלו אינו מוכר (לא נמצא ברשימה), תופיע התראה שמבקשת מהמשתמש לוודא שהמפתח נכון. למעשה OTR הציג למשתמש "טביעת אצבע" בדמות QR של תוצאת הפונקציה SHA-1 של המפתח הלא מוכר והמשתמש נדרש להשוות את טביעת האצבע מול טביעת אצבע שהוא השיג בעצמו באמצעים אחרים (מחוץ למהלכי הפרוטוקול). הבעיה היא שרוב המשתמשים לא מבינים את משמעות טביעת האצבע, הם מעדיפים להתעלם מההודעה או מנסים להשוות רק מספר בתים מתחילת טביעת האצבע ומספר בתים מסופה. מה שמאפשר התקפה מצד איב עם מפתח ציבורי הדומה למפתח הציבורי של אליס או בוב רק בבתים הראשונים והאחרונים. בנוסף השאיפה היא להסתיר מעיני המשתמש את המנגנון הקריפטוגרפי המסובך שפועל מאחורי הקלעים ולדמות שימוש חלק ככל האפשר בתוכנת המסרים כאילו לא היה קיים.
הפתרון שננקט ב-OTR גרסה 3 ומעלה הוא שימוש בפרוטוקול משני הנקרא "פרוטוקול המיליונרים הסוציאליסטיים" בקיצור (SMP) שהוא עצמו וריאציה של בעיית המיליונרים שניתן לה פתרון מעשי על ידי Yao. ב-2001 פורסם פתרון יעיל לבעיית המיליונרים הסוציאליסטיים על ידי Boudot, Schoenmakers, ו-Traoré בהתבסס על בעיית הכרעת דיפי-הלמן בקיצור DDH. הפתרון מאפשר לשני מיליונרים לדעת האם עושרם שווה מבלי לחשוף את עושרם המדויק לאף אחד מהצדדים או לצד שלישי. במילים אחרות זהו פרוטוקול כמעט אפס ידיעה שבו המידע הנחשף בסיומו שווה לסיבית אחת בלבד - אמת או שקר. בהקשר של OTR במקום להשוות כסף, משווים את המידע המשותף לאליס ובוב. אם איב המנסה להתחזות לאליס לא תצליח לנחש נכון את הסוד בניסיון הראשון הפרוטוקול יסתיים מיד בכישלון. לכל היותר איב תצליח לשבש או לקטוע זמנית את השיחה בין אליס ובוב. כדי למנוע מאיב מלהונות את המשתתפים על ידי העברת חילופי המסרים של פרוטוקול SMP כלשונם מאחד לשני הסוד אותו משווים כולל טביעת אצבע עם SHA-2 של מזהה השיחה, טביעות האצבע של מפתחות שני הצדדים והסוד המשותף. במצב כזה רוב הסיכויים שהתקפת MITM תכשל מיד משום שאצל בוב ואליס יתקבלו טביעות אצבע שונות. בד בבד הפרוטוקול מבטיח שאף אחד לא יוכל ללמוד מאומה מחלופי המסרים על הסוד המשותף שלהם מעבר לעובדה שהוא שווה אצל שניהם. כל התהליך מתרחש מאחורי הקלעים ללא מעורבות המשתמשים עצמם.
פרוטוקול SMP.
ב-OTR כל החישובים של פרוטוקול SMP מבוצעים בחבורה formula_69 מסדר ראשוני formula_70 באורך 1536 סיביות. המספר הראשוני הוא בדיוק זה המופיע בתקן בשם קבוצה 5. בנוסף קיים יוצר formula_71, שניהם ידועים ומפורסמים (בתקן היוצר הוא 2). ההנחה בתחילת הפרוטוקול שאליס ובוב מחזיקים בסודות פרטיים formula_72 ו-formula_73 בהתאמה שאליהם מתייחסים כאל אלמנטים של השדה formula_74 והמטרה של הפרוטוקול היא להוכיח ש-formula_75 מבלי לחשוף מאומה פרט לעובדה האם הם שווים או לא. הפרוטוקול מבוסס על הרעיון של אפס ידיעה, שאומר בתמצית היכולת להוכיח ידיעת סוד מבלי לחשוף מידע כלשהו לגבי הסוד עצמו שלא היה אפשר לדעת בדרכים אחרות. כל מהלכי הפרוטוקול מלווים בהוכחת אפס ידיעה על מנת להבטיח שלא שונו בטעות או בזדון (כלומר הבטחת הגינות).
תחילה, לצורך הפרוטוקול נחוצים עוד שני יוצרים אותם מכינים ומשתפים בשיטת דיפי-הלמן: אליס בוחרת אלמנט אקראי formula_76 ושולחת לבוב את formula_77 ובוב בוחר אלמנט אקראי formula_78 ושולח לאליס את formula_79 ושניהם מחשבים את formula_80. הם חוזרים על התהליך המתואר עם שני אלמנטים אקראיים נוספים formula_81 ו-formula_82 ומחליפים ביניהם את formula_83 ו-formula_84 ומתקבל ערך משותף נוסף formula_85. צריך לזכור שכל החישובים נעשים מודולו formula_70.
בשלב השני, מסתירים את הסודות formula_72 ו-formula_73. אליס ובוב בוחרים אלמנטים אקראיים נוספים formula_4 ו-formula_5 בהתאמה ומחשבים ומחליפים ביניהם את formula_91 וכן formula_92. אליס משתמשת ב-formula_81 כדי לחשב את formula_94. באופן דומה בוב מחשב את formula_95 ואז הם מחליפים ביניהם את התוצאות. שניהם מחשבים את הערך המשותף formula_96 ואז היות שמתקיים: