Loading AI tools
פרוטוקול קריפטוגרפי מוויקיפדיה, האנציקלופדיה החופשית
פרוטוקול סִיגְנָל (באנגלית: Signal Protocol) (לשעבר פרוטוקול TextSecure)[1] הוא פרוטוקול קריפטוגרפי בקוד פתוח המספק הצפנה מקצה-לקצה לאבטחת תקשורת מסרים מיידיים[2] ושיחות וידאו[3] והוא הבסיס לאפליקציית המסרים המיידיים סיגנל. הפרוטוקול פותח ב-2013 בתחילה בשם TextSecure על ידי חברת Open Whisper Systems שנוסדה על ידי חוקר אבטחת המידע מוקסי מרלינספייק (מתיו רוזנפלד). הפרוטוקול נמצא במימושים בקוד סגור של חברות ידועות ביניהן: וואטסאפ שמצפינה הודעות של למעלה ממילארד משתמשים ברחבי העולם, Facebook Messenger של פייסבוק במצב "שיחה סודית", גוגל הודעות וכן סקייפ במצב "שיחה פרטית".
פרוטוקול סיגנל הוא התפתחות על שני פרוטוקולים ידועים: OTR ומערכת הצפנת SCIMP מבית Silent Circle שפיל צימרמן הוא אחד ממייסדיה. בגרסאות המתקדמות של הפרוטוקול שולב אלגוריתם מַחְגֵּר מְשֻׁנָּן כפול[4] יחד עם מספר פרימיטיבים קריפטוגרפיים ידועים: פרוטוקול לחיצת יד המבוסס על דיפי-הלמן משולש (בקיצור ), וכן עקום 25519, צופן AES-256 ו-HMAC-SHA256.
פרוטוקול סיגנל מתאים גם לשימוש במצב של משתמשים מרובים והתקנים מרובים, כלומר כל משתמש יכול לשלוח ולקבל הודעות ממספר התקנים שונים וכן לנהל שיחות עם קבוצות משתמשים. כמו כן הפרוטוקול בנוי להתחשב במצב שבו לא כל המשתמשים במצב מקוון; הודעה יכולה להתקבל מייד או לאחר הרבה זמן והודעות לא תגענה ליעדן בהכרח לפי סדר כרונולוגי.
הפרוטוקול נחשב לבשל ובוגר ומכיל מאפיינים ביטחוניים טובים לרבות סודיות מושלמת קדימה וכן מה שקרוי "סודיות מושלמת עתידית" במובן שגם אם המתקיף מצליח לגלות את מפתח השיחה בשלב כלשהו, אם לפחות הודעה אחת עברה מבלי שהוא הצליח ליירט אותה הרי שהוא יאבד את יכולתו לפענח את כל ההודעות. במילים אחרות כדי שהמתקיף יכול להאזין לשיחות ולפענחם עליו לבצע התקפת אדם באמצע על כל חילופי ההודעות שנעשו במסגרת השיחה מבלי לדלג על אף אחת מהן.
פרוטוקול סיגנל החל עם עבודתם של חוקרי האבטחה Trevor Perrin ו-Moxie Marlinspike שהקימו ב-2013 את חברת Open Whisper Systems. הגרסה הראשונה שלו נקראה TextSecure1 והייתה מבוססת על פרוטוקול מיסור שלא לפרסום (OTR).
הגרסה השנייה v2 פורסמה ב-2014 והסתמכה על אלגוריתם חדש שנקרא "מַחְגֵּר מְשֻׁנָּן אקסולוטל" על שם סוג של סלמנדרה בסכנת הכחדה חמורה החיה במקסיקו ולה סגולות ריפוי מיוחדות. האלגוריתם משלב את הרעיון הארעיות של OTR המספק ביטחון קדימה עם אלגוריתם מחגר משונן (רָאצֶ'ט) מפרוטוקול SCIMP המבוסס על הצפנה סימטרית. בניגוד ל-OTR, לפרוטוקול סיגנל יתרון במצב עבודה אסינכרוני שבו לא כל המתקשרים במצב מקוון בזמן השיחה והוא מטפל טוב יותר באבטחת שיחות שלא לפי סדר כרונולוגי ללא "פנקסנות" הנובעת מהצורך לתחזק ולנהל מפתחות הצפנה ישנים שאיתם הוצפנו הודעות שטרם הגיעו ליעדן בגלל שהמקבל לא היה במצב מקוון. הייחוד באלגוריתם שהוא מאפשר התאוששות ממצב של פריצה אפילו אם מפתח שיחה אחד נחשף, מה שנקרא בפי המפתחים יכולת ריפוי עצמית.
בגרסה השלישית v3 של הפרוטוקול נעשו שינויים בפרימיטיבים הקריפטוגרפיים שבבסיסו. ב-2014 פרסמו חוקרים מאוניברסיטת רוהר בוכום קריפטואנליזה של הפרוטוקול ולמעט בעיה אחת הוא נמצא בטוח לשימוש. הבעיה בגרסה זו הייתה שהפרוטוקול היה חשוף בתנאים מסוימים להתקפת שיתוף לא ידוע, שהיא סוג של התקפת אדם באמצע בה המתקיף מנסה להערים על צד אחד המשתתף בשיחה בהתחזות לצד השני. ב-2016 שינו המפתחים את שם הפרוטוקול לסיגנל וכן שינו את שם האלגוריתם הפנימי ממחגר משונן אקסולוטל למחגר משונן כפול כדי להפריד בין האלגוריתם הפנימי לבין הפרוטוקול בכללותו. כמו כן נוספו שינויים קריפטוגרפיים אחדים כדי לענות על הבעיות שהתגלו.
פרוטוקול סיגנל מספק מספר מאפיינים קריפטוגרפיים:
פרוטוקול סיגנל (בגרסה השלישית שלו) בנוי ממספר שכבות שלכל אחת מהן תפקיד קריפטוגרפי נפרד:
פרוטוקול סיגנל מחולק למספר שלבים, או "מצבים":
כמובן שלכל המפתחות הללו מתאימים מפתחות פרטיים סודיים השמורים מקומית אצל המשתמש ולעולם אינם נשלחים ברשת.
את המפתחות מכינים בשיטת דיפי הלמן משולשת באמצעות שילוב המפתח הפרטי של אליס עם המפתחות הציבוריים של בוב ובשילוב פונקציית גזירת מפתחות (בקיצור KDF) המפורטים להלן.
חתימת XEdDSA היא וריאציה של החתימה הדיגיטלית DSA מעל העקום האליפטי עקום 25519 או עקום 448. אילו הם עקומים מיוחדים הנמנים עם עקומי אדוארד ומכאן שם האלגוריתם. הפרמטרים הקבועים של העקום הם נקודת בסיס קבועה והסדר שלה והקבועים , ו- של עקום אדוארד. כפל סקלרי של נקודה הוא פעולה ארוכה וצורכת משאבים ולכן מנסים לייעל אותה על ידי שימוש בסולם מונטגומרי שבנוסף יתרונו הוא שהוא עמיד נגד התקפת ערוץ צדדי. לצורך סולם מונטגומרי משתמשים כאן רק בקואורדינטה של הנקודה בשיטת קואורדינטות פרויקטיביות. היות שהעקום הוא מסוג אדוארד, יש צורך בפונקציה מוסכמת להמרת נקודה מעקום אדוארד לעקום מונטגומרי ובחזרה (הפונקציה לא מובאת כאן). הפונקציה בתהליך החתימה להלן מקבלת את המפתח הסודי שלם כלשהו ומחזירה את שהם המפתח הפרטי והמפתח הציבורי שהוא נקודה בעקום אדוארד. שים לב שהנקודה מתקבלת מהכפלת נקודת הבסיס בשלם הסודי בשיטת סולם מונטגומרי. כדי לחתום על מסר תחילה יש צורך במחרוזת אקראית כלשהי חד-פעמית עבור כל מסר נתון. בהינתן הפרמטרים הקבועים של העקום, הפונקציה המתוארת להכנת המפתחות והמפתח הסודי החתימה והאימות על המסר מתבצעים כדלהלן:
|
|
כדי לאמת את החתימה דרושים הפרמטרים הקבועים של העקום, המפתח הציבורי של החותם (בעקום מונטגומרי) המסר וזוג הערכים שהתקבלו מהחתימה ו-. הסימן מייצג שרשור. הפונקציה היא פונקציית גיבוב מותאמת המתקבלת על ידי שרשור הערך לקלט לפני הקריאה לפונקציה. כך שמתקבל . במקרה של יוצא שלפני הקלט נוספת תחילית המורכבת ממחרוזת אחדים באורך ואפס בסופה. מייצג את אורך נקודה בעקום בסיביות. בנוסף הפרוטוקול תומך בגרסה מורחבת הנקראת VXEdDSA שהיא דומה לזו המתוארת אך מכילה תכונה נוספת. בגמר הפרוטוקול היא מפיקה מחרוזת פסאודו אקראית נוספת המשרתת כהוכחה לפונקציה אקראית בקיצור VRF.
פרוטוקול X3DH הוא פרוטוקול שיתוף מפתח קנייני המבוסס על פרוטוקול דיפי-הלמן (שאיתו שני משתמשים מבצעים שיתוף מפתח סודי מאומת לצורך התקשרות עתידית) שעושה שימוש בשלושה סוגים של זוגי-מפתחות במקום באחד.
הפרוטוקול מכיל סודיות מושלמת קדימה ויכולת הכחשה וכן מותאם לעבודה במצב אסינכרוני, כלומר כל אחד מפרסם מפתחות ציבוריים מראש וכאשר מישהו מעוניין להתקשר עמו גם אם הוא אינו מחובר באותו רגע הוא יכול לבקש מהשרת את המפתחות השמורים שלו ולבצע את פרוטוקול השיתוף בלעדיו. מאוחר יותר כאשר אותו משתמש מתחבר הוא מקבל מהשרת התראה שמחכה לו הודעה הוא יכול להשתמש במפתח הפרטי המתאים, יחד עם המפתח הציבורי של השולח שנכלל בהודעה, לבצע את אותו תהליך שיתוף ולחלץ את הסוד המשותף כדי לפענח את ההודעות שקיבל.
הפרוטוקול פועל בעקום אליפטי מסוג עקום 25519 או עקום 448. בנוסף הפרוטוקול משתמש בפונקציית הגיבוב SHA-256 או SHA-512 לפי בחירה ובפונקציית קידוד מוסכמת לייצוג המפתחות הציבוריים. ההנחה לפני שהפרוטוקול מתחיל היא שאליס ובוב רשמו את המפתחות הציבוריים שלהם בשרת.
צרור המפתחות של כל משתמש כולל שלושה סוגים של זוגי מפתחות (key pairs), כאמור:
כאשר אליס מעוניינת לשלוח הודעה לבוב, תחילה היא מכינה מפתח דיפי הלמן ארעי (Ephemeral Key) ומבקשת מהשרת את המפתחות הציבוריים של בוב: , וכן אם ישנו ואז היא מבצעת את פונקציית דיפי-הלמן שלוש פעמים. אם מסמנים את הפונקציה DH אז היא מבצעת לפי הסדר:
|
אם קיים מפתח חד-פעמי היא מבצעת גם ואז היא משרשרת את כל התוצאות ביחד ומפעילה את פונקציית גזירת המפתח
כאשר אופציונלי.
בנוסף לאמור אליס מכינה קובץ כותר המכיל מידע על זהותה וזהותו של בוב. את מפתחות הזהות שלהם ו- וייתכן מידע נוסף. לסיום היא שולחת לבוב את מפתח הזהות שלה , את המפתח הארעי שלה ואת גוף ההודעה כשהיא מוצפנת עם SK או עם מפתח אחר שנגזר ממנו באמצעות פונקציה פסאודו-אקראית ומידע ניהולי נוסף. את ההצפנה היא מבצעת עם אלגוריתם להצפנה מאומתת עם מידע נלווה (AEAD). למעשה ההודעה משרתת שתי מטרות: אחת היא להעברת המסר שהיא מעוניינת והשנייה העברת מפתח ציבורי ארעי חדש על מנת שבוב יוכל להכין את המפתח הסודי המשותף לצורך תקשורת עתידית ביניהם. לכן כאשר בוב מקבל את המסר תחילה הוא מכין את המפתח המשותף ומפענח את ההודעה ואז אם ברצונו להחזיר תגובה לאליס הוא מייצר מפתח חדש ושולח לה אותו יחד עם ההודעה באותה דרך. כמובן שהוא מוחק מיד כל מפתח חד פעמי שנעשה בו שימוש.
מחגר משונן כפול או ראצ'ט כפול הוא מנגנון קריפטוגרפי המאפשר לשני משתתפים לנהל שיחה מוצפנת בהתבסס על סוד משותף שהשיגו קודם לכן. בדרך כלל הסוד המשותף מושג באמצעות פרוטוקול דיפי-הלמן כמו פרוטוקול דיפי-הלמן משולש המתואר לעיל. לאחר שיתוף הסוד המשתתפים ישתמשו בפרוטוקול ראצ'ט כפול כדי לגזור מפתחות חדשים עבור כל הודעה באופן כזה שגם אם מפתח אחד נחשף בדרך כלשהי לא ניתן יהיה לנחש על ידו מפתחות אחרים, לא עתידיים ולא קודמים בשרשרת המפתחות. משיגים זאת על ידי צירוף מפתחות דיפי-הלמן ארעיים חדשים עם כל הודעה ואיתם משתפים סודות חדשים מהם שוב גוזרים מפתחות חדשים וכן הלאה. למעשה מכל סוד משותף גוזרים מפתחות חדשים בשילוב הראצ'ט הסימטרי, דהיינו באמצעות פונקציית KDF לגזירת מפתחות הצפנה והתהליך חוזר על עצמו שוב ושוב עד לסיום השיחה. המושג ראצ'ט משמש כאן לתיאור מצב שבו לא ניתן לחזור שלב אחד לאחור, בדומה לכלי העבודה לחיזוק ברגים המסתובב רק בכיוון אחד. השילוב של הראצ'ט הסימטרי עם הראצ'ט האסימטרי המפורטים להלן יוצר ראצ'ט כפול שגורם לכך שלא ניתן לנוע (להסיק) ממפתח אחד לאחר לא קדימה ולא אחורה, מכאן שם האלגוריתם.
האלגוריתם מכיל "שרשרת מפתחות" מבוססת KDF שהיא פונקציה לגזירת מפתחות שמקבלת מפתח סודי ומידע נוסף ומפיקה מפתח חדש באופן אקראי ובלתי תלוי במפתח הקודם. פונקציית HKDF (המתוארת להלן) מקיימת את ההגדרה של פונקציית PRF, גם אם הקלט אינו אקראי עדיין תתקבל תוצאה אקראית ובלתי תלויה לכן היא מספקת ביטחון לפנים, אם נחשף מפתח אחד, לא ניתן לנחש את המפתח הקודם ממנו הוא נגזר. למעשה שרשרת המפתחות מורכבת משלוש שרשראות: שרשרת מפתחות שורש ושתי שרשראות מקבילות, שרשרת משלוח ושרשרת קבלה. בנוסף בכל סבב הצדדים מפיקים ומשתפים מפתח דיפי-הלמן שהופך להיות חלק ממפתח השורש הבא. ממפתחות השורש מתחילים שרשרת משלוח או שרשרת קבלה בהתאם.
כל הודעה שנשלחת או מתקבלת, מוצפנת עם "מפתח הודעה" חדש. את ממפתח ההודעה מפיקים בצד השולח משרשרת המשלוח ובצד המקבל משרשרת הקבלה. לאחר משלוח ההודעה המפתח נמחק מיד, אפילו אם ההודעה טרם הגיעה ליעדה או שלא התקבל אישור שהיא נקראה. היות שמפתח ההודעה אינו משמש לגזירת מפתחות אחרים, אין בו צורך יותר ומיד בגמר השימוש בו אפשר למחוק אותו. המקבל יכול להשיג את מפתח ההודעה הדרוש לפענוח הודעה ספציפית מתוך שרשרת הקבלה שלו לפי אינדקס ההודעה וגם הוא אינו זקוק לשמירת המפתח לאחר קריאת ההודעה. כך אפשר להתמודד עם הודעות שלא הגיעו כסדרן. חישוב המפתח הבא בשרשרת המשלוח וגזירת מפתח ההודעה הבא נקרא ראצ'ט סימטרי והוא אינו מספק ביטחון עתידי. אם מפתח אחד בשרשרת נחשף, אמנם אי אפשר לחשב את המפתחות הקודמים אך אפשר לחשב את כל המפתחות הבאים כי ה-KDF דטרמיניסטי ואם הקלט ידוע קל לדעת מה יהיה הפלט.
ראצ'ט דיפי-הלמן (בקיצור DH) הוא ראצ'ט אסימטרי המבוסס על שיתוף סוד בשיטת דיפי-הלמן והוא מספק ביטחון עתידי. ידיעת מפתח אחד אינה תורמת דבר לניחוש המפתח הבא. לכן את הסוד המשותף שנולד כתוצאה מהראצ'ט האסימטרי מערבבים עם הקלט ל-KDF ומחשבים מפתח שורש חדש איתו אפשר להתחיל שרשרת מפתחות חדשה ואז ממשיכים עם הראצ'ט הסימטרי עד לסבב הבא וחוזר חלילה. לכל הודעה מצורף כותר המכיל מפתח ציבורי ארעי טרי של השולח. כאשר ההודעה מתקבלת, המקבל משלים את הראצ'ט האסימטרי על ידי הכנת מפתח ציבורי ארעי משלו אותו הוא מצרף להודעה הבאה שהוא שולח. בתהליך זה המתנהל כמו "פינג פונג", כל צד שולח בתורו מפתח חדש והצד השני מפעיל את פונקציית דיפי-הלמן כדי לגזור את מפתח הראצ'ט האסימטרי הבא בתור ובד בבד מכין את המפתח לראצ'ט האסימטרי הבא.
לצורך פרוטוקול סיגנל משתמשים בפונקציית גזירת מפתחות (בקיצור KDF) המבוססת על HKDF לפי RFC 5869 שהיא בתורה מסתמכת על HMAC. הפונקציה HKDF מקבלת ערך חד-פעמי הנקרא מלח (שהוא מחרוזת אפסים בפרוטוקול סיגנל) וכן את הקלט ממנו מעוניינים להפיק מפתחות אחרים. היא מבצעת שני שלבים: שלב חילוץ סודיות ושלב הרחבה. היא משתמשת בפונקציה HMAC המקבלת שני פרמטרים, מפתח סודי וקלט באורך כלשהו ומחזירה תג באורך המפתח. תחילה מפעילים את הפונקציה HMAC על הקלט ומקבלים את PRK לאחר מכן מחשבים את HMAC באופן חוזר ונשנה עם המפתח PRK על מחרוזת כלשהי המסומנת כאן שהיא מחרוזת טקסט תלויית יישום כמו "MyProtocol" ומונה שמקודם עם כל קריאה, עד שמתקבל מפתח סודי אחד או כמה מפתחות באורך הרצוי. לסיכום הפסאודו קוד הבא ממחיש יצירת מפתחות סודיים מתוך מפתח מאסטר אחד:
|
ממחקרים שפורסמו ב-2016 על ידי אוניברסיטאות אחדות עולה שהפרוטוקול במבנה הבסיסי בשיחה בין שני משתמשים בטוח לשימוש[5][6][7][8][9]. בינואר 2018 פורסם מחקר המצביע על חולשה בפרוטוקול סיגנל בשיחה קבוצתית בתוכנות סיגנל, ואטסאפ וטרימה[10]. בניגוד לשיחה בין שני משתתפים בלבד המתקיימת לפי כללי הצפנה מקצה לקצה, בשיחה קבוצתית, שלמות השיחות ומסרי הניהול של הקבוצה אינם מוצפנים מקצה לקצה וכן לא מופעל אימות. משמעות הדבר היא שמי שיש לו גישה לשרת ההודעות יכול להוסיף עצמו לכל קבוצה ללא ידיעת מנהליה ובכך להפר את הקונספט של הצפנה מקצה לקצה. אם מישהו יכול להוסיף עצמו לכל קבוצה שיחפוץ הוא יקבל את כל השיחות המוצפנות בתוך הקבוצה כך שאין כל תועלת בהצפנה. הבעיה פחות קריטית בסיגנל משום שבתוכנה זו כל חברי הקבוצה הם גם מנהלים בהגדרה ולשרת אין גישה למסרי ניהול הקבוצה. החוקרים הציעו כמה תיקונים גנריים במטרה להבטיח אימות והצפנת כל המסרים והשיחות כולל מסרי ניהול המיועדים למנהלי הקבוצות. ראוי לציין שיישום ההתקפה בפועל מאוד קשה והתיקון קל מאוד כך שסביר להניח שבזמן הקרוב תוכנות המסרים המדוברות יפיצו עדכוני תוכנה מתאימים להסרת האיום.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.