צופן בלוקים

בקריפטוגרפיה, **צופן בלוקים** (באנגלית: **Block cipher**) הוא פרימיטיב קריפטוגרפי סימטרי, הפועל על מחרוזת סיביות באורך קבוע הנקראת **בלוק** באמצעות טרנספורמציה קבועה. צופן בלוקים מקבל בלוק של סיביות **טקסט-גלוי** (או תַּמְלִיל פָּשׁוּט) ומפתח הצפנה סודי ומפיק בלוק **טקסט-מוצפן** (או תַּמְלִיל מֻצְפָּן). כאשר תוצאת הטרנספורמציה נקבעת על ידי מפתח ההצפנה. פענוח מתבצע באופן דומה, אלגוריתם הפענוח מקבל בלוק סיביות טקסט-מוצפן והמפתח שאיתו הוצפן ומחזיר את בלוק הסיביות המקורי. צופן בלוקים הוא פרימיטיב קריפטוגרפי ורסטילי ומשמש מרכיב קריטי כמעט בכל מערכת הצפנה מודרנית.

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

DES שפותח על ידי IBM בשיתוף עם NSA ופורסם ב-1977 הוא דוגמה לאחד מצפני הבלוקים הראשונים והמשפיעים ביותר בקריפטוגרפיה המודרנית. הצופן התבסס על טכניקות שפיתח מהנדס יבם, האמריקאי-גרמני הורסט פייסטל, שאותם יישם תחילה בצופן שלו לוציפר. ממשיכו של DES הקרוי AES שאומץ כתקן הצפנה רשמי ב-2001, נמצא כיום בשימוש מאסיבי ומהווה מרכיב בסיסי וחשוב כמעט בכל מערכת אבטחת מידע מודרנית.

### הגדרה פורמלית
צופן בלוקים בהגדרה פורמלית הוא תמורה פסידו-אקראית עם מפתח, המסומנת בקיצור PRP, מהצורה:

:F:\{0,1\}^k \times \{0,1\}^n \rightarrow \{0,1\}^n

היא מקבלת את הפרמטרים הבאים: מחרוזת בינארית K\in\{0,1\}^k באורך k סיביות ומחרוזת בינארית P\in\{0,1\}^n באורך n סיביות ומפיקה מחרוזת בינארית C\in\{0,1\}^n באורך n סיביות והפעולה ההופכית שלה מקבלת את C ומחזירה את P. אפשר לסמן זאת בקיצור:

:C=E_K(P)
:P=D_K(C)

פונקציית הפענוח D היא הפונקציה ההופכית E^{-1}. לצורך הפורמליות הפונקציה המתוארת הפיכה אם עבור כל טקסט קריא P ומפתח K נתונים מתקיים D_K(E_K(P))=P. כדי למנוע התנפחות לא רצויה מקובל שגודל הבלוק המוצפן C יהיה כגודל הבלוק המקורי P. כמו כן משיקולי יעילות רצוי שלא יהיה הבדל גדול בין פונקציות ההצפנה והפענוח, כך שניתן יהיה ליישמן באותה חומרה או תוכנה. דרך אחרת לייצג צופן בלוקים היא על ידי שלישיית האלגוריתמים:

:\mathcal{SE}=\{\mathcal{K}_e,\mathcal{E},\mathcal{D}\}

כאשר \mathcal{K}_e הוא אלגוריתם הכנה המשתמש במפתח הסודי המסופק על ידי המשתמש כדי לייצר מפתח הצפנה מתאים לצורך ההצפנה. \mathcal{E} היא פונקציית הצפנה - encryption ו-\mathcal{D} היא פונקציית פענוח - decryption שהיא הפונקציה ההופכית. תאורטית רצוי שעבור כל מפתח K\in\mathcal{K} הפונקציה E_K תהיה פרמוטציה (או פונקציה חד-חד-ערכית ועל) אקראית מעל 2^n! הבלוקים האפשריים בגודל n סיביות. במקרה כזה אפשר להגיע לצופן מושלם שאינו ניתן לשבירה אפילו ליריב בעל עוצמת חישוב בלתי מוגבלת. אולם הבעיה היא שמרחב המפתח חייב להכיל לפחות 2^n! מפתחות אפשריים מה שאומר שגודל המפתח אפקטיבית חייב להיות בערך \mbox{log}_2(2^n!) \approx (n-1.44)2^n סיביות. זה לא מעשי במיוחד כש-n גדול. לכן מקובל שפונקציית הצפנה "תראה" מבחינה חישובית כאקראית מה שמספק ביטחון חישובי, שמותאם ליריב בעל עוצמת חישוב מוגבלת בזמן ובמקום. מקובל שהמפתח K המסופק על ידי המשתמש יהיה קצר ובאמצעות פרוצדורת 'הרחבת מפתח' מתאימה נמתח לאורך הרצוי. המפתח מורחב באופן שאינו מאפשר תאורטית (או בכל אופן קשה מאוד מבחינה חישובית) לנחשו ללא ידיעת K.

היות שצופן בלוקים במהותו דטרמיניסטי, בדרך כלל אין משתמשים בו ישירות אלא כחלק מאופן הפעלה כלשהו. אם משתמשים בצופן הבלוקים באחד מאופני הפעלה הכוללים וקטור אתחול, מתקבלת פונקציה מצורה אחרת. הפונקציה מקבלת את K\in\{0,1\}^k ואת P\in\{0,1\}^* הכוכבית מציינת שאורכו אינו מוגדר ויכול להיות כל אורך שרירותי עד גבול מסוים וכן **וקטור האתחול** V\in\{0,1\}^v באורך v סיביות ומחזירה את C\in\{0,1\}^*, היא נראית כך:

:\mathcal{E}:\{0,1\}^k\times\{0,1\}^v\times\{0,1\}^*\rightarrow\{0,1\}^*

דרך אחרת לאופן הפעלה היא צופן בלוקים בר התאמה. באופן זה אפשר להשתמש בצופן הבלוקים ישירות ואין צורך להחליף מפתח הצפנה. לצורך כך יש להוסיף פרמטר שנקרא Tweak (התאמה) המשרת כמו וקטור אתחול. הפונקציה מקבלת את K\in\{0,1\}^k, את המשתנה הנוסף T\in\{0,1\}^t והמסר P\in\{0,1\}^n ומחזירה את C\in\{0,1\}^n, היא נראית כך:

:\tilde{E}:\{0,1\}^k\times\{0,1\}^t\times\{0,1\}^n\rightarrow\{0,1\}^n


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

את היסודות לצופן הבלוקים המודרני הניח קלוד שאנון אבי תורת האינפורמציה. במאמר חשוב מ-1949, הסביר את עקרונות השיטה מהיבט של תורת האינפורמציה וסיפק הוכחות מתמטיות. הוא הגה לראשונה את רעיון ה**הרכבה** של צופן החלפה (שיכול) עם צופן העתקה (טרנספוזיציה), כדי לקבל פונקציית הצפנה חזקה. הוא כינה זאת שילוב של פיזור (diffusion) וערבוב (confusion), הפיזור נועד להבטיח שהמפתח והטקסט הקריא ישפיעו על כל סיביות הצופן במידה שווה וערבוב נועד לגרום לקשר בין הצופן למקור או המפתח להיות רחוק ככל האפשר. כמו כן הגה את רעיון האיטרציה, כלומר מפעילים **פונקציה פנימית** כלשהי במספר חזרות, כאשר פלט סבב אחד הופך קלט לסבב הבא וכן הלאה. המטרה של האיטרציה היא יצירת אפקט כדור השלג או **אפקט מפולת**, כלומר לאחר מספר חזרות של פונקציות הערבוב/פיזור כל שינוי של סיבית בודדת בקלט יגרום לשינוי גדול בפלט, במקרה הממוצע לפחות מחצית מסיביות הפלט. מְפַתֵּח הצופן קובע את מספר הסבבים כדי להגיע לרמת ביטחון רצויה. אפשר ליצור צופן חזק יותר על ידי ביצוע מספר גדול מאוד של סבבים, אולם יעילותו תפגע בהתאם.

נהוג לקרוא לפונקציה הפנימית **פונקציית סבב** (round function) וכן נהוג לסמנה F-Box או בקיצור F. הפונקציה הפנימית מקבלת כפרמטר מלבד את הבלוק הנוכחי, קטע מתאים ממפתח ההצפנה, אותו מפיקים באמצעות תהליך הכנה נפרד. לעיתים נוספת פעולת הלבנה שהיא חיבור עם חלק ממפתח ההצפנה באמצעות פעולת XOR (שמיוצג כאן על ידי הסמל \oplus) לפני הסבב הראשון ולאחר הסבב האחרון. ולעיתים נוספות פעולות אחרות שאינן קריפטוגרפיות אלא בעיקר טכניות כמו התמורה הפותחת בצופן DES.

להלן מבנה טיפוסי של צופן בלוקים:
שמאל|ממוזער|450px|שלד בסיסי של צופן בלוקים

:M_0=M\oplus K_0
:\text{For }i=1\text{ to }r\text{ do: }M_i=F_{K_i}(M_{i-1})
:C=M_r \oplus K_{r+1}

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

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

### גודל הבלוק
ביטחון כל צופן בלוקים תלוי מלבד באורך המפתח, גם באורך הבלוק. המשמעות של גודל בלוק מהיבט של קריפטואנליזה הוא בעיקר סיבוכיות מקום. הוכח למשל שלפי מודל התקפת גלוי-נבחר גם אם הצופן "מושלם" (למשל נניח שהוא פונקציה אקראית אמיתית) עדיין באפשרות היריב, בהתקפת הבחנה, להשיג סיכויי הצלחה קרובים ל-\textstyle\frac{1}{2}+\frac{q^2}{2^{(n-1)}} להבחנה בין טקסטים מוצפנים שהופקו על ידי צופן הבלוקים המותקף לבין טקסטים אקראיים באותו אורך. כאשר n הוא אורך הבלוק בסיביות ו-q הוא מספר השאילתות שהמתקיף רשאי להגיש לאורקל כשכל אחת באורך q בלוקים (בקריפטואנליזה תאורטית שאילתה משולה להשגת תוצאת הצפנה של בלוק גלוי מסוים בדרך לא קריפטוגרפית, כמו בדרך גנבה או הונאה של הקורבן). אם הבלוק באורך 64 סיביות ההתקפה האמורה מעשית אם באפשרות המתקיף לבצע q\approx 2^{30} שאילתות (לחלופין אם הצליח להשיג בדרך כלשהי 2^{30} בלוקים גלויים באורך 64 סיביות והבלוקים המוצפנים שהוצפנו עם אותו מפתח, שזה בערך כשני ג'יגה-בייט של מידע ובמונחים של הזיכרון הזמין בימינו אינו הרבה). מצד שני בלוקים ארוכים מדי עלולים לפגוע ביעילות האלגוריתם, לכן לאיזון בין יעילות לביטחון חשיבות רבה בקביעת גודל הבלוק. גודל הבלוק בצפנים הישנים (עד שנת 2000 בקירוב) היה 64 סיביות כמו ב-DES או IDEA וכדומה. בימינו אם הבלוק הוא פחות מ-128 סיביות הצופן נחשב חלש. יתרה מזו, ישנן התקפות כוח גס שעושות שימוש בזיכרון כדי לקצר את זמן החישוב כמו התקפת איזון זמן/זיכרון. אם אורך הבלוק הוא 64 סיביות סיבוכיות התקפה כזו כמעט מעשית. כדי לפצח צופן בלוקים עם בלוק באורך 128 סיביות בטכניקת איזון זמן/זיכרון, יש צורך באחסון מעל 2^{64} בלוקים באורך 128 סיביות. זהו מספר אסטרונומי שאינו ניתן ליישום בטכנולוגיה הנוכחית.

### תכונות
בבדיקת איכות צופן בלוקים מביאים בחשבון מספר היבטים חשובים, ביניהם:
***גודל מפתח וגודל בלוק**. ערכים אילו קובעים בדרך כלל את הגבול העליון של הביטחון המשוער של הצופן. באופן כללי אורך מפתח משפיע על סיבוכיות זמן ואורך הבלוק על סיבוכיות מקום.
***ביטחון**. הערכת ביטחון המסתמכת על ניסיונות אינטנסיביים מצד אנליסטים רבים לתקוף את הצופן עם מיטב ההתקפות הקריפטוגרפיות הידועות. בראשן קריפטואנליזה דיפרנציאלית, קריפטואנליזה ליניארית, התקפת ערוץ צדדי ועוד.
***יעילות בתוכנה**. סיבוכיות יישום הצופן בתוכנה, יעילות ומורכבות הקוד, צריכת זיכרון, שימוש בתת-בלוקים המתאימים לגודל מילה במעבד, סיבוכיות פעולות אלגבריות וכדומה.
***יעילות בחומרה**. יצרנים שואפים להטמיע צופן בלוקים בחומרה ייעודית כדי לשפר ביצועים. יכולת הטמעה בחומרה נמדדת במספר השערים המינימלי הדרוש ליישומו, אפשרות למקביליות, צריכת אנרגיה, מורכבות קוד ופשטות פעולות האלגוריתם.
***ביצועים**. תפוקת האלגוריתם נמדדת במספר הבתים שניתן להצפין בשנייה על מגוון פלטפורמות, כמו מעבד 64 סיביות או 8 סיביות. השאיפה כיום היא להגיע למהירויות של 10Gbps.
***גמישות**. גמישות נמדדת ביכולת להתאימו למגוון רמות של ביטחון או מגוון אופני שימוש. כמו שימוש במפתח הצפנה קטן יותר, או הרתמתו לצורך פונקציית גיבוב או קוד אימות מסרים.
***פשטות וקלות ניתוח**. האלגוריתם צריך להיות פשוט וקל להבנה באופן שמאפשר ניתוח ובדיקה על ידי מיטב המומחים. למשל אחת הטכניקות הידועות לניתוח צופן בלוקים היא בדיקה של מידת הביטחון שלו עם מספר מצומצם של סבבים, פחות ממה שהצהירו המפתחים. בדרך זו קל יותר לאמוד את חוסנו כמו גם לגלות פרצות ונקודות חולשה.
***זכויות יוצרים ופטנטים**. זכויות יוצרים לעיתים מעכבים או מונעים תיקנון הצופן בקנה מידה גדול. גופי תקינה מעדיפים בדרך כלל אלגוריתמים חופשיים.

### תיבות החלפה
**תיבת החלפה** (substitution box) בקיצור s-box היא פונקציה לא ליניארית שמחליפה את הקלט בפלט שנקבע לפי ערכים שרירותיים כלשהם. תיבות החלפה שהוצגו לראשונה בצופן DES הן אוסף של פונקציות אי-ליניאריות שתפקידן לפי התאוריה של שאנון להוסיף ערבוב (confusion) לצופן, כך שהקשר בין המפתח לבין הטקסט המוצפן יהיה קלוש ככל האפשר. תיבות ההחלפה ניתנות ליישום במחשב באמצעות טבלאות אחזור בדרך כלל קבועות כמו ב-DES כלומר שערכיהן מקודדים מראש, או דינאמיות (תלויות במפתח ההצפנה) כמו בצופן Blowfish. תיבות החלפה מופיעות בצפנים מודרניים רבים והן מהוות מרכיב אי-ליניארי קריטי שמחזק את הצופן במיוחד נגד קריפטואנליזה דיפרנציאלית, למשל לולא תיבות ההחלפה היה ניתן לפרוץ את DES בקלות.

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

תיבות ההחלפה ניתנות לייצוג כמערך דו-ממדי של מספרים שלמים בגודל מסוים. הגודל בסיביות נקבע בשלב התכנון. בהינתן הקלט x בגודל המתאים ההחלפה מתבצעת פשוט על ידי החזרת הערך המצוי בכניסה x בטבלה, כלומר הקלט עצמו משמש אינדקס לערך המתאים בטבלה. במקרה של טבלה דו-ממדית m\times n האיחזור מתבצע על ידי שני ערכים i,j כאשר אחד מייצג את מספר העמודה והשני את מספר השורה. תיבת ההחלפה נקראת גם טבלת אחזור (lookup table), במחשב איחזור ערך מתבצע בזמן קבוע והוא יעיל.
שמאל|ממוזער|200px|דוגמה לפעולת החלפה עם חלק מתיבות ההחלפה של AES

לדוגמה צופן ריינדל משתמש בטבלת החלפה בגודל 16\times 16 כניסות, כל כניסה מכילה בית אחד (שהוא ערך בטווח 0–255). למען הנוחות הבתים מיוצגים בבסיס הקסדצימלי, כך ששני הניבלים (חצאי בתים) בכל כניסה מיוצגים על ידי שתי ספרות הקסדצימליות. לביצוע ההחלפה הקלט שהוא בגודל בית אחד מחולק לשני חצאים, הניבל המשמעותי (הגבוה) משמש כאינדקס לשורה והשני לעמודה. בתרשים מופיע חלק מטבלת ההחלפה של AES. אם למשל הקלט הוא \text{0x31} הפלט יהיה הערך שבשורה 3 בעמודה 1 שהוא \text{0xc7}. אפשר להציג זאת כפונקציה S(\text{0x31})=\text{0xc7} או b_{i,j}=S(a_{i,j}) כאשר i,j הם האינדקסים לשורה ולעמודה בהתאמה.

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

[שמאל|ממוזער|300px|מראה רשת פייסטל בסיסית. הסימן <math>\oplus</math> מייצג XOR ו-<math>F</math> היא טרנספורמציה כלשהי שהיא הליבה של הצופן, שילוב של מספר פעולות אלגבריות ופעולות [תלות ליניארית|אי-ליניאריות]]

### רשת פייסטל

רשת פייסטל היא המבנה הפופולרי ביותר של צופן בלוקים והיא קרויה על שם ממציאה הורסט פייסטל. מבנה זה פותח במעבדות IBM לפני המצאת התקן הישן DES ונחשב עד ימינו כמבנה בטוח. כמתואר בתרשים משמאל, זהו מבנה חסכוני שממיר טרנספורמציה F שהיא פונקציה חד-כיוונית פסאודו אקראית כלשהי שאינה בהכרח הפיכה, או סט של טרנספורמציות המאוגדים יחד בכינוי F-box לפרמוטציה. כלומר שההצפנה תהיה הפיכה ופענוח יתאפשר בהפעלת אותה פונקציה בשינוי סדר בתי המפתח בלבד ולא יהיה צורך בפונקציית פענוח נפרדת. רשת פייסטל מחלקת את בלוק הטקסט הקריא לשני חצאים, מפעילה את הפונקציה F על מחצית אחת, כאשר התוצאה הופכת למפתח הצפנה איתו מצפינים את המחצית השנייה באמצעות XOR ואז שני החצאים מחליפים מקומות, דהיינו פלט צד ימין הופך לקלט צד שמאל וחוזר חלילה עד להשלמת כל הסבבים. אפשר לראות שהפענוח הוא חזרה על התהליך במהופך, כיוון שבכל סבב השינוי משפיע רק על מחצית אחת (היות שההצפנה מבוצעת ב-XOR היא הפיכה, כלומר חיבור חוזר ב-XOR עם המפתח מחזיר את הערך המקורי). רשת פייסטל נמצאת בשימוש בצפני בלוקים אחדים, ביניהם DES, Twofish, MARS והיא פופולרית בשל הפשטות וקלות היישום.

קיימות מספר וריאציות של רשת פייסטל, ביניהן כאלו שמבוצעות עם ארבעה או יותר חלקים, כאשר בכל סבב חלקם עוברים טרנספורמציה בהתאם לאחרים ולאחר מכן מחליפים מקומות בסדר מסוים (כמו בצופן MARS). רשת פייסטל הבסיסית (כמתואר בתרשים) היא; בהינתן פונקציה F ומפתח הצפנה מחולק לתת-מפתחות K_0,K_1,...,K_n, בלוק הקלט המיועד להצפנה M מחולק לשני חצאים L_0,R_0 ואז:

:L_{i+1}=R_i
:R_{i+1}=L_i\oplus F_{K_i}(R_i)
שמאל|ממוזער|300px|מראה רשת החלפה תמורה, <math>S_i</math> מייצגים תיבות החלפה (מפורטים בהמשך), <math>P</math> היא תיבת תמורה (permutation)

פלט הצופן יהיה L_{n+1},R_{n+1} והפענוח מתבצע בסדר הפוך הקלט הוא L_{n+1},R_{n+1} והפונקציה מתחילה מ-i=n ויורדת עד i=0 כשבכל שלב:
:R_i=L_{i+1}
:L_{i}=R_{i+1}\oplus F_{K_i}(L_{i+1})

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

### רשת החלפה תמורה

רשת החלפה-תמורה היא מבנה בסיסי של פונקציית ההצפנה הפנימית של צופן בלוקים, לפי הרעיון שהגה לראשונה קלוד שאנון אבי תורת האינפורמציה. היא יושמה לראשונה בצופן DES. רשת החלפה-תמורה בקיצור SPN מקבלת בלוק קלט ורשימה של תת-מפתחות הצפנה במספר הדרוש ומבצעת שלוש "טרנספורמציות" עיקריות על כל סיביות הבלוק שנקרא לפעמים 'מצב' (state), במספר חזרות שנקבע מראש כשכל מפתח משמש בסבב אחד. הטרנספורמציות כוללות: שכבת החלפה אי-ליניארית, שכבת פיזור ליניארית (תמורה) ושכבת הוספת מפתח סודי, לא בהכרח לפי סדר זה. במקרה של צופן המיושם במבנה פייסטל כמו DES הפענוח מתבצע עם אותה פונקציה אך בהיפוך סדר המפתחות בלבד. לעומת זאת בצופן כמו AES שאינו בנוי בסגנון רשת פייסטל, אלא הפונקציה הפנימית שלו משפיעה על כל סיביות בלוק הקלט באופן אחיד, כל הטרנספורמציות של הפונקציה הפנימית כולל הפונקציה האי-ליניארית, חייבות להיות הפיכות כדי שהפענוח יצליח. כדי שתהיה בטוחה רשת החלפה-תמורה חייבת לכלול טרנספורמציה אי-ליניארית. בעיקר, הפונקציה האי-ליניארית מהווה את עיקר חוסנו של צופן הבלוקים נגד קריפטואנליזה ליניארית ודיפרנציאלית רבות העוצמה, לכן צריך להשקיע מאמץ ומחשבה רבה בתכנון הפונקציות האי-ליניאריות כך שיהדפו התקפות מסוג זה. קיימות שתי שיטות עיקריות להוספת אי-ליניאריות לצופן, הראשונה מתבססת על תיבות החלפה והשנייה על פעולת חיבור או כפל מודולרי מעל שדה סופי. שתיהן נחקרו היטב ונמצאות בשימוש בצפנים מודרניים רבים.

### רשת אינוולוציה
שמאל|ממוזער|200px|מבנה רשת אינוולוציה של צופן IDEA כאשר MA הוא קיצור של Multiplication-Addition זהו ליבת הצופן המורכבת שילוב פעולות כפל וחיבור בשדות אלגבריים שונים
רשת אינוולוציה שנקראת גם 'מבנה ליי מסי' על שם מפתחי צופן IDEA היא רשת הצפנה הדומה לרשת פייסטל ללא צורך בתיבות החלפה. הקלט מחולק לשני חצאים ובכל סבב לאחר הפעלת הפונקציה הפנימית שנקראת כאן בקיצור MA הצדדים מחליפים מקומות. הפונקציה MA (כמתואר בתרשים) שהוא שילוב של פעולות בחבורות אלגבריות שונות, שאין ביניהן דיסטריבוטיביות או אסוציאטיביות. הפעולות הן כפל מודולו 2^{16}+1 המסומן בקיצור \odot וחיבור בשלמים מודולו 2^{16} המסומן בקיצור \boxplus בשילוב עם XOR המסומן ב-\oplus. למשל אפשר לראות שאם מציבים a=b=c=1 בשתי המשוואות, הביטויים הבאים נכונים:

:a\boxplus (b \odot c)\ne (a\boxplus b)\odot (a\boxplus c)
:a\boxplus (b \oplus c) \ne (a\boxplus b)\oplus c

### ARX
דרך ידועה להוספת "אי-ליניאריות" לצופן היא שילוב של פעולות אלגבריות פשוטות בשדות סופיים שונים כמו חיבור מודולרי, פעולת XOR והזזה מעגלית ויושמה בצפנים מודרניים רבים ביניהם Salsa20 ,Threefish, בפונקציית הגיבוב SipHash ועוד. בדרך כלל משלבים בין חיבור מודולו שלם כלשהו כמו 32 או 64 סיביות (לצורך יעילות), הזזה מעגלית בהיסטים קבועים או דינאמיים ופעולת XOR ששקולה לחיבור מודולו 2, המבוצעות במבנה הנקרא בקיצור ARX דהיינו "או-מוציא של חיבור לאחר הזזה מעגלית" כאשר סדר הפעולות אינו חשוב. מבנה זה אינו עושה שימוש בתיבות החלפה והוכח כבטוח כנגד התקפה דיפרנציאלית וכן עמיד כנגד התקפת תזמון וכן התקפות קריפטוגרפיות אחרות כמו התקפת גלישה והתקפת הזזה מעגלית. חסרונו העיקרי הוא שבגלל פשטותו הרבה יש צורך במספר גבוה יותר של סבבים כדי להשיג שולי ביטחון טובים. במבנה זה נעשה שימוש בצפנים רבים. דוגמה לשימוש כזה היא הפונקציה MIX מצופן Threefish:
:y_0=(x_0+x_1)\text{ mod }2^{64}
:y_1=(x_1\lll R)\oplus y_0

מחברים תחילה את x_0+x_1 מודולו 2^{64} ואז y_1 הוא תוצאת XOR של y_0 עם x_1 לאחר הזזה מעגלית לפי קבוע כלשהו R.

180px|ממוזער|שמאל|מבנה MIX שנעשה בו שימוש בצופן Threefish

## אופני הפעלה

צופן בלוקים בהגדרה נועד להבטחת סודיות של בלוק בגודל קבוע. אך בדרך כלל המידע המיועד להצפנה עולה עשרת מונים על גודל הבלוק. לכן יש צורך לחלקו לבלוקים בגודל המתאים ולהצפינם בזה אחר זה. אם צופן הבלוקים דטרמיניסטי הפעלת פונקציית ההצפנה על בלוק נתון פעם נוספת עם מפתח זהה תניב בלוק צופן זהה. במקרים מסוימים עובדה זו עלולה להוות נקודת תורפה, כיוון שמידע על שכיחות בלוקים זהים עשוי לעזור למתקיף הצופן בחשיפת מידע אודות המערכת. כדי להתגבר על חיסרון זה מיישמים את הצופן במה שקרוי סגנון הפעלה (Mode of operation) בטוח. השיטה הפשוטה ביותר היא פיצול מסר גדול לחלקים נפרדים, כל אחד בגודל הבלוק והצפנתם בנפרד ללא תלות זה בזה. שיטה זו נקראת electronic codebook. בשיטות אחרות כל בלוק מוצפן אחרת. צופן זרם אינו סובל מבעיה זו כיוון שהוא מכיל 'זיכרון', כלומר כל יחידת מידע מוצפנת בהתבסס על מצב פנימי המורכב מתוצאה של הצפנת יחידה קודמת. אפשר לדמות התנהגות צופן זרם גם בצופן בלוקים כך שכל בלוק מוצפן עם מפתח אחר, וגם אם יוצפנו שני בלוקים זהים התוצאה תהיה שונה. בשילוב עם וקטור אתחול אפשר להצפין כמויות גדולות של מידע באופן כזה שלעולם לא יוצפנו שני בלוקים זהים עם מפתח זהה, תופעה זו נקראת הצפנה הסתברותית. השיטות הבסיסיות שעונות להגדרה זו כוללות את CBC ,CFB ,OFB ו-CTR. בשיטות אילו שמים דגש בעיקר על ביטחון ההצפנה ועל התאוששות במצב של שגיאת שידור, אך הן אינן מספקות הגנה מפני שינוי זדוני, מה שקרוי אימות והבטחת שלמות. קיימות שיטות המספקות גם הבטחת שלמות בשילוב קוד אימות מסרים, ביניהן ניתן למנות את: OCB,EAX,CWC וכן CCM ו-GCM.

## קריפטואנליזה

המשימה של *קריפטאנליסט* היא 'שבירת' צופן בלוקים במובן שיהיה באפשרותו לפענח כל טקסט שהוצפן איתו. שבירה טוטאלית היא מצב שבו התוקף מצליח לחשוף את מפתח ההצפנה ששימש להצפנת בלוק מסוים ואז לפענח כל בלוק שהוצפן עם מפתח זה. לעיתים התוקף מצליח לפענח טקסט מוצפן כלשהו מבלי לחשוף את המפתח. **התקפת [[כוח גס]]** היא ההתקפה הישירה והפשוטה ביותר. לפי מודלים שונים של ביטחון (להלן) מהקל לכבד; נתון בידי התוקף בלוק מוצפן אותו הוא מעוניין לפענח, או שבכוונתו לחשוף את מפתח ההצפנה איתו נעשה שימוש כדי לפענח בלוקים אחרים שהוצפנו איתו. במודל חזק יותר, בנוסף בידי התוקף בלוק אחר מוצפן אחד או יותר ויחד איתם בלוקים של טקסט-קריא המתאימים להם (שהוצפנו עם מפתח ההצפנה אותו התוקף מנסה לחשוף). התקפה שמניחה שהתוקף יכול לראות גם את הטקסט המקורי של בלוק מסוים (אך לא של הבלוק המותקף) נקראת התקפת גלוי-ידוע או במקרה חמור יותר היא נקראת התקפת גלוי-נבחר אם ביכולתו לבחור את הבלוקים שברצונו להצפין ולראות את התוצאה (אך עדיין אינו יכול לראות את מפתח ההצפנה או את המקור של הבלוק המותקף). התוקף מנסה את כל המפתחות האפשריים ומריץ את הצופן פעם אחר פעם, בכל פעם עם מפתח אחר עד שעולה על המפתח איתו נעשה שימוש ומנקודה זו ואילך הוא יכול לפענח כל בלוק שהוצפן או יוצפן עם מפתח זה. כל צופן למעט פנקס חד-פעמי ניתן לשבירה באמצעות כוח גס, אך יעילותה ברוב המקרים לא כדאית ואף בלתי אפשרית. למשל ניסוי כל המפתחות האפשריים כאשר המפתח הוא בגודל 256 סיביות בטכנולוגיה הנוכחית עלול להימשך מאות שנים, אפילו בשיתוף פעולה של מיליוני מחשבים. מנקודת ראות תאורטית אין צורך בפועל לשבור צופן, מספיק להוכיח ששבירתו קלה מכוח גס במידה ניכרת כדי להצביע על חולשה. במרוצת השנים פותחו מספר התקפות טובות כנגד צפני בלוקים מהן שיושמו בפועל ולמעשה הביאו לקיצם של כמה אלגוריתמים. מבין ההתקפות העיקריות המפורסמות כיום, אפשר למנות את:
*קריפטואנליזה ליניארית. שהיא שיטה לניתוח צופן סימטרי (לרוב צופן בלוקים), מסוג התקפת גלוי ידוע שבה התוקף מחפש אחר קירובים ליניאריים אפיניים לפעולת הצופן באמצעות הצבות זוגות רבים של טקסטים ידועים ותוצאת הצפנתם, בשאיפה לגזור מהם ערכי המפתח. השיטה התגלתה ב-1992 על ידי הקריפטוגרף היפאני מיטסורו מאטסוי שניסה אותה לראשונה על הצופן FEAL. כיום היעד בצפנים מודרניים בין היתר הוא עמידות כנגד התקפה ליניארית.
*קריפטאנליזה דיפרנציאלית היא שיטת אנליזה שעוסקת בניתוח ההשפעה של שינויים בקלט פונקציה קריפטוגרפית על הפלט שלה. מטרתה היא למצוא היכן הצופן מתנהג בצורה שאינה אקראית וכך לגלות את המפתח. הקריפטואנליזה הדיפרנציאלית פותחה ב-1993 על ידי אלי ביהם ועדי שמיר. צפנים מודרניים בדרך כלל עמידים כנגד התקפה זו, בשלבי הפיתוח מוודאים שהצופן לא מכיל מה שקרוי דיפרנציאלים בעלי הסתברות גבוהה.
*קריפטואנליזה אינטגרלית היא התקפה שמתאימה במיוחד כנגד צופן בלוקים במבנה רשת החלפה-תמורה, בדומה לקריפטואנליזה דיפרנציאלית בשיטה זו בוחנים את תוצאת חיבור XOR של קבוצות של טקסטים גלויים כאשר חלקם קבועים וחלקם משתנים רק בבתים מסוימים שנקראים 'בתים פעילים'. השיטה יושמה לראשונה על ידי לרס קנודסן בהתקפה שנכללה בתיאור הצופן SQUARE שמהווה בסיס לצופן AES. וכן יושמה בווריאציות שונות כנגד צפנים אחרים כמו Twofish.
*slide attack שפותחה ב-1999 על ידי אלקס בריוקוב ויושמה נגד Blowfish. ההתקפה מתמקדת במפתח ההצפנה ומאתגרת את ההנחה שכל צופן חלש ניתן לחיזוק על ידי מספר מרובה של סבבים.
*התקפת בומרנג היא התקפה שמבוססת על אנליזה דיפרנציאלית שפותחה ב-1999 על ידי דויד וגנר. ההתקפה סותרת את ההנחה שאם הצופן אינו מכיל דיפרנציאלים בעלי הסתברות גבוהה הוא בטוח לפחות כנגד התקפה דיפרנציאלית. וריאציות של ההתקפה נוסו בהצלחה על צפנים שונים. בכל אופן חמשת האלגוריתמים שעברו את מבחן תקן ההצפנה החדש אינם מושפעים באופן משמעותי מהתקפה זו.

## ביטחון
בעקרון קשה לתת הגדרה פורמלית לביטחון צופן בלוקים. המודל המקובל של *ביטחון מוכח* נקרא ביטחון סמנטי והוא משתמש במושג שנקרא 'אי-יכולת הבחנה', דהיינו צופן הבלוקים יהיה בטוח אם היריב לא יוכל להבחין בהסתברות גבוהה מחצי באופן ניכר, בין תוצאת הצפנה עם מפתח הצפנה סודי כלשהו לבין פרמוטציה אקראית אמיתית, במקרה כזה הצופן ייקרא PRP-בטוח. ההנחה היא שהטקסט המוצפן אקראי וכן המפתח נבחר באקראי מתוך מרחב המפתחות המקסימלי בהסתברות שווה, או לפחות נראה כאקראי מבחינה חישובית מה שקרוי פסאודו-אקראי. אפשר להציג זאת באמצעות משחק כדלהלן, נניח ש-E הוא צופן בלוקים שאת ביטחונו אנחנו מעוניינים לבדוק. לצורך המשחק נתון אורקל שמסוגל לבחור מפתח הצפנה אקראי כלשהו ולהצפין כל מסר שיתבקש, הוא יכול לשדר את תוצאת ההצפנה אך אסור לו לחשוף את המפתח. היריב שולח מסר כלשהו m לאורקל שפועל כדלהלן; מטיל מטבע ובמקרה שמתקבל עץ, מחזיר ליריב את תוצאת ההצפנה של m באמצעות E עם מפתח אקראי כלשהו שהוא בחר. אם מתקבל פלי הוא מחזיר תמורה אקראית כלשהי. תפקידו של היריב היא לנחש האם הערך שקיבל מהאורקל הוא תוצאה של הצפנת m ששלח קודם לכן או מספר אקראי לא מעניין. במילים אחרות עליו לנחש מה הייתה תוצאת הטלת המטבע. היריב יצליח בהתקפה אם ינחש נכונה בשיעור העולה על 50% במידה ניכרת או כפי שמקובל לומר בשיעור 'בלתי זניח' לפי פונקציית זניחות כלשהי שנהוג לסמנה \epsilon. קיימים מספר מודלים של ביטחון המבוססים על עיקרון זה. במודלים מסוימים מוקנה ליריב כוח רב יותר, כאשר באפשרותו לבחור את הטקסטים אותם הוא מעוניין להצפין, במילים אחרות בידיו זוגות של טקסט-מקורי וטקסט-מוצפן מתאים ומשימתו לגלות את מפתח ההצפנה. בגרסאות חלשות יותר ההתקפה נקראת פסיבית במובן שהתוקף יכול רק לראות טקסט מוצפן אך לא את מקורו.

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

## צופן בלוקים בר התאמה

המושג **צופן בלוקים בר התאמה** (Tweakable Block Cipher) הוצע לראשונה ב-2002 על ידי מוזס ליסקוב, רונלד ריבסט ודויד וגנר. הם פיתחו רעיון ל'פרימיטיב קריפטוגרפי' שלו תכונה נוספת הנקראת tweak (התאמה). זהו צופן בלוקים רגיל שמקבל מלבד הקלט הרגיל שהוא בלוק טקסט גלוי ומפתח הצפנה סודי, ערך נוסף המשמש כווקטור אתחול או nonce, ערך ייחודי וחד-פעמי כלשהו שאינו חייב להיות אקראי או סודי. הרעיון של שימוש בווקטור אתחול כבר קיים בסגנונות ההפעלה של צופן בלוקים אבל ברמה גבוהה יותר (כלומר מופרדת מהצופן עצמו). ההצעה שלהם היא להוריד את התוספת לרמה של הצופן ולהפוך אותה לחלק בלתי נפרד ממנו, לטענתם פיתוח צופן בלוקים שמוטמעת בו יכולת התאמה כזו אינו קשה ובמחיר מועט אפשר לקבל צופן בלוקים עם ביטחון מוכח, כך שתוצאת הצפנת שני בלוקים זהים תהיה שונה תמיד גם אם המפתח זהה. הסיבה לפיתוח מבנה זה היא בשל העובדה שבדרך כלל תהליך הכנת המפתח בצופן בלוקים איטי ויקר במונחי מחשוב כיוון שאינו מעוצב להחלפה תדירה של מפתחות, מה שמאלץ את הפעלת צופן הבלוקים באופן הפעלה מתקדם כלשהו כמו EAX שבא על חשבון יעילות. החלפת וקטור אתחול זולה יותר ולכן מועדפת במקרים שבהם זה אפשרי.

### המרת צופן בלוקים לצופן בלוקים בר התאמה
אפשר להמיר כל צופן בלוקים לצופן בלוקים בר התאמה. דרך אחת שהוכחה כבטוחה על ידי וגנר, ליסקוב וריבסט היא כדלהלן:
:\tilde{E}_K(T,M)=E_K(T\oplus E_K(M)))
T וקטור האתחול, K המפתח ו-M הוא המסר. מצד שני מבנה זה פחות יעיל כי נדרשים להפעיל את צופן הבלוקים פעמיים עבור כל בלוק. אם מחליפים קריאה אחת לצופן הבלוקים בפונקציית גיבוב אוניברסלית פשוטה ומהירה אפשר להגיע לביצועים טובים עם מבנה כמו זה:

:\tilde{E}_{K,h}(T,M)=E_K(M\oplus h(T))\oplus h(T)
כאשר h היא פונקציית גיבוב כלשהי כמו UHASH.

### צופן בלוקים בר התאמה ייעודי
בצופן כזה ה-tweak מובנה בתוכו בשלב הפיתוח. דוגמה טובה לצופן כזה היא Threefish.

## רשימת צפני בלוקים
במרוצת השנים פותחו צפני בלוקים רבים, מהם בטוחים יותר מהם פחות. DES הוא אבן דרך ונקודת ציון חשובה בהתפתחות צופן הבלוקים המודרני. אף על פי שאינו בטוח כיום לשימוש בשל מפתח ההצפנה הקצר, הצופן היה בשימוש מאסיבי ועדיין קיים בשימוש מוגבל בגרסת DES משולש וכן היה לתקן ההצפנה הרשמי הראשון של ממשלת ארצות הברית עד שנת 2001. מספר ניסיונות נעשו כדי להחליפו בהם אפשר למנות את IDEA שפותח ב-1991, RC5 של רונלד ריבסט ו-Blowfish של ברוס שנייר וכן TEA של רוג'ר נידהם ודויד ווילר. תקן ההצפנה המתקדם שהחליף את DES הפך לצופן הפופולרי ביותר כיום והוא בשימוש במרבית מערכות האבטחה המודרניות. למעשה יתר המועמדים המובילים לתקן המתקדם (סרפנט, MARS, Twofish ו-RC6) שלא נבחרו לבסוף, הוערכו כבטוחים לשימוש. להלן רשימה חלקית של צפני בלוקים פופולריים, חלקם עדיין בשימוש כיום וחלקם אף הוכנסו לתקנים הבינלאומיים:

## צופן בלוקים משקל קל
**צופן בלוקים משקל קל** הוא צופן בלוקים המותאם במיוחד להטמעה בחומרה זעירה עם מספר מינימלי של יחידות GE (תואמי שערים לוגיים), עם צריכת אנרגיה הנמוכה ביותר האפשרית, או בתוכנה המינימלית ביותר האפשרית במונחים של צריכת זיכרון, זאת תוך שמירה על הביטחון הגבוה ביותר שניתן להשיג. לאור הניסיון שהצטבר עם השנים, הסתבר שאפשר לפתח צופן בלוקים בטוח מבלי להשתמש בפונקציות פנימיות מסובכות או טבלאות החלפה גדולות על חשבון מספר גבוה יותר של סבבים, שזה אטרקטיבי במיוחד עבור חומרה זעירה. הצורך בפרימיטיבים קריפטוגרפיים קלילים גבר במיוחד עקב התפתחות טכנולוגיית האינטרנט של הדברים ביניהם: התקני תיוג ובקרה כמו RFID, חיישנים אלחוטיים וביו-רפואיים, מחשוב לביש, כרטיס חכם וכן טכנולוגיות בית חכם כמו שליטה ובקרה מרחוק, מנעול אלקטרוני, תאורה, מיזוג אוויר וטמפרטורה מטעמים של חסכון באנרגיה וידידותיות לסביבה. לשם כך קיימת בין היתר רשת אינטרנט 0 שהיא רשת עמית לעמית איטית אך זולה ופשוטה, הפועלת בסביבה מוגבלת משאבים ומאפשרת לכל מכשיר להתקשר עם מכשיר אחר ישירות. חלקם פועלים על אנרגיה חיצונית וחלקם פועלים על סוללה זעירה שאמורה להחזיק מעמד ללא טעינה במשך זמן רב (אפילו מספר שנים). כל המכשירים האמורים כוללים רכיב תקשורת והם משדרים מידע רגיש בצורה כזו או אחרת. כמו כל רשת חובה להגן על התקשורת הזו מפני גורמים עוינים באמצעות קריפטוגרפיה. עקב כך מומחים רבים התמקדו בפיתוח פרימיטיבים קריפטוגרפיים חדשים; צופן בלוקים, צופן זרם, פונקציית גיבוב וקוד אימות קלי משקל. כמו כן NIST הקים סדנת קריפטוגרפיה קלת משקל על מנת לבדוק אפשרות לפתח תקנים מתאימים.

ההגדרה של "משקל" בהקשר של צופן בלוקים מתייחסת לכמה היבטים; הראשון, משקל האלגוריתם מהיבט של המשאבים הדרושים להרצתו, זיכרון וזמן ביצוע. השני, היבט לא פחות חשוב, צריכת האנרגיה שלו. בתוכנה משקל נמדד באמצעות מספר מחזורי שעון הדרוש לעיבוד בית אחד (cpb) שקובע את מהירות האלגוריתם, זיכרון ה-RAM שהוא צורך וכן תקורה נוספת הנובעת מתהליך הכנת מפתח. בחומרה משקל נמדד ביחידות GE כשכל אחת מהן שקולה לשער NAND אחד. יעילות החומרה נמדדת במונחים של תפוקה בתדר מסוים (בדרך כלל 100Hz) וכן מביאים בחשבון תקורה כמו זמן טעינת מפתח וכיוצא בזה.

תקן איזו ISO/IEC 29192-2 קטגורית צופן בלוקים קל משקל כולל את הצפנים PRESENT ו-CLEFIA. להלן רשימה חלקית של צפני בלוקים מודרניים קלי משקל ומאפייניהם:

## שימושים
צופן בלוקים נקרא 'פרימיטיב קריפטוגרפי' במובן שאין משתמשים בו לבד אלא כחלק ממערכת שנותנת מענה להיבטים שונים של אבטחת מידע, ביניהם פרוטוקולים להעברת מפתח, ייצור מספרים אקראיים ופונקציות גיבוב או חתימה דיגיטלית. מלבד הצפנה של בלוק טקסט, צופן בלוקים יכול לשמש מרכיב בסיסי במספר אלגוריתמים או פרוטוקולים קריפטוגרפיים, מהם ניתן למנות:
*צופן זרם. אופני הפעלה שונים של צופן בלוקים מדמים צופן זרם כמו OCB או CBC. באופן זה ניתן להצפין מנות מידע קטנות יותר בכל אורך רצוי מבלי להמתין לקבלת בלוק שלם. יתרה מזו צופן בלוקים יכול לשמש מרכיב בסיסי בצופן זרם כמו צופן סרפנט שמהווה חלק אינטגרלי מ-SOSEMANUK.
*פונקציית גיבוב קריפטוגרפית. ישנן דרכים בטוחות להפיכת צופן בלוקים לפונקציית גיבוב קריפטוגרפית תחת הנחות סטנדרטיות בשל התכונה המובנית של צופן בלוקים שהוא חד-כיווני. בהינתן טקסט מוצפן קשה לנחש את הטקסט המקורי או את המפתח. אולם צופן בלוקים הוא רק חצי חד-כיווני כיוון שאם ידוע המפתח אפשר לשחזר את הטקסט המקורי. מה שדורש פעולות נוספות כדי להבטיח חד-כיווניות מלאה. מסיבה זו ניצול צופן בלוקים לצורך פונקציית גיבוב איטי בהשוואה לפונקציית גיבוב ייעודית.
*מחולל פסאודו-אקראי. באופן דומה אפשר להכין מחולל פסאודו-אקראי המייצר מספרים פסאודו-אקראיים לכל מטרה, בין היתר לצורך מפתחות הצפנה. תקן NIST הנקרא SP800-90A מפרט דרך בטוחה לשימוש בצופן בלוקים באופן מונה כדי לחולל מספרים אקראיים.
*קוד אימות מסרים. צופן בלוקים מהווה מרכיב בסיסי במספר אלגוריתמים לקוד אימות מסרים. למשל בהצפנה באופן שרשור כמו CBC אפשר להצפין את המסר כולו והתוצאה האחרונה או חלק ממנה מהווה תג אימות. תג האימות מתאים באופן חד חד-ערכי לטקסט המקור, כך שכל שינוי בטקסט המקורי יגרום בסבירות גבוהה לשינוי בתג האימות ועל כן יתגלה.
*הצפנה מאומתת. הצפנה מאומתת מבצעת הצפנה של המסר באמצעות צופן בלוקים בד בבד עם ייצור תג אימות להבטחת שלמותו ואימות מקורו. ההצפנה והאימות מבוצעים באמצעות צופן בלוקים עם מפתחות שונים.
*צופן בלוקים בר התאמה הוא מבנה להפעלת צופן בלוקים שמוסיף אקראיות או "גיוון" על ידי הוספת פרמטר מלבד המפתח שמשתנה מבלוק לבלוק אך אינו חייב להיות סודי. הפרמטר הנוסף מתפקד כמו וקטור אתחול. זוהי שיטה יעילה להפעלת צופן בלוקים שמתאימה במיוחד להצפנת דיסקים.

## קישורים חיצוניים

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

קטגוריה:ערכים שבהם תבנית בריטניקה אינה מתאימה
*
קטגוריה:קריפטוגרפיה
קטגוריה:הצפנה