TWINKLE מימוש פירוק לגורמים בשיטת הניפוי הריבועי 1 גדי וישנה בהנחיית ד"ר ולדימיר מיקולינסקי נושאי המצגת מטרת ההרצאה TWINKLE : + RSA  פירוק  פירוק מספר לגורמים – שיטת פרמה.

Download Report

Transcript TWINKLE מימוש פירוק לגורמים בשיטת הניפוי הריבועי 1 גדי וישנה בהנחיית ד"ר ולדימיר מיקולינסקי נושאי המצגת מטרת ההרצאה TWINKLE : + RSA  פירוק  פירוק מספר לגורמים – שיטת פרמה.

Slide 1

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 2

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 3

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 4

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 5

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 6

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 7

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 8

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 9

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 10

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 11

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 12

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 13

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 14

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 15

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 16

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 17

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 18

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 19

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬


Slide 20

‫‪TWINKLE‬‬
‫מימוש פירוק לגורמים‬
‫בשיטת הניפוי הריבועי‬
‫‪1‬‬

‫גדי וישנה‬
‫בהנחיית ד"ר ולדימיר מיקולינסקי‬

‫נושאי המצגת‬
‫מטרת ההרצאה‪TWINKLE :‬‬
‫‪ + RSA ‬פירוק‬
‫‪ ‬פירוק מספר לגורמים‬
‫– שיטת פרמה ‪ +‬מימוש להמר‬
‫– שיטת פומרנץ ‪ +‬מימוש שמיר‬

‫‪2‬‬

‫רקע מתמטי ל‪RSA-‬‬
‫‪ ‬משפט פרמה‪:‬‬
‫– עבור ‪ p‬ראשוני‪ ,‬לכל ‪ x‬זר ל‪xp-1=1 (mod p) :p-‬‬

‫‪ ‬פונקצית אוילר (‪:)Euler totient‬‬
‫– )‪ – (n‬מספר המספרים החיובים הזרים ל‪.n-‬‬
‫– ‪ q,p‬ראשוניים; ‪(n)=(q-1)(p-1) ;n=p·q‬‬

‫‪ ‬משפט אויילר (משפט פרמה מורחב)‬
‫– )‪x(n)=1 (mod n‬‬

‫‪ ‬עבור ‪ e‬זר ל‪:(n) -‬‬
‫• )‪ xxe (mod n‬חח"ע‬
‫• קיים ‪ d‬כך ש‪ed = 1(mod (n)) -‬‬

‫‪xe·d=x1+C·(n)=x (mod n) ‬‬
‫‪3‬‬

‫‪ - RSA‬האלגוריתם‬
‫‪ ‬בניית מפתח ציבורי‬
‫– הגרלת מספרים ראשוניים ‪q,p‬‬
‫– נמצא ‪ e‬זר ל‪(n) -‬‬
‫– המפתח הציבורי הוא המכפלה ‪ n=p·q‬ו‪e-‬‬

‫‪ ‬חישוב המפתח הפרטי‬
‫– קיים ‪ d‬כך ש‪e·d = 1(mod (n)) -‬‬
‫– אלגוריתם אוקלידס המורחב ‪d ‬‬
‫– המפתח הפרטי הוא ‪d‬‬
‫‪4‬‬

‫ – צורת שימוש‬RSA
(x1,x2,x3,…,xm) :‫מידע מקורי‬
n,e :‫מפתח ציבורי‬
(x1e, x2e,x3e ,…,xme)(mod n) :‫מידע מוצפן‬
d :‫מפתח פרטי‬
(x1ed, x2ed,x3ed ,…,xmed)(mod n) :‫מידע מפוענח‬
= (x1, x2,x3 ,…,xm)
"Cryptography: A Primer" by Alan G.
Konheim - Chapter 8

‫מידע נוסף‬
5

‫כיוון ההתקפה על ‪RSA‬‬
‫‪ ‬צריך למצוא‪ :‬מפתח פרטי ‪d -‬‬
‫‪ ‬ידוע‪ :‬מפתח ציבורי ‪ e -‬ו‪n-‬‬
‫‪ ‬חסר )‪(n‬‬
‫‪ ‬נמצא ‪ p‬ו‪ q-‬כך ש‪p·q=n -‬‬

‫‪6‬‬

‫שיטת פרמה‬
‫‪ ‬נמצא ‪ x>n‬כך ש‪ x2-n -‬הוא מספר ריבועי‬
‫‪ ‬בהתאמה ( ‪:) x=a+n‬‬
‫‪f(a) = (a+ n)2 – n‬‬
‫‪g(a) = (a+ n)2‬‬

‫‪ ‬ננסה …‪ a=0,1,2,‬עד שנמצא ‪ a‬כזה שעבורו )‪ f(a‬הוא‬
‫מספר ריבועי‪.‬‬
‫‪ ‬נחשב )‪y=f(a), x=g(a‬‬
‫ומתקיים‪n=x2-y2=(x+y)·(x-y)=p·q :‬‬
‫‪7‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫המכונה של‬
‫להמר‬
‫נבנתה‬
‫ב‪1926-‬‬
‫ובעזרתה‬
‫ניתן היה‬
‫לבדוק ‪60‬‬
‫מספרים‬
‫בשניה‬
‫‪8‬‬

‫שרשראות האופניים של להמר ‪Lehmer -‬‬
‫‪ ‬לפי שיטת פרמה צריך למצוא )‪ f(a‬ריבועי‪.‬‬
‫‪ ‬אורכה של כל שרשרת הוא ראשוני‪.‬‬
‫‪ ‬כל חוליה בשרשרת מסומנת האם זו שארית ריבועית עבור‬
‫‪ a‬מעל אורך השרשרת‪.‬‬
‫‪ ‬בערך מחצית מכל שרשרת מסומנת‪.‬‬
‫‪ ‬כשכל השרשראות מעידות על שארית ריבועית‪ ,‬מנסים‬
‫להוציא שורש ל‪.f(a)-‬‬
‫‪9‬‬

‫הסיבוכיות של שיטת פרמה‬
‫המימוש של להמר הוא ניצול יפה של חומרה ייחודית‬
‫אבל אין שינוי אסימפטוטי בביצוע‬
‫יש רק ‪ n‬מספרים ריבועיים קטנים מ‪ ,n-‬לכן עבור ‪n‬‬
‫כללי נצפה למצוא את המספר הריבועי המתאים‬
‫תוך ‪ n‬פעולות‪.‬‬
‫זה גרוע כמו לנסות לחלק בכל הראשוניים‪.‬‬

‫‪10‬‬

‫הניפוי הריבועי ‪ -‬עקרונות‬
‫‪(x+y)(x-y)0(mod n)  x²y²(mod n) ‬‬
‫‪ ‬נחשב )‪ GCD(x-y,n‬ובהסתברות של חצי נקבל מחלק של‬
‫‪ n‬שאינו טריוויאלי‪.‬‬
‫‪ ‬נגדיר‪Q(x)=(x+n)-n=x̃²-n :‬‬
‫‪ ‬נמצא קבוצת ‪-x‬ים כזאת שמכפלת ה‪ Q(x)-‬תהיה מספר‬
‫ריבועי וממילא ה‪-x̃-‬ים ריבועיים‪ .‬וכך נקבל ‪ x‬ו‪y-‬‬
‫מתאימים‪.‬‬
‫‪11‬‬

‫בסיס הגורמים וטווח הניפוי‬
‫‪ B={p1…pk} ‬בסיס הגורמים (ראשוניים)‪.‬‬
‫‪ B‬ישמש לבחירת )‪-Q(x‬ים פריקים בצורה נוחה לנו‪.‬‬
‫‪ ‬טווח הניפוי ‪ -‬קבוצת ה‪-x-‬ים שעבורם נחפש )‪Q(x‬‬
‫מתאים‪.‬‬
‫‪ ‬טווח הניפוי הוא תיאורתי ומשמש לחישובי סיבוכיות‪.‬‬

‫‪12‬‬

‫שלב הניפוי‬
‫‪ ‬נחפש ‪-x‬ים כך ש‪ Q(x)-‬חלק מעל ‪B‬‬
‫‪ ‬כיווני הסריקה‬
‫– לכל ‪ ,x‬נחלק את )‪ Q(x‬בכל הראשוניים מתוך ‪B‬‬
‫– לכל ראשוני מתוך ‪ ,B‬נמצא את ה‪-Q(x)-‬ים שמתחלקים בו‬
‫אם )‪ p|Q(x‬אז גם )‪p|Q(x+p‬‬

‫‪ ‬חלוקה בין מחשבים רבים‪ ,‬לצורך מציאת קבוצה גדולה של‬
‫)‪-Q(x‬ים מתאימים‪.‬‬
‫‪13‬‬

‫שלב המטריצה‬
‫‪ ‬כל )‪ Q(x‬חלק מעל ‪ ,B‬ניתן לייצוג ע"י וקטור חזקות‪:‬‬
‫)‪Q(x)=p1v1p2v2…pkvk=(v1,v2,…,vk‬‬
‫‪ ‬נציב את ה‪-Q(x)-‬ים המתאימים במטריצה‬
‫– כמה אנחנו צריכים? לפחות |‪|B‬‬

‫‪ ‬פתרון המטריצה ע"י‬
‫החילוץ הגאוסיאני – ‪The Gaussian elimination‬‬

‫‪14‬‬

‫הניפוי הריבועי ‪ -‬סיבוכיות‬
‫‪ ‬בסיס ראשוניים בגודל ‪n‬‬
‫‪‬כל )‪ Q(x‬חלק מעל ‪ ,B‬אבל המטריצה ענקית‪.‬‬

‫‪ ‬בסיס ראשוניים קטן מאד‬
‫‪‬מטריצה קטנה‪ ,‬אבל קשה למצוא )‪ Q(x‬חלק מעל ‪.B‬‬
‫½)‪½·(log log n‬‬
‫‪½·(log‬‬
‫)‪n‬‬
‫‪e‬‬
‫ל‪-‬‬

‫‪ ‬האיבר הגדול ב‪ B-‬קרוב‬
‫½)‪½·(log log n‬‬
‫‪2·(log‬‬
‫)‪n‬‬
‫‪O(e‬‬
‫‪ ‬סדר הגודל )של שלב הניפוי(‪) :‬‬
‫‪¹/³·(log log n)²/³‬‬
‫‪c·(log‬‬
‫)‪n‬‬
‫‪(2c1½) ; O(e‬‬
‫‪) :NFS ‬‬
‫‪15‬‬

‫‪TWINKLE‬‬
‫‪ ‬שלב הניפוי כבד מאוד ומוגבל ע"י מהירות המחשבים‪.‬‬
‫‪ ‬פרופ' עדי שמיר ממליץ להחליף מחשבים ב‪-LED-‬ים‬
‫הם זולים יותר ומהירים יותר‪.‬‬
‫‪ ‬ה‪TWINKLE-‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫‪16‬‬

‫מכשיר אופטי‬
‫גליל שחור אטום‬
‫בצד אחד דיודות‪ ,‬בצד שני מד‪-‬אור‪.‬‬
‫מד‪-‬אור מעביר פולסים שמעידים על )‪ Q(x‬חלק מעל ‪B‬‬

‫ מבנה‬- TWINKLE

17

‫‪ – TWINKLE‬פעולת הניפוי‬
‫‪ ‬שעון – ‪10GHz‬‬
‫‪ ‬נוריות מהבהבות במחזוריות קבועה‬
‫(היסט מחושב מראש)‬
‫‪ ‬מד‪-‬אור מזהה עוצמה ידועה מראש )))‪(log(Q(x‬‬
‫‪ ‬מד‪-‬אור מאותת ל‪PC-‬‬
‫‪ ‬ה‪ PC-‬מציב במטריצה‬
‫‪18‬‬

‫‪ TWINKLE‬מול ‪PC‬‬
‫‪ PC ‬מהיר במיוחד‪ ,‬גישה לזכרון ב‪.1GHz-‬‬
‫‪ ‬סריקה של ‪ 10,000,000,000‬מספרים באורך ‪ n‬ביטים =‬
‫‪n·1.25GB‬‬
‫‪ ‬סה"כ ‪ n·1.25‬שניות לסריקה בלבד‪.‬‬
‫‪ TWINKLE ‬מנפה מתוך ‪ 10,000,000,000‬מספרים‪ ,‬את‬
‫המספרים החלקים מעל ‪ B‬בשניה אחת‪.‬‬
‫‪ 1:1250 ‬לטובת ‪ ,TWINKLE‬בפירוק ‪ 1000‬ביט‪.‬‬
‫‪19‬‬

‫סיכום‬
‫‪ ‬פירוק מספר לגורמים זו עדיין בעיה קשה‬
‫‪ ‬מצפינים מובילים בקרב‬
‫– ‪ (530bits) RSA-160‬נפרץ ב‪ ,2003-‬ע"י חלוקת שלב הניפוי‬
‫בין מחשבי ‪ PC‬בכל העולם‪.‬‬

‫‪ ‬מסקנה חשובה היא שאין לזלזל ביכולות של מכונות חישוב‬
‫ייעודיות‪ ,‬גם אם ברשותנו מחשבים חזקים מאוד‪.‬‬

‫‪20‬‬