**Grøstl** (גרוסטל) היא פונקציית גיבוב קריפטוגרפית שהייתה מועמדת ל-SHA-3 והייתה בין חמשת האלגוריתמים שעלו לגמר. Grøstl היא פונקציית גיבוב איטרטיבית ברמת בתים, עם **זיכרון פנימי** רחב (wide pipe), בסגנון רשת החלפה-תמורה בדומה ל-AES והיא למעשה משתמשת במספר מרכיבים דומים. פונקציית הכיווץ הפנימית בנויה משתי תמורות גדולות וקבועות שנבנו כך שתהיה להן *עקבה* רחבה באופן שאפשר להראות את עמידותן נגד התקפות קריפטואנליטיות שונות. יתרה מזו אם מניחים שהתמורות הפנימיות "אידיאליות" קיימת הוכחה לביטחון פונקציית הגיבוב. Grøstl באופן כללי מבוססת על עקרונות שונים למדי ממשפחת האלגוריתמים SHA והיא בעלת ביצועים טובים על מגוון פלטפורמות.

מוטיבציה ושיקולי פיתוח
----------------------

פונקציית הגיבוב Grøstl פותחה ב-2011 על ידי Praveen Gauravaram, Lars Knudsen, Krystian Matusiewicz, Florian Mendel, Christian Rechberger, Martin Schläffer, ו-Søren S. Thomsen. המפתחים ממדינות שונות, דנמרק, פולין אוסטריה ובלגיה.

מקור השם Grøstl נובע משילוב של שתי שפות. Gröstl מתאר מאכל אוסטרי מסורתי, כאשר האות "ö" הוחלפה ב-"ø" שהיא מהאלפבית הדני, אותה מבטאים באופן דומה. ביטוי השם בשפות רבות קשה, במיוחד בגלל האות ø אותה אפשר להחליף בהלחם האותיות "oe". 

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

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

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

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

תיאור האלגוריתם
---------------

מבנה כללי של פונקציית הגיבוב Grøstl
אלגוריתם **גרוסטל** הוא פונקציית גיבוב איטרטיבית במבנה מרקל-דמגרד הפועלת ברמה של בתים, מקבלת מסר באורך כלשהו ומחזירה **תמצית גיבוב** באורך משתנה בין בית אחד ל-64 בתים לפי בחירת המשתמש. אורכים שונים של הפלט מבוטאים במספר המופיע לאחר השם, לדוגמה Grøstl-256 מחזירה מחרוזת באורך 256 סיביות או 32 בתים. הקלט M תחילה מרופד, לפי שיטת ריפוד שתובא בהמשך, באופן שיתחלק ל-t בלוקים שלמים באורך \ell  סיביות כל אחד המסומנים {\displaystyle m\_{1},...m\_{t}}. האורך \ell  מייצג את גודל הזיכרון הפנימי של האלגוריתם הנקרא **מצב** (state) וצריך להיות 512 סיביות עבור תמציות באורך של עד 256 סיביות או 1024 סיביות במידה שאורך התמצית המבוקשת גדול יותר. המבנה הכללי של האלגוריתם פשוט בתכלית כמתואר בתרשים משמאל. האלגוריתם מקבל וקטור אתחול {\displaystyle h\_{0}={\text{iv}}} באורך \ell  סיביות ואת הבלוקים של הקלט ומעבד אותם בזה אחר זה:

{\displaystyle h\_{i}\longleftarrow f(h\_{i-1},m\_{i})} כאשר {\displaystyle i=1} עד t.
בכל סבב של האלגוריתם פונקציית הכיווץ הפנימית f מקבלת שני קלטים באורך \ell  סיביות כל אחד, הראשון הוא תוצאת הפונקציה מהסבב הקודם הנקראת **ערך ביניים** והשני נקרא **בלוק מסר** ומחזירה בלוק אחד h\_{i} מסיבה זו היא נקראת פונקציית **כיווץ**. לאחר עיבוד כל הבלוקים התוצאה היא {\displaystyle h\_{t}}. פלט האלגוריתם הסופי הוא {\displaystyle H(M)=\Omega (h\_{t})} כאשר \Omega  היא פונקציה מסיימת שמקצצת (truncate) את הפלט לאורך הרצוי והיא מוגדרת להלן. הפלט שלה באורך n סיביות הוא תמצית המסר הסופית.

### פונקציית הכיווץ

פונקציית הכיווץ הפנימית של Grøstl
פונקציית הכיווץ f השוכנת בלב האלגוריתם היא פונקציה מהצורה: {\displaystyle f:\{0,1\}^{\ell }\times \{0,1\}^{\ell }\longrightarrow \{0,1\}^{\ell }}
המבוססת על שתי תמורות פנימיות גדולות וקבועות הנקראות P ו-Q בהתאמה, באורך \ell  סיביות כל אחת. שים לב שעבור תמצית באורך n, רוחב המצב הפנימי חייב להיות {\displaystyle \ell \geq 2n}. באופן פורמלי פונקציית הכיווץ מבצעת, כמתואר בתרשים משמאל:

{\displaystyle f(h\_{i-1},m\_{i})=P(h\_{i-1}\oplus m\_{i})\oplus Q(m\_{i})\oplus h\_{i-1}}.
### פונקציה מסיימת

הפונקציה {\displaystyle {\text{trunc}}\_{n}(x)} שהיא מעין פעולת "קיצוץ" שמחזירה רק את n הסיביות המסיימות של הקלט x ומתעלמת מכל היתר. הפונקציה המסיימת של האלגוריתם \Omega  המתוארת בתרשים משמאל היא:

{\displaystyle \Omega (x)={\text{trunc}}\_{n}(P(x)\oplus x)}.
### התמורות

תרשים הפונקציה \Omega  של Grøstl
כאמור פונקציית הכיווץ הפנימית פועלת בשתי גרסאות, גרסת 512 סיביות עם התמורות: {\displaystyle P\_{512}}, {\displaystyle Q\_{512}}, עבור תמצית מסרים קצרה והשנייה גרסת 1024 סיביות עם התמורות {\displaystyle P\_{1024}}, {\displaystyle Q\_{1024}}, עבור תמצית ארוכה. כל גרסה משתמשת בזוג תמורות P ו-Q אחרות. כך שבסך הכול קיימות ארבע תמורות שונות. התמורות הן בהשראת צופן הבלוקים AES, כלומר כל אחת מהן מורכבת למעשה מ-R סבבים שבכל אחד מהם מתבצעות ארבע פעולות ערבוב ופיזור שונות בהתאם לטבלאות קבועות. היות שהמצב הפנימי גדול בהרבה מזה של AES היה צורך לחשב מחדש את ערכיהן. הפעולות של התמורות הן:

* **הוספת קבועים**
* **החלפת בתים**
* **הזזת בתים**
* **ערבוב בתים**

הפעולה הראשונה והשלישית משתנות בהתאם לאורך התמצית המבוקשת ואילו האחרות זהות. מספר הסבבים נקבע גם הוא לפי אורך התמצית המבוקשת. עבור תמצית בטווח [8-256] סיביות נדרשים עשרה סבבים ועבור תמצית בטווח [264-512] נדרשים 14 סבבים. סדר הפעולות מוגדר באופן פורמלי על ידי:

{\displaystyle R={\text{MixBytes}}\circ {\text{ShiftBytes}}\circ {\text{SubBytes}}\circ {\text{AddRoundConstants}}}.
כל הפעולות מבוצעות על המצב הפנימי המיוצג כמערך דו־ממדי של בתים או מטריצה מסדר {\displaystyle 8\times v} בתים. v מייצג את מספר העמודות והוא שווה 8 או 16 בהתאם לגודל המצב הפנימי. עבור תמצית מסרים עד 256 סיביות {\displaystyle v=8} בתים ואילו עבור תמצית ארוכה יותר {\displaystyle v=16} בתים. ההמרה ממערך בתים למטריצה ובחזרה נייטרלית מהיבט של סדר הבתים, אולם יש צורך לציין במפורש כיצד מערך של 64 בתים ממופה למטריצה A וההפך. אם נמספר את כניסות 64 הבתים של המערך מ-00 עד {\displaystyle {\text{3f}}} בבסיס הקסדצימלי הרי שהמיפוי מתבצע כמתואר בתרשים הבא:

{\displaystyle {\begin{bmatrix}{\text{00}}&{\text{08}}&{\text{10}}&{\text{18}}&{\text{20}}&{\text{28}}&{\text{30}}&{\text{38}}\\{\text{01}}&{\text{09}}&{\text{11}}&{\text{19}}&{\text{21}}&{\text{29}}&{\text{31}}&{\text{39}}\\{\text{02}}&{\text{0a}}&{\text{12}}&{\text{1a}}&{\text{22}}&{\text{2a}}&{\text{32}}&{\text{3a}}\\{\text{03}}&{\text{0b}}&{\text{13}}&{\text{1b}}&{\text{23}}&{\text{2b}}&{\text{33}}&{\text{3b}}\\{\text{04}}&{\text{0c}}&{\text{14}}&{\text{1c}}&{\text{24}}&{\text{2c}}&{\text{34}}&{\text{3c}}\\{\text{05}}&{\text{0d}}&{\text{15}}&{\text{1d}}&{\text{25}}&{\text{2d}}&{\text{35}}&{\text{3d}}\\{\text{06}}&{\text{0e}}&{\text{16}}&{\text{1e}}&{\text{26}}&{\text{2e}}&{\text{36}}&{\text{3e}}\\{\text{07}}&{\text{0f}}&{\text{17}}&{\text{1f}}&{\text{27}}&{\text{2f}}&{\text{37}}&{\text{3f}}\end{bmatrix}}}

עבור המטריצה הגדולה {\displaystyle 8\times 16} בתים, הרעיון דומה. בתי המערך מסודרים מלמעלה למטה החל מהעמודה השמאלית ימינה.

### הוספת קבועי סבב

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

{\displaystyle A\leftarrow A\oplus C[i]}.
כאשר {\displaystyle C[i]} הוא קבוע תלוי סבב המתאים לסבב i. לתמורות P ו-Q יש קבועים שונים. הקבועים עבור מצב פנימי של 512 סיבית בבסיס הקסדצימלי, הם:

{\displaystyle P\_{512}:C[i]={\begin{bmatrix}00\oplus i&10\oplus i&20\oplus i&30\oplus i&40\oplus i&50\oplus i&60\oplus i&70\oplus i\\00&00&00&00&00&00&00&00\\00&00&00&00&00&00&00&00\\00&00&00&00&00&00&00&00\\00&00&00&00&00&00&00&00\\00&00&00&00&00&00&00&00\\00&00&00&00&00&00&00&00\\00&00&00&00&00&00&00&00\end{bmatrix}}}

{\displaystyle Q\_{512}:C[i]={\begin{bmatrix}{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}\\{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}\\{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}\\{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}\\{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}\\{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}\\{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}\\{\text{ff}}\oplus i&{\text{ef}}\oplus i&{\text{df}}\oplus i&{\text{cf}}\oplus i&{\text{bf}}\oplus i&{\text{af}}\oplus i&{\text{9f}}\oplus i&{\text{8f}}\oplus i\end{bmatrix}}}

באופן דומה הקבועים עבור מצב פנימי גדול הם:

{\displaystyle P\_{1024}:C[i]={\begin{bmatrix}00\oplus i&10\oplus i&20\oplus i&30\oplus i&40\oplus i&50\oplus i&60\oplus i&70\oplus i&\cdots &{\text{f0}}\oplus i\\00&00&00&00&00&00&00&00&\cdots &00\\00&00&00&00&00&00&00&00&\cdots &00\\00&00&00&00&00&00&00&00&\cdots &00\\00&00&00&00&00&00&00&00&\cdots &00\\00&00&00&00&00&00&00&00&\cdots &00\\00&00&00&00&00&00&00&00&\cdots &00\\00&00&00&00&00&00&00&00&\cdots &00\end{bmatrix}}}

{\displaystyle Q\_{1024}:C[i]={\begin{bmatrix}{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&\cdots &{\text{ff}}\\{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&\cdots &{\text{ff}}\\{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&\cdots &{\text{ff}}\\{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&\cdots &{\text{ff}}\\{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&\cdots &{\text{ff}}\\{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&\cdots &{\text{ff}}\\{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&{\text{ff}}&\cdots &{\text{ff}}\\{\text{ff}}\oplus i&{\text{ef}}\oplus i&{\text{df}}\oplus i&{\text{cf}}\oplus i&{\text{bf}}\oplus i&{\text{af}}\oplus i&{\text{9f}}\oplus i&{\text{8f}}\oplus i&\cdots &{\text{0f}}\oplus i\end{bmatrix}}}

### החלפת בתים

ההחלפה מתבצעת על המצב הפנימי בית אחר בית לפי תיבות החלפה קבועות הנקראות S-box. תיבות אילו זהות לתיבות ההחלפה של ריינדל. כך שאם {\displaystyle a\_{i,j}} הוא אלמנט בשורה i ובעמודה j של המטריצה A טרנספורמציית ההחלפה SubBytes מתבצעת כדלהלן:

{\displaystyle a\_{i,j}=S(a\_{i,j}),0\leq i<8,0\leq j<v}.
### הזזת בתים

הזזת בתים, ליתר דיוק **הזזת בתים מעגלית** מתבצעת באופן שונה בהתאם לסוג המצב הפנימי. כמו בריינדל, שורות המצב מוסטות באופן מעגלי, כל אלמנט מועתק לאמנט שמשמאלו והאלמנט האחרון מועתק לאלמנט הראשון בתנועה מעגלית כמו בשעון. אם הווקטור {\displaystyle \sigma =[\sigma \_{0},\sigma \_{1}\,...\sigma \_{7}]} הוא רשימה של שלמים בטווח שבין 0 ל-{\displaystyle v-1} אז ההזזה ShiftBytes מזיזה את כל הבתים שבשורה ה-i של מטריצת המצב {\displaystyle \sigma \_{i}} צעדים או פוזיציות לשמאל ומחזירה את הבתים ששנפלטו מצד אחד לצד השני. עבור התמורה P הווקטור הוא {\displaystyle \sigma =[0,1,2,3,4,5,6,7]}, כלומר השורה הראשונה אינה מוסטת כלל, השנייה מוסטת בפוזיציה אחת, השלישית בשתי פוזיציות וכן הלאה. ואילו עבור Q הווקטור הוא {\displaystyle \sigma =[1,3,5,7,0,2,4,6]}. במצב הפנימי הרחב משתמשים בוקטור אחר כי קיימות יותר עמודות. במקרה זה וקטורי ההזזות עבור P ו-Q הם {\displaystyle \sigma =[0,1,2,3,4,5,6,11]} וכן {\displaystyle \sigma =[1,3,5,11,0,2,4,6]} בהתאמה.

### ערבוב בתים

בפעולת הערבוב כל עמודה של המטריצה A מעובדת בנפרד. פעולה זו היא פעולה בשדה הסופי {\displaystyle \mathbb {F} \_{256}} וכמו בצופן ריינדל השדה מוגדר על ידי הפולינום האי-פריק {\displaystyle x^{8}+x^{4}+x^{3}+x+1} מעל {\displaystyle \mathbb {F} \_{2}}. הבתים של העמודה ה-i נחשבים לאלמנטים בשדה ופעולות הכפל והחיבור בין אלמנטים אילו מתבצעת לפי כללי האריתמטיקה בשדה הבינארי המורחב {\displaystyle {F}\_{2^{8}}}. כלומר האלמנטים נחשבים לפולינומים מדרגה 7 עם מקדמים אפס או אחד, הסיבית המשמעותית ביותר מייצגת את המקדם המוביל ואילו הסיבית הכי פחות משמעותית מייצגת את המקדם החופשי והכפל והחיבור הם על המקדמים כנהוג בפולינומים. ביתר פירוט ראה צופן ריינדל.

הטרנספורמציה MixBytes מכפילה כל עמודה של המטריצה A במטריצה קבועה B מסדר {\displaystyle 8\times 8}. כל התהליך יכול להתפרש ככפל מטריצות הבא:

{\displaystyle A\leftarrow B\times A}.
והמטריצה B היא **מטריצה מעגלית**, שפירושה הוא שכל שורה שווה לשורה שמעליה כשהי מוסטת באופן מעגלי צעד אחד לימין:

{\displaystyle B={\begin{bmatrix}02&02&03&04&05&03&05&07\\07&02&02&03&04&05&03&05\\05&07&02&02&03&04&05&03\\03&05&07&02&02&03&04&05\\05&03&05&07&02&02&03&04\\04&05&03&05&07&02&02&03\\03&04&05&03&05&07&02&02\\02&03&04&05&03&05&07&02\end{bmatrix}}}

אפשר לתאר את המטריצה בכתיב מקוצר: {\displaystyle B={\text{circ}}(2,2,3,4,5,3,5,7)} כאשר הפונקציה {\displaystyle {\text{circ}}} היא פונקציית הזזה מעגלית.

### קבועים התחלתיים

וקטור האתחול {\displaystyle {\text{iv}}\_{n}} עבור Grøstl-n כאשר n מייצג את אורך התמצית המבוקשת, הוא הייצוג הבינארי של n במשתנה באורך \ell  סיביות. בטבלה הבאה מופיעים הערכים ההתחלתיים עבור תמציות באורכים 224,256,384,512 בבסיס הקסדצימלי:


| n | {\displaystyle {\text{iv}}\_{n}} |
| --- | --- |
| {\displaystyle 224} | {\displaystyle 00\cdots 0000{\text{e0}}} |
| {\displaystyle 256} | {\displaystyle 00\cdots 000100} |
| {\displaystyle 384} | {\displaystyle 00\cdots 000180} |
| {\displaystyle 512} | {\displaystyle 00\cdots 000200} |

### ריפוד

פונקציית הריפוד של Grøstl הנקראת כאן {\displaystyle x^{\*}={\text{pad}}(x)} דומה לזו שיושמה ב-MD5. בהינתן קלט באורך N סיביות, תחילה מוסיפים את הסיבית '1' בסופו ואז מוסיפים אפסים כנדרש כדי להשלימו לאורך המתחלק ב-\ell  פחות 64 סיביות. בניסוח רשמי מספר האפסים שיש להוסיף הוא {\displaystyle w=-N-65{\text{ mod }}\ell }. ב-64 הסיביות הנותרות מקודדים את הערך {\displaystyle (N+w+65)/\ell } המספר הזה יוצא תמיד שלם בגלל w והוא מייצג את מספר הבלוקים הסופי לאחר הריפוד. לאור זאת האורך המקסימלי של קלט הניתן לעיבוד על ידי Grøstl יכול להיות לכל היותר {\displaystyle 2^{64}-1} בלוקים אחרת 64 סיביות לא יספיקו כדי לקודד את הערך האמור. עבור תמצית מסרים קצרה אורך הקלט המקסימלי הוא {\displaystyle 512\cdot (2^{64}-1)-65=2^{73}-577} ועבור תמצית מסרים ארוכה האורך המקסימלי הוא {\displaystyle 1024\cdot (2^{64}-1)-65=2^{74}-1089}.

ביטחון ויעילות
--------------

Grøstl יכולה להגיע לתפוקה של 21.4 מחזורי שעון לבית על מעבד Intel Core 2. האלגוריתם הוא שילוב של מצב פנימי רחב (wide pipe) עם גרסה של מבנה מרקל-דמגרד משופרת (שבה מקצצים חלק מהפלט). בעקבות הניסיון המצטבר הוכח ששתי התכונות הללו מחזקות את האלגוריתם מפני התקפות קריפטואנליטיות שונות. זיכרון פנימי רחב עוזר נגד התקפות גנריות שמתמקדות באיטרציה של הפונקציה הפנימית. האלגוריתם מסתמך על שתי תמורות שונות, תחת ההנחה התאורטית שהתמורות הללו אקראיות המפתחים הוכיחו שהיתרון של מבחין לזיהוי בין פלט Grøstl לבין פלט אקראי אמיתי אינו גדול מ-{\displaystyle O((Kq)^{4}/2^{\ell })}, כאשר המבחין רשאי להגיש לכל היותר q שאילתות באורך לכל היותר K בלוקים. כמו כן אפשר לראות שיש חשיבות לפונקציה המסיימת בלעדיה קיימות התקפות מעשיות נגד האלגוריתם. כמו כן קיימות התקפות היעילות מכוח גס נגד גרסה מצומצמת של גרוסטל בחמישה סבבים. 

המפתחים מונים ניתוח סדרה של התקפות קריפטואנליטיות ידועות והטענות שלהם לגבי הביטחון של Grøstl נגד התקפות אילו. בין ההתקפות הם מונים את: ההתקפה הדיפרנציאלית, התקפת ריבאונד, אנליזה ליניארית ואינטגרלית, התקפה אלגברית, התקפות התנגשויות ורב-התנגשויות, התקפת הארכה והתקפת נקודות שבת, התקפת יום הולדת וההתקפה של קלסי ושנייר על מבנה מרקל-דמגרד. הם מסכמים שביטחון האלגוריתם עם מספר סבבים מלא, נגד כל ההתקפות המתוארות הוא לכל הפחות בסדר גודל של 2^{n/2}. לכן אם הפלט הוא באורך 256 סיביות המשמעות היא ביטחון של {\displaystyle 2^{128}} שזה המינימום הנדרש כיום.

ראו גם
------

* SHA-3
* AES
* שיטת מרקל-דמגרד

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

1. ↑  Praveen Gauravaram, Lars R. Knudsen, Krystian Matusiewicz, Florian Mendel, Christian Rechberger, Martin Schläffer, and Søren S. Thomsen (2011-03-02), Grøstl - a SHA-3 candidate
2. ↑  Collision Attack on 5 Rounds of Grøstl

| קריפטוגרפיה |
| --- |
| 

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

 |
| 

| הצפנה קלאסית |
| --- |
| מכונת הצפנה • צופן החלפה • צופן אתב"ש • צופן קיסר • צופן ויז'נר • צופן ורנם • צופן פלייפייר • צופן היל • אולטרה • אניגמה • ציקלומטר • קולוסוס • PURPLE • ג'ייד • מג'יק • צופן שחלוף |

 |
| 

| צופן בלוקים |
| --- |
| לוציפר • AES • 3DES • DES • Threefish • Twofish • Blowfish • FEAL • SEED • CAST • IDEA • RC2 • RC6 • MARS • RC5 • GOST • סרפנט • MISTY • KASUMI • קמליה • ARIA • SAFER • TEA • LEA • CLEFIA • SEA • Hummingbird • PRESENT • KATAN • KeeLoq • Simon & Speck • אנוביס |

 |
| 

| אופני הפעלה |
| --- |
| אופן הפעלה של צופן בלוקים • EAX • OCB • IAPM • CWC mode • GCM • CCM |

 |
| 

| צופן זרם |
| --- |
| RC4 • Salsa20 • SOSEMANUK • גריין • E0 • A5/1 • A5/2 • A5/3 • A5/4 • MICKEY • HC-128 • SNOW • Trivium • Rabbit • ZUC • ChaCha |

 |
| 

| הצפנה אסימטרית |
| --- |
| פרוטוקול דיפי-הלמן • חידות מרקל • חתימת למפורט • הצפנת תרמיל • RSA • הצפנת רבין • חתימה דיגיטלית רבין • צופן אל-גמאל • חתימה דיגיטלית אל-גמאל • DSA • הצפנת בלום-גולדווסר • ECC • הצפנת קריימר-שופ • הצפנת פאיי • הצפנת מקאליס • GGH • NTRU • עקום 25519 • חתימה דיגיטלית של שנור • הצפנת אוקמוטו-אושיאמה |

 |
| 

| פרוטוקולים |
| --- |
| עץ מרקל • פרוטוקול אתגר-מענה • פרוטוקול נידהאם-שרודר • פרוטוקול קרברוס • הוכחה באפס ידע • פרוטוקול פייגה-פיאט-שמיר • העברה עלומה • חלוקת סוד • TLS (SSL) • Secure Shell • MQV • X.509 • פרוטוקול שיתוף מפתח
• מיסור שלא לפרסום • פרוטוקול סיגנל |

 |
| 

| פרימיטיבים תאורטיים |
| --- |
| מחולל פסבדו-אקראי קריפטוגרפי • פונקציה חד-כיוונית • תמורה חד-כיוונית • סיבית קשה • פונקציה פסבדו-אקראית קריפטוגרפית • תמורה פסאודו-אקראית • פונקציית גיבוב קריפטוגרפית • וקטור אתחול • פונקציית ספוג • הצפנה מבוססת סריג |

 |
| 

| קריפטואנליזה |
| --- |
| ניתוח תדירויות • כוח גס • התקפת איזון זמן/זיכרון • תקיפת היפגשות באמצע • קריפטואנליזה ליניארית • קריפטואנליזה דיפרנציאלית • התקפת גלוי-ידוע • התקפת גלוי-נבחר • התקפת מוצפן-נבחר • פירוק לגורמים של מספר שלם • התקפת ערוץ צדדי • התקפת קורלציה • התקפת שיבוש • מודל אורקל אקראי • התקפת התנגשויות |

 |
| 

| בעיות מתמטיות ואלגוריתמים |
| --- |
| בעיית לוגריתם דיסקרטי • תחשיב אינדקסים • נפה ריבועית • אלגוריתם rho של פולרד • נפת שדה מספרים • אלגוריתם רו של פולרד ללוגריתמים • אלגוריתם פוליג-הלמן |

 |
| 

| פונקציות גיבוב קריפטוגרפיות |
| --- |
| SHA • MD5 • MD4 • SHA-1 • SHA-2 • SHA-3 • RIPEMD • Skein • BLAKE • Grøstl • SipHash |

 |
| 

| אימות וזיהוי |
| --- |
| אימות זהות • סיסמה • קוד אימות מסרים • Poly1305 • סיסמה חד-פעמית |

 |
| 

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

 |