הצפנה מרובה

הצפנה מרובה (Multiple encryption) היא דרך להצפין מידע פעמים מרובות באמצעות מפתחות הצפנה שונים. קַסְקָדָת (Cascade) הצפנה היא הצפנה מרובה באמצעות אלגוריתמים שונים (ומפתחות שונים). הבחנה זו לא תמיד נעשית, לרוב מתייחסים להצפנה מרובה באופן כללי כאל קסקדה. מקובל שהצפנה מרובה עם מפתח זהה לא רק שאינה מניבה ביטחון רב יותר אלא אף מחלישה אותו ברוב המקרים, משום שההצפנה השנייה עלולה לבטל את הראשונה חלקית או באופן מלא. במיוחד בצפנים בהם ההצפנה והפענוח נעשים בפונקציה זהה. בפנקס חד-פעמי למשל, הצפנה חוזרת עם אותו מפתח שקולה לפענוח וכן בכל צופן זרם. יתרה מזו, סיבוכיות ההתקפה כנגד המערכת אינה עולה באופן ניכר, כיוון שהתוקף יודע שנעשה שימוש במפתח זהה (ההנחה היא תמיד שמספר ההצפנות, האלגוריתמים ששימשו להצפנה וכן סדר ההצפנה, ידועים לתוקף). המסקנה היא שמפתחות ההצפנה צריכים להיבחר באופן שיהיו בלתי תלויים סטטיסטית. כלומר לא תהיה דרך קלה להסיק מהו מפתח אחד בהינתן השני. אחת הסיבות להצפנה מרובה היא הגברת ביטחון ללא צורך בפיתוח אלגוריתם חדש. הטכניקה הזו נוצלה ב-DES משולש בשל העובדה שמפתח ההצפנה של DES קצר מאוד (רק 56 סיביות). אולם יש להזהר שהצירוף אינו גורם לאפקט הפוך מהמצופה. יש לוודא שביטחון הצופן אכן השתפר וכי לא נוספו חולשות. יש לציין כי הצפנים הסימטריים המודרניים כמו AES, מציעים ביטחון רב עם מפתח 256 סיביות לכן מהיבט של ביטחון, רק במקרים קיצוניים השקעה בהצפנה מרובה כדאית. בהגדרה כללית כאשר מציינים 'צפנים' בלשון רבים, מתכוונים בעיקר להצפנה סימטרית או א-סימטרית חוזרת עם מפתחות הצפנה שונים, לא בהכרח עם אלגוריתמים שונים (ראה בהמשך לגבי אלגוריתמים שונים). ישנן כמה תצורות עיקריות של הצפנה מרובה: הצפנה עוקבת: בשיטה זו שנקראת גם קסקדה, פלט הצופן הראשון מהווה קלט לצופן השני והשני לשלישי וכן הלאה. כאמור חובה על המפתחות להיות בלתי תלויים סטיסטית זה בזה. המודל הזה אומץ על ידי הרשת החברתית האנונימית Tor, קיצור של The Onion Routing. האנלוגיה ברורה, תהליך הפענוח דומה לקילוף בצל, כל שכבה מייצגת הצפנה אחת. במקרה של TOR, המטרה אינה הגברת הביטחון אלא הסתרת זהות המשתמש על ידי הצפנת חבילת המידע ומקורה מספר פעמים באמצעות מפתחות הפומביים של השרתים האנונימיים. תהליך הניתוב של חבילה עובר דרכם, כאשר כל אחד מהם מסיר שכבת הצפנה אחת בהתאם למפתח הפרטי שברשותו. הצפנה מרוכבת (product cipher): הוצעה לראשונה על ידי שאנון והיא בעצם הבסיס התאורטי לצפני בלוקים מודרניים. הרעיון הוא שילוב לא ליניארי כלשהו של מספר טרנספורמציות לחיזוק הביטחון. בשיטה זו אין מגבלה שמפתחות ההצפנה בין כל טרנספורמציה יהיו בלתי תלויים. מעשית המפתחות שבשימוש כל טרנספורמציה, הן פונקציה, לפעמים פשוטה של מפתח אחר, בדרך כלל קטן. הצפנה מקבילית: היא הצפנה של טקסט-המקור עם כל מפתח בנפרד ושילוב ביניהם באופן שיבטיח כי פענוח יצליח רק אם מפענחים את כל החלקים, כמו עם טרנספורמציית הכול או לא כלום, אפשר להשיג זאת עם חיבור ב-XOR כמו בפנקס חד-פעמי או על ידי סכמת חלוקת סוד. הצפנה מרובה היברידית: אם משלבים בין השיטות השונות מתקבלת מערכת היברידית. דרך אחת לבנות מודל כזה היא באמצעות עץ הצפנות. שורש העץ הוא השכבה הראשונה של ההצפנה, הוספת שכבה מקבילית מרחיבה את העץ לרוחב, כלומר מוסיפה צמתים. ואילו הוספת שכבה רציפה או עוקבת מעמיקה את העץ בפקטור שהוא פונקציה של מספר הצופנים המרכיבים את סדרה. תוצאת הצפנת העץ היא פלט כל הצמתים שאין להם בנים. התצורה הפשוטה ליישום הצפנה כפולה עוקבת היא להצפין את בלוק המידע פעמיים בזה אחר זה, עם מפתחות הצפנה שונים, כאשר פלט הצופן הראשון מהווה קלט לצופן השני, כדלהלן: להצפנה מבצעים: C = E K 2 ( E K 1 ( P ) ) {\displaystyle C=E_{K_{2}}(E_{K_{1}}(P))} לפענוח מבצעים: P = E K 1 − 1 ( E K 2 − 1 ( C ) ) {\displaystyle P=E_{K_{1}}^{-1}(E_{K_{2}}^{-1}(C))} ערך מורחב – תקיפת היפגשות באמצע על פניו נראה כאילו הושג ביטחון כפול, אם אורך כל מפתח הוא n {\displaystyle n} סיביות, התקפת כוח גס על הצופן, כלומר ניסיון לנחש את המפתחות K 1 , K 2 {\displaystyle K_{1},K_{2}} על ידי ניסוי כל המפתחות האפשריים, אמורה להיות מסדר גודל של 2 2 n {\displaystyle 2^{2n}} . אולם תקיפת היפגשות באמצע שהועלתה לראשונה ב-1977 על ידי דיפי והלמן וכן מרקל מראה שניתן לשבור וריאציה זו ב- 2 n + 1 {\displaystyle 2^{n+1}} ניסיונות הצפנה במחיר של סיבוכיות מקום בסדר גודל של 2 n {\displaystyle 2^{n}} , בשל הזהות הבאה: M = E K 1 ( P ) = E K 2 − 1 ( C ) {\displaystyle M=E_{K_{1}}(P)=E_{K_{2}}^{-1}(C)} , כלומר אם מצפינים את P {\displaystyle P} בכל 2 n {\displaystyle 2^{n}} האפשרויות של K 1 {\displaystyle K_{1}} ומפענחים את C {\displaystyle C} בכל 2 n {\displaystyle 2^{n}} האפשרויות של K 2 {\displaystyle K_{2}} אזי רק הזוגות K 1 , K 2 {\displaystyle K_{1},K_{2}} שמניבים זהות אמצעית M {\displaystyle M} זהה, הם פתרונות אפשריים. לאור זאת אפשר לבצע התקפת גלוי-ידוע כדלהלן: תחילה משיג התוקף טקסט-מוצפן כלשהו C {\displaystyle C} אשר הוצפן על ידי זוג המפתחות K 1 , K 2 {\displaystyle K_{1},K_{2}} (שאותם התוקף מנסה לחשוף) ואשר המקור שלו P {\displaystyle P} ידוע (סוג ההתקפה מניח שאפשר להשיג טקסטים-מוצפנים שמקורם ידוע). לאחר מכן בונה טבלה שבה שומר את כל ההצפנות האפשריות של P {\displaystyle P} , דהיינו E K ( P ) {\displaystyle E_{K}(P)} כאשר K {\displaystyle K} מייצג את כל 2 n {\displaystyle 2^{n}} המפתחות האפשריים. גודל הטבלה בסיביות יהיה 2 n ⋅ m {\displaystyle 2^{n}\cdot m} כאשר m {\displaystyle m} מייצג את גודל הבלוק של הצופן בסיביות (זו אמנם טבלה ענקית, ואף בלתי מעשית אם המפתח גדול, בכל אופן קיימות טכניקות לצמצום דרישות הזיכרון, ראה להלן). לאחר מכן מנסה את E K − 1 ( C ) {\displaystyle E_{K}^{-1}(C)} עבור כל מפתח אפשרי K {\displaystyle K} ובודק אם התוצאה כבר קיימת בטבלה. אם נמצאה התאמה, בסבירות גבוהה בידיו כעת K 1 ′ {\displaystyle K_{1}'} ו- K 2 ′ {\displaystyle K_{2}'} בהם הוצפן P {\displaystyle P} . תיתכן תוצאה שגויה (false positive) כלומר אף על פי שהטקסט שהתקבל נכון המפתח אינו נכון דהיינו K 1 ′ ≠ K 1 {\displaystyle K_{1}'\neq K_{1}} , ההסתברות שהתגלו המפתחות הנכונים היא 2 2 n − 2 m {\displaystyle 2^{2n-2m}} , במקרה של DES מדובר על הסתברות של 2 − 16 {\displaystyle 2^{-16}} . כדי להיות בטוח הוא יכול לנסות את התהליך עם זוג ( P ′ , C ′ ) {\displaystyle (P',C')} אחר, להצפין את P ′ {\displaystyle P'} עם K 1 ′ {\displaystyle K_{1}'} ו- K 2 ′ {\displaystyle K_{2}'} ולבדוק אם התקבל C ′ {\displaystyle C'} . הכנת הטבלה והחיפוש בה אינם עולים על סיבוכיות 2 n {\displaystyle 2^{n}} כל אחד, כלומר סיבוכיות ההתקפה היא 2 ⋅ 2 n = 2 n + 1 {\displaystyle 2\cdot 2^{n}=2^{n+1}} . ייתכן שצריך להביא בחשבון גם את הזמן הדרוש למיון, שזה בערך log ( 2 n ) {\displaystyle {\mbox{log}}(2^{n})} . בכל אופן הושג שיפור קל בלבד. אם אלגוריתם ההצפנה מקיים תכונות של חבורה, אזי תמיד קיים מפתח שלישי K 3 {\displaystyle K_{3}} המקיים C = E K 2 ( E K 1 ) ( P ) ) = E K 3 ( P ) {\displaystyle C=E_{K_{2}}(E_{K_{1}})(P))=E_{K_{3}}(P)} . הצפנים הקלאסיים כולל צופן ויז'נר מקיימים תכונה זו. במקרה כזה ביטחון ההצפנה לא השתפר כלל, כי מציאת המפתח השלישי בכוח גס היא בסיבוכיות 2 n {\displaystyle 2^{n}} , כלומר כאילו התבצעה הצפנה אחת. מצד שני הוכח (במאמר שפורסם על ידי קמפבל וויינר לגבי DES אך ניתן להשליכו גם לאחרים) שבאופן כללי צופן בלוקים סימטרי מודרני שעושה שימוש בטבלת תמורה, בדרך כלל אינו מהווה חבורה ואינו סגור מבחינה פונקציונלית. לולא עובדה זו, התקפת 'נפגש באמצע' של הלמן ומרקל הייתה שוברת כל צופן בלוקים סימטרי בסיבוכיות של 2 n / 2 {\displaystyle 2^{n/2}} בקירוב שזה כחצי מהזמן הדרוש לכוח גס, במחיר של סיבוכיות מקום נוספת. הדברים נכונים בדרך כלל[דרוש מקור] גם לגבי אלגוריתמים א-סימטריים שמסתמכים על בעיות חישוביות מתורת המספרים. תצורה יותר בטוחה של הצפנה-כפולה העמידה בפני ההתקפה האמורה, הומצאה על ידי דויס ופרייס. זוהי וריאציה של מצב הפעלה CBC והיא מעין הצפנה מקבילית. במקרה שמצפינים מספר בלוקים של מידע ברצף, כל בלוק טקסט-מקור מחובר ב-XOR עם תוצאת הצפנה קודמת עם מפתח אחר, לפני שהוא מוצפן. כדלהלן: C i = E K 1 ( P i ⊕ E K 2 ( C i − 1 ) ) {\displaystyle C_{i}=E_{K_{1}}(P_{i}\oplus E_{K_{2}}(C_{i-1}))} P i = E K 1 − 1 ( C i ) ⊕ E K 2 − 1 ( C i − 1 ) {\displaystyle P_{i}=E_{K_{1}}^{-1}(C_{i})\oplus E_{K_{2}}^{-1}(C_{i-1})} בהצפנה משולשת מצפינים את המידע שלוש פעמים ברציפות עם מפתחות הצפנה שונים כדלהלן: C = E K 1 ( E K 2 ( E K 3 ( P ) ) ) {\displaystyle C=E_{K_{1}}(E_{K_{2}}(E_{K_{3}}(P)))} . או בקיצור EEE כלומר שלוש הצפנות עוקבות. למעשה DES משולש שהוצע על ידי וולטר טאצ'מן שהיה ממפתחי DES, הוא מעין פשרה לשמירה על תאימות עם המערכות הקיימות תוך הגברת הביטחון. בשיטה זו משתמשים רק בשני מפתחות. מצפינים עם הראשון, מפענחים עם השני וחוזרים ומצפינים עם הראשון, כדלהלן: C = E K 1 ( E K 2 − 1 ( E K 1 ( P ) ) ) {\displaystyle C=E_{K_{1}}(E_{K_{2}}^{-1}(E_{K_{1}}(P)))} P = E K 1 − 1 ( E K 2 ( E K 1 − 1 ( C ) ) ) {\displaystyle P=E_{K_{1}}^{-1}(E_{K_{2}}(E_{K_{1}}^{-1}(C)))} הסימון המקוצר של השיטה הוא EDE, כלומר הצפנה/פענוח/הצפנה והיא עמידה קצת יותר כנגד התקפת נפגש באמצע של מרקל והלמן. הבחירה במבנה הייחודי הזה לא מניבה ביטחון משולש (כיוון ששניים מהמפתחות זהים). אך המבנה אומץ על ידי IBM בעיקר בשל שיקולי תאימות וכן אומץ על ידי תקן איזו ISO 8732. הסיבה היא שבדרך זו אפשר להשתמש באותה חומרה לביצוע הצפנה בשיטה הרגילה או המשולשת. כיוון שאם קובעים K 1 = K 2 {\displaystyle K_{1}=K_{2}} מתקבלת הצפנה יחידה, אילו היו בוחרים בשלוש הצפנות עוקבות (EEE) התוצאה לא הייתה כזו. אך יש לזכור שהצפנת DES משולש איטית פי שלושה בהשוואה להצפנה בודדת עם מפתח אחד ואף פי כמה יותר בהשוואה לאלגוריתמים מודרניים כמו AES. מרקל והלמן פיתחו התקפת גלוי-נבחר עם 2 n {\displaystyle 2^{n}} ניסיונות בקרוב ובאותה סיבוכיות מקום כנגד הצפנה משולשת EDE, אולם הדרישה של 2 n {\displaystyle 2^{n}} מקורות ידועים בסגנון התקפת גלוי-ידוע לא מעשית. התקפת נפגש באמצע שוכללה על ידי רבים, ביניהם הגרסה של פול ואן אורשוט ומיכאל ויינר, שעושה שימוש בטכניקה של חיפוש התנגשויות מקבילי לצמצום משמעותי של צריכת הזיכרון ובעקרון פרדוקס יום הולדת. בהתקפה זו במחיר של p {\displaystyle p} טקסטים ידועים כאשר p < n {\displaystyle p<n} אפשר לפרוץ את מבנה EDE בתוך 2 n + m / p {\displaystyle 2^{n+m}/p} , במקרה של DES פירושו 2 120 / p {\displaystyle 2^{120}/p} . אם p > 256 {\displaystyle p>256} התקפה זו יעילה מכוח גס ובסיבוכיות מקום בסדר גודל של 2 p {\displaystyle 2^{p}} שהיא נמוכה בהרבה מ- n {\displaystyle n} . המשמעות היא שבגרסת EDE מתקבל ביטחון של שתי הצפנות בקירוב במחיר של שלוש. קיימים מספר דרכים ליישם סכמת הצפנה משולשת, במצבי הפעלה שונים. למשל, במצב CBC-פנימי מצפינים בלוק אחד עם וקטור אתחול (IV) אחד, הפלט משמש קלט לשלב הבא בו מפענחים עם וקטור אתחול שני ושוב הפלט משמש כקלט להצפנה האחרונה עם וקטור אתחול שלישי וחוזר חלילה. בגרסה אחרת משתמשים עם וקטור אתחול אחד במצב שנקרא CBC-חיצוני. כלומר משתמשים עם וקטור אתחול אחד בלבד ומצפינים את כל הבלוקים בשיטה המשולשת, שלוש פעמים רצוף. ההבדלים באים לידי ביטוי ביישום בחומרה, כאשר הראשון יעיל יותר. אם מצפינים עם שלושה מפתחות שונים, התקפת כוח גס הטובה ביותר היא מסדר גודל 2 2 n {\displaystyle 2^{2n}} בקירוב ובסיבוכיות מקום של 2 n {\displaystyle 2^{n}} , שזה מה שמצפים באופן נאיבי מהצפנה כפולה. אך יש לזכור שאמנם התקפת נפגש באמצע אינה יעילה במקרה זה, קיימות התקפות אחרות טובות יותר, כמו התקפה דיפרנציאלית של שמיר וביהם. ביהם הראה שנגד התקפה זו הווריאציות המנויות לא יותר בטוחות מהצפנה בודדת. כנגד איום התקפה דיפרנציאלית פותחו וריאציות אחרות של הצפנה משולשת המנצלות טכניקה של הגדלה מלאכותית של גודל הבלוק על ידי ריפוד המידע במחרוזת אקראית כלשהי, הריפוד לא רק משבש את הקשר בין ההצפנות אלא גם גורם לחפיפה של בלוקים כמו לבנים. או לחלופין אפשר לבצע הלבנה ב-XOR עם מחרוזת פסאודו-אקראית בטוחה ושילוב פרמוטציה ללא מפתח כלשהי. גרסה אחת המשלבת את הרעיונות המנויים נחשבת כעמידה כנגד התקפה דיפרנציאלית. היא כוללת (1) מעבר הלבנה R {\displaystyle R} עם תוצאת מחולל אקראי קריפטוגרפי להסתרת טקסט-המקור. (2) שימוש כפול בפרמוטציה T {\displaystyle T} ללא מפתח. ו(3) הצפנה אמצעית מרובה, המסומנת n E {\displaystyle nE} - דהיינו הצפנה מחזורית באמצעות אחד מתוך סדרה של הצפנות. הסכמה נראית כך: C = E K 3 ( R ( T ( n E K 2 ( T ( E K 1 ( P ) ) ) ) ) {\displaystyle C=E_{K_{3}}(R(T(nE_{K_{2}}(T(E_{K_{1}}(P)))))} אמנם לא ידוע על התקפה מעשית כנגד המבנה הזה. על כל פנים, מומחי הצפנה ממליצים להזהר בשימוש בהצפנה מרובה. ברוב המקרים המחיר עולה על התועלת. ובנוסף יש הטוענים שככל שההצפנה מורכבת ומסובכת יותר 'שטח הפנים של ההצפנה גדל' דהיינו מספקים יותר 'חומר' להתקפה וכן מגבירים את הסיכויים לטעויות וחולשות נסתרות. המונח קסקדה או אשד מתייחס להצפנה עם מספר אלגוריתמים שונים ועם מפתחות הצפנה שונים. הרעיון הגיוני במקרים מסוימים כמו בסיטואציה שבה שני גורמים או ישויות ברשת מעוניינים לשתף ביניהם מידע סודי וכל אחד מהם סומך רק על אלגוריתם ההצפנה שבאמתחתו ואינו סומך על האלגוריתם השני, כי הוא חושש שתמצא דרך קלה לשבירתו בעתיד הקרוב. כדי שהם יוכלו להתקשר בבטחה, טבעי הדבר לחפש דרך שבה יוכלו לשלב את ביטחון שניהם, כך שאם תתגלה התקפה מעשית טובה כנגד אחד מהם, ביטחון המידע יישען על האלגוריתם השני ולהפך. בהנחה שלא סביר שימצאו בו זמנית דרכים קלות לשבירת כל האלגוריתמים המשתתפים בקסקדה. במאמר משנת 1993 מצביע יואלי מאורר על חשיבות הצופן הראשון ברצף. למעט פנקס חד-פעמי כל צופן ניתן לשבירה, עובדה זו משליכה כי בהכרח קיימים מאפיינים מסוימים בטקסט המוצפן שייחודיים להצפנה ספציפית. בהצפנה מרובה, מאפיינים אילו עלולים לזלוג מהטקסט המוצפן הראשון לבאים אחריו ובכך להחלישם. או אם קיימת אינטראקציה קלה בין האלגוריתמים כגון במקרים בהם הצופן הראשון מוסיף מחרוזת טקסט קבועה כלשהי לתוצאת ההצפנה. פעולה נפוצה ביישומים מעשיים ונקראת מספר קסם, אזי הצופן השני יהיה פגיע להתקפת גלוי-ידוע. כעת אם האלגוריתם הראשון חלש, משמעות הדבר שנוסף בידי התוקף מידע שמאפשר לפרוץ את הבא אחריו וכן הלאה. כלומר הוכח שהתוצאה הכוללת לא תהיה חזקה יותר מהאלגוריתם הראשון. המסקנה היא שהטענה שהצפנה מרובה תהיה חזקה לפחות כמרכיב החזק ברצף עשויה להיות שגויה. מאורר הוכיח שקסקדה של אלגוריתמים עם מפתחות שונים ובלתי תלויים זה בזה סטטיסטית, חזקה לפחות כמו האלגוריתם הראשון - בתנאי שהאלגוריתמים המשתתפים בקסקדה קומוטטיביים ביחס זה לזה (כמו בצופני זרם אחדים). כמו כן הוכיח שאפשר להגיע למבנה בטוח של סכמת הצפנה מרובה שבה הביטחון הכולל הוא לפחות כמו האלגוריתם החזק מביניהם. מכאן שבמצב הפעלה OFB שמדמה תכונות צופן זרם אפשר לבנות הצפנה מרובה ממספר אלגוריתמים באופן שיניב ביטחון לפחות כמו החזק מביניהם. למשל על ידי שילוב פנקס חד-פעמי ב-XOR. ביטחון מערכת הצפנה מרובה תלוי גם בהנחה שכל מפתחות ההצפנה נותרים סודיים. ייתכן שצריך מודל מחמיר יותר, כי צריך לענות על השאלה האם המערכת נותרת חזקה לפחות כהצפנה יחידה, במקרה שאחד המפתחות נחשף. הגדרה זו של התקפת מוצפן נבחר מסומנת ME-CCA, בה נוסף מרכיב שנקרא 'אורקל חשיפת מפתח'. דהיינו לפי המודל יוצאים מהנחה שהתוקף מוסגל לפנות לאורקל היפותטי ולבקש חשיפת מפתח כלשהו (אבל לא את כולם) והשאלה היא כמה יקל בידו הדבר לפרוץ את המערכת כולה. פרויקט NESSIE פרסם בשנת 2003 המלצות לאלגוריתמים אסימטריים ובין היתר המליץ להגברת הביטחון, להשתמש בהצפנה מרובה עם אלגוריתמים שונים המבוססים על בעיות שונות מתורת המספרים. למשל הצפנה עם RSA וגרסה כלשהי של דיפי-הלמן כמו ECC. במאמר משנת 1984 הוכיחו שמעון אבן ועודד גולדרייך שחוזק קסקדה עוקבת (דהיינו פלט הצפנה א' משמש קלט להצפנה ב' וכו') כנגד התקפת גלוי-ידוע שווה לסכום גודל המפתחות, עבור l {\displaystyle l} הצפנות כל אחד עם מפתח בגודל k {\displaystyle k} החוזק הכולל יהיה 2 l k {\displaystyle 2^{lk}} . הם מסכמים כי קסקדה של צופנים אקראיים אינה מהווה צופן אקראי, למרות זאת הקושי שבשבירת סכמה כזו אינו נופל מהקושי שבשבירת אחת מההצפנות. כמו כן הבעיה של הצבת חסם תחתון לשבירת קסקדה ארוכה היא בעיה קשה, קיומו של חסם כזה מצביע על כך ש- P ≠ NP {\displaystyle {\text{P}}\neq {\text{NP}}} . קיימות כמה דרכים בטוחות לשילוב בין אלגוריתמים (גם סימטריים וגם א-סימטריים), תוך התחשבות באיומים המתוארים. הרעיון הוא לערבב את המסר לפני ההצפנה עם פנקס חד-פעמי אחד או יותר באמצעות XOR ולהצפין גם את הפנקסים החד-פעמיים שהופכים להיות חלק מהטקסט המוצפן. המחיר הוא שהטקסט המוצפן 'מתנפח' בפקטור של שנים או יותר תלוי בשיטה. כמו כן ההנחה היא שמחולל המספרים האקראיים בטוח לשימוש מבחינה קריפטוגרפית, אפשר להרחיב את השיטה למספר גדול יותר של אלגוריתמים. להלן סכמת הצפנה מרובה מקבילית עם פנקס חד-פעמי: מכינים פנקס חד-פעמי R {\displaystyle R} באורך המסר P {\displaystyle P} המיועד להצפנה. מכינים שני מפתחות הצפנה K 1 , K 2 {\displaystyle K_{1},K_{2}} . מצפינים את R {\displaystyle R} באמצעות האלגוריתם הראשון C 1 = E K 1 ( R ) {\displaystyle C_{1}=E_{K_{1}}(R)} . מצפינים את R ⊕ P {\displaystyle R\oplus P} עם האלגוריתם השני C 2 = E K 2 ( R ⊕ P ) {\displaystyle C_{2}=E_{K_{2}}(R\oplus P)} . הטקסט המוצפן הוא שתי התוצאות C 1 , C 2 {\displaystyle C_{1},C_{2}} . לפענוח מחשבים P = E K 2 − 1 ( C 2 ) ⊕ E K 1 − 1 ( C 1 ) {\displaystyle P=E_{K_{2}}^{-1}(C_{2})\oplus E_{K_{1}}^{-1}(C_{1})} . גרסה מקבילית נוספת של אסמוט ובלקלי משנת 1981 שניתן להרחיבה גם להצפנות נוספות וכן לאלגוריתמים שונים (גם א-סימטריים) עושה שימוש בשני פנקסים חד-פעמיים והיא כדלהלן (ראה תרשים): מייצרים זוג פנקסים חד פעמיים R 1 , R 2 {\displaystyle R_{1},R_{2}} באורך המסר P {\displaystyle P} המיועד להצפנה. מכינים שני מפתחות הצפנה K 1 , K 2 {\displaystyle K_{1},K_{2}} מצפינים את המספר האקראי הראשון: C 1 = E K 1 ( R 1 ) {\displaystyle C_{1}=E_{K_{1}}(R_{1})} מצפינים את המספר האקראי השני: C 2 = E K 2 ( R 2 ) {\displaystyle C_{2}=E_{K_{2}}(R_{2})} מערבבים את המסר ב-XOR אם שני המספרים האקראיים: C 3 = P ⊕ R 1 ⊕ R 2 {\displaystyle C_{3}=P\oplus R_{1}\oplus R_{2}} . תוצאת ההצפנה היא C 1 , C 2 , C 3 {\displaystyle C_{1},C_{2},C_{3}} . לפענוח מחשבים בסדר הפוך: P = C 3 ⊕ E K 1 − 1 ( C 1 ) ⊕ E K 2 − 1 ( C 2 ) {\displaystyle P=C_{3}\oplus E_{K_{1}}^{-1}(C_{1})\oplus E_{K_{2}}^{-1}(C_{2})} שים לב להתרחבות הצופן פי שלושה במקרה של הצפנה כפולה. שיטה נוספת להצפנה מרובה שהוכחה כבטוחה כנגד התקפת מוצפן-נבחר לאלגוריתמים א-סימטריים בשילוב סכמת חלוקת סוד. בהנחה שהאלגוריתמים המשתתפים עמידים בפני התקפת גלוי-נבחר (רוב האלגוריתמים המעשיים עונים להגדרה זו), היא כדלהלן, כאשר G {\displaystyle G} ו- H {\displaystyle H} הן פונקציות פסאודו-ראנדומליות בטוחות (בקיצור PRF): מייצרים k {\displaystyle k} זוגות מפתחות הצפנה פומביים/פרטיים p 1 , . . . , p k {\displaystyle p_{1},...,p_{k}} וכן s 1 , . . . , s k {\displaystyle s_{1},...,s_{k}} . כל זוג s i , p i {\displaystyle s_{i},p_{i}} מתאים לאלגוריתמים E i , E i − 1 {\displaystyle E_{i},E_{i}^{-1}} בהתאמה. להצפנה מחלקים את המסר m {\displaystyle m} ל- k {\displaystyle k} חלקים m 1 , . . . , m k {\displaystyle m_{1},...,m_{k}} באמצעות סכמת חלוקה המבטיחה All Or Nothing בקיצור AONT. (להלן דרכים ליישום טרנספורמציה כזו). בוחרים k {\displaystyle k} מספרים אקראיים r i ∈ R { 0 , 1 } {\displaystyle r_{i}{\in }_{R}\{0,1\}} ועבור כל מספר אקראי r i {\displaystyle r_{i}} כאשר i = 1 , . . . , k {\displaystyle i=1,...,k} מבצעים: c i 1 = E i ( r i , H i ( M , r 1 , . . . , r k ) ) {\displaystyle c_{i_{1}}=E_{i}(r_{i},H_{i}(M,r_{1},...,r_{k}))} c i 2 = G i ( r i ) ⊕ m i {\displaystyle c_{i_{2}}=G_{i}(r_{i})\oplus m_{i}} (התוצאה היא c i = ( c i 1 , c i 2 ) {\displaystyle c_{i}=(c_{i_{1}},c_{i_{2}})} ). תוצאת הצופן היא C = ( c 1 , . . . , c k ) {\displaystyle C=(c_{1},...,c_{k})} לפענוח מחשבים E i − 1 ( c i 1 ) {\displaystyle E_{i}^{-1}(c_{i_{1}})} ואת m i = G ( r i ) ⊕ c i 2 {\displaystyle m_{i}=G(r_{i})\oplus c_{i_{2}}} עבור i = 1 , . . . , k {\displaystyle i=1,...,k} . מאחדים בחזרה את התוצאות m 1 , . . . , m k {\displaystyle m_{1},...,m_{k}} באמצעות טרנספורמציית AONT ההפוכה לקבלת M {\displaystyle M} . טרנספורמציית AONT (הכול או לא כלום) ניתנת לביצוע בכמה דרכים. דרך אחת של רונלד ריבסט כדלהלן: עבור s {\displaystyle s} בלוקים m 1 , . . . , m s {\displaystyle m_{1},...,m_{s}} בוחרים מפתח אקראי כלשהו K {\displaystyle K} , תחילה מחשבים את m i ′ = m i ⊕ E K ( i ) {\displaystyle m_{i}'=m_{i}\oplus E_{K}(i)} עבור 1 ≤ i ≤ s {\displaystyle 1\leq i\leq s} , מחשבים את h i = E K 0 ( m i ′ ⊕ i ) {\displaystyle h_{i}=E_{K_{0}}(m_{i}'\oplus i)} עבור 1 ≤ i ≤ s {\displaystyle 1\leq i\leq s} ואז m s + 1 ′ = K ⊕ h 1 ⊕ h 2 ⊕ ⋯ ⊕ h s {\displaystyle m_{s+1}'=K\oplus h_{1}\oplus h_{2}\oplus \cdots \oplus h_{s}} . הפונקציה E {\displaystyle E} היא אלגוריתם הצפנה כלשהו, המפתחות K , K 0 {\displaystyle K,K_{0}} אינם סודיים כשהמפתח K 0 {\displaystyle K_{0}} קבוע. לשחזור מחשבים את K = m s + 1 ′ ⊕ h 1 ⊕ h 2 ⊕ ⋯ ⊕ h s {\displaystyle K=m_{s+1}'\oplus h_{1}\oplus h_{2}\oplus \cdots \oplus h_{s}} ואז m i = m i ′ ⊕ E K ( i ) {\displaystyle m_{i}=m_{i}'\oplus E_{K}(i)} . מייצרים זוגות מפתחות הצפנה ופענוח א-סימטריים ( p i , s i ) {\displaystyle (p_{i},s_{i})} כאשר i = 1 , . . . , k {\displaystyle i=1,...,k} מייצג את מספר ההצפנות. כל זוג מתאים להצפנה אחת בהתאמה. מציבים C 0 = M {\displaystyle C_{0}=M} עבור כל מרכיב i {\displaystyle i} מייצרים סיבית רנדומלית r i {\displaystyle r_{i}} ומחשבים את: c i 1 = E i ( r i , H i ( c i − 1 , r 1 , . . . , r k ) ) {\displaystyle c_{i1}=E_{i}(r_{i},H_{i}(c_{i-1},r_{1},...,r_{k}))} c i 2 = G 1 ( r i ) ⊕ c 0 {\displaystyle c_{i2}=G_{1}(r_{i})\oplus c_{0}} (תוצאת כל שלב היא c i = ( c i 1 , c x i 2 ) {\displaystyle c_{i}=(c_{i1},cx_{i2})} ). פלט הצופן הוא C = c 1 , . . . , c k {\displaystyle C=c_{1},...,c_{k}} . לפענוח תחילה מחשבים c k = C {\displaystyle c_{k}=C} עבור כל הרכיבים i = 1 , . . . , k {\displaystyle i=1,...,k} מחשבים c k − 1 = E i − 1 ( c k ) {\displaystyle c_{k-1}=E_{i}^{-1}(c_{k})} . פלט הפענוח יהיה M = c 0 {\displaystyle M=c_{0}} בתנאי ש- c i 1 = E ( r i , H i ( M , r 1 , . . . , r k ) ) {\displaystyle c_{i1}=E(r_{i},H_{i}(M,r_{1},...,r_{k}))} עבור כל i = 1 , . . . , k {\displaystyle i=1,...,k} . S. Even and O. Goldreich, On the power of cascade ciphers, ACM Transactions on Computer Systems, vol. 3, pp. 108–116, 1985. M. Maurer and J. L. Massey, Cascade ciphers: The importance of being first, Journal of Cryptology, vol. 6, no. 1, pp. 55–61, 1993. Applied Cryptography, Second Edition: Protocols, Algorithms, and Source Code in C, §15, by Bruce Schneier. Wiley Computer Publishing, John Wiley & Sons, Inc. P.C. van Oorschot and M.J. Wiener, “A Known-Plaintext Attack on Two-Key Triple Encryption”, Lecture Notes in Computer Science 473: Advances in Cryptology - Eurocrypt’90 Proceedings, Springer-Verlag, pp. 318-325 Parallel Collision Search with Cryptanalytic Applications, Paul C. van Oorschot and Michael J. Wiener, 1996 http://www.cosic.esat.kuleuven.be/nessie/deliverables/decision-final.pdf