צופן היל

מכונת ההצפנה של היל מתוך רישומי הפטנט, שנת 1929
בהצפנה קלאסית, צופן היל (באנגלית: Hill Cipher) הוא צופן החלפה פוליגרפי המבוסס על אלגברה ליניארית (כפל מטריצות) שהומצא ב-1929 על ידי לסטר היל (Lester S. Hill) והיה הצופן הפוליגרפי המעשי הראשון שהצפין שלוש אותיות ומעלה בבת אחת. 

==תיאור הצופן==
צופן היל פועל על האלפבית האנגלי המכיל 26 אותיות, כאשר כל אות מיוצגת על ידי מספר שלם מודולו 26. בדרך כלל <math>A=0,B=1,C=2</math> וכן הלאה עד <math>Z=25</math> אם כי אפשר למספר אותם בדרכים אחרות. צופן היל דומה למעשה לצופן החלפה מרובה אותיות, הוא מחליף בלוקים של אותיות בבלוקים אחרים בהתאם למפתח ההצפנה. כדי להצפין מסר, תחילה מחלקים אותו לבלוקים באורך <math>n</math> אותיות. (אפשר לראות בכל בלוק כוקטור בעל <math>n</math> קואורדינטות) ואז מצפינים את הבלוק על ידי הכפלה של הווקטור (עמודה) במטריצה הפיכה מסדר <math>n\times n</math> (מודולו 26), לפענוח מכפילים כל בלוק במטריצה ההופכית (מודולו 26). המטריצה המשמשת להצפנה נקראת מפתח ההצפנה, ואילו המטריצה ההופכית נקראת מפתח פענוח. אפשר להרחיב את הרעיון לכל אלפבית המכיל מספר אחר של אותיות או סמלים ובלבד שכל החישובים ייעשו מודולו מספר הסמלים באלפבית. אפשר להצפין בבת אחת כל מספר של אותיות, אך ממדי מטריצת ההצפנה גדלים באופן מעריכי.

בניסוח פורמלי להצפנה מבצעים:
<center>
:<math>\boldsymbol{\mathbf{v}\longleftarrow A \cdot \mathbf{u}}</math>
</center>
לפענוח מחשבים את:
<center>
:<math>\boldsymbol{\mathbf{u}\longleftarrow A^{-1}\cdot \mathbf{v}}</math>
</center>
כאשר <math>\mathbf{u}</math> ו-<math>\mathbf{v}</math> הם וקטורים באורך <math>n</math> המייצגים את הטקסט המקורי והטקסט המוצפן בהתאמה. המטריצה <math>A</math> מסדר <math>n\times n</math> היא מפתח ההצפנה והמטריצה ההופכית שלה <math>A^{-1}</math> היא מפתח הפענוח.

==דוגמה==
נקח את האלפבית העברי המכיל 22 אותיות (ללא סופיות), נניח שהאותיות ממוספרות במיספור הרגיל כמתואר בטבלה הבאה וכל החישובים הם מודולו 22. 
<center>
{| class="wikitable"
|-
! א !! ב !! ג !! ד !! ה !! ו !! ז !! ח !! ט !! י !! כ !! ל !! מ !! נ !! ס !! ע !! פ !! צ !! ק !! ר !! ש !! ת
|-
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21
|}
</center>
נניח ש-<math>n=3</math> ומפתח ההצפנה הוא המחרוזת "הקוד הסודי" (תשע אותיות ללא הרווח), המפתח מתפרש משמאל לימין במטריצה הבאה:
:<math>A=\begin{pmatrix}
4 & 18 & 5 \\
3 & 4 & 14 \\
5 & 3 & 9
\end{pmatrix}</math>
אפשר להמיר את מחרוזת האותיות של המפתח למטריצה בכמה דרכים. נניח שהמסר להצפנה הוא האותיות "אבג", לפי המספור שנקבע מתקבל הווקטור (0,1,2) לכן ההצפנה היא הכפל הבא:
:<math>\begin{pmatrix}
4 & 18 & 5 \\
3 & 4 & 14 \\
5 & 3 & 9
\end{pmatrix}\cdot 
\begin{pmatrix}
0 \\
1 \\
2
\end{pmatrix}= 
\begin{pmatrix}
28 \\
32 \\
21
\end{pmatrix}\equiv 
\begin{pmatrix}
6 \\
10 \\
21
\end{pmatrix}\text{ (mod }22).</math>
הטקסט המוצפן שהתקבל הוא "זכת".

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

===פענוח===
המטריצה המודולרית ההופכית היא:
:<math>A^{-1}=\begin{pmatrix}
8 & 9 & 6 \\
5 & 11 & 7 \\
11 & 6 & 14
\end{pmatrix}</math>
והיא מתאימה למחרוזת "טיזהלחלזס". בגלל שאם מחשבים את <math>AA^{-1}</math> מתקבל:
:<math>\begin{pmatrix}
4 & 18 & 5 \\
3 & 4 & 14 \\
5 & 3 & 9
\end{pmatrix}\cdot 
\begin{pmatrix}
8 & 9 & 6 \\
5 & 11 & 7 \\
11 & 6 & 14
\end{pmatrix}=
\begin{pmatrix}
177 & 264 & 220 \\
198 & 155 & 242 \\
154 & 132 & 177
\end{pmatrix}\equiv 
\begin{pmatrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1
\end{pmatrix}\text{ (mod }22).
</math>

לכן לפענוח מחשבים את: 
:<math>\begin{pmatrix}
8 & 9 & 6 \\
5 & 11 & 7 \\
11 & 6 & 14
\end{pmatrix}\cdot 
\begin{pmatrix}
6 \\
10 \\
21
\end{pmatrix}=
\begin{pmatrix}
264 \\
287 \\
420
\end{pmatrix}\equiv 
\begin{pmatrix}
0 \\
1 \\
2
\end{pmatrix}\text{ (nod 22}).
</math>
מתקבל הטקסט המקורי "אבג".

==ביטחון==
במונחים של הצפנה מודרנית צופן היל אינו בטוח לשימוש כלל. הוא נחשב לצופן חלש ופגיע במיוחד לקריפטואנליזה המנצלת את הליניאריות הגבוהה שלו. אם מתקיף הצופן משיג <math>n^2</math> זוגות טקסטים קריאים וטקסטים מוצפנים המתאימים להם, הוא יכול לחלץ את המפתח בעזרת מערכת משוואות ליניארית שניתנת לפתרון בזמן פולינומי בטכניקות פשוטות מתחום האלגברה הליניארית. 

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

===אורך מפתח===
אם המפתח נבחר באקראי מתוך הטווח המקסימלי אומרים שאורכו האפקטיבי הוא לוגריתם בבסיס 2 של מספר המפתחות האפשריים. במקרה של אלפבית המכיל 22 אותיות ו-<math>n=3</math> קיימות <math>22^{3^2}\approx 10^{8}</math> מטריצות הצפנה אפשריות מסדר <math>3\times 3</math>. בגלל שלא כל המטריצות הפיכות החסם העליון על אורך המפתח הוא <math>\log_2(a^{n^2})</math> במקרה של <math>a=22</math> בערך <math>4.459n^2\approx 40</math> סיביות. מטריצה תהיה הפיכה מודולו <math>a</math> רק אם היא הפיכה מודולו הגורמים הראשוניים שלו וקל לחשב את מספר המטריצות ההפיכות מודולו הגורמים הראשוניים. מספר המטריצות ההפיכות מודולו 2 שווה לסדר של החבורה הליניארית הכללית <math>GL(n,\mathbb{Z}_2)</math>. לכן אפשר לחשב את מספר המטריצות ההפיכות הכולל על ידי משפט השאריות הסיני. בנוסף בשל העובדה שאפסים רבים במטריצת ההצפנה פוגעים ברמת הפיזור של הצופן, יש צורך להימנע באופן כללי ממטריצות המכילות הרבה אפסים, מה שמצמצם את טווח המפתח עוד יותר.

אם <math>n=2</math> כלומר אם מצפינים רק זוגות של אותיות או "דיגרפים" בזה אחר זה. צופן היל יהיה חלש אפילו מצופן פלייפייר או כל צופן פולי-אלפביתי שמצפין דיגרפים (זוגות). מצד שני ככל ש-<math>n</math> גדול יותר ההצפנה הופכת לטורח רציני אם היא מבוצעת בעט ונייר. עבור <math>n</math> גדול מאוד מתקבל צופן חזק יותר מפלייפייר אך אינו פרקטי כי מאוד קשה ליישמו ידנית, לכן חוזקו בא לידי ביטוי בצורה מכנית. היל יישם את הצופן שלו עם <math>n=6</math> במכונת הצפנה מסובכת שהכילה גלגלי שיניים ושרשראות (כמתואר בתרשים) ואף רשם עליה פטנט בארצות הברית ב-1929 אך לא הצליח למצוא לה ולו קונה אחד. נדמה שהיל עצמו היה מודע לפרדיגמה המודרנית של פיתוח צופן בטוח כפי שניסח זאת קלוד שאנון: "ערבוב ופיזור" (confusion/diffusion) וכן היה ער לעובדה שאפשר לפצח את הצופן עם "איזון זמן/זיכרון" ביעילות רבה יותר מכוח גס ולכן ניסה לשלב במכונה שלב אי-ליניארי. היות שתצורת הגלילים קבועה עבור כל מכונה, היה צורך לבצע מספר שכבות, שכבת ערבוב אי-לנארית התלויה במפתח ושכבת פיזור ליניארית ללא מפתח ולאחריה שוב, שכבת ערבוב אי-ליניארית. רעיונות אילו היוו בין היתר מקור השראה לצפנים מודרניים יותר שבאו אחריו.

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

==ראו גם==
* צופן החלפה
* צופן פלייפייר

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

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