הרגיסטרציה היא שלב מקדים בביצוע גילוי תנועה בווידאו, בחילוץ מידע מסדרה של תמונות מעורפלות לתמונה אחת ברורה, או באנליזה רפואית לאיתור פתלוגיות באיברים שונים.
פרוטוקול סיגנל
פרוטוקול סִיגְנָל (באנגלית: Signal Protocol) (לשעבר פרוטוקול TextSecure) הוא פרוטוקול קריפטוגרפי בקוד פתוח המספק הצפנה מקצה-לקצה לאבטחת תקשורת מסרים מיידיים ושיחות וידאו והוא הבסיס לאפליקציית המסרים המיידיים סיגנל. הפרוטוקול פותח ב-2013 בתחילה בשם TextSecure על ידי חברת Open Whisper Systems שנוסדה על ידי חוקר אבטחת המידע מוקסי מרלינספייק (מתיו רוזנפלד). הפרוטוקול נמצא במימושים בקוד סגור של חברות ידועות ביניהן: וואטסאפ שמצפינה הודעות של למעלה ממילארד משתמשים ברחבי העולם, Facebook Messenger של פייסבוק במצב "שיחה סודית", Google Allo במצב "אינקוגניטו" וכן סקייפ במצב "שיחה פרטית".
פרוטוקול סיגנל הוא התפתחות על שני פרוטוקולים ידועים: OTR ומערכת הצפנת SCIMP מבית Silent Circle שפיל צימרמן הוא אחד ממייסדיה. בגרסאות המתקדמות של הפרוטוקול שולב אלגוריתם מַחְגֵּר מְשֻׁנָּן כפול יחד עם מספר פרימיטיבים קריפטוגרפיים ידועים: פרוטוקול לחיצת יד המבוסס על דיפי-הלמן משולש (בקיצור formula_1), וכן עקום 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.
חתימת XEdDSA היא וריאציה של החתימה הדיגיטלית DSA מעל העקום האליפטי עקום 25519 או עקום 448. אילו הם עקומים מיוחדים הנמנים עם עקומי אדוארד ומכאן שם האלגוריתם. הפרמטרים הקבועים של העקום הם נקודת בסיס קבועה formula_2 והסדר שלה formula_3 והקבועים formula_4 ,formula_5 ו-formula_6 של עקום אדוארד. כפל סקלרי של נקודה הוא פעולה ארוכה וצורכת משאבים ולכן מנסים לייעל אותה על ידי שימוש בסולם מונטגומרי שבנוסף יתרונו הוא שהוא עמיד נגד התקפת ערוץ צדדי. לצורך סולם מונטגומרי משתמשים כאן רק בקואורדינטה formula_7 של הנקודה בשיטת קואורדינטות פרויקטיביות. היות שהעקום הוא מסוג אדוארד, יש צורך בפונקציה מוסכמת להמרת נקודה מעקום אדוארד לעקום מונטגומרי ובחזרה (הפונקציה לא מובאת כאן). הפונקציה formula_8 בתהליך החתימה להלן מקבלת את המפתח הסודי formula_9 שלם כלשהו ומחזירה את formula_10 שהם המפתח הפרטי והמפתח הציבורי שהוא נקודה בעקום אדוארד. שים לב שהנקודה formula_6 מתקבלת מהכפלת נקודת הבסיס בשלם הסודי בשיטת סולם מונטגומרי. כדי לחתום על מסר formula_12 תחילה יש צורך במחרוזת אקראית כלשהי formula_13 חד-פעמית עבור כל מסר נתון. בהינתן הפרמטרים הקבועים של העקום, הפונקציה המתוארת להכנת המפתחות והמפתח הסודי formula_9 החתימה והאימות על המסר formula_12 מתבצעים כדלהלן:
כדי לאמת את החתימה דרושים הפרמטרים הקבועים של העקום, המפתח הציבורי של החותם formula_16 (בעקום מונטגומרי) המסר formula_12 וזוג הערכים שהתקבלו מהחתימה formula_18 ו-formula_19. הסימן formula_20 מייצג שרשור. הפונקציה formula_21 היא פונקציית גיבוב מותאמת המתקבלת על ידי שרשור הערך formula_22 לקלט formula_23 לפני הקריאה לפונקציה. כך שמתקבל formula_24. במקרה של formula_25 יוצא שלפני הקלט נוספת תחילית המורכבת ממחרוזת אחדים באורך formula_26 ואפס בסופה. formula_27 מייצג את אורך נקודה בעקום בסיביות. בנוסף הפרוטוקול תומך בגרסה מורחבת הנקראת VXEdDSA שהיא דומה לזו המתוארת אך מכילה תכונה נוספת. בגמר הפרוטוקול היא מפיקה מחרוזת פסאודו אקראית נוספת המשרתת כהוכחה לפונקציה אקראית בקיצור VRF.
פרוטוקול דיפי-הלמן משולש (X3DH).
פרוטוקול X3DH הוא פרוטוקול שיתוף מפתח קנייני המבוסס על פרוטוקול דיפי-הלמן (שאיתו שני משתמשים מבצעים שיתוף מפתח סודי מאומת לצורך התקשרות עתידית) שעושה שימוש בשלושה סוגים של זוגי-מפתחות במקום באחד.
הפרוטוקול מכיל סודיות מושלמת קדימה ויכולת הכחשה וכן מותאם לעבודה במצב אסינכרוני, כלומר כל אחד מפרסם מפתחות ציבוריים מראש וכאשר מישהו מעוניין להתקשר עמו גם אם הוא אינו מחובר באותו רגע הוא יכול לבקש מהשרת את המפתחות השמורים שלו ולבצע את פרוטוקול השיתוף בלעדיו. מאוחר יותר כאשר אותו משתמש מתחבר הוא מקבל מהשרת התראה שמחכה לו הודעה הוא יכול להשתמש במפתח הפרטי המתאים, יחד עם המפתח הציבורי של השולח שנכלל בהודעה, לבצע את אותו תהליך שיתוף ולחלץ את הסוד המשותף כדי לפענח את ההודעות שקיבל.
הפרוטוקול פועל בעקום אליפטי מסוג עקום 25519 או עקום 448. בנוסף הפרוטוקול משתמש בפונקציית הגיבוב SHA-256 או SHA-512 לפי בחירה ובפונקציית קידוד מוסכמת לייצוג המפתחות הציבוריים. ההנחה לפני שהפרוטוקול מתחיל היא שאליס ובוב רשמו את המפתחות הציבוריים שלהם בשרת.
צרור המפתחות של כל משתמש כולל שלושה סוגים של זוגי מפתחות (key pairs), כאמור:
כאשר אליס מעוניינת לשלוח הודעה לבוב, תחילה היא מכינה מפתח דיפי הלמן ארעי formula_33 (Ephemeral Key) ומבקשת מהשרת את המפתחות הציבוריים של בוב: formula_34, formula_35 וכן formula_36 אם ישנו ואז היא מבצעת את פונקציית דיפי-הלמן שלוש פעמים. אם מסמנים את הפונקציה DH אז היא מבצעת לפי הסדר:
אם קיים מפתח חד-פעמי היא מבצעת גם formula_37 ואז היא משרשרת את כל התוצאות ביחד ומפעילה את פונקציית גזירת המפתח
כאשר formula_39 אופציונלי.
בנוסף לאמור אליס מכינה קובץ כותר המכיל מידע על זהותה וזהותו של בוב. את מפתחות הזהות שלהם formula_40 ו-formula_34 וייתכן מידע נוסף. לסיום היא שולחת לבוב את מפתח הזהות שלה formula_40, את המפתח הארעי שלה formula_33 ואת גוף ההודעה כשהיא מוצפנת עם SK או עם מפתח אחר שנגזר ממנו באמצעות פונקציה פסאודו-אקראית ומידע ניהולי נוסף. את ההצפנה היא מבצעת עם אלגוריתם להצפנה מאומתת עם מידע נלווה (AEAD). למעשה ההודעה משרתת שתי מטרות: אחת היא להעברת המסר שהיא מעוניינת והשנייה העברת מפתח ציבורי ארעי חדש על מנת שבוב יוכל להכין את המפתח הסודי המשותף לצורך תקשורת עתידית ביניהם. לכן כאשר בוב מקבל את המסר תחילה הוא מכין את המפתח המשותף ומפענח את ההודעה ואז אם ברצונו להחזיר תגובה לאליס הוא מייצר מפתח חדש ושולח לה אותו יחד עם ההודעה באותה דרך. כמובן שהוא מוחק מיד כל מפתח חד פעמי שנעשה בו שימוש.
מחגר משונן כפול (Double Ratchet).