CKKS – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
Aaadir (שיחה | תרומות)
אין תקציר עריכה
Aaadir (שיחה | תרומות)
שורה 25:
<math>(\frac{\sqrt{2}}{2},\frac{\sqrt{2}}{2}), (-\frac{\sqrt{2}}{2},\frac{\sqrt{2}}{2}), (-\frac{\sqrt{2}}{2},-\frac{\sqrt{2}}{2}), (\frac{\sqrt{2}}{2},-\frac{\sqrt{2}}{2})</math>. ניתן לראות שאמנם החזקה ה-8 של מספרים אלה היא 1, וששאר שורשי היחידה מסדר 8 (1, 1-, i, i-) אינם פרימיטיבים כייוון שהחזקה הקטנה ביותר שלהם המביאה אותם ל-1 היא קטנה מ-8. כמו כן כשמציבים בפולינום את שורש היחידה הראשון <math>(\frac{\sqrt{2}}{2},\frac{\sqrt{2}}{2})</math> מקבלים את הערך המוצפן <math>3+4i</math>, וכשמציבים את שורש היחידה השלישי <math>(-\frac{\sqrt{2}}{2},-\frac{\sqrt{2}}{2})</math> מקבלים את הערך המוצפן <math>2-i</math>. כשמציבים את שורשי היחידה השני והרביעי מקבלים את הערכים הצמודים לערכים אלה. כמו כן, כיוון ששורשי היחידה גלויים לכל, הרי שאין צורך במפתח סודי כדי לפתוח את הפולינום המקודד ולקבל בחזרה את הערכים המוצפנים, וכפי שנאמר שלב הקידוד אינו תורם לבטיחות של סכמת ההצפנה.
 
הבעיה בפולינום שבדוגמה הואהיא שהמקדמים שלו אינם שלמים, כפי שנדרש על ידי הסְכֶמָה. לכן מכפילים את כל המקדמים בפקטור גדול מספיק ומעגלים את התוצאה. ככל שהפקטור גדול יותר, כך מאבדים פחות דיוק בשלב העיגול. למשל בדוגמה למעלה, אם נכפיל את המקדמים בפקטור 64 ונעגל, נקבל את הפולינום <math>\ 160+91x+160x^2+45x^3 </math>, שכל מקדמיו שלמים כנדרש. אם נפתח את הקידוד החדש על ידי הצבת שורשי היחידה נקבל ערכים גדולים פי 64, ולכן יש לקפיד ולחלק את הערכים הסופיים ב-64 בסוף שלב פתיחת הקידוד. בדוגמה למעלה הערכים המוצפנים כללו רכיבים שלמים (3, 4, 2, 1-), אבל שיטת הקידוד תעבוד גם כאשר הערכים המוצפנים כוללים רכיבים שאינם שלמים. צריך רק להקפיד ולהשתמש בפקטור גדול מספיק כדי לאפשר חישובים עם הדיוק הדרוש. כלומר הפקטור בעצם מגדיר את ה'''סְקָאלָה''' או רמת הדיוק של החישובים. למשל פקטור של <math>2^{40}</math> יתאים לחישובים עם דיוק של 40 ביטים. ראו פרטים נוספים על תחזוקת הסְקָאלָה במהלך החישוב ועל הבעיות הקשורות בכך בסעיף למטה.
 
===הצפנה ופיענוח===