לדלג לתוכן

NTRU

מתוך ויקיפדיה, האנציקלופדיה החופשית

NTRU[1]היא מערכתהצפנתמפתח ציבוריוחתימה דיגיטליתמבוססתסריגיםמוגנת בפטנטוקוד פתוחברישיוןGPL,שהומצאה ב-1996 והוצעה כתקן חלופי למערכות הקיימותRSAו-ECC.נכללת ברשימת האלגוריתמים הפוסט-קוונטייםוידועה כמערכת האסימטרית המהירה והיעילה ביותר נכון לשנת 2016. למרות היותו בתהליך תיקנון Std 1363.1 שלIEEEוכן X9.98 שלASC,בשלקריפטואנליזהשלו ביטחונו אינו ברור והוא מוטל בספק. קיימת גרסה אחת של Damien Stehlé ו- Ron Steinfeld שנמצאת בתהליך תקנון וניתנת להוכחה כבטוחה לפי המודל הסטנדרטי, היא פחות יעילה ומסתמכת עלR-LWE[2].

הגרסה הראשונה הומצאה ב-1996 על ידי Jeffrey Hoffstein,Joseph Silverman ו- Jill Pipher. מאוחר יותר באותה שנה חברו המפתחים ל-Daniel Lieman ויסדו את חברת NTRU Cryptosystems שנרכשה ב-2009 על ידי Security Innovation[3].

שם הצופן הוא קיצור של Nth Degree Truncated Polynomial Ring Units כלומרחוג הפולינומיםממעלהאו בסימון מתמטי:.השם מבוטא: "אֶנְטרוּ".

ב-2013 פותחה גרסה של NTRU[4]המוכחת כבטוחה ואשר נחקרת על ידי קבוצות המחקר שלIEEEופרויקט PQCRYPTO כמועמדת "פוסט-קוונטית" להחלפת האלגוריתמים התיקניים הנמצאים בשימוש מסחרי. ב-2016 הציעודניאל ברנשטייןוחוקרים נוספים את NTRU Prime[5]שהוא שיפור של NTRU המתמקד בחוג פולינומיםשל המערכת ואמור לספק עמידות נגד קריפטואנליזה שמנצלת חולשות הנובעות ממבנה החוג.

בהשוואת ביצועים לעומתRSAו-ECCלמשל (ראה טבלה), נמצא ש-NTRU מציגה תוצאות טובות בהרבה[6].זמן הביצוע של הפעולות הפרטיות בצד המקבל אינו גדל באופן ריבועי כמו ב-RSA. בניסויים שנעשו NTRU השיגה זמן ביצוע בחומרה של כ-200,000 הצפנות לשנייה ברמת ביטחון של 256 סיביות.

דרגת ביטחון NTRU אורך מפתח ECC RSA NTRU פעולות/שנייה ECC RSA
בסיביות רגיל אופטימלי אורך מפתח רגיל אופטימלי פעולות/שנייה
112 5,951 4,411 224 2,048 2,284 10,638 951 156
128 6,743 4,829 256 4,096 1,896 9,901 650 12
192 9,757 6,523 384 7,680 1,034 6,849 285 8
256 12,881 8,173 512 15,360 638 5,000 116 1

חברת Security Innovation מציעה פרסים של עד 90,000 דולר למי שיצליח לפרוץ את אחד ממספרי האתגר מהרשימה שפורסמה[7].

הצפנת NTRU[8]משתמשת בטכניקת ערבוב המבוססת עלאלגברהבחוג הפולינומיםוהאינטראקציה שלה עםחשבון מודולריואילו הפענוח הוא הפעולה ההפוכה כלומר שחזור פעולת הערבוב במידה מסוימת בסיועתורת ההסתברות.בדומה ל-GGHביטחון מערכת ההצפנה NTRU נשען במידה ניכרת על הבעיה הקשה שבמציאת הווקטור הקרוב ביותר בתורת הסריגיםבקיצורSVP.מערכת זו נכללת בקטגוריההצפנה הסתברותית,שפירושה שהיא כוללת אלמנט אקראי שונה בכל הצפנה. מה שמייחד אותה היא העובדה שההצפנה והפענוח הם בסיבוכיותשלפעולות עבור בלוק מסר בגודלבהשוואה ל-RSAשדורשתפעולות ביישום רגיל לא ממוטב. אורך המפתח הואוהוא קטן במידה ניכרת בהשוואה לשיטות דומות כמוהצפנת מקאליסאו GGH.

הגרסה המקורית של NTRU כוללת ארבעה פרמטרים בסיסייםוכן ארבע קבוצות פולינומיםממעלהעם מקדמים שלמים המייצגים את טווח המפתח הפרטי והציבורי, טווח האלמנט האקראי וטווח המסר בהתאמה (מפורטים בהמשך).הואמספר ראשוניונקרא כאן פרמטר ביטחון והוא קובע את רמת הביטחון של המערכת בהתאם לדרישה,מציין את מספר המקדמים החיוביים והשליליים (מפורט בהמשך).ו-נקראים מודולוס ומשמשים לצמצום המקדמים. הם לא חייבים להיות ראשוניים אך נדרש שיתקיים(כאשרהיא פונקצייתמכנה משותף מינימלי). וכןצריך להיות גדול משמעותית מ-למשל(אם כי זה לא הכרחי ומסיבות של יעילות רצויפחות גדול). הפעולות של הצופן הן בחוג הפולינומים.האלמנטהוא פולינום המיוצג על ידי הווקטור:

או בכתיב מקוצר.

כאן מכפלת שני פולינומים (וקטורים ב-) מיוצגת על ידי הסימן.היא נקראת גםקונבולוציה מעגליתוהיא מוגדרת כך:

.

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

לצורך NTRU משתמשים בפולינום טרינארישהוא פולינום שבו המקדמים.מייצגים זאת על ידי הסימוןשפירושו שבפולינוםבסך הכולמקדמים שווים,בסך הכולמקדמים שוויםוהיתר אפס. לדוגמה:

.

קיים מיפוי טבעי (הומומורפי) בין האלמנטים בחוגלבין אלמנטים מהחוג(מודולו) המיפוי הוא פשוט צמצום המקדמים מודולו.לפעמים דרוש מעבר בכיוון ההפוך, כלומר אםהוא פולינום, אפשר לבצע "הגבהה" או "מרכוז" (center lift) שלו כך שיתקבל פולינוםהמקיים,בוחרים את המקדמים באופן כזה שהם יהיו בטווח:

כלומר אם לאחר צמצום ב-מתקבלערכו יהיה.לדוגמה אםונתון הפולינוםה-center lift שלו הוא הפולינוםכשהמקדמים הם השלמים בטווח.

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

[עריכת קוד מקור|עריכה]

תיאור הפונקציהNTRUencrypt.להכנה המקבלבובמכין בסוד שני פולינומים טרינאריים.הפולינוםחייב להיותהפיךמודולוומודולו.לכן הוא נבחר בצורה(במקרה של <לפולינום אף פעם אין הופכי ב). חישוב ההופכי שלו נעשה עםאלגוריתם אוקלידס המורחב.ההופכיים שלו מסומנים כאןו-כאשר מתקיים כרגיל:

.

לאחר מכן בוב מחשב את מכפלת הפולינומים:.

המפתח הציבורי של בוב הואאותו הוא שולח לאליס בערוץ פתוח כלשהו (כמו בכל מערכת הצפנה חלה החובה לאמתו). המפתח הפרטי הוא הפולינום(וכן ההופכיים שלו כאמור) והוא נשמר בסוד. הפולינוםאינו נחוץ להצפנה ופענוח ולכן יש להשמידו.

אםאליסרוצה להצפין עבור בוב את המסר.(כלומר המסר צריך להיות ממופה לפולינום טרינארי מהקבוצהבדרך גלויה ומוסכמת על כל הצדדים). היא בוחרת פולינום אקראי חד-פעמיהמשמש להסתרת המסר ומשתמשת במפתח הציבורי של בוב כדי לחשב את:

.

ושולחת אתלבוב.

לפענוח בוב משתמש במפתח הפרטי שלווההופכי שלו כדי לחשב את:

.

המקבל משנה את המקדמים שלכך שיהיו בטווחפעולה זו נקראת center-lift. כעת אם מתייחסים ל-כאל פולינום עם מקדמים שלמים בוב יכול לחלץ את המסר על ידי:

.

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

.

בבחירת פרמטרים נכונה מקדמי הפולינום האחרון כמעט תמיד בטווחולכן אינו משתנה כשמצמצמים מודולו.המשמעות היא שכאשר בוב מצמצם את המקדמים שלמודולוהוא מקבל את הפולינוםבחוגוכאשר הוא מצמצם את המקדמים שלמודולוהוא מבטל אתומקבל את הפולינוםאותו הוא יכול להכפיל ב-כדי לחלץ את.

חתימה דיגיטלית

[עריכת קוד מקור|עריכה]

הרעיון של האלגוריתםNTRUsignהוא שהחתימה היא הוכחה שהחותם יכול פתור את בעיית הווקטור הקצר ביותר (SVP) בסריג NTRU של הנקודה המיוצגת על ידי המסמך או תמצית שלו. המפתח הפרטי (מפתח החתימה) שלו הוא בסיס קצר של הסריג NTRU והמפתח הציבורי (מפתח האימות) הוא בסיס הרבה יותר ארוך. המוודא יכול בקלות לראות שאכן החתימה היא באמת וקטור קרוב ביותר למסמך. אך עם המפתח הציבורי המוודא אינו יכול בעצמו או שזה קשה מאוד עבורו למצוא וקטור קרוב.

מאז המצאתו והצגתו ביורוקריפט 2001, אלגוריתם החתימה NTRUSign סובל מהיסטוריה של בעיות וכשלים רבים ובוצעו מספר תיקונים ותוספות טלאים. תחילה גילו Craig Gentry ו-Mike Szydlo[9]בגרסה המקורית תקלה חמורה, עותקים של החתימה הדיגיטלית חושפים מידע לגבי המפתח הפרטי. המפתחים תקנו את הבעיה ופרסמו אלגוריתם משופר וכן הצעה לתקן R-NSS. ב-2006 פרסמועודד רגבו-Phong Nguyen קריפטואנליזה[10]של חתימת NTRU המאפשרת לחשוף את המפתח הפרטי בזמן מאוד קצר תוך שימוש ב-400 חתימות בלבד. הפתרון שהוצע היה "הסטה" (perturbation) כלומר החותם מסיט את הנקודה המייצגת את המסר על ידי וקטור סודי קצר. שוב נמצא שהתיקון לא שיפר בהרבה את המצב, בהתקפה שפורסמה[11]אפשר לחשוף את המפתח הפרטי עם 300,000 חתימות בלבד. נכון לשנת 2016 לא ברור אם האלגוריתם ראוי לשימוש במתכונתו הנוכחית למרות התיקונים והטלאים שנוספו.

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

[עריכת קוד מקור|עריכה]

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

כדי לחתום על מסמך(המסמך מחולק לשני פולינומים שווים), תחילה באמצעות אלגוריתם אוקלידס המורחב מחשב שני פולינומים נוספיםשנקראים "חצי בסיס משלים" לסריג NTRU כך שמתקיים.ומחשב את שני הווקטורים:

כאשר הסימוןמייצג פולינום עם מקדמים המעוגלים לשלם הקרוב ביותר. החתימה של בוב על המסמךהיא:.את החתימה והמסמךהוא שולח לאליס.

המקבלת אליס המעוניינת לוודא את חתימתו של בוב משתמשת במפתח הציבורי שלוכדי לחשב את:

.

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

  • כדי לשבור את הצופן המתקיף יכול לנסות כמה דרכים. בשיטתכוח גסהמתקיף יכול לנסות לנחש את המפתח הפרטי על ידי ניסוי כל האפשרויות שלובדיקה אם המכפלהמודולומכילה כניסות קטנות. באותה שיטה אפשר לנסות לנחש את המסר. בעיקרון סודיות המפתח תלויה בגודל הקבוצהוביטחון מסר מוצפן ב-.
  • אם זיכרון זמיןהתקפת ניפגש באמצעמאפשרת לקצר את זמן הניחוש של המפתח הפרטי בפקטור ריבועי. מחלקים אתלשני חצאים נניחואז משווים זוגות שונים שלו-כן שמקדמיהם בעלי ערך דומה בקירוב. החיפוש מתבצע עם טבלה המכילה רשימה ממוינת של החצי האחד והחיפוש מתבצע על החצי השני עד שנמצא מועמד טוב. לאור זאת הטווח או מספר האלמנטים בקבוצה צריך להיות כפול כדי להגיע לרמת ביטחון נדרשת. לדוגמה עבור ביטחון מינימלי בסטנדרטים של ימינוהטווח של,ו-צריך להיות בסביבות.
  • אם אליס מצפינה מסרים רבים (נגיד ארבעה או חמישה) עם אותו מפתח ציבורי אך עם מספר אקראי שונה עבור כל מסר כנדרש, המתקיף יכול לנצל נתון זה כדי לשבור את המערכת ולנחש את המסר כדלהלן: נניח שאליס הצפינה אתבסך הכולפעמים עםערכישונים. המתקיפה איב יכולה לחשב אתומתקבלעבור.היות שהמקדמים שלקטנים למעשה היא מקבלת בהסתברות גבוהה אתממנו היא יכולה לגלות מקדמים רבים שלואת היתר היא יכולה לנחש בכוח גס. אםידוע אפשר לגלות את.מסיבה זו הצפנה חוזרת של מסר נתון אינה מומלצת מבלי להסתיר את המסר על ידי פעולת ערבוב נוספת כלשהי עם אקראיות. כמובן שההתקפה המתוארת יעילה רק עבור מסר אחד ואין בה כדי לסייע בפענוח מסרים אחרים.
  • בעיית חישוב המפתח הפרטי מתוך המפתח הציבורי היא: בהינתןמצא שני פולינומים טרינארייםו-המקיימים.הוכח שבעיה זו כמעט שקולה לבעיית הווקטור הקצר ביותר במחלקה מיוחדת של סריגים. תאורטית המתקיף יכול לנסות לשבור את המערכת על ידי ניסיון לפתור את בעיית הווקטור הקצר ביותר. אפשר למצוא וקטור כזה בחיפוש ממצא או עם אלגוריתםLLLאך סיבוכיות התקפה כזו לרוב אינה מעשית היות שבעיית הווקטור הקצר ביותר ידועה כבעיה קשה מאוד ולא ידוע על פתרון פולינומי.

בחירת פרמטרים

[עריכת קוד מקור|עריכה]

המפתחים הציעו שלוש קונפיגורציות של פרמטרים המציעות דרגות שונות של ביטחון מהקל אל הכבד:

אופציה 1.ביטחון נמוך המתאים למסרים בעלי חשיבות נמוכה או כאשר המפתחות מוחלפים בתדירות גובהה, כמו בהצפנתשיחה אלחוטיתאוממיר טלוויזיה.

.הפולינוםפירושו פולינום טרינארי שמכיל 15 מקדמים חיוביים () ו-14 מקדמים שליליים ().

המפתח הפרטי הוא באורך 340 סיביות והמפתח הציבורי באורך 642 סיביות. דרגת ביטחון של המפתח היא.

אופציה 2.ביטחון בינוני.

המפתח הפרטי באורך 530 סיביות והציבורי 1169 סיביות. רמת ביטחון של.

אופציה 3.ביטחון גבוה.

אורך מפתח פרטי 1595 סיביות וציבורי 4024 סיביות. רמת ביטחון של.

דוגמה במספרים קטנים

[עריכת קוד מקור|עריכה]

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

להכנה בוב בוחר את הפולינומים:

וכן

ומחשב את ההופכיים שלהם:

בוב שומר אתואת ההופכי שלוכמפתח פרטי.

כעת בוב מחשב ומפרסם ברבים את המפתח הציבורי שלו:

נניח שאליס מעוניינת לשלוח לבוב את המסר:

תחילה היא בוחרת מספר אקראי נניח:משתמשת במפתח הציבורי של בוב ומחשבת את:

אותו היא שולחת לבוב. כאשר בוב מקבל אתהוא פועל כדלהלן. תחילה מחשב את:

ואז מבצע מרכוז (Centerlift) של מקדמי התוצאה מודולוומקבל את:

לבסוף מצמצם את מקדמימודולוומכפיל בהופכי:

ממרכז (Centerlift) את התוצאה האחרונה מודולוומקבל את:

שיטות מתקדמות

[עריכת קוד מקור|עריכה]

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

  • כאשרראשוני ו-הוא חזקה של 2 כמו בגרסה המקורית של NTRU.
  • כאשרהוא חזקה של 2 ו-גם ראשוני. מבנה זה הוצע על ידי Damien Stehlé ו-Ron Steinfeld לשיפור NTRU כך שיהיה בעל ביטחון מוכח וכן נמצא בשימושRingLWE.
  • כאשרראשוני. הוצע על ידי דניאל ברנשטיין ואחרים כתחליף טוב יותר למבנה החוג ב-NTRU.

ב-2011 הציעו Damien Stehlé ו-Ron Steinfeld גרסה משופרת[12]בשינויים קלים של הצפנה/חתימה דיגיטלית NTRU המוכחת כבטוחה נגדהתקפת מוצפן-נבחרבמסגרתמודל אורקל אקראיאו מודלסיבוכיותסטנדרטי, תחת הנחת הקושי שבפתרון בעיות סריגים (במחשב קלאסי או קוונטי) עם הגבלה לסוג מסוים של סריגים מעלשדה ציקלוטומי.הם הראו שאם בוחרים את הפולינומים הסודיים של המקבל כפונקצייתגאוסייןבדידית אז המפתח הציבורי ייראה מבחינה סטטיסטית אחיד ובלתי ניתן להבחנה מעל הטווח שלה. תכונתאי-הבחנהבהקשר של מפתח ציבורי פירושה קושי בניחוש המפתח הפרטי מתוך המפתח הציבורי.

בתהליך ההכנה של NTRU. המפתח הפרטי הוא שני פולינומים "דלילים" ממעלה הנמוכה מ-עם מקדמים.המפתח הציבורי הוא המנה שלהם בחוג.בחירת המפתח הפרטי נעשית כפונקציה גאוסיאנית בדידית באופן כזה שסטיית התקן תהיה בערך.השינויים שהוצעו לעומת הגרסה המקורית הם כדלהלן:

  1. החלפת חוג הפולינומים ב-כאשרהוא חזקה של 2. כך מתקבל חוג שלמים מעל שדה ציקלוטומי.
  2. הוא ראשוני כך שמתקייםמתחלק ל-גורמים (העתקות ליניאריות) שונים מודולו.
  3. ו-נלקחים מתוך דגימה גאוסיאנית דיסקרטית מעל החוג,בתנאי שהם הפיכים מודולו.אם הם אינם הפיכים מתעלמים מהדגימה ומנסים דגימה אחרת עד שהתנאי מתקיים. כמו כןהוא מהצורהכאשרהוא הדגימה הגאוסיאנית האמורה. התוספת האחרונה מקלה על הפענוח כי אם מתקייםלא צריך את ההכפלה האחרונה בהופכי של.
  4. מוסיפים וקטור שגיאה קטןלהצפנה כך שההצפנה כעת היא:,כאשרנבחר טווח השגיאה של בעיית RingLWE.

השינויים הללו מעלים מעט את סיבוכיות ההצפנה לעומת ההצעה המקורית, בעיקר בגלל התוספות האמורות, אך בתמורה מושג שיפור משמעותי בביטחון ההצפנה.

NTRU נמצא בתהליך תקינה של שני גופים בינלאומיים:

בנוסף האלגוריתם הוצע בטיוטתIETFכמועמד לפרוטוקולTLS.ב-2009 הוזכר NTRU על ידיNISTכמועמד אפשרי לאלגוריתם הצפנה אסימטרי פוסט-קוונטי, שיחליף את האלגוריתמים הנוכחיים. במסגרת המאמץ להתכונן לקראת העידן הקוונטי[15]ב-NIST מתכוונים לפרסם בסוף 2016 תחרות פתוחה[16]שבה יבחנו הצעות לאלגוריתם פוסט-קוונטי.

NTRU זמינה כקוד פתוח תחת רישיון GPL ו-FOSS. בתנאי שכל שימוש בו יהיה זמין גם הוא כקוד פתוח. זאת במטרה להסיר מכשולים ולאפשר למפתחים להטמיע את האלגוריתם מהר ככל האפשר. כמו כן האלגוריתם ניתן לשימוש מסחרי תחת רישיון BSD. כיום ישנם ב-GitHubשני פרויקטי קוד פתוח ב-C וב-Java המיישמים את NTRU; פרויקט NTRU[17]תחת רישיון GPL וספריית NTRU[18]ברישיון BSD.

הערות שוליים

[עריכת קוד מקור|עריכה]