פונקציה זניחה

במתמטיקה ובקריפטוגרפיה פונקציה זניחה (Negligible function) היא פונקציה שהערכים שהיא מחזירה קטנים מאוד - זניחים - ביחס לערכים שהיא מקבלת. פורמלית, פונקציה f : N → N {\textstyle f:\mathbb {N} \to \mathbb {N} } נחשבת לזניחה אם לכל פולינום p {\displaystyle p} , הפונקציה קטנה יותר מהר מהפונקציה 1 / p {\textstyle 1/p} . בקריפטוגרפיה, המטרה היא שכל יריב מוגבל חישובית יוכל להצליח לשבור את ההצפנה (כלומר, לגלות את הטקסט המקורי שהוצפן) בהסתברות זניחה לכל היותר, כלומר, עבור טקסט מוצפן באורך n {\displaystyle n} , היריב יוכל להצליח לגלות את הטקסט הסודי המקורי בסיכוי לכל היותר n e g l ( n ) {\displaystyle negl(n)} , כאשר n e g l {\displaystyle negl} היא פונקציה זניחה. ככלל סכמה קריפטוגרפית תחשב בטוחה אם ההסתברות של שבירה אפילו חלקית שלו (כמו הפיכת פונקציה חד-כיוונית או הבחנה בין פלט מחולל פסאודו-אקראי לבין רצף אקראי אמיתי) חסומה על-ידי פונקציה זניחה של אורך הקלט. הפונקציה f {\displaystyle f} תקרא זניחה אם עבור כל פולינום חיובי p ( ⋅ ) {\displaystyle p(\cdot )} (כלומר כל הערכים ש- p {\displaystyle p} מקבל חיוביים) קיים שלם חיובי N {\displaystyle N} כך שעבור כל השלמים n > N {\displaystyle n>N} מתקיים | f ( n ) | < 1 p ( n ) {\displaystyle \textstyle |f(n)|<{\frac {1}{p(n)}}} . דרך אחרת לנסח זאת: עבור כל קבוע c {\displaystyle c} קיים שלם חיובי N {\displaystyle N} כך שעבור כל n > N {\displaystyle n>N} מתקיים f ( n ) < n − c {\displaystyle f(n)<n^{-c}} . פונקציית זניחות מקיימת תכונת סגירות מסוימת. עבור שתי פונקציות זניחות negl 1 {\displaystyle {\text{negl}}_{1}} ו- negl 2 {\displaystyle {\text{negl}}_{2}} מתקיים negl 3 ( n ) = negl 1 ( n ) + negl 2 ( n ) {\displaystyle {\text{negl}}_{3}(n)={\text{negl}}_{1}(n)+{\text{negl}}_{2}(n)} זניחה גם היא. וכן עבור כל פולינום p {\displaystyle p} הפונקציה negl 4 ( n ) = p ( n ) ⋅ negl 1 ( n ) {\displaystyle {\text{negl}}_{4}(n)=p(n)\cdot {\text{negl}}_{1}(n)} נקראת גם כן זניחה. הוכחה: הרעיון: להראות שלפונקציה f {\displaystyle f} כלשהי f ( n ) ≤ n − c {\displaystyle f(n)\leq n^{-c}} . נשתמש בעובדה ש- g 1 ( n ) , g 2 ( n ) ≤ n − ( c + 1 ) {\displaystyle g_{1}(n),g_{2}(n)\leq n^{-(c+1)}} . מאחר שהן זניחות, צירוף של שתי פונקציות זניחות שקטנות שוות ל- n − ( c + 1 ) {\displaystyle n^{-(c+1)}} חייבות להיות קטנות מ- n − c {\displaystyle n^{-c}} . אנחנו צריכים להראות של- c ∈ N {\displaystyle c\in \mathbb {N} } כלשהו, אנחנו יכולים למצוא n 0 {\displaystyle n_{0}} ככה ש- ∀ n ≥ n 0 , f ( n ) ≤ n − c {\displaystyle \forall n\geq n_{0},f(n)\leq n^{-c}} נבחר c ∈ N {\displaystyle c\in \mathbb {N} } . מכיוון שגם c + 1 ∈ N {\displaystyle c+1\in \mathbb {N} } וגם g 1 ( n ) , g 2 ( n ) {\displaystyle g_{1}(n),g_{2}(n)} זניחות, יש n g 1 , n g 2 {\displaystyle n_{g_{1}},n_{g_{2}}} שבהם ∀ n ≥ n g 1 , g 1 ( n ) ≤ n − ( c + 1 ) {\displaystyle \forall n\geq n_{g_{1}},g_{1}(n)\leq n^{-(c+1)}} וגם ∀ n ≥ n g 2 , g 2 ( n ) ≤ n − ( c + 1 ) {\displaystyle \forall n\geq n_{g_{2}},g_{2}(n)\leq n^{-(c+1)}} . נבחר n 0 = max ( n g 1 , n g 2 , 2 ) {\displaystyle n_{0}=\max(n_{g_{1}},n_{g_{2}},2)} , ואז עבור n ≥ n 0 {\displaystyle n\geq n_{0}} כלשהו, יש לנו f ( n ) = g 1 ( n ) + g 2 ( n ) ≤ n − ( c + 1 ) + n − ( c + 1 ) = 2 n − ( c + 1 ) ≤ n ∗ n − ( c + 1 ) {\displaystyle f(n)=g_{1}(n)+g_{2}(n)\leq n^{-(c+1)}+n^{-(c+1)}=2n^{-(c+1)}\leq n*n^{-(c+1)}} בגלל n ≥ n 0 ≥ 2 {\displaystyle n\geq n_{0}\geq 2} מה שמראה שגם f ( n ) ≤ n − c {\displaystyle f(n)\leq n^{-c}} ומכיוון שכך f ( n ) {\displaystyle f(n)} זניחה מזה נובע שאם אירוע מסוים מתרחש בהסתברות זניחה בניסוי אחד אז היא תוותר זניחה גם אם חוזרים על הניסוי מספר פולינומי של פעמים. לדוגמה הסיכויים שלאחר הטלת n {\displaystyle n} מטבעות יתקבל בכולם "עץ" מאוד נמוכים. משמעות הדבר היא שגם אם נחזור על הניסוי של הטלת n {\displaystyle n} מטבעות (במספר פולינומי של פעמים) ההסתברות שזה יקרה תישאר זניחה. אפשר להתעלם ללא חשש מהסתברות זניחה לכל צורך מעשי במיוחד עבור ערכים גדולים של n {\displaystyle n} . להמחשה, הסתברות זניחה פירושה שההסתברות שהיריב יצליח לשבור את האלגוריתם נמוכה מההסתברות שאסטרואיד יפגע במצפין בזמן ההצפנה. דרך אחרת לנסח זאת, הסיכויים שהיריב יצליח לשבור את הצופן נמוכים מהסיכויים שמחשבו של המצפין יתקלקל ומפתח ההצפנה ימחק כליל. לכן אין לחשוש ממצב כזה שקיימת הסתברות שולית שאפשר לשבור את האלגוריתם. הפונקציות 2 − n {\displaystyle 2^{-n}} או 2 − n {\displaystyle 2^{-{\sqrt {n}}}} נקראות זניחות אף על פי שהן מתכנסות לאפס בקצב שונה. לעומת זאת n − 3 {\displaystyle n^{-3}} אינה זניחה. אם קובעים רף של 10 − 6 {\displaystyle 10^{-6}} אז עבור n ≥ 20 {\displaystyle n\geq 20} מתקבל 2 − n < 10 − 6 {\displaystyle 2^{-n}<10^{-6}} . כמו כן אפשר לראות שעבור כל n > 65 , 536 {\displaystyle n>65,536} מתקיים 2 − n < n − log ⁡ n {\displaystyle 2^{-{\sqrt {n}}}<n^{-\log n}} מזה נובע שעבור n {\displaystyle n} גדול הסתברות של 2 − log ⁡ n {\displaystyle 2^{-\log n}} יותר זניחה. בהערכת פונקציית זניחות יש חשיבות רבה לגודלו של פרמטר הביטחון n {\displaystyle n} שבדרך כלל מייצג את אורך המפתח/אורך הבלוק בסיביות. אם n {\displaystyle n} נמוך למשל n ≤ 40 {\displaystyle n\leq 40} אז אף על פי שהפונקציה 2 40 ⋅ 2 − n {\displaystyle 2^{40}\cdot 2^{-n}} נחשבת לכאורה לזניחה ביחס ל- n {\displaystyle n} , אבל מאחר ש- n {\displaystyle n} קטן, יכול להיות מצב שיריב שרץ במשך זמן של n 3 {\displaystyle n^{3}} דקות יכול לשבור את אלגוריתם ההצפנה בכוח גס בהסתברות של כמעט 1. כי במקרה ש- n = 40 {\displaystyle n=40} זמן ריצה של 40 3 {\displaystyle 40^{3}} דקות יוצא בסך הכול שישה שבועות. לעומת זאת אם n = 500 {\displaystyle n=500} יריב שרץ בזמן של מאתיים שנה יצליח לשבור את האלגוריתם בהסתברות של 2 − 500 {\displaystyle 2^{-500}} בקירוב, זמן כל כך לא מעשי שהוא נחשב לזניח. לדוגמה, צופן AES נחשב בעל ביטחון אופטימלי במובן שיריב שרץ בזמן t {\displaystyle t} (שנמדד למשל במחזורי שעון) מסוגל לשבור את הצופן בזמן של לכל היותר ϵ = t / 2 n {\displaystyle \epsilon =t/2^{n}} . בטכנולוגיה הנוכחית חישובים בסדר גודל של 2 60 {\displaystyle 2^{60}} נחשבים בקושי ברי ביצוע. אם למשל המחשב פועל במהירות של 1GHz שאז מתבצעים בערך 10 9 {\displaystyle 10^{9}} מחזורים בשנייה, המשמעות היא של- 2 60 {\displaystyle 2^{60}} מחזורי שעון דרושים 2 60 / 10 9 {\displaystyle 2^{60}/10^{9}} שניות, או בערך 35 שנה. אם משתמשים במחשבי על מרובים באופן מקבילי אפשר לצמצם את זמן החישוב לכדי שנתיים. היות שאורך המפתח ב-AES הוא לפחות 128 סיביות, מתקבלת תוספת ביטחון בפקטור של 2 68 {\displaystyle 2^{68}} שזה מספר בן עשרים ספרות עשרוניות בקרוב. כדי לקבל מושג כמה גדול המספר הזה, לפי הערכות של פיזיקאים מספר השניות שחלפו מאז המפץ הגדול הוא בערך 2 58 {\displaystyle 2^{58}} . אירוע שמתרחש אחת למאה שנים, יקרה בהסתברות של 2 − 30 {\displaystyle 2^{-30}} בקירוב. כל אירוע שההסתברות שיקרה בכל רגע היא 2 − 60 {\displaystyle 2^{-60}} , יקרה בהסתברות נמוכה יותר בפקטור של 2 − 30 {\displaystyle 2^{-30}} כלומר הוא צפוי לקרות אחת למאה מיליארד שנים. המסקנה היא שאם t = 2 80 {\displaystyle t=2^{80}} ו- ϵ = 2 − 48 {\displaystyle \epsilon =2^{-48}} אז המפתח צריך להיות באורך 128 סיביות לפחות. בחירה כזו מספקת מרווח ביטחון מניח את הדעת לכל צורך מעשי לטווח הקרוב. כאשר מחשבים קוונטיים יהיו מעשיים יש כאלו שסבורים שיהיה צורך להכפיל את אורך המפתח. Foundations of Cryptography Jonathan Katz and Yehuda Lindell (2007). Introduction to Modern Cryptography (2nd edition).