הצפנה מאומתת
סכמת הצפנה מאומתת (Authenticated Encryption) בקיצור AE היא מצב הפעלה של צופן בלוקים סימטרי, שמטרתו לספק במקביל סודיות ושלמות ואימות המידע המוצפן. ההנחה היא שהשולח והמקבל משתפים ביניהם מפתח הצפנה סודי. המצפין משתמש במפתח הסודי שברשותו כדי להצפין את המידע באמצעות צופן סימטרי ולייצר במקביל תג אימות באמצעות קוד אימות המסרים אותם הוא שולח יחד או בנפרד למקבל. המקבל מצידו משתמש במפתח הסודי שברשותו כדי לפענח את המידע ובאותה מידה לבדוק באמצעות פונקציית האימות את תג האימות שקיבל כדי לוודא את שלמות המידע ואת מקורו. מעצם ההגדרה תג האימות מבטיח כי תוקף בעל יכולת חישוב סבירה לא יוכל לזייף מסר מוצפן ותג מתאים בלא ידיעת מפתח ההצפנה הסודי המשותף להם, כך שהמקבל לא יבחין בכך. כלומר שפונקציית האימות של המקבל תחזיר "אמת" כאילו ההודעה התקבלה מהשולח האותנטי.
הצורך בהצפנה מאומתת עולה באופן טבעי לאור העובדה שמעצם ההגדרה צופן סימטרי אינו מבטיח שלמות ואמינות. תמיד קיים חשש שתוקף זדוני יצליח ליירט מסר מוצפן, לשנותו או להחליפו באחר ולהעבירו ליעדו מבלי שלמקבל תהיה דרך להבחין בכך. בשל כך פותחו שיטות לאימות מסרים שנועדו להבטיח את שלמות ואמינות המסר באמצעים קריפטוגרפיים. בעבר בשל ההפרדה בין שני היעדים, סודיות לעומת שלמות ובהיעדר תקן כלשהו נטו מפתחי מערכות אבטחה לפתור בעיה זו בשיטות אד הוק, דרך אחת היא להוסיף יתירות מכוונת כמו ריפוד המסר במספר אקראי, דרך אחרת היא שילוב קוד אימות מסרים יחד עם הצפנה (באופן שלא הוכח כבטוח מבחינה קריפטוגרפית). התקפות אינטרנט ניצלו פרצות אלו[1]. הניסיון מלמד ששילוב הצפנה עם אימות מורכב ומועד לשגיאות. שגיאה נפוצה אחת היא הניסיון להבטיח אימות בשיטות לא קריפטוגרפיות כמו שימוש בפונקציית גיבוב ללא מפתח או בקוד תיקון שגיאות. טעות אחרת היא להשתמש במפתח הצפנה יחיד הן להצפנה והן לאימות שאינו מומלץ ואף עלול להוות פרצת אבטחה במקרים מסוימים. גם במקרה שהמרכיבים כשלעצמם בטוחים יכול להיות שהמערכת כמכלול לא תהיה בטוחה.
הפרדיגמה הבסיסית כדי לספק סודיות ושלמות באופן בטוח היא, לקחת צופן סימטרי בטוח המספק סודיות בלבד ולשלבו במצב הפעלה CBC או מצב מונה עם אלגוריתם אימות מסרים בטוח המספק אימות בלבד. עם מפתח סודי נפרד או עם מפתח שנגזר באופן בטוח מהמפתח הראשון. מפתח האימות ומפתח ההצפנה חייבים להיות שונים ובלתי תלויים סטטיסטית, כלומר לא ניתן לנחש מפתח אחד בהינתן השני. אפשר להישתמש בשני מפתחות סודיים האחד לצורך הצפנה והשני לצורך אימות. אך לשיטה זו מספר חסרונות; יעילות נמוכה, אחסון מספר רב של מפתחות סודיים וכן בעיית תאימות עם מערכות קיימות. דרך אחרת היא להפיק את מפתח האימות מתוך מפתח ההצפנה בדרך בטוחה כמו באמצעות פונקציה אקראית 'אוניברסלית'.
שיטות השילוב של הצפנה עם אימות מתחלקות לשני סוגים עקריים; הרכבה גנרית, שבה הם נעשים בנפרד ללא קשר הדוק ביניהם, הרעיון נמצא בשימוש מעשי נרחב בסכמות רבות בין היתר HMAC, UMAC או CBC-MAC. השיטות האחרות מנסות לשלב בין ההצפנה והאימות באופן יותר הדוק כדי להבטיח סודיות ואימות גבוהים ביותר האפשריים במחיר הנמוך ביותר מהיבט של יעילות. קיימות מספר שיטות כאלו, ביניהן אפשר למנות את: OCB, CCM, EAX, GCM שהוצעו ונבחנו על ידי מומחים ואושרו בתקן איזו ובארגוני תקינה נוספים. וכן IACBC, XCBC, Helix, CWC.
היסטוריה
רעיון הצפנה מאומתת הועלה לראשונה על ידי בלייר ורוגווי ב-1995 והורחב לאחר מכן על ידי אחרים. המושג מבוסס על רעיון אימות מסרים שהועלה לראשונה על ידי ווגמן וקרטר, הם הציעו לנצל צופן בלוקים כדי להשיג אימות במקום סודיות. מטרת קוד אימות מסרים היא להבטיח שלמות טקסט-קריא (המסומן INT-PTXT קיצור של integrity of plaintext) או שלמות טקסט-מוצפן (שנקרא INT-CTXT קיצור של integrity of ciphertext), באופן כזה שבהינתן מסר ומפתח סודי, המקבל יוכל להבחין בכל שינוי במסר בהסתברות מאד גבוהה. בשונה מרעיון הבטחת סודיות בצופן סימטרי, כאן בהגדרה המסר יכול להשאר גלוי ואין דרישה לסודיות. לצורך השוואה בין שתי הדרישות; סודיות מול אימות, מקובל שההגדרה האחרונה מקבילה לרעיון החלש של הבטחת סודיות שנקרא IND-CPA כלומר עמידות בפני התקפת גלוי-נבחר, הקיצור IND מתייחס לאי-יכולת הבחנה (indistinguishability). את הבטחת השלמות דהיינו שהמסר המוצפן 'לא ניתן לזיוף' (unforgeable) תחת התקפת מסר-נבחר (CMA) אפשר להגדיר בשני אופנים, ההגדרה החלשה מסומנת WUF-CMA (קיצור של weakly unforgeable) שבה בהינתן מסר ותג מתאים, יהיה קשה מבחינה חישובית למצוא מסר אחר שהתג יהיה תקף עבורו, גם אם התוקף יכול לבקש מהאורקל שיכין עבורו תגים המתאימים למספר מסרים לפי בחירתו, עם אותו מפתח אימות או מפתחות אחרים[דרוש מקור]. או בהגדרה החזקה יותר הנקראת SUF-CMA כאשר SUF פירושו strongly unforgeable, שבה באותה סיטואציה יהיה קשה מבחינה חישובית ליריב למצוא כל זוג 'מסר+תג' כך שהתג יהיה תקף עבור המסר (גם אם המסר אינו בעל משמעות או שייכות כלשהי, כל עוד התג לא יוצר במקור מאותו מסר). הוכח שכל פונקציה פסאודו-רנדומלית בטוחה יכולה להיות MAC בהגדרה החזקה.
הרכבה גנרית
רעיון הצפנה מאומתת 'גנרית' הוא הרכבה של הצפנה סימטרית כקופסה שחורה עם מנגנון אימות. כלומר קיימת הפרדה בין האימות להצפנה כך שניתן יהיה להחליף את הצופן הסימטרי או את אלגוריתם האימות בכל שלב. בהגדרה יש להבטיח שהרכבה כזו בטוחה כנגד התקפת גלוי-נבחר שבה התוקף אינו יכול הבחין בהבדל בין הצפנה של טקסט גלוי כלשהו לפי בחירתו לבין טקסט אקראי. מסמנים זאת IND-CPA שהיא הגדרה חלשה יותר לעומת IND-CCA (קיצור של אי-יכולת הבחנה תחת התקפת מוצפן-נבחר). באופן כללי מרבית האלגוריתמים המודרניים עומדים לפחות בהגדרה החלשה.
אימות אפשר להשיג באמצעות אלגוריתם קוד אימות מסרים בטוח. במקרה כזה ההצפנה המאומתת מושגת בשני שלבים, ריצת הצפנה וריצת אימות. נניח שפונקציית ההצפנה של הצופן הסימטרי נקראת והפענוח , פונקציית יצירת תג האימות , פונקציית בדיקת התג והמסר . מפתח ההצפנה נקרא ומפתח האימות נקרא . ניתן להרכיב הצפנה מאומתת בשלושה האופנים הבאים:
- הצפנה ואימות (Encrypt and MAC): מייצרים תג אימות מהמסר, מצפינים את המסר ומצרפים אליו את התג. לפענוח+אימות, תחילה מפענחים את הטקסט המוצפן, ואז מאמתים את התג. פרוטוקול SSH אימץ גרסה דומה לזו.
- בניסוח פורמלי: . הסימן נקרא 'שרשור' כלומר הדבקת שתי מחרוזות למחרוזת אחת גדולה.
- אימות ולאחריו הצפנה (MAC then Encrypt): תחילה מייצרים תג אימות מהמסר הקריא, מצרפים את תג האימות למסר ומצפינים הכול יחד. לפענוח+אימות, תחילה מפענחים את הטקסט מוצפן ותג האימות ואז מאמתים את התג. פרוטוקול SSL משתמש בוריאציה כזו.
- הנוסחה היא: .
- הצפנה ולאחריה אימות (Encrypt then MAC): מצפינים את המסר, מייצרים תג אימות מהטקסט המוצפן ומצרפים אותו לטקסט המוצפן. לפענוח+אימות, תחילה מאמתים את התג ואז מפענחים. פרוטוקול IPSec תומך בגרסה כזו.
- הנוסחה היא תחילה: ואז מחשבים את .
כל אחת מהשיטות מניבה ביטחון שונה בהתאם למודלים של ביטחון שונים. הנחת הבסיס היא שהצופן הסימטרי בטוח לפחות כנגד התקפת גלוי-נבחר בקיצור (CPA) ואלגוריתם האימות אינו ניתן לזיוף לפחות תחת CMA - התקפת מסר-נבחר. הטבלה הבאה פורסמה ב-2007 על ידי Mihir Bellare מאוניברסיטת קליפורניה בסן דייגו שנחשב לאחד מהוגי הרעיון ו-Chanathip Namprempre באוניברסיטת תאמאסאט בתאילנד והיא מציגה את הקשר בין הגדרות הבטחת סודיות והבטחת אימות בהתאם למודלים שונים של ביטחון. בשתי הטבלאות הבאות "כן" מתייחס לכך שהמבנה הוכח כבטוח תחת ההנחות המתוארות. ו"לא" פירושו שקיים מבנה כזה שאינו עונה על כל הגדרות הביטחון - במקרים מסוימים (לא בכל המקרים).
שיטה | פרטיות | שלמות | |||
---|---|---|---|---|---|
IND-CPA | IND-CCA | NM-CPA | INT-PTXT | IND-CTXT | |
הצפנה ואימות | לא | לא | לא | כן | לא |
אימות ואז הצפנה | כן | לא | לא | כן | לא |
הצפנה ואז אימות | כן | לא | לא | כן | לא |
שיטה | פרטיות | שלמות | |||
---|---|---|---|---|---|
IND-CPA | IND-CCA | NM-CPA | INT-PTXT | IND-CTXT | |
הצפנה ואימות | לא | לא | לא | כן | לא |
אימות ואז הצפנה | כן | לא | לא | כן | לא |
הצפנה ואז אימות | כן | כן | כן | כן | כן |
שתי הטבלאות מציגות את תוצאות רמת הביטחון של שלושת המבנים המתוארים תחת מודלים שונים מהכבד אל הקל. הטבלה העליונה מניחה שקוד אימות המסרים בטוח תחת ההגדרה המקלה של 'אי-זיוף' ואילו הטבלה התחתונה מתייחסת למקרה שבו קוד האימות עמיד כנגד ההתקפה האמורה בהגדרה החזקה שלה. המושג NM-CPA מתייחס לאי-חשילות שהיא הגדרה חזקה יותר של ביטחון סמנטי.
הרכבה גנרית של הצפנה מאומתת סובלת מכמה חסרונות; יעילות נמוכה, התנפחות לא רצויה של הצופן וסיכון בטיחותי שנובע מהחשש שלמרות שכל אחד מהמרכיבים בטוח, השילוב ביניהם עלול להחדיר חולשות או פרצות בלתי ידועות. ההעדפה היא לפתח מערכת ייעודית המקפלת בתוכה הצפנה עם אימות, עם ביטחון מוכח ובעדיפות לריצה אחת מסיבות של יעילות. מסיבות של תאימות ויעילות רצוי שהאלגוריתם יקבל מפתח הצפנה יחיד, למרות שפנימית האלגוריתם עושה שימוש במפתח אימות נפרד הנגזר מהמפתח הראשי. נושא נוסף שנשקל הוא זכויות יוצרים, ארגוני תקינה ויצרנים נמנעים באופן גורף משימוש באלגוריתמים המעוגנים בפטנטים ובזכויות יוצרים.
הצפנה מאומתת עם מידע נלווה
רוגווי הרחיב את המושג הצפנה מאומתת להגדרה של הצפנה מאומתת עם מידע נלווה (Authenticated Encryption with Associated Data בקיצור AEAD). במודל זה המידע מחולק לשני חלקים טקסט-גלוי המיועד להצפנה וכותר (header) שמגיע יחד איתו. השלמות במקרה זה מחויבת לגבי כל חלקי המידע אך הסודיות לא, כי הכותר משודר במצב גלוי. בעיה זו של הבטחת שלמות המידע הנלווה מתעורר בעיקר בפרוטוקול העברת מפתח והיא נקראת גם אריזת מפתח הצפנה. כלומר מציאת מנגנון בטוח להעברת המפתח והמידע הנלווה אליו בצורה בטוחה ומאומתת לצד השני. וכן שהחלק הגלוי במידע לא יסכן את סודיות הפרוטוקול או שלמותו. אפשר להשיג זאת על ידי שילוב המידע הנלווה בתהליך האימות. דרך אחרת להשגת אימות או הבטחת שלימות היא "הצפנה עם יתירות". כלומר ניסיון להשיג אימות על ידי קידוד המידע בדרך כלשהי כמו ריפוד במספר אקראי לפני ההצפנה. הרעיון הוא שאם מרפדים את המסר היטב לפני ההצפנה אפשר להשיג אימות בחינם. דוגמה טובה היא שיטת הריפוד OAEP. על כל פנים מתוך הטבלה עולה שהשיטה שאומצה בפרוטוקול SSH פחות בטוחה מהאחרות.
עמידה בפני שימוש לא ראוי וכיבוד ייחודיות
בסכמות הצפנה המבוססות על וקטור אתחול או Nonce חובה שוקטור האתחול יהיה ייחודי וחד פעמי. כלומר אין להשתמש בו שוב עם אותו מפתח להצפנת מסרים אחרים כיוון שקיים חשש שאם יימצא בלוק מידע שחוזר על עצמו הרי שהצפנה שלו תחת ווקטור אתחול קבוע עם אותו מפתח סודי עלול לייצר בלוק מוצפן זהה, מסיבה זו יש להבטיח שוקטור האתחול או המפתח, לפחות אחד מהם יהיה שונה. מגבלה זו היא באחריות המשתמש ומסתבר שקיימים היבטים מעשיים שמקשים על כיבודה בפועל. מפתחי מערכות נטו בעבר להתעלם ממנה מה שהוביל למערכות פגומות שניתן לפרוץ בקלות. דוגמה הכי טובה היא פריצת פלייסטיישן 3 שנקראת Jailbreak. מסיבה זו פותחו מספר מצבי הפעלה שמביאים בחשבון עובדה זו. אם מבלי משים או במכוון המשתמש סיפק וקטור איתחול זהה, המערכת תהיה בטוחה (במגבלות מסוימות) ולא תהיה פרוצה לחלוטין, מערכת כזו נקראת Nonce Respecting או Misuse-resistance והיא תכונה חשובה בהצפנה מאומתת.
ביטחון
הגדרה קונקרטית של ביטחון סמנטי של הצפנה מאומתת היא על ידי מה שקרוי 'משחק' ו"יתרון" של "יריב" כאשר המושג "בטוח" אינו מוגדר פורמלית בהקשר זה, אלא פירושו שהיתרון של יריב מוגבל במקום ובזמן "זניח" בהתאם לפרמטר כלשהו שנתון לדיון. בצפנים סימטריים כמו AES למשל לא קיימת הגדרה פורמלית. באופן כללי בהקשר של ביטחון סמנטי של צופן סימטרי או אסימטרי המשחק מנוהל בצורה כזו שהיריב מגיש בפני האורקל או מציב האתגר, שאילתות עם זוגות מסרים באורך שווה ומקבל בחזרה הצפנה של אחד מהמסרים באופן אקראי ( הוא תוצאה של הטלת מטבע חדשה בכל שאילתא) ועליו לנחש בעזרת הטקסט המוצפן שקיבל בכל שאילתא, איזה מביניהם הוצפן כלומר: שווה "0" או "1" (אמת או שקר). היריב יחשב כמנצח אם יצליח בהסתברות גבוהה מחצי באחוז מסוים "שאינו זניח" לנחש נכונה בכל הניסויים שביצע. בניסוח פורמלי ההגדרה תחת מודל CCA או CPA היא:
או
בהקשר של הצפנה מאומתת את רעיון השלמות או האימות אפשר להגדיר בדרך דומה:
וכן
הרעיון של 'אי-זיוף' מוגדר באופן דומה:
וכן
קודי אימות מסרים תיקניים כמו אילו המתוארים לעיל כמו HMAC ,PMAC או UMAC ודומיהם מוגדרים בטוחים SUF-CMA שהיא ההגדרה המחמירה שכוללת גם את WUF-CMA. כמו כן ההגדרה של INT-PTXT חלשה מ-INT-CTXT.
אלגוריתמים
להלן רשימה נבחרת[2] של אלגוריתמים להצפנה מאומתת המבוססת על צופן בלוקים וצופן בלוקים בר-התאמה, עם מידע נלווה או ללא מידע נלווה. כמה מהן סכמות מתקדמות בעלות מאפיינים נוספים כמו המאפיין של "הצפנה מאומתת דטרמיניסטית עם עמידות שימוש לא ראוי", שפירושה שסכמת ההצפנה תספק ביטחון סביר (במידת האפשר) גם אם השתמשו באותו וקטור אתחול פעמיים, ולא תקרוס לחלוטין. קטגוריה מתקדמת נוספת היא "עמידות מעבר לגבול יום-הולדת", דהיינו שסכימת ההצפנה מספקת ביטחון אף מעבר לדרישה המינימלית הנובעת מפרדוקס יום ההולדת שהיא פקטור של מחצית מאורך המפתח.
סכמה | תאריך | סוג | תיאור | תקן |
---|---|---|---|---|
EtM | 2000 | משולב | סכמה גנרית Encrypt-then-MAC הצפנה ואחריה אימות | ISO 19772 |
RPC | 2000 | אינטגרלי | החדרת מונים וזקיפים לבלוקים לפני הצפנה בשיטת ECB | |
IAPM | 2001 | אינטגרלי | הצפנה מאומתת ראשונה שהומצאה וכן IACBC | |
XCBC | 2001 | אינטגרלי | דומה לרעיון של Jutla וכן XECB | |
TAE | 2002 | אינטגרלי | הסבה של OCB1 לצופן בלוקים בר-התאמה | |
CCM | 2002 | משולב | מצב מונה + CBC MAC | NIST 800-38C |
CWC | 2004 | משולב | מצב מונה + בסגנון קרטר-ווגמן MAC | |
GCM | 2004 | משולב | מצב מונה + בסגנון קרטר-ווגמן MAC | NIST 800-38D |
EAX | 2004 | משולב | מצב מונה + CMAC, וריאציה של CCM | ISO 19772 |
CCFB | 2005 | אינטגרלי | דומה ל-RPC עם שרשור | |
CHM | 2006 | משולב | ביטחון מעל גבול יום-הולדת | |
SIV | 2006 | משולב | הצפנה מאומתת דטרמיניסטית עם עמידות שימוש לא ראוי | RFC 5297 |
CIP | 2008 | משולב | ביטחון מעל גבול יום-הולדת | |
HBS | 2009 | משולב | הצפנה מאומתת דטרמיניסטית עם מפתח יחיד | |
BTM | 2009 | משולב | הצפנה מאומתת דטרמיניסטית עם מפתח יחיד (ללא פונקציית פענוח) | |
OCB1 | 2001 | אינטגרלי | פיתוח ממוטב של סגנון IAPM | |
OCB2 | 2004 | אינטגרלי | OCB1 משופר בסגנון AEAD | ISO 19772 |
OCB3 | 2010 | אינטגרלי | שיפור של גרסאות OCB קודמות |
ראו גם
לקריאה נוספת
- Bellare, M.; Namprempre, C. (2000), T. Okamoto (ed.), "Authenticated Encryption: Relations among notions and analysis of the generic composition paradigm", Extended abstract in Advances in Cryptology: Asiacrypt 2000 Proceedings, Lecture Notes in Computer Science, Springer-Verlag, 1976: 531, doi:10.1007/3-540-44448-3_41, ISBN 978-3-540-41404-9
הערות שוליים
- ^ תיאור מתקפה על הריפוד, דיגיטל וויספר, גיליון 55, גיליון נובמבר, 31-אוקטובר-2014, המאמר השלישי, מאת שחר קורוט (Hutch). כולל הפניה למבוא למתקפת Padding Oracle בגיליון 16
- ^ The Software Performance of Authenticated-Encryption Modes