דוגמה לשימוש מעשי בתורת החבורות הוא מערכת הצפנה RSA. מערכת זו מממשת שיטה להצפנה אסימטרית כלומר מערכת מבוססת מפתח ציבורי.
בר רוצה לשלוח מסר לאילן.
נתאר את התרחיש הבא- יצירת המפתח:
אילן מכין ״מנעול״ שיישלח לבר. הוא בוחר 2 ראשוניים גדולים (בקירוב של ). נסמנם .
אילן מחשב .
אילן מחשב בנוסף .
אילן מגריל שזר ל
אילן מחשב את
הפצת המפתח:
אילן מפרסם לבר באופן אמין אך לא בהכרח מוצפן את הזוג
הוא מפתח סודי והוא שומר אותו לעצמו.
הצפנה:
בר שולחת מסר . הוא מספר אבל הוא יכול להוות מוסכמה על מסר כלשהו זה כבר תלוי במידע שרוצים להעביר.
בר שולחת לאילן.
פענוח:
אילן מחלץ את המספר על ידי החישוב הבא
דוגמה להצפנה
אילן מגריל את ו
כעת מתקיים
אילן מגריל בנוסף (הוא ראשוני ולכן זר לנ״ל) ויתקיים שהמפתח הסודי הוא
כעת אילן מפרסם את ומחכה...
בר רוצה לשלוח את לאילן. היא מחשבת את ההודעה המוצפנה
בר שולחת את לאילן... והוא מחלץ את המידע באמצעות כלומר
ישנן כמה שאלות שעולות לנו
איך בכלל מחשבים חזקות בצורה מהירה כדי לזרז את הליך החישוב?
איך מגרילים שתי מספרים ומבטיחים שהם ראשוניים?
איך מוצאים את ההופכי ?
נכונות
כדי להראות נכונות נוכיח שתי טענות מרכזיות טענה 1 :
אנחנו יודעים שהמשמעות של פונקציית אוילר היא סדר של חבורה אוילר כלומר כל המספרים שזרים ל ב . כיוון ש כלומר מכפלת שתי ראשוניים שקטנים ממנו אז נצטרך להסיך מהטווח את כל המספרים שהם מחלקים של שזה בעצם . כיוון שנרצה להשאיר רק את מי שזר ל הרי שכל המספרים ש מחלקים נצטרך להוריד גם אותם. אלו בעצם יהיו
כל המספרים בטווח הזה בוודאות קטנים מ מאיך שהוא מוגדר ולכן הם נמצאים בטווח הזה. סך הכל מספר האיברים בטווח הזה יהיה
הורדנו בגלל שבשתי הקבוצות ספרנו את כלומר ספרנו אותו פעמיים.
טענה 2 :
מתקיים ולכן כלומר . נשים לב גם ש כאשר פעולת החזקה היא עם מודולו . נחלק למקרים:
אם זר ל - כלומר ולכן ממשפט אוילר כלומר יתקיים סך הכל
אם לא זר ל אז או , בלי הגבלת הכלליות נניח . מההנחה הזאת אנחנו יודעים ש אחרת כלומר מחלק של מספר קטן ממנו, מצב לא אפשרי . מהמשפט הקטן של פרמה מתקיים וסך הכל...
לכן, ואם נציב ב נקבל
העלאה מהירה בחזקה
התשובה לשאלה הראשונה תמונה בשאלה די יעילה להעלות בחזקה בצורה מהירה כאשר מחפשים את התוצאה לאחר שארית.
נרצה להעלות בחזקות ריבועיות. הכי קל יהיה להדגים:
נניח שנרצה לחשב את נשים לב שמתקיים כלומר נוכל לחשב את באופן הבא
ולהכפיל את התוצאה ב . ביצענו פחות פעולות ואחרי כל העלאה בריבוע נבצע mod אם צריך וככה גם נעבוד עם מספרים נמוכים יותר.
אלגוריתם מילר רבין
נרצה למצוא מספרים ראשוניים גדולים.
עובדה
כמות הראשוניים עד היא בערך . כלומר הסיכוי שמספר אקראי עד הוא ראשוני יהיה .
האלגוריתם הינו אלגוריתם הסתברותי לאס וגאס ובבסיסו עומד המשפט הקטן של פרמה שאומר שעבור ראשוני אז . הבעיה עם המשפט הזה היא שיש מספרים לא ראשוניים שמקיימים אותו לכל ולכן צריך לפתור את זה באופן הסתברותי ולצמצם את אחוז השגיאות. לפני שניגש לאלגוריתם מספר טענות חשובות
טענה 1 יהי ראשוני ו אזי . כלומר .
הוכחה-
בכיוון הראשון ברור שאם הוא אחד מהערכים הנ״ל אז העלאה שלו בריבוע תיתן .
בכיוון השני מתקיים ש
אמרנו כבר ש הוא שדה ולכן אין מחלקי ולכן או .
הבחנה חשובה
אם ראשוני גדול מ 2 אז ולכן מכאן כבר אנחנו יכולים להבין לאן האלגוריתם הולך... נבטא את כ ונתחיל לחשב את השורשים. בהמשך נראה בידיוק איך זה יעבוד
עד חזק לראשוניות
יהי טבעי (ואי זוגי, אחרת הוא בוודאות לא ראשוני) ויהי . נסמן ו ייקרא עד חזק לראשוניות של אם אחד מהתנאים הבאים מתקיים
כאשר
כעת נשים לב שאם ראשוני מפרמה הקטן כל יהיה עד חזק. אם אינו ראשוני אז לכל היותר מבין ערכי יהיו עדים חזקים.
כעת נבין את הרעיון לפי דוגמה . לפי פרמה וכעת מתקיים אם הוא נוכל להמשיך אחרת נעצור... ולכן זאת הסיבה שמספר יהיה עד חזק לראשוניות אם הוא יעמוד בתנאים הנ״ל. במקרה של הדוגמה הנ״ל אם נמשיך נקבל אם הוא היה אז סיימנו והוא עד חזק, אחרת ממשיכים לעלות בחזקת עד שמקבלים בחזקה כלשהי או שיקרה אחד מהשניים:
אם המספר שהגענו אליו שקול מודולו ל אז שום העלאה בריבוע שנעשה לא תוביל אותנו לשקילות מודולו של ונוכל לצאת מהלולאה.
אם הגענו לחזקה אחת לפני וקיבלנו גם נוכל לצאת ולהחזיר פריק.
נשים לב ש כי כלומר הוא זר ל ולכן הביטוי הנ״ל הוא צירוף ליניארי מינימלי עבור הgcd כלומר נוכל להשתמש באלגוריתם אוקלידס המורחב לחשב את ולהציב כדי להגיע למקדמים האלו. באלגוריתם שלנו מדובר ב שנמצא ב אבל הצעדים זהים.
דיפי-הלמן
הרעיון הוא בדיקת אוטנטיות עבור הצדדים ברשת. חתימה מבטיחה את זהות הכותב ושלמות המידע כאשר נרצה לתקשר או להוריד מידע ממקום מסוים ברשת, נרצה לדעת כי המקום שממנו אנחנו מורידים באמת שייך לחברה\ לערוץ ממנו אנחנו רוצים לקבל את המידע. כאשר קונים את המחשב יש עליו מספר מפתחות צרובים שמהם אנחנו ניגשים למקומות בטוחים ומשם מקבלים חותמת של אוטנטיות עבור המקומות מהם אנחנו מקבלים מידע. מתי זה חשוב? למשל אם יש עדכון תוכנה עבור מערכת ההפעלה נרצה לוודא שאנחנו מתקינים רק דברים שבוודאות מגיעים ממיקרוסופט ולא ממקום אחר.
כדי לתאם סוד משותף שכזה נשתמש בדיפי הלמן.
א) נבחר ראשוני גדול מאוד.
ב) בוחרים מפורסם.
ג) אילן בוחר בר בוחרת .
ד) אילן שולח לבר את .
ה) בר שולחת לאילו את .
ו) כל אחד מהם מעלה בחזקת המספר שבחר והם מקבלים . הסוד המשותף הוא .
הרעיון הוא שלחלץ את או את היא בעצם קשורה לפתרון של בעיית הלוג הדיסקרטי שזאת בעייה מאוד קשה. ב RSA הקושי בפתרון הוא למעשה בעובדה ש הוא סודי והעלאה בחזקה מאוד גבוהה דיסקרטית היא גם בעיה מאוד קשה חישובית.