צופן סימטרי

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
סכימת הצפנה סימטרית; אליס שולחת את m אותו הצפינה עם e לבוב. אפשר לראות שכדי שבוב יצליח לפענח את c עליו לקבל את e באמצעותו הוא יכול לחשב את d לפענח את הצופן ולחלץ את m. 'איב' המצותתת מסוגלת לראות את תעבורת הרשת בערוץ הפתוח בו מועבר c אך אינה יכולה לראות את תעבורת הערוץ הבטוח בו מועבר e.

הצפנה סימטרית (symmetric encryption) היא סכמת הצפנה שבה משתמשים במפתח הצפנה סודי יחיד הן להצפנה והן לפענוח. בניסוח פורמלי, אם נתונה מערכת הכוללת שתי טרנספורמציות, טרנספורמציית הצפנה \{E_e:e\in\mathcal{K}\} וטרנספורמציית פענוח \{D_d:d\in\mathcal{K}\}, כאשר \mathcal{K} הוא מרחב המפתח, e הוא מפתח הצפנה שנבחר באקראי מתוך מרחב המפתח ו-d הוא מפתח פענוח מתאים. מערכת זו תקרא סימטרית, אם בהינתן e יהיה "קל" מבחינה חישובית לדעת את d. היות שברוב המקרים e=d מכאן השם הצפנה סימטרית, בניגוד למערכת הצפנה א-סימטרית, שבה מפתח ההצפנה שונה ממפתח הפענוח (d\ne e) ובטיחותה מבוססת על ההנחה שקשה לגלות את מפתח הפענוח מתוך מפתח ההצפנה. שמות אחרים להצפנה סימטרית הם 'הצפנת מפתח-יחיד' (single-key) ו'הצפנת מפתח פרטי' (private-key).

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

אפשר להמחיש הצפנה סימטרית על ידי הצופן הבא: יהי \mathcal{A}האלפבית העברי הכולל 22 אותיות (לא כולל סופיות) "אבגדהוזחטיכלמנסעפצקרשת". אם נבחר מפתח e שהוא פרמוטציה כלשהי באורך חמש אותיות מעל \mathcal{A}, הצפנה תתבצע על ידי חלוקת המסר לקבוצות של חמש אותיות והפעלת התמורה e על כל קבוצה באופן מחזורי. כדי לפענח מחשבים את התמורה ההופכית d=e^{-1} ומפענחים באותו סדר. אם למשל e=34125, דהיינו האות הראשונה בכל חמישייה מוחלפת באות השלישית הבאה אחריה בסדר האלפביתי, האות השנייה מוחלפת באות הרביעית הבאה אחריה, האות השלישית מוחלפת באות הראשונה הבאה אחריה וכן הלאה. אפשר להציג את המפתח e כטבלת תמורה עם חמשה היסטים שונים, בשורה הראשונה האלפבית \mathcal{A} ובשורות הבאות ה'היסטים' של האלפבית במרחק שנקבע לפי המפתח, כדלהלן:

א ב ג ד ה ו ז ח ט י כ ל מ נ ס ע פ צ ק ר ש ת מפתח
ד ה ו ז ח ט י כ ל מ נ ס ע פ צ ק ר ש ת א ב ג 3 (ג)
ה ו ז ח ט י כ ל מ נ ס ע פ צ ק ר ש ת א ב ג ד 4 (ד)
ב ג ד ה ו ז ח ט י כ ל מ נ ס ע פ צ ק ר ש ת א 1 (א)
ג ד ה ו ז ח ט י כ ל מ נ ס ע פ צ ק ר ש ת א ב 2 (ב)
ו ז ח ט י כ ל מ נ ס ע פ צ ק ר ש ת א ב ג ד ה 5 (ה)


אם המשפט אותו רוצים להצפין הוא "צופן זה לא בטוח כלל", תחילה מחלקים אותו לקבוצות של חמש אותיות (לצורך הפשטות נתעלם מרווחים) ומתקבל "צופנז הלאבט וחכלל" ואז מצפינים אות אות, 'צ' מוחלפת לפי היסט 3 באות 'ש' בשורה השנייה בטבלה, 'ו' מוחלפת לפי היסט 4 באות 'י' בשורה השלישית וכן הלאה. לאחר הצפנת חמש אותיות חוזרים להתחלה ומצפינים את חמש האותיות הבאות עד לסיום המשפט. לאחר הצפנה התוצאה תהיה "שיצעל חעבדנ טללנפ". לפענוח מפעילים את התמורה ההפוכה לפי הסדר של המפתח, למשל כדי להחליף את האות 'ש' מתחילים בשורה השנייה בטבלה ומאתרים את האות המקבילה אליה בשורה הראשונה, את האות 'י' מחליפים לפי מיקומה בשורה השלישית וכך מתקדמים עד לפענוח כל המשפט.

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

היסטוריה[עריכת קוד מקור | עריכה]

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

דוגמאות לצופנים סמיטריים מודרניים נוספים: Twofish, MARS, סרפנט, AES, Blowfish, CAST5, RC4, RC6, DES וכן IDEA.

הגדרות ומוסכמות[עריכת קוד מקור | עריכה]

בדרך כלל נהוג לייצג את הצדדים המשתתפים בהתקשרות מוצפנת כאליס ובוב, המתקיפה או הקריפטאנליסטית היא איב (eavesdropper) שמעוניינת לחשוף את המידע המוצפן שעובר בין אליס ובוב. \mathcal{A}=\{0,1\}^b הוא האלפבית של סמלים בגודל b סיביות. אליס שולחת לבוב מסר \text{m} שהוא רצף של n סמלים מתוך \mathcal{A}, טווח המסר המייצג את כל המסרים האפשריים הוא \mathcal{M} וכן לגבי הטקסט המוצפן \text{c}^n\in\mathcal{C} בדרך כלל מקובל ש-|c|=|m| אך זה לא חובה. המפתח K\in\mathcal{K} הוא רצף של l סימנים מתוך אותו אלפבית k_1,k_2,....

הצפנה ופענוח[עריכת קוד מקור | עריכה]

פונקציית ההצפנה: E_K(M):\mathcal{M}\times\mathcal{K}\rightarrow\mathcal{C} היא פונקציה או אלגוריתם שמקבל מסר m ומפתח ההצפנה הסודי K_e ומייצר מתוכם את c.

פונקציית הפענוח: D_K(C):\mathcal{C}\times\mathcal{K}\rightarrow\mathcal{M} מבצעת את הפעולה ההפוכה, מקבלת את c ואת מפתח הפענוח המתאים K_d ומחזירה את m.

צופן בהגדרה כללית הוא הצמד (E,D) ופונקציה להכנת מפתחות הצפנה ופענוח מתוך המפתח הסודי, כך שתמיד מתקיים:

\boldsymbol{D_{K_d}(E_{K_e}(m))=m}

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

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

ניתן לחלק את הצפנים סימטריים לשני סוגים עיקריים:

צופן בלוקים הוא אלגוריתם המכיל פרמוטציה קבועה, ללא זיכרון, שמקבל מחרוזת סמלים מתוך האלפבית \mathcal{A}^b וממירם לרצף אחר של סמלים מאותו אלפבית, בדרך שנקבעת לפי מפתח ההצפנה. b מייצג את אורך הסמל או רצף הסמלים ונקרא "בלוק". כל מפתח מניב תמורה אחרת מתוך כל התמורות האפשריות באורך b. לדוגמה בצופן AES הבלוק באורך 128 סיביות ומפתח באורך לפחות 128 סיביות. משום כך האלפבית שלו מכיל 2^{128} תמורות אפשריות בהתאם למספר המפתחות האפשריים. למרות שסך כל התמורות האפשריות הוא 2^{128}! בגלל שגודל הבלוק גם הוא 128 סיביות.

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

ההצפנה הקלאסית נקראת סימטרית כיוון שמפתח ההצפנה ומפתח הפענוח זהים. אולם מלבד החיסרון שבעובדה שהמפתח הסודי חייב להיות משותף לשולח ולמקבל, ההצפנה בוצעה על בלוקים קטנים והמפתח בדרך כלל היה קצר וקל לניחוש, מה שאיפשר ניתוח סטטיסטי. הצפנה סימטרית מודרנית החלה עם עבודתו של קלוד שאנון שניסח את התאוריה וברעיון של הורסט פייסטל, קריפטוגרף ומתמטיקאי של יבמ שפיתח את לוציפר בראשית 1970 שהיוו בסיס לאלגוריתם DES. הרעיונות של שאנון מהווים אבני יסוד לכל צופן סימטרי מודרני והם "שילוב" או "הרכבה" של מספר פונקציות הצפנה חלשות כשלעצמן כגון החלפה וטרנספוזיציה במספר סבבים, כדי לקבל פונקציית הצפנה חזקה יותר. שילוב של החלפה מוסיף שיכול או ערבוב (Confusion) לצופן ואילו שילוב טרנספוזיציה (העתקה או הזזה) מוסיף פיזור (Diffusion) לצופן. הערבוב נועד לטשטש את הקשר שבין המפתח והצופן ככל האפשר ואילו פיזור נועד לסדר מחדש את סיביות הצופן כך שיתירות המסר המקורי לא תזלוג לצופן.

רשת פייסטל[עריכת קוד מקור | עריכה]

Postscript-viewer-shaded.png ערך מורחב – רשת פייסטל

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

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

דוגמאות[עריכת קוד מקור | עריכה]

דוגמאות לפעולות שניתן לשלבן כדי להגיע לצופן סימטרי חזק:

  • תיבות תמורה Permutation Box (בקיצור P-box); הן אוסף פונקציות טרנספוזיציה או שיכול, שרק משנות את מיקומן של סיביות הקלט באמצעות פונקציית תמורה קבועה או משתנה. הפונקציה ניתנות לייצוג כטבלת תמורה. הפונקציות טובות להשגת אפקט פיזור (diffusion) ולכן מתאימות רק בשילוב עם תיבות החלפה או פעולות אחרות.
  • תיבות החלפה Substitution Box (בקיצור S-box); הן אוסף פונקציות החלפה לא לינאריות המיוצגות על ידי טבלאות סטטיות או תלויות מפתח. הוצגו לראשונה בצופן לוציפר של הורסט פייסטל. אם ערכיהן נבחרו בקפידה הן טובות במיוחד לסיכול התקפה דיפרנציאלית.
  • טרנספורמציה לינארית עם פעולות אריתמטיות בסיסיות על סיביות כמו AND, XOR ושילוב שלהן. פעולת XOR ידועה בכך שהיא משמרת אקראיות (חיבור XOR של הקלט עם ערך אקראי יפיק תוצאה אקראית, ראה פנקס חד פעמי), פעולה זו מכונה לעתים גם הלבנה (whitening).
  • הזזה מעגלית (cyclic shift או rotation); הזזת סיביות ימינה או שמאלה כך שהסיביות הנפלטות מצד אחד מוחזרות מהצד השני.
  • פעולות אלגבריות בשדות סופיים כגון \text{GF}(2^{128}). כאשר פעולות כפל מבוצעות מודולו פולינום פרימיטיבי בעל משקל בינארי נמוך.
  • כפל מטריצות, שהן מיפוי לינארי מעל וקטורים. הכפלה במטריצה בדרך כלל נעשית עם פולינום פרימיטיבי מתאים. מטריצה המתאימה במיוחד להצפנה נקראת MDS קיצור של maximum distance separable בה נעשה שימוש בצופן Twofish.
  • התמרת פסבדו-הדמר. מהצורה a'=(a+b)\mbox{ mod }2^n, b'=(a+2b)\mbox{ mod }2^n.
  • אריתמטיקה מודולרית; פעולות חיבור וכפל בחבורות מודולו n.
  • קוד תיקון שגיאות לינארי ריד-סולומון המבוסס על אינטרפולציה של פולינומים, בשיטה זו נעשה שימוש לראשונה בצופן SHARK.

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

יתרונות[עריכת קוד מקור | עריכה]

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

אנליזה של צופנים סימטריים[עריכת קוד מקור | עריכה]

בשל ההיסטוריה הארוכה והעשירה הצטבר ידע נרחב וקיימות שיטות התקפה רבות. ההתקפות על צופן סימטרי מתחלקות למספר קטגוריות עיקריות; החל מהתקפת מוצפן-ידוע (known-ciphertext) הפשוטה, שבה ברשות מנתח הצופן או המתקיף טקסט-מוצפן בלבד, אותו הוא מעוניין לפענח ואין ברשותו מידע נוסף שעשוי לסייע לו. דרך התקפת גלוי-ידוע (known-plaintext) שבה המתקיף קיבל כמות מסוימת של טקסט גלוי ותוצאת הצפנה שלו, ובאמצעות מידע זה עליו לגלות את מפתח ההצפנה או לפענח טקסט מוצפן אחר. התקפת גלוי-נבחר (chosen-plaintext) שבה המתקיף יכול לקבל הצפנה של טקסט גלוי לפי בחירתו (והטקסט המוצפן המתאים יימסר לו), ועד התקפת מוצפן-נבחר (chosen-ciphertext) החזקה שבה ביכולתו לפענח כל טקסט-מוצפן שיבקש מלבד הטקסט המוצפן אותו הוא מתקיף. וכן התקפה הנקראת related-key, שבה ברשות המתקיף טקסטים-מוצפנים שהוצפנו בהמפתחות שונים אך קשורים זה בזה בקשר מתמתטי כלשהו. האפשרות שהמתקיף יבחר טקסט-גלוי או טקסט-מוצפן כאסטרטגיה לשבירת הצופן אפשרית בעולם האמיתי בהרבה מערכות.

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

  • כוח גס (Brute Force): ניסוי של לפחות מחצית מטווח המפתחות האפשריים במקרה הממוצע עד למציאת המפתח שאיתו נעשה שימוש. סיבוכיותה אינה מעשית ברוב המקרים, אולם עם מספיק זמן וכוח חישוב מובטחת בסופו של דבר תוצאה. למעשה ההוכחה שאלגוריתם מסוים ניתן לשבירה אך ורק באמצעות כח גס מהווה הוכחת איכות, כיוון שניתן לשלוט במידת בטיחותו על ידי בחירה מושכלת של גודל המפתח בסיביות. לשם המחשה, כוח גס כנגד צופן DES מצריך סריקה של לפחות 2^{55} מפתחות במקרה הממוצע. עד 1998 שבירת צופן DES הייתה אפשרית רק על ידי חומרה ייעודית שעלותה יקרה ונמשכה בדרך כלל מספר ימים. ב-2008 פרסמה חברת SciEngines שרת ייעודי יחיד עם חומרה מותאמת, בעל תפוקה של 26 מיליארד מפתחות בשנייה, המסוגל לפרוץ את DES בפחות מיום אחד. ניתן ליישם כח גס גם באמצעות חישוב מבוזר, גיוס זמן בטלה של מעבדים על בסיס התנדבותי, הזמין כיום באמצעות רשת האינטרנט. ב-1999 נפרץ DES ב-23 שעות בלבד באמצעות 100,000 מחשבים ביתיים.
  • קריפטאנליזה לינארית: שיטת שבירת צופן המיוחסת לקריפטוגרף היפני מיצורו מצואי. בשיטה זו ניתן לפצח את DES עם 2^{47} טקסטים מוצפנים שמקורם ידוע. קריפטאנליזה לינארית היא התקפת גלוי ידוע, המתמקדת בחיפוש אחר קירובים לינאריים היעילים ביותר המתאימים למספר ספציפי של סבבים בצופן המותקף, עם שיעור הצלחה גבוה מחצי, תוך ניצול חולשות בתיבות ההחלפה (S-box) של האלגוריתם. כל ביטוי כזה מאפשר לחלץ סיבית מפתח אחת באמצעות תהליך הסתברותי של חיפוש התאמות בכמות גדולה של טקסט מוצפן ומקור ידועים ובסופו של תהליך ניחוש המפתח כולו. למרות שזהו שיפור משמעותי לעומת כח גס, השיטה אינה יעילה עבור מחשב ממוצע בהתחשב בכמות הטקסט הדרושה.
  • קריפטאנליזה דיפרנציאלית: הומצאה על ידי אלי ביהם ועדי שמיר (מכון ויצמן למדע 1980)‏‏. שיטה רבת עוצמה לניתוח אלגוריתמים סימטריים מכל סוג כמעט, בה נבחנת מידת ההשפעה של הבדלים בקלט על פלט הצופן. בשיטה זו ניתן לפצח את DES ב-2^{43} ניסיונות, אף בלא ידיעת מקור הצופן. בשיטה זו נפרצו ב-1989 וב-1991 כל וריאציות צופן FEAL. הוכח גם שגרסאות מתקדמות יותר של האלגוריתם FEAL-N וכן FEAL-NX שפותחו עקב כך ניתנות לשבירה (עד 31 סבבים) בפחות מהזמן הדרוש לכוח גס. ובכך הקיץ הקץ על האלגוריתם.

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

עקרון קרקהופס[עריכת קוד מקור | עריכה]

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

ביקורת ציבורית[עריכת קוד מקור | עריכה]

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

נוהלי אבטחה[עריכת קוד מקור | עריכה]

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

בעיית הפצת מפתחות[עריכת קוד מקור | עריכה]

Postscript-viewer-shaded.png ערך מורחב – בעיית הפצת מפתחות

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

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

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

שילוב בין השיטות (הצפנה סימטרית וא-סימטרית) נפוץ מעשית ומכונה מערכת היברידית (Hybrid) מערכת המבצעת "הכלאה" של השיטות השונות ומנצלת את יתרונותיהן. שיטת הצפנה אסימטרית כמו RSA טובה להעברת מפתח סודי חד-פעמי בתקשורת גלויה ואילו להצפנה עצמה, אלגוריתם הצפנה סימטרי כמו AES עדיף בשל מהירותו הרבה. דוגמאות למערכת כזו הן PGP ו-SSL.

קישורים חיצוניים[עריכת קוד מקור | עריכה]