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

רקע
---

הרעיון נולד במהלך פיתוח RadioGatun שהיא פונקציית גיבוב המקבלת קלט באורך שרירותי ומפיקה פלט בכל אורך רצוי. המפתחים נתקלו בבעיה בניסיון לבטא את ביטחון האלגוריתם במונחים של סיבוכיות זמן. כאשר הפלט קבוע אפשר לטעון שפונקציית הגיבוב טובה לפחות כאורקל אקראי שהפלט שלו נחתך ל-n סיביות. לכן בגלל התקפת יום הולדת סיבוכיות התקפה בסיסית למציאת התנגשות היא מסדר גודל של 2^{n/2}. אולם כאשר הפלט באורך משתנה אין לטענה זו משמעות, כביכול אפשר להגיע לביטחון אינסופי אם מאריכים את הפלט מאוד. לכן המפתחים הגיעו למודל שונה שבו מצהירים ביטחון במונחים של אורקל אקראי שנקרא כאן "פונקציית ספוג אקראית", שהוא מבנה תאורטי כמו אורקל אקראי למעט העובדה שהוא מוגבל בזיכרון לכן התנגשויות בלתי נמנעות. הממצאים פורסמו לראשונה ב-2007 בסמינר Dugstuhl בגרמניה ולאחר מכן בסדנת Ecrypt בברצלונה.

פונקציית ספוג התגלתה ככלי יעיל לבניית פרימיטיבים קריפטוגרפיים רבים. אפשר לנצל מבנה ספוג ותאומו הנקרא "מבנה דופלקס" (duplex construction), כדי ליישם מגוון רחב של פרימיטיבים קריפטוגרפיים, כולל פונקציית גיבוב, מחולל פסאודו-אקראי, הצפנה סימטרית, אימות מסרים והצפנה מאומתת, עם ובלי וקטור אתחול ובאורכים משתנים לפי לצורך. בדרך זו נהנים מפונקציונליות רבה בפונקציית תמורה יחידה ומפשטים את תהליך הפיתוח והיישום מבלי לדאוג למרכיבים אחרים כמו תהליך הכנת מפתח. האטרקטיביות של מבנה זה נובעת מהעובדה שאפשר להתבסס על פרמוטציה מתאימה שזה יותר קל מלפתח צופן בלוקים או פונקציית דחיסה. קיימים כמה אלגוריתמים חדשים שמסתמכים על מבנה ספוג מהם Keccak, Quark, Photon, Spongent וכן Spritz. מראה כללי של מבנה ספוג הוא:


|  |
| --- |
| {\displaystyle {\boldsymbol {P\ =\ M\ \|\ \mathbf {pad} [r](|M|)}}}
{\displaystyle {\boldsymbol {s\ =\ \mathbf {ABSORB} [f,r](P)}}}
{\displaystyle {\boldsymbol {Z\ =\ \mathbf {SQUEEZE} [f,r](s,\ell )}}} |

הסימן \| מייצג שרשור. תחילה הקלט M מרופד לפי כלל ריפוד מתאים (בהמשך), לאחר מכן התוצאה P נספגת לתוך המצב הפנימי s באמצעות הפונקציה הפנימית f באורך r סיביות. היא יכולה להיות כל PRP או PRF בטוח לפי בחירה. ואז הפלט Z נסחט בהתאם לאורך הרצוי \ell , הפלט יכול לשמש כמפתח הצפנה או ערך גיבוב. באופן כללי אמור להיות קשה למצוא מסלול מ-s ל-P. התנגשות פירושה ש-{\displaystyle {\text{ABSORB}}(P)={\text{ABSORB}}(Q)} כאשר {\displaystyle P\neq Q} וכן אם מתקבל {\displaystyle {\text{ABSORB}}(P)={\text{ABSORB}}(P\ \|\ 0^{dr})} פירושו שהמבנה מכיל מעגליות ולכן הפלט יחזור על עצמו.

כלל ריפוד
---------

היות שהקלט באורך משתנה יש להפעיל כלל ריפוד מתאים כדי לחלק את הקלט ל-x בלוקים בגודל b סיביות כל אחד, באופן שיהיה קל להסיר את הריפוד עם קבלת המסר בצד השני מבלי לדעת מה היה אורך המסר. סכמת הריפוד הפשוטה והנפוצה ביותר היא {\displaystyle {\text{pad}}10^{\*}} כלומר מוסיפים את הסיבית "1" בסוף הקלט ומרפדים באפסים, כאשר הכוכבית מציינת שמספר האפסים הנדרש תלוי באורך הקלט ובגודל הבלוק, כך שהאורך הכולל צריך להתחלק ב-b. כלל הריפוד חייב לקיים שלושה תנאים:

* הריפוד צריך להיות קל להסרה.
* מחרוזת הריפוד לא יכולה להיות ריקה.
* הבלוק האחרון חייב להיות שונה מאפס.

הסימון של כלל הריפוד עבור בלוק באורך x סיביות מסומן בקיצור: {\displaystyle M\ \|\ {\text{pad}}[x](|M|)}

מבנה ספוג
---------

פונקציית ספוג
מבנה ספוג הוא מבנה איטרטיבי פשוט ליצירת פונקציה {\displaystyle {\text{SPONGE}}[f,{\text{pad}},r](M,\ell )} המקבלת קלט מהתחום {\displaystyle \mathbb {Z} \_{2}^{\*}} ומפיקה פלט בטווח {\displaystyle \mathbb {Z} \_{2}^{\infty }}. היא מבוססת על תמורה או טרנספורמציה f הפועלת על b סיביות. b קבוע ונקרא כאן **רוחב**. הוא כולל מצב פנימי (זיכרון) באורך {\displaystyle b=r+c} סיביות, כאשר r נקרא "קצב" (bitrate) ו-c נקרא "קיבולת" (capacity). המצב הפנימי מאותחל באפסים, הקלט מרופד כאמור ומחולק לבלוקים של r סיביות ומשם ממשיכים בשני שלבים: 

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

הסימון {\displaystyle \left\lfloor \cdot \right\rfloor \_{\ell }} פירושו שאת פלט הפונקציה חותכים ל-\ell  הסיביות הראשונות. כאשר c הסיביות הנותרות של המצב לעולם לא מושפעות מבלוקים של הקלט ולעולם אינן נכללות בפלט במהלך הסחיטה.

להלן פסאודו-קוד המתאר מבנה הספוג:

{\displaystyle \mathbf {SPONGE} [f,{\text{pad}},r]}
{\displaystyle P=M\ \|\ {\text{pad}}[r](|M|)}
{\displaystyle s=0^{b}}
{\displaystyle {\text{For }}i=0{\text{ to }}{|P|}\_{r}-1{\text{ do}}}
{\displaystyle s=s\oplus P\_{i}\ \|\ 0^{b-r}}
{\displaystyle s=f(s)}
{\displaystyle Z=\left\lfloor s\right\rfloor \_{r}}
{\displaystyle {\text{While }}|Z|\_{r}r<\ell {\text{ do}}}
{\displaystyle s=f(s)}
{\displaystyle Z=Z\ \|\ \left\lfloor s\right\rfloor \_{r}}
{\displaystyle {\text{Return }}\left\lfloor Z\right\rfloor \_{\ell }}

### מודל ביטחון

בפונקציית גיבוב עם פלט קבוע מקובל היה בדרך כלל להשוותה מול אורקל אקראי, אולם זה השתנה בעקבות גילויים חדשים בעשור האחרון. יש לזכור שהיות שהמצב הפנימי סופי והפונקציה איטרטיבית - היא מעבדת את הקלט בלוק אחר בלוק, בהכרח שיהיו התנגשויות, זאת לעומת אורקל אקראי תאורטי שאצלו לא קיים מושג "מצב" ואין לו התנגשויות. מסיבה זו אי אפשר להשוות ישירות למודל אורקל אקראי. אלטרנטיבה טובה למודל אורקל אקראי בהקשר זה היא מבנה ספוג אקראי שהוא מבנה תאורטי שהפונקציה הפנימית שלו f היא פרמוטציה אקראית שנבחרה באופן אחיד מטווח הפרמוטציות האפשריות מעל b סיביות. למעט האפקט שנובע עקב מגבלת הזיכרון הסופי. מהיבט תאורטי כשמנתחים ביטחון פונקציית ספוג לפי מודל זה מביאים בחשבון גם את הפרמטרים קצב וקיבולת. במצב אידיאלי אומרים שביטחון הפונקציה הוא במונחים של הקיבולת c, כלומר התקפה גנרית שאינה מנצלת חולשות ספציפיות בפונקציה הפנימית תהיה בסיבוכיות {\displaystyle 2^{c/2}} לפחות. במילים אחרות מוכיחים שכל התקפה מוצלחת נגד המבנה עצמו משליכה בהכרח שניתן להבחין בין תוצאת הפרמוטציה שהמבנה משתמש בה לבין מחרוזת אקראית ומכאן שהיא אינה טובה לשימוש.

מבנה דופלקס
-----------

פונקציית ספוג
באופן דומה מבנה {\displaystyle {\text{DUPLEX}}[f,{\text{pad}},r]} משתמש בטרנספורמציה או תמורה פנימית f, כלל ריפוד מתאים ופרמטר r. אך בשונה מפונקציית ספוג שהיא חסרת מצב בין הקריאות לפונקציה, מבנה דופלקס הוא אובייקט שיכול לקבל קלט נוסף ולהפיק מחרוזת פלט שהיא תוצאה של הקלט שהתקבל עד כה. במילים אחרות מבנה דופלקס דומה לרצף קריאות חוזרות של פונקציית ספוג עם קלט שונה. אובייקט דופלקס מכיל מצב בגודל b סיביות, בשלב האתחול המצב הפנימי מאופס, ומכאן ואילך אפשר להפעיל את הפונקציה {\displaystyle {\text{D.duplexing}}(\sigma ,\ell )} שוב ושוב עם קלט \sigma  שאורכו צריך להיות קצר מספיק כדי שיתקבל בלוק אחד לאחר ריפוד. הפלט הוא באורך \ell  שהוא לכל היותר r סיביות. בכל קריאה המבנה תחילה מרפד את הקלט לפי כלל הריפוד שנבחר, מחבר את הקלט ב-XOR עם חלק החיצוני של המצב הפנימי ואז מיישם את הפונקציה f על המצב ומחזיר את \ell  הסיביות הראשונות של המצב. הוכח שמבנה דופלקס בטוח כמבנה ספוג, היות שמבנה דופלקס בעצם מקביל למבנה ספוג שהקלט שלו חולק למקטעים בגודל \sigma  שכל אחד מהם מרופד בנפרד ואז הם משורשרים לרצף אחד ארוך. להלן תיאור מבנה דופלקס:

{\displaystyle \mathbf {DUPLEX} [f,{\text{pad}},r]}
{\displaystyle \mathbf {D.initialize} }
{\displaystyle s=0^{b}}
{\displaystyle \mathbf {D.duplexing} (\sigma ,\ell ){\text{ with }}\ell \leq r}
{\displaystyle P=\sigma \ \|\ {\text{pad}}[r](|\sigma |)}
{\displaystyle s=s\oplus (P\ \|\ 0^{b-1})}
{\displaystyle s=f(s)}
{\displaystyle {\text{Return }}\left\lfloor s\right\rfloor \_{\ell }}

הצפנה מאומתת
------------

 ערך מורחב – **הצפנה מאומתת**  

הצפנה מאומתת היא דרך להצפין ולאמת מידע יחד עם מידע נלווה המשויך אליו אם ישנו. הרעיון שימושי במיוחד בפרוטוקול תקשורת שבו חלק מחבילת מידע אמור להיות סודי בעוד שחלק אחר שנקרא בהקשר זה כותר (header) אמור להישאר קריא (משמש את השרת המקבל). המצפין רוצה להבטיח מלבד סודיות שהמסר והמידע הנלווה אליו אותנטיים וכי לא שונו על ידי גורם זר או בשל תקלה בשידור, באופן שמסכן את החלק הסודי של החבילה. אפשר ליישם הצפנה מאומתת באמצעות מבנה דופלקס. האובייקט **SpongeWrap** להלן, משתמש באובייקט דופלקס **D** עם הפרמטרים {\displaystyle f,{\text{pad}},r} אותו הוא מאתחל ומעביר אליו את המפתח K. כדי להצפין ולאמת קוראים לפונקציה **W.wrap** עם הפרמטרים {\displaystyle A,B,\ell } כאשר A הוא המידע הנלווה, B הוא המסר המיועד להצפנה והפרמטר \ell  מייצג את אורך תג האימות בסיביות. הפונקציה מחזירה את הטקסט המוצפן C שהוא {\displaystyle C\_{i}=B\_{i}\oplus Z\_{i}} כאשר {\displaystyle Z\_{i}} הוא הערך החוזר מהפונקציה duplexing ואת תג האימות T. לפענוח קוראים לפונקציה **W.unwrap** עם הפרמטרים {\displaystyle A,C,T} והיא אמורה להחזיר את B או "Error" אם אחד הערכים אינו תקין. לפני הקריאה לאובייקט D לביצוע duplexing תחילה מרפדים את כל האלמטים בסיבית אחת נוספת שנקראת frame-bit (1 חוץ מהבלוק האחרון). הערך \rho נקרא קצב והוא קובע את גודל הבלוק, כלומר כמות הסיביות שאפשר להצפין ולאמת בקריאה אחת. לכן הערך המקסימלי שלו הוא {\displaystyle \rho \_{\text{max}}({\text{pad}},r)-1} כי יש להביא בחשבון את הסיבית הנוספת. להלן תיאור האלגוריתם:

{\displaystyle \mathbf {SpongeWrap} [f,{\text{pad}},\rho ]}
‎
{\displaystyle {\text{W.initialize}}(K),{\text{ with }}K\in \mathbb {Z} \_{2}^{\*}}
{\displaystyle {\text{Let }}K=K\_{0}\ \|\ K\_{1}\ \|\ ...\ \|\ K\_{u}{\text{ with }}|K\_{i}|=\rho {\text{ for }}i<u,|K\_{u}|\leq \rho ,|K\_{u}|>0{\text{ if }}u>0}
{\displaystyle {\text{D.initialize}}()}
{\displaystyle {\text{for }}i=0{\text{ to }}u-1{\text{ do}}}
{\displaystyle {\text{D.duplexing}}(K\_{i}\ \|\ 1,0)}
{\displaystyle {\text{D.duplexing}}(K\_{u}\ \|\ 0,0)}
‎
{\displaystyle \mathbf {W.wrap} (A,B,\ell ){\text{ with }}A,B\in \mathbb {Z} \_{2}^{\*},\ell \geq 0}
{\displaystyle {\text{Let }}A=A\_{0}\ \|\ A\_{1}\ \|\ A\_{v}{\text{ with }}|A\_{i}|=\rho {\text{ for }}i<v{\text{ and }}|A\_{v}|\leq \rho ,|A\_{v}|>0{\text{ if }}v>0}
{\displaystyle {\text{Let }}B=B\_{0}\ \|\ B\_{1}\ \|\ B\_{w}{\text{ with }}|B\_{i}|=\rho {\text{ for }}i<w{\text{ and }}|B\_{w}|\leq \rho ,|B\_{w}|>0{\text{ if }}w>0}
{\displaystyle {\text{for }}i=0{\text{ to }}v-1{\text{ do}}}
{\displaystyle {\text{D.duplexing}}(A\_{i}\ \|\ 0,0)}
{\displaystyle Z={\text{D.duplexing}}(A\_{v}\ \|\ 1,|B\_{0}|)}
{\displaystyle C=B\_{0}\oplus Z}
{\displaystyle {\text{for }}i=0{\text{ to }}w-1{\text{ do}}}
{\displaystyle Z={\text{D.duplexing}}(B\_{i}\ \|\ 1,|B\_{i+1}|)}
{\displaystyle C=C\ \|\ (B\_{i+1}\oplus Z)}
{\displaystyle Z={\text{D.duplexing}}(B\_{w}\ \|\ 0,\rho )}
{\displaystyle {\text{while }}|Z|<\ell {\text{ do}}}
{\displaystyle Z=Z\ \|\ {\text{D.duplexing}}(0,\rho )}
{\displaystyle T=\left\lfloor Z\right\rfloor \_{\ell }}
{\displaystyle {\text{Return }}(C,T)}
‎
{\displaystyle \mathbf {W.unwrap} (A,C,T){\text{ with }}A,C,T\in \mathbb {Z} \_{2}^{\*}}
{\displaystyle {\text{Let }}A=A\_{0}\ \|\ A\_{1}\ \|\ A\_{v}{\text{ with }}|A\_{i}|=\rho {\text{ for }}i<v{\text{ and }}|A\_{v}|\leq \rho ,|A\_{v}|>0{\text{ if }}v>0}
{\displaystyle {\text{Let }}C=C\_{0}\ \|\ C\_{1}\ \|\ C\_{w}{\text{ with }}|C\_{i}|=\rho {\text{ for }}i<w{\text{ and }}|C\_{w}|\leq \rho ,|C\_{w}|>0{\text{ if }}w>0}
{\displaystyle {\text{Let }}T=T\_{0}\ \|\ T\_{1}\ \|\ T\_{x}{\text{ with }}|T\_{i}|=\rho {\text{ for }}i<x{\text{ and }}|T\_{x}|\leq \rho ,|T\_{x}|>0{\text{ if }}x>0}
{\displaystyle {\text{for }}i=0{\text{ to }}v-1{\text{ do}}}
{\displaystyle {\text{D.duplexing}}(A\_{i}\ \|\ 0,0)}
{\displaystyle Z={\text{D.duplexing}}(A\_{v}\ \|\ 1,|C\_{0}|)}
{\displaystyle B\_{0}=C\_{0}\oplus Z}
{\displaystyle {\text{for }}i=0{\text{ to }}w-1{\text{ do}}}
{\displaystyle Z={\text{D.duplexing}}(B\_{i}\ \|\ 1,|C\_{i+1}|)}
{\displaystyle B\_{i+1}=C\_{i+1}\oplus Z}
{\displaystyle Z={\text{D.duplexing}}(B\_{w}\ \|\ 0,\rho )}
{\displaystyle {\text{if }}T=\left\lfloor Z\right\rfloor \_{\ell }{\text{ then}}}
{\displaystyle {\text{Return }}B\_{0}\ \|B\_{1}\ \|\ ...\ \|\ B\_{w}}
{\displaystyle {\text{else return }}\mathbf {Error} }

ראו גם
------

* SHA-3

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

1. ↑  Cryptographic sponge functions
2. ↑  Duplexing the sponge: single-pass authenticated encryption and other applications
3. ↑  A. Joux, Multicollisions in iterated hash functions. Application to cascaded constructions, Advances in Cryptology - Crypto 2004 (M. Franklin, ed.), LNCS, no. 3152, Springer-Verlag, 2004, pp. 306-316.
4. ↑  J. Kelsey and B. Schneier, Second preimages on n-bit hash functions for much less than 2^n work, Advances in Cryptology - Eurocrypt 2005 (R. Cramer, ed.), LNCS, no. 3494, Springer-Verlag, 2005, pp. 474-490.
5. ↑  T. Kohno and J. Kelsey, Herding hash functions and the Nostradamus attack, Advances in Cryptology – Eurocrypt 2006 (S. Vaudenay, ed.), LNCS, no. 4004, Springer-Verlag, 2006, pp. 222-232.

| * צ
* ש
* ע
קריפטוגרפיה |
| --- |
| 

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

 |

 |
| 

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

 |

 |
| 

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

 |

 |
| 

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

 |

 |
| 

| צופן זרם |
| --- |
| 
* RC4
* Salsa20
* SOSEMANUK
* Grain
* 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
* סיסמה חד-פעמית

 |

 |
| 

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

 |

 |