DES

תקן הצפנת מידע (באנגלית: Data Encryption Standard; בראשי תיבות: DES) הוא צופן בלוקים סימטרי שפותח ב-1974 במרכז המחקר של IBM, בשיתוף פעולה עם הסוכנות לביטחון לאומי של ממשלת ארצות הברית. למרות גודל המפתח הקטן יחסית של הצופן, הוא השפיע רבות על התפתחות תחום הקריפטוגרפיה. האלגוריתם התקבל בשנת 1976 על ידי לשכת התקנים הלאומית של ארצות הברית (ששמה שונה מאוחר יותר ל-NIST) כחלק מדרישת תקן עבור הממשל האמריקאי להצפנת נתונים למטרות אזרחיות, ושימש כתקן למטרה זו עד נובמבר 2001, אז הוחלף בתקן החדש Advanced Encryption Standard. למרות זאת DES נמצא עדיין בשימוש ב-גרסה המשולשת שלו, בעיקר בתחום הבנקאות. DES הוא צופן בלוקים סימטרי איטרטיבי שיועד במקור בעיקר לחומרה. הוא מקבל בלוק טקסט קריא שהוא מחרוזת של 64 סיביות (8 בתים) ומפיק בלוק מוצפן באורך זהה. הפונקציה הפנימית של הצופן מתבצעת בשש עשרה חזרות (הנקראות סבבים או rounds) בעזרת מפתח סודי באורך 64 סיביות (שמתוכן רק 56 סיביות בשימוש). צופן DES היה לצופן הראשון בקנה מידה גדול שהתבסס על רשת החלפה-תמורה לפי הפרדיגמה של קלוד שאנון, שהיא שילוב של הפעולות החלפה, תמורה וחיבור עם מפתח סודי במבנה הנקרא רשת פייסטל. זהו מבנה קריפטוגרפי הקרוי על שמו של הורסט פייסטל, יושם לראשונה בצופן לוציפר וידוע כמבנה בטוח. יתרונו הוא שהוא הופך כל פונקציה לא בהכרח הפיכה, לפרמוטציה. הפונקציה הפנימית של הצופן נחשבת לאינוולוציה, במובן שאם מפעילים את אותה הפונקציה פעמיים בזה אחר זה על אותו קלט מתקבל הקלט המקורי. לכן אפשר להשתמש בפונקציה אחת הן להצפנה והן לפענוח, מה שחוסך בשערים לוגיים ומקטין את נפח החומרה. באופן כללי, מחלקים את בלוק הקלט לשני חצאים - ימין ושמאל בהתאמה, ובכל סבב מצפינים את החצי השמאלי עם תוצאת הפונקציה שמופעלת על החצי הימני יחד עם מפתח סודי נפרד. לאחר מכן שני החצאים מחליפים מקומות וחוזרים שוב על אותה פעולה. בכל סבב רק החצי השמאלי משתנה ואילו החצי הימני נותר ללא שינוי, כשהוא הופך לחצי השמאלי בסבב הבא וחוזר חלילה. בפענוח מפעילים את אותה הפונקציה אך משתמשים במפתח בסדר הפוך. הקלט הוא בלוק טקסט קריא בגודל 64 סיביות ומפתח הצפנה סודי   K {\displaystyle \ K} בגודל 64 (בפועל 56) סיביות. באמצעות תהליך הכנת המפתח המתואר להלן, מרחיבים את המפתח ומחלקים אותו ל-16 מקטעים בני 48 סיביות כל אחד, כאשר כל מקטע משמש עבור סבב בודד. מכינים 8 תיבות החלפה   S 1 , S 2 , . . . , S 8 {\displaystyle \ S_{1},S_{2},...,S_{8}} הנקראות בקיצור S-box. הן מייצגות אוסף של פונקציות לא-ליניאריות שמקבלות קלט באורך 6 סיביות ומחזירות פלט באורך 4 סיביות בהתאם לטבלת הערכים הקבועה המוצגת להלן. מכינים "תיבת הרחבה" (   E {\displaystyle \ E} בתרשים) ו"תיבת תמורה" (   P {\displaystyle \ P} בתרשים), המייצגות פונקציות מיפוי לפי ערכים קבועים. התיבה E (קיצור של Expansion) היא תיבת תמורה/הרחבה, שתפקידה להכין את הקלט להחלפה בתיבות ההחלפה. היא מרחיבה את הקלט מ-32 סיביות ל-48 סיביות. 16 מתוך 32 סיביות הקלט מועתקות פעמיים למקומות שונים כמתואר בתרשים. למשל הסיבית במיקום הרביעי בקלט מועתקת למיקומים החמישי והשביעי בפלט. מכינים תיבת תמורה קבועה הנקראת P-box (קיצור של Permutation) שמשנה את סדר הסיביות של הפלט בסוף כל סבב תוך שמירה על גודלו. כזכור, היות שהצופן מיועד למימוש בחומרה, העתקת סיביות היא מלאכה קלה, זה רק עניין של חיווט. בתחילת הצופן, לפני הפעלת הפונקציה הפנימית f {\displaystyle f} , מבצעים תמורה חד פעמית על כל סיביות הקלט באמצעות תיבת תמורה סטטית הנקראת I P {\displaystyle IP} (Initial Permutation), ובסיום כל 16 הסבבים מעבירים את הפלט בתיבת התמורה ההופכית לה   I P − 1 {\displaystyle \ IP^{-1}} (שתיהן מוצגות בתרשימים משמאל). לפעולה זו אין השפעה על ביטחון הצופן ומקובל להתעלם ממנה כשמנתחים אותו. הסיבה לתוספת זו כמו שיקולים אחרים שהנחו את מפתחי הצופן לא היו נהירים בעיקר בשל העובדה שהם נחשבו לסוד לאומי. לדברי דון קופרשמידט הסיבה לתוספת זו טכנית בלבד, בשל העובדה ש-DES פותח בחומרה והחיווט היה נוח בצורה זו. סדר הפעולות בכל הסבבים זהה. תחילה מחלקים את קלט האלגוריתם לשני חצאים   L 0 , R 0 {\displaystyle \ L_{0},R_{0}} בהתאמה ובכל סבב מבצעים כדלהלן: L i = R i − 1 {\displaystyle L_{i}=R_{i-1}} , R i = L i − 1 ⊕ f ( R i − 1 , K i ) {\displaystyle R_{i}=L_{i-1}\oplus f(R_{i-1},K_{i})} כאשר   f ( R i − 1 , K i ) = P ( S ( E ( R i − 1 ) ⊕ K i ) ) {\displaystyle \ f(R_{i-1},K_{i})=P(S(E(R_{i-1})\oplus K_{i}))} . במבנה זה פעולת הפונקציה הפנימית f {\displaystyle f} מתבצעת רק על מחצית הקלט (היינו 32 סיביות). כאשר המחצית הימנית משמשת כקלט לפונקציה והפלט שלה משמש להצפנת המחצית השמאלית בחיבור XOR. שימו לב שהמחצית הימנית R i − 1 {\displaystyle R_{i-1}} אינה מוצפנת אלא מועתקת כמו שהיא למחצית השמאלית של הסבב הבא. תפקידה הוא לשמש כמו מפתח הצפנה להצפנת המחצית השמאלית בכל סבב ולכן היא צריכה להישאר ללא שינוי כדי לאפשר פענוח לאחר מכן. f {\displaystyle f} מורכבת מרשת החלפה-תמורה שהיא שילוב של שלוש פונקציות: הפונקציה E {\displaystyle E} שממפה "ומגדילה" את הקלט לפלט של 48 סיביות יחד עם תיבות ההחלפה ותפקידן הוא לבצע פעולה אי-ליניארית על הקלט, התמורה P {\displaystyle P} שתפקידה לפזר את הפלט והפונקציה השלישית שמחברת את הפלט עם חלק מהמפתח הסודי. קלט: טקסט קריא M {\displaystyle M} המיוצג כמחרוזת 64 סיביות על ידי המערך m 1 , m 2 , . . . , m 64 {\displaystyle m_{1},m_{2},...,m_{64}} . מפתח K {\displaystyle K} שהוא מחרוזת של 64 סיביות המיוצגת על ידי k 1 , k 2 , . . . , k 64 {\displaystyle k_{1},k_{2},...,k_{64}} . פלט: מחרוזת הסיביות C = c 1 , c 2 , . . . c 64 {\displaystyle C=c_{1},c_{2},...c_{64}} . את המפתח K {\displaystyle K} מרחיבים למערך של 16 כניסות בגודל 48 סיביות (סך הכול 768 סיביות) כדלהלן: מכינים מערך עזר v {\displaystyle v} באורך 16 כניסות שערכיו לפי האינדקס i {\displaystyle i} הם; עבור i ∈ { 1 , 2 , 9 , 16 } {\displaystyle i\in \{1,2,9,16\}} מציבים v i = 1 {\displaystyle v_{i}=1} בכל היתר v i = 2 {\displaystyle v_{i}=2} . משתמשים בטבלה PC1 {\displaystyle {\text{PC1}}} כדי להעתיק את סיביות המפתח K {\displaystyle K} לשני משתנים מקומיים C , D {\displaystyle C,D} בגודל 28 סיביות כל אחד בהתאמה לפי הסדר המופיע בטבלה. כלומר הערך ההתחלתי יהיה C 0 = k 57 , k 49 , k 41 , . . . , k 36 {\displaystyle C_{0}=k_{57},k_{49},k_{41},...,k_{36}} ו- D 0 = k 63 , k 55 , . . . , k 4 {\displaystyle D_{0}=k_{63},k_{55},...,k_{4}} . יש לשים לב שלא כל הסיביות הועתקו (רק 56 מתוך 64). ההעתקה מתבצעת ברמת סיביות לפי האינדקס, כלומר k 57 {\displaystyle k_{57}} פירושו העתקת הסיבית ה-58 מהמפתח K {\displaystyle K} למקום הראשון במשתנה C 0 {\displaystyle C_{0}} (הספירה מתחילה מאפס). הכנת 16 תת-מפתחות. עבור i = 1 {\displaystyle i=1} עד 16 {\displaystyle 16} מבצעים: C i = ( C i − 1 ⋘ v i ) {\displaystyle C_{i}=(C_{i-1}\lll v_{i})} , כלומר תוצאת הערך הקודם של C {\displaystyle C} לאחר הזזה מעגלית לשמאל לפי v i {\displaystyle v_{i}} . D i = ( D i − 1 ⋘ v i ) {\displaystyle D_{i}=(D_{i-1}\lll v_{i})} , באופן דומה D {\displaystyle D} הוא תוצאת הזזה מעגלית לשמאל של ערכו הנוכחי v i {\displaystyle v_{i}} פוזיציות. K i = PC2 ( C i   ‖   D i ) {\displaystyle K_{i}={\text{PC2}}(C_{i}\ \|\ D_{i})} . משרשרים ביחד את שני החלקים למערך בגודל 56 סיביות b 1 , b 2 , . . . , b 56 {\displaystyle b_{1},b_{2},...,b_{56}} ונעזרים בטבלה PC2 {\displaystyle {\text{PC2}}} כדי לבחור 48 סיביות מתוכן עבור מפתח הסבב הנוכחי, לפי האינדקסים (כלומר K i = b 14 , b 17 , . . . , b 32 {\displaystyle K_{i}=b_{14},b_{17},...,b_{32}} ). משתמשים בטבלה IP {\displaystyle {\text{IP}}} כדי לערבב את סדר סיביות המסר; IP ( m 1 , m 2 , . . . , m 64 ) {\displaystyle {\text{IP}}(m_{1},m_{2},...,m_{64})} ומחלקים את התוצאה לשני חצאים L 0 , R 0 {\displaystyle L_{0},R_{0}} . ערכי המחצית השמאלית הם L 0 = { m 58 , m 50 , . . . , m 8 } {\displaystyle L_{0}=\{m_{58},m_{50},...,m_{8}\}} וערכי המחצית הימנית R 0 = { m 57 , m 49 , . . . , m 7 } {\displaystyle R_{0}=\{m_{57},m_{49},...,m_{7}\}} . פעולה זו אינה קריפטוגרפית. עבור i = 1 {\displaystyle i=1} עד 16 {\displaystyle 16} מבצעים לפי הנוסחה המתוארת לעיל, תחילה L i = R i − 1 {\displaystyle L_{i}=R_{i-1}} ומחשבים את P ( S ( E ( R i − 1 ) ⊕ K i ) ) {\displaystyle P(S(E(R_{i-1})\oplus K_{i}))} כדלהלן: הרחבה. מעתיקים את R i − 1 = { r 1 , r 2 , . . . , r 32 } {\displaystyle R_{i-1}=\{r_{1},r_{2},...,r_{32}\}} ממערך של 32 סיביות למערך T {\displaystyle T} באורך 48 סיביות לפי הטבלה E {\displaystyle {\text{E}}} . לאחר ההרחבה T = { r 32 , r 1 , r 2 , . . . , r 32 , r 1 } {\displaystyle T=\{r_{32},r_{1},r_{2},...,r_{32},r_{1}\}} (שימו לב שסיביות מסוימות מועתקות יותר מפעם אחת). מפתח. מבצעים XOR עם המפתח המורחב המתאים לסבב הנוכחי: T = T ⊕ K i {\displaystyle T=T\oplus K_{i}} . החלפה. מחלקים את המערך T {\displaystyle T} לשמונה כניסות ( B 1 , B 2 , . . . , B 8 ) {\displaystyle (B_{1},B_{2},...,B_{8})} , כל אחת מהן באורך 6 סיביות המסומנות { b 1 , b 2 , . . . , b 6 } {\displaystyle \{b_{1},b_{2},...,b_{6}\}} ומבצעים החלפה של כל הכניסות עם שמונה תיבות ההחלפה המתאימות; S 1 ( B 1 ) , S 2 ( B 2 ) , . . . , S 8 ( B 8 ) {\displaystyle S_{1}(B_{1}),S_{2}(B_{2}),...,S_{8}(B_{8})} . כל תיבת החלפה ממפה מחרוזת של שש סיביות קלט למחרוזת של ארבע סיביות המצויות בשורה r {\displaystyle r} בעמודה c {\displaystyle c} בטבלה. כאשר מספר השורה r = 2 ⋅ b 1 + b 6 {\displaystyle r=2\cdot b_{1}+b_{6}} הוא מספר שלם באורך שתי סיביות בטווח [ 0..3 ] {\displaystyle [0..3]} . ארבע הסיביות הנותרות b 2 b 3 b 4 b 5 {\displaystyle b_{2}b_{3}b_{4}b_{5}} מייצגות מספר שלם בבסיס 2 בטווח [ 0..15 ] {\displaystyle [0..15]} (ספרה הקסדצימלית אחת) שמשמש כמספר העמודה. לדוגמה S 1 ( ''011011'' ) {\displaystyle S_{1}({\text{''011011''}})} מניב r = 1 {\displaystyle r=1} ו- c = 13 {\displaystyle c=13} והפלט הוא 5 {\displaystyle 5} . תמורה. משתמשים בתיבת התמורה P {\displaystyle {\text{P}}} כדי לסדר מחדש את סיביות T {\displaystyle T} לפי האינדקסים. כלומר התוצאה תהיה T = { t 16 , t 7 , . . . , t 25 } {\displaystyle T=\{t_{16},t_{7},...,t_{25}\}} . מצפינים את החלק השמאלי: R i = L i − 1 ⊕ T {\displaystyle R_{i}=L_{i-1}\oplus T} . שני החצאים האחרונים R 16 , L 16 {\displaystyle R_{16},L_{16}} מתחלפים ביניהם. מבצעים את התמורה המסיימת ההופכית IP − 1 {\displaystyle {\text{IP}}^{-1}} , כלומר C = { b 40 , b 8 , . . . , b 25 } {\displaystyle C=\{b_{40},b_{8},...,b_{25}\}} . שוב פעולה זו אינה קריפטוגרפית. התוצאה היא C {\displaystyle C} . המסר הוא הטקסט " Now is the time for all" באורך 24 אותיות (בקידוד ASCII) ומפתח ההצפנה הוא המחרוזת בייצוג הקסדצימלי: התוצאה היא הטקסטים הבאים בבסיס הקסדצימלי: הפענוח מתבצע עם אותה פונקציה ועם אותו מפתח אך בסדר הפוך. כלומר בתהליך הרחבת המפתח לעיל מתחילים מהמפתח K 16 {\displaystyle K_{16}} ויורדים עד K 1 {\displaystyle K_{1}} . הפעולות IP {\displaystyle {\text{IP}}} מתחילת ההצפנה ו- IP − 1 {\displaystyle {\text{IP}}^{-1}} מסופה למעשה מבטלות אחת את השנייה כי הן פעולות הופכיות, לכן אפשר להתעלם מהן. מה שמותיר אותנו עם שני החצאים האחרונים R 16 , L 16 {\displaystyle R_{16},L_{16}} מהסבב האחרון של ההצפנה. כעת, מייד עם תחילת הלולאה הראשית בפענוח L 16 = R 15 {\displaystyle L_{16}=R_{15}} (כזכור במעבר מסבב לסבב החצי הימני אינו משתנה אלא רק מחליף מקום עם החצי השמאלי) לכן הפעולה הבאה: R 16 ⊕ f ( L 16 , K 16 ) {\displaystyle R_{16}\oplus f(L_{16},K_{16})} היא למעשה אינוולוציה והיא שקולה ל: ( L 15 ⊕ f ( R 15 , K 16 ) ) ⊕ f ( R 15 , K 16 ) = L 15 {\displaystyle (L_{15}\oplus f(R_{15},K_{16}))\oplus f(R_{15},K_{16})=L_{15}} החלק השמאלי ביותר המצוי בסוגריים הוא בדיוק הפעולה מהסבב האחרון של ההצפנה ואילו הפעולה הבאה אחריה היא מהסבב הראשון של הפענוח. אפשר לראות ששתי הפעולות מבטלות אחת את השנייה. על כן לאחר הסבב הראשון למעשה חוזרים צעד אחד לאחור ומתקבלים החצאים R 15 , L 15 {\displaystyle R_{15},L_{15}} (מהסבב הקודם של ההצפנה). בסבב הבא מבצעים את אותה פעולה עם K 15 {\displaystyle K_{15}} וכן הלאה ובדרך זו משחזרים את יתר הסבבים. לצופן DES דרושים 16 תת-מפתחות, כל אחד מהם באורך 48 סיביות ומתאים לסבב בודד (סך הכול 768 סיביות). להכנת המפתחות DES משתמש בשתי טבלאות סטטיות P C 1 {\displaystyle PC1} ו- P C 2 {\displaystyle PC2} (המוצגות בטבלאות הבאות). איתם מרחיבים את המפתח הסודי שמסופק על ידי המשתמש ל-16 תת-מפתחות. מתעלמים מהסיביות k 8 , k 16 , . . . , k 64 {\displaystyle k_{8},k_{16},...,k_{64}} (כל סיבית שמינית) הנחשבות לסיביות זוגיות. באמצעות הטבלה P C 1 {\displaystyle PC1} מחלקים את 56 הסיביות האפקטיביות לשני משתנים C {\displaystyle C} ו- D {\displaystyle D} בני 28 סיביות כל אחד. מבצעים הזזה מעגלית לשמאל של סיביות המשתנים C {\displaystyle C} ו- D {\displaystyle D} בסיבית אחת או שתיים (בהתאם לערך התלוי במיקום הסיביות, עבור סבבים 1, 2, 9, 16 מזיזים ב-1 עבור היתר מזיזים ב-2) משתמשים בטבלה P C 2 {\displaystyle PC2} כדי לאחד את סיביות המשתנים לבלוק מפתח בגודל 48 סיביות. וחוזרים על פעולה זו 16 פעמים עבור כל 16 הסבבים של הצופן. על מנת שהצופן יצליח להסתיר היטב את הטקסט המקורי, תהליך הכנת המפתח מנסה לשוות למפתח המורחב מראה אקראי ככל האפשר. כבר ב-1973 התגלה שמפתחות הצפנה מסוימים עלולים לייצר מפתח מורחב בעל תבנית לא אקראית ניכרת שהתוצאה שלה בלתי צפויה. למשל אם המשתנה הפנימי C מכיל 28 אפסים והמשתנה D מכיל 28 אחדים ייווצר מצב שהצפנת DES תהיה זהה לפענוח DES עם אותו מפתח. כלומר: DES K ( M ) = DES K − 1 ( M ) {\displaystyle {\text{DES}}_{K}(M)={\text{DES}}_{K}^{-1}(M)} לכן אם מצפינים טקסט כלשהו עם אחד מהמפתחות החלשים פעמיים מתקבל הטקסט המקורי. ישנם ארבעה מפתחות החלשים ב-DES: כזכור, כל סיבית מפתח שמינית נקראת סיבית זוגיות ולמעשה הן אינן משתתפות כלל בהצפנה. אם סיבית הזוגיות אינה נבדקת גם מפתח שכולו אפסים או אחדים יתנהג באותו אופן. מפתחות הצפנה "חלשים למחצה" הם מפתחות שגורמים למצב שבו המפתח המורחב המתקבל מוגבל לשני תת-מפתחות בלבד כשהם חוזרים על עצמם בזוגות, ולהם התכונה הבאה: E K 1 ( E K 2 ( M ) ) = M {\displaystyle E_{K_{1}}(E_{K_{2}}(M))=M} כלומר הצפנה עם מפתח אחד ואז הצפנה של התוצאה עם המפתח השני מחזירה את המקור. קיימים שישה זוגות של מפתחות DES חלשים למחצה והם: תיבת ההחלפה הנקראת S-box (קיצור של Substitution box; ראו תרשים) מייצגת פונקציות החלפה אי-ליניאריות קבועות המחזירות ערכים מהטבלה על פי אינדקס שתלוי בקלט. תיבות ההחלפה של DES הן מקור חוסנו; הפונקציות שהן מייצגות הן הפעולות האי-ליניאריות היחידות המופעלות על הקלט ואלמלא הן הצופן היה ניתן לפריצה בקלות. בדיעבד מסתבר כי התיבות עוצבו באופן כזה שהצופן יהיה עמיד יחסית כנגד קריפטואנליזה דיפרנציאלית. עוד ידוע כי גם ה-NSA היה מעורב בתכנון תיבת ההחלפה של DES ואף שינה אחדים מן הערכים מנימוק לא ידוע. ההערכה המקובלת כיום היא שהשינויים נועדו לחזק את הצופן כנגד ההתקפה הדיפרנציאלית שהייתה ידועה להם ולמפתחי הצופן ב-IBM כבר אז. DES הוא דטרמיניסטי, ולכן הצפנה חוזרת של בלוקים זהים עם מפתח זהה תניב בלוק מוצפן זהה. עובדה זו עלולה להוות פתח להתקפה כנגד הצופן כי ניתן להיעזר בבלוקים זהים כדי לבצע ניתוח סטטיסטי של הצופן ולחלץ בדרך זו מידע מסוים אודות טקסט המקור. הפתרון לכך הוא יישום האלגוריתם באחד ממצבי ההפעלה המבטלים את יתירות הצופן. במצב ההפעלה משרשרים בלוקי צופן באופן שכל בלוק של טקסט המקור עובר תחילה XOR עם תוצאת ההצפנה של הבלוק הקודם, כך ששני בלוקים של טקסט מקור זהים יובילו לפלט צופן שונה. לצורך הבלוק הראשון משתמשים במפתח נוסף המכונה וקטור אתחול (Initialization Vector) או IV שגודלו כגודל הבלוק, אותו מחברים ב-XOR עם בלוק המידע הראשון. הקריפטואנליזה הבולטת ביותר והראשונה נגד DES שסיבוכיותה טובה מעט יותר מכח גס, התגלתה על ידי אלי ביהם, כיום פרופסור בטכניון והמנחה שלו לדוקטורט עדי שמיר, כיום פרופסור במכון ויצמן למדע. הם פרסמו ב-1990 את עבודת הדוקטורט שלו שעסקה בקריפטואנליזה דיפרנציאלית – טכניקה רבת עוצמה שהתגלתה ככלי יעיל נגד אלגוריתמים סימטריים מודרניים רבים. אך קריפטואנליזה דיפרנציאלית מסוגלת לגלות מפתח הצפנה של DES עם 2 47 {\displaystyle 2^{47}} דגימות קלט-פלט נבחרות של האלגוריתם לפי מודל התקפת גלוי-נבחר שזה אינו מעשי. התקפה טובה יותר המוכרת כיום נגד DES היא קריפטואנליזה ליניארית, שמציעה שיפור על פני קודמתה. מלבד יכולתה לגלות מפתח DES עם 2 43 {\displaystyle 2^{43}} קלטים, אין צורך עבורה בטקסט-מקור נבחר אלא כל טקסט אפשרי. התקפה זו נקראת התקפת גלוי-ידוע. התקפה אחרת מודרנית יותר היא התקפה אלגברית של ניקולס קורטויס וגרגורי בראד משנת 2007, שהיא תחום מתפתח בקריפטואנליזה מודרנית. זוהי התקפה קריפטוגרפית הפועלת רק עם טקסט מקור יחיד והיא מנצלת אלגוריתמים לפתרון בעיות SAT כדי לגלות חולשות אלגבריות בצופן. DES נופל בקטגוריה של צפנים סימטריים הנקראת HFE שמבוססת על הקושי שבפתרון משוואות ריבועיות מרובות נעלמים שידועה כבעיית NP-קשה. אמנם מבחינה מעשית כאשר מערכת המשוואות "דלילה" אפשר לפעמים לפתור בעיה זו ביעילות, אך בפועל התקפה זו מצליחה רק נגד שישה סבבים של הצופן אבל היא אינה מעשית נגד DES במלואו. ההתקפה הדיפרנציאלית והליניארית דורשות כמות עצומה של טקסטים מוצפנים ומקורותיהם (בסדר גודל של מאות טרה-בייט) על מנת למצוא את מפתח ההצפנה ולכן אינן מהוות איום ממשי על האלגוריתם. עובדה זו מעידה על חוסנו ועל טיבו של האלגוריתם יותר מאשר על חולשתו. למרות כל השנים טרם נמצאה התקפה היעילה באופן משמעותי מכח גס. מסתבר שההתקפה המעשית היחידה נגד DES היא התקפת כוח גס מקבילית באמצעות חומרה ייעודית. ב-1993 טען מיכאל ויינר שאפשר לבנות בהשקעה של כמיליון דולר מכונה שתפצח את DES בתוך 3.5 שעות במקרה הממוצע. לפי התכנון המקורי שלו המכונה צריכה להכיל כ-57,000 שבבים המסוגלים להריץ את DES במקביל. מאוחר יותר נבנתה מכונה כזו הלכה למעשה ובעלות נמוכה בהרבה. הארגון Electronic Frontier Foundation בנה מכונה לשבירת צופן DES בעלות של 250,000 דולר שבאמצעותה גילוי המפתח מתבצע בתוך יומיים וחצי בקירוב. כיום ניתן בהחלט לבנות מכונות מסוג דומה במחירים נמוכים בהרבה ובזמנים טובים יותר במידה ניכרת. התקפה אחרת כנגד DES הנקראת התקפת יום הולדת והיא התקפה אקראית מקבילית היעילה אף יותר מההתקפות המתוארות. התקפה זו מנצלת את תופעת פרדוקס יום ההולדת הידועה ומתבססת על ההנחה שהסיכויים ששני מפתחות שונים שנבחרו באקראי יניבו תוצאה זהה (עם טקסט מקור קבוע), גבוהים. Quisquater ו-Delescaille הראו שאפשר בהתקפה כזו לגלות מפתח DES ב-   2 55 {\displaystyle \ 2^{55}} ניסיונות במקרה הממוצע. חולשתו העיקרית של DES היא גודל מפתח ההצפנה. גודל המפתח האפקטיבי של DES הוא רק 56 סיביות, שכן שמונה מתוך 64 סיביות המפתח נחשבות כסיביות זוגיות ואינן משפיעות על ההצפנה. בעיקר בשל עובדה זו נחשב DES בימינו כ"הצפנה חלשה" ואינו בטוח לשימוש בגרסה הבסיסית. דרך בטוחה יותר וזולה ליישום DES היא הצפנה מרובה. כלומר הצפנה חוזרת של הטקסט עם מפתחות הצפנה שונים. שיטה אחת כזו נקראת "2DES" או DES כפול. אם   K 1 , K 2 {\displaystyle \ K_{1},K_{2}} הם שני מפתחות DES שונים בגודל 56 סיביות כל אחד, ו-   M {\displaystyle \ M} הוא המסר המיועד להצפנה, השיטה היא:   DES 2 = DES K 2 (   DES K 1 (   M   ) ) {\displaystyle \ {\mbox{DES}}2={\mbox{DES}}_{K_{2}}(\ {\mbox{DES}}_{K_{1}}(\ M\ ))} במקרה זה מתקבל צופן DES עם מפתח הצפנה בגודל 112 סיביות. אף לא אחת מההתקפות המתוארות לעיל ישימה כנגד צופן עם מפתח בסדר גודל כזה. גם לא מתקפת כוח גס מקבילית על חומרה ייעודית. אולם מסתבר ששיטה זו פגיעה לתקיפת היפגשות באמצע. בהתקפה זו מנצלים זיכרון על חשבון זמן ביצוע: אם מאחסנים טבלת גיבוב של   2 56 {\displaystyle \ 2^{56}} הצפנות DES עם מפתחות שונים הממוינות לפי סדר וחיפוש התנגשויות, אפשר לקצר את זמן ההתקפה ל-   2 57 {\displaystyle \ 2^{57}} . כמות הזיכרון האדירה הדרושה להתקפה כזו עושה אותה כמעט בלתי ישימה באופן מעשי, אך ישנן שיטות לצמצום עלויות הזיכרון כך שאפקטיבית סיבוכיות התקפת כוח גס נגד DES כפול אינו עולה על 2 57 {\displaystyle 2^{57}} . שיטה טובה יותר נקראת DES משולש (3DES). קיימות שתי גרסאות DES משולש: בשיטה הראשונה מצפינים את המידע שלוש פעמים עם שלושה מפתחות שונים, ומסמנים זאת בקיצור EEE. השיטה הרווחת יותר היא וריאציה של DES משולש עם שני מפתחות המסומנת EDE. דהיינו מצפינים, מפענחים ושוב מצפינים. השיטה נראית כך:   DES 3 = DES K 2 (   DES K 1 − 1 (   DES K 2 (   M   ) ) ) {\displaystyle \ {\mbox{DES}}3={\mbox{DES}}_{K_{2}}(\ {\mbox{DES}}_{K_{1}}^{-1}(\ {\mbox{DES}}_{K_{2}}(\ M\ )))} כאשר   DES K 1 − 1 {\displaystyle \ {\mbox{DES}}_{K_{1}}^{-1}} נקרא פענוח עם המפתח   K 1 {\displaystyle \ K_{1}} . הסיבה למבנה זה היא בעיקר לצורך תאימות לחומרה הקיימת. ההתקפות המתוארות לעיל אינן ישימות כנגד שיטה זו ולמרות היותה איטית יותר היא נמצאת בשימוש נרחב כיום. כאמור בשל טכניקת היפגשות באמצע, אפקטיבית ביטחון DES משולש הוא רק 2 112 {\displaystyle 2^{112}} . גרסה אחרת של DES שפותחה על ידי רון ריבסט מחברת RSA נקראת DES-X. בשיטה זו מצפינים את המידע שלוש פעמים בתוספת שתי מחרוזות אקראיות בגודל 64 סיביות. דרך אחת לייצג זאת היא XEX (הצפנה בשילוב XOR לפניה ואחריה). אם   K 1 {\displaystyle \ K_{1}} הוא מפתח ההצפנה ו-   K 2 , K 3 {\displaystyle \ K_{2},K_{3}} הם מחרוזות אקראיות באורך 64 סיביות השיטה היא: C = K 3 ⊕ DES-X K 2 ( M ⊕ K 1 ) {\displaystyle C=K_{3}\oplus {\text{DES-X}}_{K_{2}}(M\oplus K_{1})} M = K 1 ⊕ DES-X K 2 ( C ⊕ K 3 ) {\displaystyle M=K_{1}\oplus {\text{DES-X}}_{K_{2}}(C\oplus K_{3})} תיאור מילולי: בתהליך ההצפנה תחילה מחברים ב-XOR את הקלט עם המפתח K 1 {\displaystyle K_{1}} , את התוצאה מצפינים עם אלגוריתם DES כרגיל עם המפתח K 2 {\displaystyle K_{2}} ולאחר מכן מחברים את התוצאה האחרונה ב-XOR עם המפתח K 3 {\displaystyle K_{3}} . בפענוח מבצעים את הפעולות המתוארות בסדר הפוך. ריבסט כינה את תוספת המפתחות הלבנה. הסימן   ⊕ {\displaystyle \ \oplus } מייצג פעולת XOR. למרות היותה יעילה יותר מ-DES משולש, שיטה זו פחות נפוצה. DES נחשב לצופן מהיר בחומרה (כוונת המפתחים מלכתחילה הייתה לייעדו לחומרה) והוא מציג ביצועים טובים מאוד בחומרה אפילו בהשוואה לצפנים מודרניים. כאמור אם דרוש ביטחון גבוה יותר ממה שהצופן המקורי מציע, אפשר להשתמש בגרסת DES-X של ריבסט המתוארת לעיל עם שני מפתחות הצפנה סודיים נוספים. התקורה הנוספת הנובעת מהוספת שערי XOR של שני המפתחות הנוספים היא כ-14 אחוז. התוספת הזו מחזקת את הצופן נגד כוח גס והתקפת איזון זמן/זיכרון שהיא אפקטיבית נגד הגרסה המקורית. גם התקפות אחרות אינן ישימות נגד מבנה זה בשל תוספת המפתחות ולכן הוא נחשב בטוח מאוד, במיוחד לאור העובדה שזהו הצופן הוותיק והנחקר ביותר בהיסטוריה של ההצפנה. ידוע ש-DES מכיל תכונות אקראיות טובות והוא חזק באופן יוצא דופן נגד קריפטואנליזה דיפרנציאלית וליניארית. כאשר נדרש צופן קל משקל (lightweight) במיוחד, אפשר להתאים את DES-X על שימוש בתיבת החלפה אחת במקום בשמונה הקיימות ובכך להפחית באופן משמעותי את כמות השערים. לגרסה זו קוראים DESL (קיצור של DES Lightweight). היא הוצעה ב-2006 על ידי Gregor Leander, Christof Paar, Axel Poschmann, ו-Kai Schramm. ניתן לממשה בחומרה עם 1848 GE (תואמי שערים לוגיים), זאת מבלי לאבד מהתכונות הטובות של הצופן המקורי למעט החיסרון הברור של המפתח הקצר. אם משלבים את DES-X עם DESL (מוסיפים עוד שני מפתחות) מתקבל הצופן DESXL שהוא גם בטוח וגם מהיר מאוד במיוחד בחומרה מוגבלת משאבים וצריכת אנרגיה נמוכה כמו חיישנים לבישים או RFID. השינויים בצופן כמובן עלולים שלא במודע לפתוח פתח להתקפות קריפטוגרפיות חדשות, ולכן הצופן אינו מומלץ כתחליף ל-AES אלא רק במקרים בהם מעדיפים להתפשר על ביטחון לצורך יעילות וקלות הטמעה במערכת מוגבלת. הרעיון הוא שבמקום לפתח צופן חדש אפשר לשנות מעט את הצופן הקיים ולקבל צופן טוב במחיר מועט. AES מדיה וקבצים בנושא DES בוויקישיתוף הספר Handbook of Applied Cryptography, פרק 7 Parallel Collision Search with Application to Hash Functions and Discrete Logarithms DES, באתר אנציקלופדיה בריטניקה (באנגלית) Algebraic Cryptanalysis of the Data Encryption Standard New Lightweight DES Variants