אלגוריתם **תחשיב האינדקסים** (Index calculus) הוא השיטה הידועה הטובה ביותר לחישוב לוגריתמים בדידיים בחבורות אריתמטיות מסוימות. שיטה זו לא ישימה בכל סוגי החבורות, אולם כאשר היא מתאימה, יעילותה תת-מעריכית. אף שבעיית הלוגריתם הבדיד ניתנת לניסוח בכל חבורה, לצורך הפשטות האלגוריתם מתואר כאן במסגרת הכללית של חבורה ציקלית כדלהלן: בהינתן החבורה הציקלית \ G מסדר \ n והאלמנטים {\displaystyle \ \alpha ,\beta \in G}, כאשר \ \alpha  הוא יוצר של \ G, מצא את השלם \ y המקיים {\displaystyle \ \beta =\alpha ^{y}}. במקרה זה מסמנים {\displaystyle \ y={\mbox{log}}\_{\alpha }\beta \,({\mbox{mod }}n)}. ניתן ליישם את האלגוריתם במספר חבורות הנפוצות בשימוש ביישומים מעשיים, כמו בחבורה {\displaystyle \ Z\_{p}^{\*}} (החבורה הכפלית מודולו \ p ראשוני) וכן החבורה הכפלית של השדה הסופי {\displaystyle \ \mathbb {F} \_{2^{m}}}.

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

אלגוריתם Index calculus זקוק לתת-קבוצה \ S קטנה ככל האפשר של אלמנטים ב-\ G, הנקראים **גורמי בסיס** (Factor base) שהם: השלם \ -1 וכן הראשוניים הקטנים החל מ-2 עד לגבול מסוים. מהיבט של יעילות רצוי שקבוצת גורמי הבסיס תהיה קטנה ככל האפשר, אולם בחישוב לוגריתמים גדולים קבוצה זו עלולה שלא להספיק. מבחינה מעשית קיים קונפליקט בין גודל \ S לבין הרצון להגיע לביצועים מרביים. בשלב הראשון אוספים מספר גדול ככל האפשר של יחסי שוויון ליניאריים (באופן כזה שניתן לייצגם ביעילות בעזרת גורמים בקבוצה \ S). משנאספו די יחסים, מחשבים את הלוגריתמים של כל גורמי הבסיס, מידע זה נחוץ בשלב השני לחישוב לוגריתמים של אלמנטים בחבורה \ G. בשלב זה מנסים להכפיל את {\displaystyle \ \beta } באלמנטים מאוסף היחסים באופן שניתן לייצוג כמכפלה של גורמי הבסיס (או חזקות שלהם), אם נמצא צירוף מתאים ניתן לחשב את \ y בקלות, בפעולות אלגבריות פשוטות.

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

**קלט:** יוצר \ \alpha  של החבורה הציקלית \ G מסדר \ n והאלמנט {\displaystyle \ \beta \in G}.

**פלט:** הלוגריתם הבדיד {\displaystyle \ y={\mbox{log}}\_{\alpha }\beta }.

1. *בחירת קבוצת גורמי בסיס*.
בוחרים תת-קבוצה של \ t מספרים ראשוניים: {\displaystyle \ S=\left\{p\_{1},p\_{2},...p\_{t}\right\}} כאשר ערכו של \ t נקבע באופן כזה שחלק נכבד מהאלמנטים ב-\ G יהיו ניתנים לייצוג ככפולה של גורמי בסיס \ p\_{i} מתוך \ S.
2. *איסוף יחסים ליניאריים בעזרת לוגריתמים של אלמנטים ב-\ S*.
2.1 בוחרים אלמנט אקראי \ k, כך ש-{\displaystyle \ 0\geq k\geq n-1}, ומחשבים את {\displaystyle \ \alpha ^{k}}.
2.2 מנסים לייצג את {\displaystyle \ \alpha ^{k}} כמכפלה של אלמנטים ב-\ S:
{\displaystyle \ \alpha ^{k}=\prod \_{i=1}^{t}p\_{i}^{c\_{i}}}, כאשר {\displaystyle \ (1)\qquad \qquad c\_{i}\geq 0}
אם ניסיון זה עלה יפה, מחשבים את הלוגריתם של שני צידי *משוואה (1)* כדי לקבל יחס ליניארי מהצורה:
{\displaystyle \ (2)\qquad k\equiv \sum \_{i=1}^{t}c\_{i}{\mbox{ log}}\_{\alpha }\,p\_{i}\quad ({\mbox{mod }}n)}
2.3 חוזרים על שלבים 2.1 ו-2.2 כדי לאסוף {\displaystyle \ t+c} יחסי שוויון המקיימים את *משוואה (2)*. \ c הוא שלם קטן, הנבחר באופן כזה שלמערכת של {\displaystyle \ t+c} המשוואות יהיה פתרון יחיד, בסבירות גבוהה.
3. *חישוב לוגריתמים של אלמנטים ב-\ S*:
כאשר כל הפעולות מתבצעות מודולו \ n, פותרים את המערכת הליניארית של {\displaystyle \ t+c} המשוואות (עם \ t נעלמים) מהצורה של *משוואה (2)* שנאספו, כדי לקבל את הפתרון של {\displaystyle \ {\mbox{log}}\_{\alpha }\,p\_{i}}, כאשר {\displaystyle \ 1\geq i\geq t}.
4. *חישוב {\displaystyle \ {\mbox{log}}\_{\alpha }\beta }*.
4.1 בוחרים שלם אקראי \ k כך ש-{\displaystyle \ 0\geq k\geq n-1}, ומחשבים את {\displaystyle \ \beta \cdot \alpha ^{k}}.
4.2 מנסים לייצג את {\displaystyle \ \beta \cdot \alpha ^{k}} כמכפלה של אלמנטים מתוך \ S:
{\displaystyle \ \beta \cdot \alpha ^{k}=\prod \_{i=1}^{t}p\_{i}^{d\_{i}}}, כאשר {\displaystyle \ (3)\qquad d\_{i}\geq 0}
אם ניסיון זה לא הצליח, חוזרים על שלב 4.1 עם \ k אחר. אחרת מחשבים את הלוגריתם של שני צידי *משוואה (3)* ומחזירים את:
{\displaystyle \ {\mbox{log}}\_{\alpha }\beta =(\sum \_{i=1}^{t}d\_{i}{\mbox{ log}}\_{\alpha }\,p\_{i}-k){\mbox{ mod }}n}.

יעילות
------

כאמור זמן הריצה של האלגוריתם תלוי בגודל \ t של קבוצת גורמי הבסיס. הבחירה האופטימלית מתבססת על התפלגות המספרים החלקים (smooth numbers) בטווח {\displaystyle \ [1,p-1]} במקרה של {\displaystyle \ Z\_{p}^{\*}}. והתפלגות הפולינומים החלקים (smooth polinomials) מעל {\displaystyle \ F\_{2}[x]} שהם ממעלה הנמוכה מ-\ m במקרה של {\displaystyle \ \mathbb {F} \_{2^{m}}}. פולינום נקרא חלק אם הגורמים שאינם ניתנים לצמצום (ראשוניים) המרכיבים אותו, הם ממעלה קטנה יחסית. אם \ t נבחר באופן אופטימלי, אלגוריתם Index calculus מעל {\displaystyle \ Z\_{p}^{\*}} ו-{\displaystyle \ \mathbb {F} \_{2^{m}}} מגיע לזמן ריצה של {\displaystyle \ L\_{q}[1/2,c]} כאשר {\displaystyle \ q=p} או {\displaystyle \ 2^{m}} בהתאמה, \ c קבוע הגדול מאפס.

ישנן שתי גרסאות של האלגוריתם עם זמן ריצה אופטימלי. עבור {\displaystyle \ F\_{2^{m}}}, אלגוריתם Coppersmith עם זמן ריצה של {\displaystyle \ L\_{2^{m}}[1/3,c]} עם קבוע {\displaystyle \ c>1.587}. עבור {\displaystyle \ Z\_{p}^{\*}} ישנה גרסה של Index calculus הנקראת number field sieve, עם זמן ריצה של {\displaystyle \ L\_{p}[1/3,1.923]}. קיימים כיום שיפורים נוספים.

אלגוריתם Index calculus ניתן להרצה באופן מקבילי, חלק הארי של פעילות האלגוריתם מתמקד במציאת יחסים ליניאריים בשלב 2. עבודה זו ניתנת לחלוקה בין מספר מעבדים או מחשבים במקביל.

ראו גם
------

* נפה ריבועית
* נפת שדה מספרים

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

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

 |

 |
| 

| הצפנה קלאסית |
| --- |
| 
* מכונת הצפנה
* צופן החלפה
* צופן אתב"ש
* צופן קיסר
* צופן ויז'נר
* צופן ורנם
* צופן פלייפייר
* צופן היל
* אולטרה
* אניגמה
* ציקלומטר
* קולוסוס
* 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
* סיסמה חד-פעמית

 |

 |
| 

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

 |

 |