פרוטוקול סיגנל

פרוטוקול סִיגְנָל (באנגלית: Signal Protocol) (לשעבר פרוטוקול TextSecure) הוא פרוטוקול קריפטוגרפי בקוד פתוח המספק הצפנה מקצה-לקצה לאבטחת תקשורת מסרים מידיים ושיחות וידאו והוא הבסיס לאפליקציית המסרים המידיים סיגנל. הפרוטוקול פותח ב-2013 בתחילה בשם TextSecure על ידי חברת Open Whisper Systems שנוסדה על ידי חוקר אבטחת המידע מוקסי מרלינספייק (מתיו רוזנפלד). הפרוטוקול נמצא במימושים בקוד סגור של חברות ידועות ביניהן: וואטסאפ שמצפינה הודעות של למעלה ממילארד משתמשים ברחבי העולם, Facebook Messenger של פייסבוק במצב "שיחה סודית", Google Allo במצב "אינקוגניטו" וכן סקייפ במצב "שיחה פרטית".
פרוטוקול סיגנל הוא התפתחות על שני פרוטוקולים ידועים: OTR ומערכת הצפנת SCIMP מבית Silent Circle שפיל צימרמן הוא אחד ממייסדיה. בגרסאות המתקדמות של הפרוטוקול שולב אלגוריתם מַחְגֵּר מְשֻׁנָּן כפול יחד עם מספר פרימיטיבים קריפטוגרפיים ידועים; פרוטוקול לחיצת יד המבוסס על דיפי-הלמן משולש (בקיצור ) וכן עקום 25519, צופן AES-256 ו-HMAC-SHA256. פרוטוקול סיגנל מתאים גם לשימוש במצב של משתמשים מרובים והתקנים מרובים, כל משתמש יכול לשלוח ולקבל הודעות ממספר התקנים שונים וכן לנהל שיחות עם קבוצות משתמשים, באופן אסינכרוני. כמו כן הפרוטוקול בנוי להתחשב במצב שבו לא כל המשתמשים במצב מקוון. הודעה יכולה להתקבל מייד או לאחר הרבה זמן והודעות לא תגענה ליעדן בהכרח לפי סדר כרונולוגי. הפרוטוקול נחשב לבשל ובוגר ומכיל מאפיינים ביטחוניים טובים לרבות סודיות מושלמת קדימה וכן מה שקרוי "סודיות מושלמת עתידית" במובן שגם אם המתקיף מצליח לגלות את מפתח השיחה בשלב כלשהו, אם לפחות הודעה אחת עברה מבלי שהוא הצליח ליירט אותה הרי שהוא יאבד את יכולתו לפענח את כל ההודעות. במילים אחרות כדי שהמתקיף יכול להאזין לשיחות ולפענחם עליו לבצע התקפת אדם באמצע על כל חילופי ההודעות שנעשו במסגרת השיחה מבלי לדלג על אף אחת מהן.

רקע

פרוטוקול סיגנל החל עם עבודתם של חוקרי האבטחה Trevor Perrin ו-Moxie Marlinspike שהקימו ב-2013 את חברת Open Whisper Systems. הגרסה הראשונה שלו נקראה TextSecure1 והייתה מבוססת על פרוטוקול מיסור שלא לפרסום (OTR). הגרסה השנייה v2 פורסמה ב-2014 והסתמכה על אלגוריתם חדש שנקרא "מַחְגֵּר מְשֻׁנָּן אקסולוטל" על שם סוג של סלמנדרה בסכנת הכחדה חמורה החיה במקסיקו ולה סגולות ריפוי מיוחדות. האלגוריתם משלב את הרעיון הארעיות של OTR המספק ביטחון קדימה עם אלגוריתם מחגר משונן (רָאצֶ'ט) מפרוטוקול SCIMP המבוסס על הצפנה סימטרית. בניגוד ל-OTR לפרוטוקול סיגנל יתרון במצב עבודה אסינכרוני שבו לא כל המתקשרים במצב מקוון בזמן השיחה והוא מטפל טוב יותר באבטחת שיחות שלא לפי סדר כרונולוגי ללא "פנקסנות" הנובעת מהצורך לתחזק ולנהל מפתחות הצפנה ישנים שאיתם הוצפנו הודעות שטרם הגיעו ליעדן בגלל שהמקבל לא היה במצב מקוון. הייחוד באלגוריתם שהוא מאפשר התאוששות ממצב של פריצה אפילו אם מפתח שיחה אחד נחשף, מה שנקרא בפי המפתחים יכולת ריפוי עצמית. בגרסה השלישית v3 של הפרוטוקול נעשו שינויים בפרימיטיבים הקריפטוגרפיים שבבסיסו. ב-2014 פרסמו חוקרים מאוניברסיטת רוהר בוכום קריפטואנליזה של הפרוטוקול ולמעט בעיה אחת הוא נמצא בטוח לשימוש. הבעיה בגרסה זו הייתה שהפרוטוקול היה חשוף בתנאים מסוימים להתקפת שיתוף לא ידוע, שהיא סוג של התקפת אדם באמצע בה המתקיף מנסה להערים על צד אחד המשתתף בשיחה בהתחזות לצד השני. ב-2016 שינו המפתחים את שם הפרוטוקול לסיגנל וכן שינו את שם האלגוריתם הפנימי ממחגר משונן אקסולוטל למחגר משונן כפול כדי להפריד בין האלגוריתם הפנימי לבין הפרוטוקול בכללותו. כמו כן נוספו שינויים קריפטוגרפיים אחדים כדי לענות על הבעיות שהתגלו.

מחגר משונן כפול

מחגר משונן כפול או ראצ'ט כפול הוא מנגנון קריפטוגרפי המאפשר לשני משתתפים לנהל שיחה מוצפנת בהתבסס על סוד משותף שהשיגו קודם לכן. בדרך כלל הסוד המשותף מושג באמצעות פרוטוקול דיפי-הלמן כמו פרוטוקול דיפי-הלמן משולש המתואר לעיל. לאחר שיתוף הסוד המשתתפים ישתמשו בפרוטוקול ראצ'ט כפול כדי לגזור מפתחות חדשים עבור כל הודעה באופן כזה שגם אם מפתח אחד נחשף בדרך כלשהי לא ניתן יהיה לנחש על ידו מפתחות אחרים, לא עתידיים ולא קודמים בשרשרת המפתחות. משיגים זאת על ידי צירוף מפתחות דיפי-הלמן ארעיים חדשים עם כל הודעה ואיתם משתפים סודות חדשים מהם שוב גוזרים מפתחות חדשים וכן הלאה. למעשה מכל סוד משותף גוזרים מפתחות חדשים בשילוב הראצ'ט הסימטרי, דהיינו באמצעות פונקציית KDF לגזירת מפתחות הצפנה והתהליך חוזר על עצמו שוב ושוב עד לסיום השיחה. המושג ראצ'ט משמש כאן לתיאור מצב שבו לא ניתן לחזור שלב אחד לאחור, בדומה לכלי העבודה לחיזוק ברגים המסתובב רק בכיוון אחד. השילוב של הראצ'ט הסימטרי עם הראצ'ט האסימטרי המפורטים להלן יוצר ראצ'ט כפול שגורם לכך שלא ניתן לנוע (להסיק) ממפתח אחד לאחר לא קדימה ולא אחורה, מכאן שם האלגוריתם.
האלגוריתם מכיל "שרשרת מפתחות" מבוססת KDF שהיא פונקציה לגזירת מפתחות שמקבלת מפתח סודי ומידע נוסף ומפיקה מפתח חדש באופן אקראי ובלתי תלוי במפתח הקודם. פונקציית HKDF (המתוארת להלן) מקיימת את ההגדרה של פונקציית PRF, גם אם הקלט אינו אקראי עדיין תתקבל תוצאה אקראית ובלתי תלויה לכן היא מספקת ביטחון לפנים, אם נחשף מפתח אחד, לא ניתן לנחש את המפתח הקודם ממנו הוא נגזר. למעשה שרשרת המפתחות מורכבת משלוש שרשראות: שרשרת מפתחות שורש ושתי שרשראות מקבילות, שרשרת משלוח ושרשרת קבלה. בנוסף בכל סבב הצדדים מפיקים ומשתפים מפתח דיפי-הלמן שהופך להיות חלק ממפתח השורש הבא. ממפתחות השורש מתחילים שרשרת משלוח או שרשרת קבלה בהתאם.
כל הודעה שנשלחת או מתקבלת, מוצפנת עם "מפתח הודעה" חדש. את ממפתח ההודעה מפיקים בצד השולח משרשרת המשלוח ובצד המקבל משרשרת הקבלה. לאחר משלוח ההודעה המפתח נמחק מיד, אפילו אם ההודעה טרם הגיעה ליעדה או שלא התקבל אישור שהיא נקראה. היות שמפתח ההודעה אינו משמש לגזירת מפתחות אחרים, אין בו צורך יותר ומיד בגמר השימוש בו אפשר למחוק אותו. המקבל יכול להשיג את מפתח ההודעה הדרוש לפענוח הודעה ספציפית מתוך שרשרת הקבלה שלו לפי אינדקס ההודעה וגם הוא אינו זקוק לשמירת המפתח לאחר קריאת ההודעה. כך אפשר להתמודד עם הודעות שלא הגיעו כסדרן. חישוב המפתח הבא בשרשרת המשלוח וגזירת מפתח ההודעה הבא נקרא ראצ'ט סימטרי והוא אינו מספק ביטחון עתידי. אם מפתח אחד בשרשרת נחשף, אמנם אי אפשר לחשב את המפתחות הקודמים אך אפשר לחשב את כל המפתחות הבאים כי ה-KDF דטרמיניסטי ואם הקלט ידוע קל לדעת מה יהיה הפלט.
ראצ'ט דיפי-הלמן (בקיצור DH) הוא ראצ'ט אסימטרי המבוסס על שיתוף סוד בשיטת דיפי-הלמן והוא מספק ביטחון עתידי. ידיעת מפתח אחד אינה תורמת דבר לניחוש המפתח הבא. לכן את הסוד המשותף שנולד כתוצאה מהראצ'ט האסימטרי מערבבים עם הקלט ל-KDF ומחשבים מפתח שורש חדש איתו אפשר להתחיל שרשרת מפתחות חדשה ואז ממשיכים עם הראצ'ט הסימטרי עד לסבב הבא וחוזר חלילה. לכל הודעה מצורף כותר המכיל מפתח ציבורי ארעי טרי של השולח. כאשר ההודעה מתקבלת, המקבל משלים את הראצ'ט האסימטרי על ידי הכנת מפתח ציבורי ארעי משלו אותו הוא מצרף להודעה הבאה שהוא שולח. בתהליך זה המתנהל כמו "פינג פונג", כל צד שולח בתורו מפתח חדש והצד השני מפעיל את פונקציית דיפי-הלמן כדי לגזור את מפתח הראצ'ט האסימטרי הבא בתור ובד בבד מכין את המפתח לראצ'ט האסימטרי הבא.

ביטחון

ממחקרים שפורסמו ב-2016 על ידי אוניברסיטאות אחדות עולה שהפרוטוקול במבנה הבסיסי בשיחה בין שני משתמשים בטוח לשימוש. בינואר 2018 פורסם מחקר המצביע על חולשה בפרוטוקול סיגנל בשיחה קבוצתית בתוכנות סיגנל, ואטסאפ וטרימה. בניגוד לשיחה בין שני משתתפים בלבד המתקיימת לפי כללי הצפנה מקצה לקצה, בשיחה קבוצתית, שלמות השיחות ומסרי הניהול של הקבוצה אינם מוצפנים מקצה לקצה וכן לא מופעל אימות. משמעות הדבר היא שמי שיש לו גישה לשרת ההודעות יכול להוסיף עצמו לכל קבוצה ללא ידיעת מנהליה ובכך להפר את הקונספט של הצפנה מקצה לקצה. אם מישהו יכול להוסיף עצמו לכל קבוצה שיחפוץ הוא יקבל את כל השיחות המוצפנות בתוך הקבוצה כך שאין כל תועלת בהצפנה. הבעיה פחות קריטית בסיגנל משום שבתוכנה זו כל חברי הקבוצה הם גם מנהלים בהגדרה ולשרת אין גישה למסרי ניהול הקבוצה. החוקרים הציעו כמה תיקונים גנריים במטרה להבטיח אימות והצפנת כל המסרים והשיחות כולל מסרי ניהול המיועדים למנהלי הקבוצות. ראוי לציין שיישום ההתקפה בפועל מאוד קשה והתיקון קל מאוד כך שסביר להניח שבזמן הקרוב תוכנות המסרים המדוברות יפיצו עדכוני תוכנה מתאימים להסרת האיום.