מי שמעוניין לראות סקירה רחבה של התחום כולו, יוכל לרפרף על הספרים
כשתגיעו לשלב שאתם רוצים לתת למחשב לבדוק דברים בשבילכם, תמצאו הדרכה כאן.
לשאלת תיכוניסטים המתגייסים לצבא: שאלתי לגבי זה, ועד כמה שהבנתי, יש פתרונות ללימוד תואר שני במחלקה תוך כדי הצבא, ללא תשלום שכר לימוד כלל, או בתשלום מזערי. אם הבנתי נכון (ומומלץ לבדוק עם ראש המחלקה במידה שזה רלוונטי לכם), בשלש שנות התואר הראשונות שתהיו רשומים תקבלו השתתפות בשכר לימוד ומילגה (מותנית בהשקעה בתואר), שיחד יכסו את כל שכר הלימוד ויותירו עודף. אם תצטרכו להמשיך שנים נוספות מעבר לשלש, אחרי שסיימתם את כל הקורסים ובשביל התזה בלבד, תצטרכו בכל שנה לשלם סכום קטן, שהוא קטן מהעודף שנותר לכם מהשנים הקודמות. (ובפרט שיש אפשרויות שונות למלגות נוספות, לפי מידת ההשקעה וההתקדמות.) לחילופין, אפשר למשל להירשם לשנה עבור קורסים, להקפיא הרשמה כאשר עובדים על התזה, ולהירשם שוב כאשר רוצים לקחת עוד קורסים. יש אפשרויות רבות ויש פתרונות לרוב הבעיות, כך שמבחינה כספית ההכנסה שלכם צפויה להיות גבוהה מההוצאה. הכדור במגרש שלכם. :)
המאמר קוביה הונגרית לאנשי הצפנה סוקר את הבעיה שדיברנו עליה, מה ידוע, ונותן אתגר לפיצוח.
במאמר פונקציות תימצות הומומורפיות ב SL2 תמצאו מידע על שיטות לחיפוש התנגשויות אינטנסיבי בעזרת מחשב. אם תגיעו לשלב זה, אמרו לי ואתן לכם קוד כתוב שתוכלו לשפצר לצרכיכם.
להלן כמה דוגמאות קונקרטיות לתחילת התנסות ומחקר (חלקן כבר פתרנו במפגש). כולן של מטריצות משולשיות עליונות ב \(\operatorname{SL}_2(\mathbb{F})\), כאשר \(\mathbb{F}\) שדה סופי שגודלו חזקה של 2. המטריצות הן מהצורה \[ .A_0 := \begin{pmatrix} a & b\\ 0 & a^{-1} \end{pmatrix}, A_1 := \begin{pmatrix} c & d\\ 0 & c^{-1} \end{pmatrix} \] מוצע לבחון מקרים מיוחדים, בהם חלק מהפרמטרים מוגבלים למשהו פשוט, והאחרים אקראיים. להלן כמה דוגמאות. אתם מוזמנים להמציא ולבחון עוד דוגמאות.
נקבע וקטור שורה אקראי \(v_0\in(\mathbb{Z}_2)^n\). נקבע עוד שני וקטורי שורה אקראיים \(v_1,v_2\in(\mathbb{Z}_2)^n\), מבין כל הוקטורים שהרכיב האחרון שלהם הוא 1.
לכל \( i=1,2 \) נגדיר טרנספורמציה לינארית \( T_i\colon (\mathbb{Z}_2)^n \to (\mathbb{Z}_2)^n \) בצורה הבאה: \[ T_i(x_1,\dots,x_n) := (x_2,\dots,x_n,0)+x_1v_i \] עבור וקטור שונה מאפס \( (x_1,\dots,x_n)\in (\mathbb{Z}_2)^n \) נגדיר את ההזזה שלו כך: \[ \text{Shift}(x_1,\dots,x_n) := (x_k,x_{k+1},\dots, x_n,0,\dots,0), \] כאשר \( k=\min\{\, i : x_i\neq 0\} \). פונקציית התימצות מוגדרות כך: \[ h(b_1,b_2,\dots,b_N) := T_{b_N}\circ \text{Shift}\circ T_{b_{N-1}}\circ \text{Shift}\circ \cdots \circ T_{b_1}\circ \text{Shift}(v_0). \] בעיית המחקר הזאת מעניינת במיוחד מפני שהיא משתמשת ברכיב הנדסי סטנדרטי, בעל מימושים יעילים בארכיטקטורות רבות. במידה שהשאלה תתברר קלה מדיי, אפשר לנסות להציע ולנתח וריאציות שלה.
למי שמעוניין, להלן פסאודו-קוד של הפונקציה בשפה דמויית C, כאשר ההנחה היא שהוקטור כולו מוחזק במילת מחשב אחת. כדי לקבל חוזק קריפטוגרפי, נדרש $n\ge 128$ ואז יש לממש זאת בעזרת שירשור מילות מחשב. אפשר גם לבחור בזהירות פרמטרים שאינם אקראיים לגמרי ויותר יעילים למימוש כאשר לא הכל נכנס במילה אחת. גם זה מתאים למחקר בנושא (איתור מחלקות של מקרים שאינם בטוחים מבין היישומים היעילים ביותר).
word Shift(word v) { //assumes v!=0
if ( v == 0 )
exit(-1); //error!
while ( (v&1) == 0 )
v >>= 1;
return v;
}
word Hash(bit s[N]) {
word T[2] = [v1, v2];
word v = v0;
for (i = 0; i < N; i++)
v = (Shift(v)>>1)^T[b];
return v;
}
במאמר זה מוצעת הרחב של RSA. המטרה היא לשבור הרחבה זו, או לחילופין לספק הוכחות חוזק שלה בהנחות מתאימות.