הצפנה מרובה

הצפנה מרובה (Multiple encryption) היא דרך להצפין מידע פעמים מרובות באמצעות מפתחות הצפנה שונים. קַסְקָדָת (Cascade) הצפנה היא הצפנה מרובה באמצעות אלגוריתמים שונים (ומפתחות שונים). הבחנה זו לא תמיד נעשית, לרוב מתייחסים להצפנה מרובה באופן כללי כאל קסקדה. מקובל שהצפנה מרובה עם מפתח זהה לא רק שאינה מניבה ביטחון רב יותר אלא אף מחלישה אותו ברוב המקרים, משום שההצפנה השנייה עלולה לבטל את הראשונה חלקית או באופן מלא. במיוחד בצפנים בהם ההצפנה והפענוח נעשים בפונקציה זהה. בפנקס חד-פעמי למשל, הצפנה חוזרת עם אותו מפתח שקולה לפענוח וכן בכל צופן זרם. יתרה מזו, סיבוכיות ההתקפה כנגד המערכת אינה עולה באופן ניכר, כיוון שהתוקף יודע שנעשה שימוש במפתח זהה (ההנחה היא תמיד שמספר ההצפנות, האלגוריתמים ששימשו להצפנה וכן סדר ההצפנה, ידועים לתוקף). המסקנה היא שמפתחות ההצפנה צריכים להיבחר באופן שיהיו בלתי תלויים סטטיסטית. כלומר לא תהיה דרך קלה להסיק מהו מפתח אחד בהינתן השני.

אחת הסיבות להצפנה מרובה היא הגברת ביטחון ללא צורך בפיתוח אלגוריתם חדש. הטכניקה הזו נוצלה ב-DES משולש בשל העובדה שמפתח ההצפנה של DES קצר מאוד (רק 56 סיביות). אולם יש להזהר שהצירוף אינו גורם לאפקט הפוך מהמצופה. יש לוודא שביטחון הצופן אכן השתפר וכי לא נוספו חולשות. יש לציין כי הצפנים הסימטריים המודרניים כמו AES, מציעים ביטחון רב עם מפתח 256 סיביות לכן מהיבט של ביטחון, רק במקרים קיצוניים השקעה בהצפנה מרובה כדאית.

בהגדרה כללית כאשר מציינים 'צפנים' בלשון רבים, מתכוונים בעיקר להצפנה סימטרית או א-סימטרית חוזרת עם מפתחות הצפנה שונים, לא בהכרח עם אלגוריתמים שונים (ראה בהמשך לגבי אלגוריתמים שונים). ישנן כמה תצורות עיקריות של הצפנה מרובה:
 
*הצפנה עוקבת: בשיטה זו שנקראת גם קסקדה, פלט הצופן הראשון מהווה קלט לצופן השני והשני לשלישי וכן הלאה. כאמור חובה על המפתחות להיות בלתי תלויים סטיסטית זה בזה. המודל הזה אומץ על ידי הרשת החברתית האנונימית Tor, קיצור של The Onion Routing. האנלוגיה ברורה, תהליך הפענוח דומה לקילוף בצל, כל שכבה מייצגת הצפנה אחת. במקרה של TOR, המטרה אינה הגברת הביטחון אלא הסתרת זהות המשתמש על ידי הצפנת חבילת המידע ומקורה מספר פעמים באמצעות מפתחות הפומביים של השרתים האנונימיים. תהליך הניתוב של חבילה עובר דרכם, כאשר כל אחד מהם מסיר שכבת הצפנה אחת בהתאם למפתח הפרטי שברשותו.
*הצפנה מרוכבת (product cipher): הוצעה לראשונה על ידי שאנון והיא בעצם הבסיס התאורטי לצפני בלוקים מודרניים. הרעיון הוא שילוב לא ליניארי כלשהו של מספר טרנספורמציות לחיזוק הביטחון. בשיטה זו אין מגבלה שמפתחות ההצפנה בין כל טרנספורמציה יהיו בלתי תלויים. מעשית המפתחות שבשימוש כל טרנספורמציה, הן פונקציה, לפעמים פשוטה של מפתח אחר, בדרך כלל קטן.
*הצפנה מקבילית: היא הצפנה של טקסט-המקור עם כל מפתח בנפרד ושילוב ביניהם באופן שיבטיח כי פענוח יצליח רק אם מפענחים את כל החלקים, כמו עם טרנספורמציית הכול או לא כלום, אפשר להשיג זאת עם חיבור ב-XOR כמו בפנקס חד-פעמי או על ידי סכמת חלוקת סוד. 
*הצפנה מרובה היברידית: אם משלבים בין השיטות השונות מתקבלת מערכת היברידית. דרך אחת לבנות מודל כזה היא באמצעות עץ הצפנות. שורש העץ הוא השכבה הראשונה של ההצפנה, הוספת שכבה מקבילית מרחיבה את העץ לרוחב, כלומר מוסיפה צמתים. ואילו הוספת שכבה רציפה או עוקבת מעמיקה את העץ בפקטור שהוא פונקציה של מספר הצופנים המרכיבים את סדרה. תוצאת הצפנת העץ היא פלט כל הצמתים שאין להם בנים.

==הצפנה כפולה==
התצורה הפשוטה ליישום הצפנה כפולה עוקבת היא להצפין את בלוק המידע פעמיים בזה אחר זה, עם מפתחות הצפנה שונים, כאשר פלט הצופן הראשון מהווה קלט לצופן השני, כדלהלן:
:להצפנה מבצעים: <math>C=E_{K_2}(E_{K_1}(P))</math>
:לפענוח מבצעים: <math>P=E_{K_1}^{-1}(E_{K_2}^{-1}(C))</math>

===התקפת היפגשות באמצע===

על פניו נראה כאילו הושג ביטחון כפול, אם אורך כל מפתח הוא <math>n</math> סיביות, התקפת כוח גס על הצופן, כלומר ניסיון לנחש את המפתחות <math>K_1,K_2</math> על ידי ניסוי כל המפתחות האפשריים, אמורה להיות מסדר גודל של <math>2^{2n}</math>. אולם תקיפת היפגשות באמצע שהועלתה לראשונה ב-1977 על ידי דיפי והלמן וכן מרקל מראה שניתן לשבור וריאציה זו ב-<math>2^{n+1}</math> ניסיונות הצפנה במחיר של סיבוכיות מקום בסדר גודל של <math>2^n</math>, בשל הזהות הבאה: <math>M=E_{K_1}(P)=E_{K_2}^{-1}(C)</math>, כלומר אם מצפינים את <math>P</math> בכל <math>2^n</math> האפשרויות של <math>K_1</math> ומפענחים את <math>C</math> בכל <math>2^n</math> האפשרויות של <math>K_2</math> אזי רק הזוגות <math>K_1,K_2</math> שמניבים זהות אמצעית <math>M</math> זהה, הם פתרונות אפשריים. לאור זאת אפשר לבצע התקפת גלוי-ידוע כדלהלן: תחילה משיג התוקף טקסט-מוצפן כלשהו <math>C</math> אשר הוצפן על ידי זוג המפתחות <math>K_1,K_2</math> (שאותם התוקף מנסה לחשוף) ואשר המקור שלו <math>P</math> ידוע (סוג ההתקפה מניח שאפשר להשיג טקסטים-מוצפנים שמקורם ידוע). לאחר מכן בונה טבלה שבה שומר את כל ההצפנות האפשריות של <math>P</math>, דהיינו <math>E_K(P)</math> כאשר <math>K</math> מייצג את כל <math>2^n</math> המפתחות האפשריים. גודל הטבלה בסיביות יהיה <math>2^n\cdot m</math> כאשר <math>m</math> מייצג את גודל הבלוק של הצופן בסיביות (זו אמנם טבלה ענקית, ואף בלתי מעשית אם המפתח גדול, בכל אופן קיימות טכניקות לצמצום דרישות הזיכרון, ראה להלן). לאחר מכן מנסה את <math>E^{-1}_K(C)</math> עבור כל מפתח אפשרי <math>K</math> ובודק אם התוצאה כבר קיימת בטבלה. אם נמצאה התאמה, בסבירות גבוהה בידיו כעת <math>K_1'</math> ו-<math>K_2'</math> בהם הוצפן <math>P</math>. תיתכן תוצאה שגויה (false positive) כלומר אף על פי שהטקסט שהתקבל נכון המפתח אינו נכון דהיינו <math>K_1'\ne K_1</math>, ההסתברות שהתגלו המפתחות הנכונים היא <math>2^{2n-2m}</math>, במקרה של DES מדובר על הסתברות של <math>2^{-16}</math>. כדי להיות בטוח הוא יכול לנסות את התהליך עם זוג <math>(P',C')</math> אחר, להצפין את <math>P'</math> עם <math>K_1'</math> ו-<math>K_2'</math> ולבדוק אם התקבל <math>C'</math>. הכנת הטבלה והחיפוש בה אינם עולים על סיבוכיות <math>2^n</math> כל אחד, כלומר סיבוכיות ההתקפה היא <math>2\cdot 2^n=2^{n+1}</math>. ייתכן שצריך להביא בחשבון גם את הזמן הדרוש למיון, שזה בערך <math>\mbox{log}(2^n)</math>. בכל אופן הושג שיפור קל בלבד.

אם אלגוריתם ההצפנה מקיים תכונות של חבורה, אזי תמיד קיים מפתח שלישי <math>K_3</math> המקיים <math>C=E_{K_2}(E_{K_1})(P))=E_{K_3}(P)</math>. הצפנים הקלאסיים כולל צופן ויז'נר מקיימים תכונה זו. במקרה כזה ביטחון ההצפנה לא השתפר כלל, כי מציאת המפתח השלישי בכוח גס היא בסיבוכיות <math>2^n</math>, כלומר כאילו התבצעה הצפנה אחת. מצד שני הוכח (במאמר שפורסם על ידי קמפבל וויינר לגבי DES אך ניתן להשליכו גם לאחרים) שבאופן כללי צופן בלוקים סימטרי מודרני שעושה שימוש בטבלת תמורה, בדרך כלל אינו מהווה חבורה ואינו סגור מבחינה פונקציונלית. לולא עובדה זו, התקפת 'נפגש באמצע' של הלמן ומרקל הייתה שוברת כל צופן בלוקים סימטרי בסיבוכיות של <math>2^{n/2}</math> בקירוב שזה כחצי מהזמן הדרוש לכוח גס, במחיר של סיבוכיות מקום נוספת. הדברים נכונים בדרך כלל גם לגבי אלגוריתמים א-סימטריים שמסתמכים על בעיות חישוביות מתורת המספרים.

תצורה יותר בטוחה של הצפנה-כפולה העמידה בפני ההתקפה האמורה, הומצאה על ידי דויס ופרייס. זוהי וריאציה של מצב הפעלה CBC והיא מעין הצפנה מקבילית. במקרה שמצפינים מספר בלוקים של מידע ברצף, כל בלוק טקסט-מקור מחובר ב-XOR עם תוצאת הצפנה קודמת עם מפתח אחר, לפני שהוא מוצפן. כדלהלן:
:<math>C_i=E_{K_1}(P_i \oplus E_{K_2}(C_{i-1}))</math>
:<math>P_i=E^{-1}_{K_1}(C_i) \oplus E^{-1}_{K_2}(C_{i-1})</math>

==הצפנה משולשת==
בהצפנה משולשת מצפינים את המידע שלוש פעמים ברציפות עם מפתחות הצפנה שונים כדלהלן: <math>C=E_{K_1}(E_{K_2}(E_{K_3}(P)))</math>. או בקיצור EEE כלומר שלוש הצפנות עוקבות. למעשה DES משולש שהוצע על ידי וולטר טאצ'מן שהיה ממפתחי DES, הוא מעין פשרה לשמירה על תאימות עם המערכות הקיימות תוך הגברת הביטחון. בשיטה זו משתמשים רק בשני מפתחות. מצפינים עם הראשון, מפענחים עם השני וחוזרים ומצפינים עם הראשון, כדלהלן:
:<math>C=E_{K_1}(E^{-1}_{K_2}(E_{K_1}(P)))</math>
:<math>P=E^{-1}_{K_1}(E_{K_2}(E^{-1}_{K_1}(C)))</math>

הסימון המקוצר של השיטה הוא EDE, כלומר הצפנה/פענוח/הצפנה והיא עמידה קצת יותר כנגד התקפת נפגש באמצע של מרקל והלמן. הבחירה במבנה הייחודי הזה לא מניבה ביטחון משולש (כיוון ששניים מהמפתחות זהים). אך המבנה אומץ על ידי IBM בעיקר בשל שיקולי תאימות וכן אומץ על ידי תקן איזו ISO 8732. הסיבה היא שבדרך זו אפשר להשתמש באותה חומרה לביצוע הצפנה בשיטה הרגילה או המשולשת. כיוון שאם קובעים <math>K_1=K_2</math> מתקבלת הצפנה יחידה, אילו היו בוחרים בשלוש הצפנות עוקבות (EEE) התוצאה לא הייתה כזו. אך יש לזכור שהצפנת DES משולש איטית פי שלושה בהשוואה להצפנה בודדת עם מפתח אחד ואף פי כמה יותר בהשוואה לאלגוריתמים מודרניים כמו AES.

מרקל והלמן פיתחו התקפת גלוי-נבחר עם <math>2^n</math> ניסיונות בקרוב ובאותה סיבוכיות מקום כנגד הצפנה משולשת EDE, אולם הדרישה של <math>2^n</math> מקורות ידועים בסגנון התקפת גלוי-ידוע לא מעשית. התקפת נפגש באמצע שוכללה על ידי רבים, ביניהם הגרסה של פול ואן אורשוט ומיכאל ויינר, שעושה שימוש בטכניקה של חיפוש התנגשויות מקבילי לצמצום משמעותי של צריכת הזיכרון ובעקרון פרדוקס יום הולדת. בהתקפה זו במחיר של <math>p</math> טקסטים ידועים כאשר <math>p<n</math> אפשר לפרוץ את מבנה EDE בתוך <math>2^{n+m}/p</math>, במקרה של DES פירושו <math>2^{120}/p</math>. אם <math>p>256</math> התקפה זו יעילה מכוח גס ובסיבוכיות מקום בסדר גודל של <math>2^p</math> שהיא נמוכה בהרבה מ-<math>n</math>. המשמעות היא שבגרסת EDE מתקבל ביטחון של שתי הצפנות בקירוב במחיר של שלוש.

קיימים מספר דרכים ליישם סכמת הצפנה משולשת, במצבי הפעלה שונים. למשל, במצב CBC-פנימי מצפינים בלוק אחד עם וקטור אתחול (IV) אחד, הפלט משמש קלט לשלב הבא בו מפענחים עם וקטור אתחול שני ושוב הפלט משמש כקלט להצפנה האחרונה עם וקטור אתחול שלישי וחוזר חלילה. בגרסה אחרת משתמשים עם וקטור אתחול אחד במצב שנקרא CBC-חיצוני. כלומר משתמשים עם וקטור אתחול אחד בלבד ומצפינים את כל הבלוקים בשיטה המשולשת, שלוש פעמים רצוף. ההבדלים באים לידי ביטוי ביישום בחומרה, כאשר הראשון יעיל יותר.

אם מצפינים עם שלושה מפתחות שונים, התקפת כוח גס הטובה ביותר היא מסדר גודל <math>2^{2n}</math> בקירוב ובסיבוכיות מקום של <math>2^n</math>, שזה מה שמצפים באופן נאיבי מהצפנה כפולה. אך יש לזכור שאמנם התקפת נפגש באמצע אינה יעילה במקרה זה, קיימות התקפות אחרות טובות יותר, כמו התקפה דיפרנציאלית של שמיר וביהם. ביהם הראה שנגד התקפה זו הווריאציות המנויות לא יותר בטוחות מהצפנה בודדת. כנגד איום התקפה דיפרנציאלית פותחו וריאציות אחרות של הצפנה משולשת המנצלות טכניקה של הגדלה מלאכותית של גודל הבלוק על ידי ריפוד המידע במחרוזת אקראית כלשהי, הריפוד לא רק משבש את הקשר בין ההצפנות אלא גם גורם לחפיפה של בלוקים כמו לבנים. או לחלופין אפשר לבצע הלבנה ב-XOR עם מחרוזת פסאודו-אקראית בטוחה ושילוב פרמוטציה ללא מפתח כלשהי. גרסה אחת המשלבת את הרעיונות המנויים נחשבת כעמידה כנגד התקפה דיפרנציאלית. היא כוללת (1) מעבר הלבנה <math>R</math> עם תוצאת מחולל אקראי קריפטוגרפי להסתרת טקסט-המקור. (2) שימוש כפול בפרמוטציה <math>T</math> ללא מפתח. ו(3) הצפנה אמצעית מרובה, המסומנת <math>nE</math> - דהיינו הצפנה מחזורית באמצעות אחד מתוך סדרה של הצפנות. הסכמה נראית כך:
:<math>C=E_{K_3}(R(T(nE_{K_2}(T(E_{K_1}(P)))))</math>

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

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

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

מאורר הוכיח שקסקדה של אלגוריתמים עם מפתחות שונים ובלתי תלויים זה בזה סטטיסטית, חזקה לפחות כמו האלגוריתם הראשון - בתנאי שהאלגוריתמים המשתתפים בקסקדה קומוטטיביים ביחס זה לזה (כמו בצופני זרם אחדים). כמו כן הוכיח שאפשר להגיע למבנה בטוח של סכמת הצפנה מרובה שבה הביטחון הכולל הוא לפחות כמו האלגוריתם החזק מביניהם. מכאן שבמצב הפעלה OFB שמדמה תכונות צופן זרם אפשר לבנות הצפנה מרובה ממספר אלגוריתמים באופן שיניב ביטחון לפחות כמו החזק מביניהם. למשל על ידי שילוב פנקס חד-פעמי ב-XOR.

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

פרויקט NESSIE פרסם בשנת 2003 המלצות לאלגוריתמים אסימטריים ובין היתר המליץ להגברת הביטחון, להשתמש בהצפנה מרובה עם אלגוריתמים שונים המבוססים על בעיות שונות מתורת המספרים. למשל הצפנה עם RSA וגרסה כלשהי של דיפי-הלמן כמו ECC.

במאמר משנת 1984 הוכיחו שמעון אבן ועודד גולדרייך שחוזק קסקדה עוקבת (דהיינו פלט הצפנה א' משמש קלט להצפנה ב' וכו') כנגד התקפת גלוי-ידוע שווה לסכום גודל המפתחות, עבור <math>l</math> הצפנות כל אחד עם מפתח בגודל <math>k</math> החוזק הכולל יהיה <math>2^{lk}</math>. הם מסכמים כי קסקדה של צופנים אקראיים אינה מהווה צופן אקראי, למרות זאת הקושי שבשבירת סכמה כזו אינו נופל מהקושי שבשבירת אחת מההצפנות. כמו כן הבעיה של הצבת חסם תחתון לשבירת קסקדה ארוכה היא בעיה קשה, קיומו של חסם כזה מצביע על כך ש-<math>\text{P} \ne \text{NP}</math>.

==דוגמאות==
קיימות כמה דרכים בטוחות לשילוב בין אלגוריתמים (גם סימטריים וגם א-סימטריים), תוך התחשבות באיומים המתוארים. הרעיון הוא לערבב את המסר לפני ההצפנה עם פנקס חד-פעמי אחד או יותר באמצעות XOR ולהצפין גם את הפנקסים החד-פעמיים שהופכים להיות חלק מהטקסט המוצפן. המחיר הוא שהטקסט המוצפן 'מתנפח' בפקטור של שנים או יותר תלוי בשיטה. כמו כן ההנחה היא שמחולל המספרים האקראיים בטוח לשימוש מבחינה קריפטוגרפית, אפשר להרחיב את השיטה למספר גדול יותר של אלגוריתמים. להלן סכמת הצפנה מרובה מקבילית עם פנקס חד-פעמי:

תרשים הצפנה מרובה של אסמוט ובלקלי משנת 1981, הסימן <math>\oplus</math> מייצג XOR ו-<math>R_1,R_2</math> הם שני ערכים אקראיים כלשהם. בהצפנה אסימטרית <math>E_K</math> ו-<math>E^{-1}_K</math> שונים. כמו כן אפשר להרחיב את השיטה להצפנות נוספות

#מכינים פנקס חד-פעמי <math>R</math> באורך המסר <math>P</math> המיועד להצפנה.
#מכינים שני מפתחות הצפנה <math>K_1,K_2</math>.
#מצפינים את <math>R</math> באמצעות האלגוריתם הראשון <math>C_1=E_{K_1}(R)</math>.
#מצפינים את <math>R\oplus P</math> עם האלגוריתם השני <math>C_2=E_{K_2}(R\oplus P)</math>.
#הטקסט המוצפן הוא שתי התוצאות <math>C_1,C_2</math>.
#לפענוח מחשבים <math>P=E^{-1}_{K_2}(C_2)\oplus E^{-1}_{K_1}(C_1)</math>.

גרסה מקבילית נוספת של אסמוט ובלקלי משנת 1981 שניתן להרחיבה גם להצפנות נוספות וכן לאלגוריתמים שונים (גם א-סימטריים) עושה שימוש בשני פנקסים חד-פעמיים והיא כדלהלן (ראה תרשים):
#מייצרים זוג פנקסים חד פעמיים <math>R_1,R_2</math> באורך המסר <math>P</math> המיועד להצפנה.
#מכינים שני מפתחות הצפנה <math>K_1,K_2</math>
#מצפינים את המספר האקראי הראשון: <math>C_1=E_{K_1}(R_1)</math>
#מצפינים את המספר האקראי השני: <math>C_2=E_{K_2}(R_2)</math>
#מערבבים את המסר ב-XOR אם שני המספרים האקראיים: <math>C_3=P\oplus R_1\oplus R_2</math>.
#תוצאת ההצפנה היא <math>C_1,C_2,C_3</math>.
#לפענוח מחשבים בסדר הפוך: <math>P=C_3\oplus E^{-1}_{K_1}(C_1)\oplus E^{-1}_{K_2}(C_2)</math>

שים לב להתרחבות הצופן פי שלושה במקרה של הצפנה כפולה.

==מבנה גנרי של הצפנה מרובה בשילוב סכמת חלוקת סוד==
שיטה נוספת להצפנה מרובה שהוכחה כבטוחה כנגד התקפת מוצפן-נבחר לאלגוריתמים א-סימטריים בשילוב סכמת חלוקת סוד. בהנחה שהאלגוריתמים המשתתפים עמידים בפני התקפת גלוי-נבחר (רוב האלגוריתמים המעשיים עונים להגדרה זו), היא כדלהלן, כאשר <math>G</math> ו-<math>H</math> הן פונקציות פסאודו-ראנדומליות בטוחות (בקיצור PRF):

===מבנה בטוח של סכמת הצפנה מרובה מקבילית===
#מייצרים <math>k</math> זוגות מפתחות הצפנה פומביים/פרטיים <math>p_1,...,p_k</math> וכן <math>s_1,...,s_k</math>. כל זוג <math>s_i,p_i</math> מתאים לאלגוריתמים <math>E_i, E^{-1}_i</math> בהתאמה.
#להצפנה מחלקים את המסר <math>m</math> ל-<math>k</math> חלקים <math>m_1,...,m_k</math> באמצעות סכמת חלוקה המבטיחה All Or Nothing בקיצור AONT. (להלן דרכים ליישום טרנספורמציה כזו).
#בוחרים <math>k</math> מספרים אקראיים <math>r_i{\in}_R\{0,1\}</math> ועבור כל מספר אקראי <math>r_i</math> כאשר <math>i=1,...,k</math> מבצעים:
##<math>c_{i_1}=E_i(r_i,H_i(M,r_1,...,r_k))</math>
##<math>c_{i_2}=G_i(r_i)\oplus m_i</math> (התוצאה היא <math>c_i=(c_{i_1},c_{i_2})</math>).
#תוצאת הצופן היא <math>C=(c_1,...,c_k)</math>
#לפענוח מחשבים <math>E^{-1}_i(c_{i_1})</math> ואת <math>m_i=G(r_i)\oplus c_{i_2}</math> עבור <math>i=1,...,k</math>.
#מאחדים בחזרה את התוצאות <math>m_1,...,m_k</math> באמצעות טרנספורמציית AONT ההפוכה לקבלת <math>M</math>.

===טרנספורמציית הכול או לא כלום===
טרנספורמציית AONT (הכול או לא כלום) ניתנת לביצוע בכמה דרכים. דרך אחת של רונלד ריבסט כדלהלן: עבור <math>s</math> בלוקים <math>m_1,...,m_s</math> בוחרים מפתח אקראי כלשהו <math>K</math>, תחילה מחשבים את <math>m_i'=m_i\oplus E_K(i)</math> עבור <math>1\le i\le s</math>, מחשבים את <math>h_i=E_{K_0}(m_i'\oplus i)</math> עבור <math>1\le i\le s</math> ואז <math>m_{s+1}'=K\oplus h_1\oplus h_2\oplus\cdots\oplus h_s</math>. הפונקציה <math>E</math> היא אלגוריתם הצפנה כלשהו, המפתחות <math>K,K_0</math> אינם סודיים כשהמפתח <math>K_0</math> קבוע.

לשחזור מחשבים את <math>K=m_{s+1}'\oplus h_1\oplus h_2\oplus\cdots\oplus h_s</math> ואז <math>m_i=m_i'\oplus E_K(i)</math>.

===מבנה בטוח של סכמת הצפנה מרובה עוקבת===
#מייצרים זוגות מפתחות הצפנה ופענוח א-סימטריים <math>(p_i,s_i)</math> כאשר <math>i=1,...,k</math> מייצג את מספר ההצפנות. כל זוג מתאים להצפנה אחת בהתאמה.
#מציבים <math>C_0=M</math>
#עבור כל מרכיב <math>i</math> מייצרים סיבית רנדומלית <math>r_i</math> ומחשבים את:
##<math>c_{i1}=E_i(r_i, H_i(c_{i-1},r_1,...,r_k))</math>
##<math>c_{i2}=G_1(r_i) \oplus c_0</math> (תוצאת כל שלב היא <math>c_i=(c_{i1},cx_{i2})</math>).
#פלט הצופן הוא <math>C=c_1,...,c_k</math>.
#לפענוח תחילה מחשבים <math>c_k=C</math>
#עבור כל הרכיבים <math>i=1,...,k</math> מחשבים <math>c_{k-1}=E^{-1}_i(c_k)</math>.
#פלט הפענוח יהיה <math>M=c_0</math> בתנאי ש-<math>c_{i1}=E(r_i,H_i(M,r_1,...,r_k))</math> עבור כל <math>i=1,...,k</math>.

==לקריאה נוספת==

==הערות שוליים==

קטגוריה:קריפטוגרפיה