Simon & Speck

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

בקריפטוגרפיה, Simon ו-Speck הן משפחות של צופן בלוקים קלי-משקל במבנה פייסטל בסגנון ARX, שפותחו ופורסמו ביוני 2013 על ידי הסוכנות לבטחון לאומי של ארצות הברית במטרה להכשירם כתקן הצפנה על ידי ארגוני התקינה הבינלאומיים[1][2]. היעד של הצפנים הללו הוא למלא את הצורך בצופן קל משקל, גמיש ונוח לניתוח, המציע תפוקה וביצועים מצוינים, בעיקר לאינטרנט של הדברים - חומרה מוגבלת משאבים וצריכת אנרגיה נמוכה מאד. Simon מכוון בעיקר לביצועים אופטימליים בחומרה ואילו Speck מכוון לביצועים אופטימליים בתוכנה.

רקע ומוטיבציה

הצפנים הסימטריים כמו AES שפותחו בעשור הקודם נועדו בעיקר למחשבים שולחניים ושרתים והם אינם מתאימים במיוחד לחומרה דלת משאבים כמו RFID או סנסורים אלחוטיים, כי הם פותחו בטרם המחשוב המפושט (Pervasive Computing) פרץ לתודעה. כיום בעידן האינטרנט של הדברים התקנים רבים בעלי חומרה זעירה צריכים להתקשר ביניהם באופן אלחוטי. ובטחון הוא מצרך חשוב במרביתם, רצוי שהאקר לא יצליח להשתלט מרחוק על משאבת אינסולין או על בלמים של רכב בזמן נסיעה.

תחום חדש יחסית הנקרא צופן בלוקים קל משקל אמור לתת מענה לבעיה זו. קיים כיום היצע רחב וארגוני התקינה שוקדים על הכנסת צפנים כאלה לתקנים הבינלאומים, ביניהם נמנים PRESENT, KATAN, KLEIN או Picolo. הצפנים Simon ו-Speck אמורים להשתלב בין הצפנים קלי המשקל תוך שהם מפגינים בטחון הכרחי כנדרש, גמישות וביצועים טובים ביותר ונפח הקטן ביותר האפשרי לעומת הצפנים המתחרים. צופן בלוקים הוא פרימיטיב קריפטוגרפי ורסטילי ולו שימושים רבים כחלק מפרוטוקולים ומערכות הצפנה ולכן חשיבותו רבה. היות שהתחום צעיר, לא קיימת הגדרה ברורה למושג "קל משקל". באופן כללי מתייחסים לשני נושאים, מימוש מינימלי בחומרה במונחים של תואמי שערים לוגיים (GE) או מימוש בתוכנה בכמות זיכרון SRAM או הבזק מינימליים. ניצול שטח קטן בחומרה פירושו פונקציית סבב פנימית פשוטה יותר גם אם המחיר הוא עלייה במספר הסבבים. בחומרה זעירה מסוג זה שלעיתים פועלת ללא מקור אנרגיה עצמאי, אין חשיבות רבה לתפוקה אלא מושם דגש יותר על צריכת אנרגיה נמוכה. למרות שלא הוגדר בתקן, המוסכמה היא תפוקה של 12 קילוביט לשנייה בתדר של 100 kHz. וכדי שיהיה שמיש צופן בלוקים קל משקל צריך להיות גמיש מספיק להתאמה למגוון פלטפורמות ולצורכי בטחון שונים. לדוגמה אם החומרה פחות מוגבלת רצוי שהצופן יוכל לנצל זאת לשיפור התפוקה על חשבון תוספת שערים.

לאור האמור קיימים מספר היבטים שיש להתחשב בהם כמו: סריאליות, מקביליות ותאימות. סריאליות משפיעה על היכולת למזער את שטח החומרה שהצופן מאכלס למשל אם הצופן עושה שימוש בתיבות החלפה קבועות קשה להתעלם מהשטח שהן תופסות לכן רצוי להימנע מכך. מסיבה זו למבנה ARX יתרון כי הוא אינו עושה שימוש בתיבות החלפה כלל, האי-ליניאריות שלו מושגת משילוב פעולות אריתמטיות בשדות אלגבריים שונים (חיבור מודולרי ו-XOR). מקביליות משפיעה על התפוקה של הצופן ותאימות מתייחסת ליכולת להתאים את האלגוריתם לשימוש ספציפי. לדוגמה בלוק בגודל 64 סיביות ומפתח באורך 128 סיביות בדרך כלל טיפוסיים לתוכנה בעוד שבחומרה לפעמים מעדיפים משיקולי יעילות בלוק באורך 48 סיביות ומפתח באורך 96 סיביות (כאשר מודל הבטחון מאפשר זאת). מסיבה זו Simon ו-Speck עוצבו באופן שיוכלו להשתלב במגוון תצורות (ראה טבלה).

אורך הבלוק אורך המפתח
32 64
48 72, 96
64 96, 128
96 96, 144
128 128, 192, 256

Simon

תיאור מבנה פייסטל של הפונקציה הפנימית בצופן Simon

צופן Simon הוא רשת פייסטל מאוזנת הפועלת על מילים באורך סיביות ולכן הבלוק באורך סיביות. הצופן מקבל בלוק קריא באורך סיביות ומחזיר בלוק מוצפן באורך סיביות. למען הנוחות הוא מסומן בקיצור SIMON2n כאשר . אם אז צופן SIMON2n עם מפתח באורך מסומן בקיצור SIMON2n/mn. לדוגמה SIMON64/128 מתייחס לגרסה הפועלת על מילים באורך 32 סיביות, בלוק באורך 64 סיביות ומפתח באורך 128 סיביות. הצפנה ופענוח ב-SIMON2n עושה שימוש בשלוש פעולות בסיסיות בלבד בסגנון ARX הידוע בחוסנו וקיים בשימוש צפנים רבים ביניהם Salsa20 והם: XOR, AND והזזה מעגלית כאשר מציין את מספר הפוזיציות שיש להזיז (אם שלילי ההזזה היא לימין).

פונקציית הסבב

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

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle R_k(x,y)=(y\oplus f(x)\oplus k, x)}

והפונקציה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle f(x)=(S^1x\ \ \& \ \ S^8x)\oplus S^2x} כאשר הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k} הוא מפתח הסבב.

הביטוי הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle S^ix} פירושו הזזה מעגלית של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle x} לשמאל סיביות והסימן & מייצג את האופרטור AND. הפונקציה ההופכית של פונקציית הסבב הנחוצה לצורך הפענוח היא הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle R_k^{-1}(x,y)=(y,x\oplus f(y)\oplus k)} . לעיתים קרובות משקולי יעילות מיישמים את הצפנים הללו בתצורה שבה יש צורך רק בפונקציית ההצפנה שהיא טובה גם להצפנה וגם לפענוח (ראה מצב מונה לדוגמה).

תהליך הכנת המפתח מקבל את המפתח שסופק על ידי המשתמש ומייצר ממנו סדרה של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle T} מילים: הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k_0,k_1,...,k_{T-1}} . כאשר הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle T} הוא מספר הסבבים. ההצפנה היא בעצם הרכבה של הפונקציות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle R_{k_{T-1}}\circ\cdots\circ R_{k_1}\circ R_{k_0}} (מימין לשמאל).

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

הכנת המפתח

תהליך הכנת המפתח של Simon כולל שימוש בסדרה של קבועי סבב באורך סיבית אחת. תוספת זו הוכנסה כדי להרוס את הסימטריות של ההזזה המעגלית וכן כדי לסכל התקפת גלישה. למעשה וריאציות של Simon מופרדות באופן קריפטוגרפי על ידי חמש סדרות שונות של קבועים: . כל אחת מהן היא פונקציה של אחת משלוש הסדרות המחזוריות הקבועות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle u,v,w} עם מחזוריות באורך 31 סיביות שאותן מחשבים לפי מטריצות קבועות המובאות להלן. את חמש הסדרות של הקבועים מחשבים כדלהלן: שתי הראשונות הן למעשה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_0=u} וכן הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_1=v} . שלוש הנותרות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_2,z_3} ו- הן בעלי מחזוריות באורך 62 סיביות ואותן מחשבים על ידי XOR של הסדרה המחזורית הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle t=t_0t_1t_2,...} במחזוריות 2 (שהיא המחרוזת "01010101...") עם הסדרות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle u,v} ו-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle w} בהתאמה. המטריצות להכנת הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle u,v} ו- הן שלוש מטריצות קבועות מסדר הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 5\times 5} מעל הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle GF(2)} :

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle U=\begin{bmatrix} 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 1 \\ 1 & 0 & 0 & 0 & 1 \end{bmatrix},V=\begin{bmatrix} 0 & 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 1 \\ 1 & 0 & 0 & 0 & 0 \end{bmatrix}, W =\begin{bmatrix} 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 1 \\ 1 & 0 & 0 & 0 & 0 \end{bmatrix}}

הסיבית ה-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle i} בכל רצף מחושבת על ידי איתחול אוגר זיזה ממושב באורך חמש סיביות בערכים 00001, ואז מפעילים את האוגר הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle i} פעמים עם המטריצה המתאימה, וחילוץ הסיבית המשמעותית ביותר. למשל הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle u_i=(0,0,0,0,1)U^i(0,0,0,0,1)^t} .

יהי הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle c=2^n-4} שהוא מחרוזת של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle n-2} אחדים המסתיימת בשני אפסים ("הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 111...11100} "). אז עם מילות המפתח הסודי של המשתמש הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k_{m-1},k_{m-2},...,k_1,k_0} ומחרוזת הקבועים , מחשבים תת-מפתחות נוספים עבור כל הסבבים של הצופן:

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k_{i+m}=\begin{cases} c \oplus (z_j)_i \oplus k_i \oplus (I \oplus S^{-1})S^{-3}k_{i+1}, & \mbox{if }m=2 \\ c \oplus (z_j)_i \oplus k_i \oplus (I \oplus S^{-1})S^{-3}k_{i+2}, & \mbox{if }m=3 \\ c \oplus (z_j)_i \oplus k_i \oplus (I \oplus S^{-1})(S^{-3}k_{i+3} \oplus k_{i+1}), & \mbox{if }m=4 \end{cases}}

עבור הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 0\le i<T-m} . שים לב שהמילים הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k_0} עד הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k_{m-1}} משמשים ל-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle m} הסבבים הראשונים של הצופן, הם נטענים כמו שהם לאוגר הזיזה כאשר הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k_0} מצד ימין ו-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k_{m-1}} מצד שמאל (הצד העליון או הכי משמעותי של הערך). הטבלה הבאה כוללת את כל הקבועים תלויי הגרסה של Simon.

אורך הבלוק הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2n} אורך המפתח הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle mn} גודל מילה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle n} מספר מילות המפתח הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle m} הקבוע seq מספר סבבים הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle T}
32 64 16 4 הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_0} 32
48 72 24 3 הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_0} 36
96 4 הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_1} 36
64 96 32 3 הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_2} 42
128 4 הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_3} 44
96 96 48 2 הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_2} 52
144 3 הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_3} 54
128 128 64 2 הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_2} 68
192 3 הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_3} 69
256 4 הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z_4} 72

פסידו-קוד

הקלט הוא בלוק הטקסט הגלוי כשהוא מחולק לשני חצאים הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle (x,y)} והמפתח הסודי באורך הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle m} מילים המסומנות ב-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k[0]} עד הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k[m-1]} .

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle n=\text{word size }(16,24,32,48,\text{ or }64)} ,
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle m=\text{ number of keys: }\begin{cases} 4 &\text{ if }n=16, \\ 3 \text{ or }4 & \text{ if }n=24\text{ or }32, \\ 2 \text{ or }3 & \text{ if }n=48 \\ 2,3,\text{ or }4 & \text{ if }n=64\end{cases}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle z=\begin{matrix} [11111010001001010110000111001101111101000100101011000011100110, \\ 10001110111110010011000010110101000111011111001001100001011010, \\ 10101111011100000011010010011000101000010001111110010110110011, \\ 11011011101011000110010111100000010010001010011100110100001111, \\ 11010001111001101011011000100000010111000011001010010011101111] \end{matrix}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle (T, j) = \begin{cases} (32,0), & \text{ if }n = 16 \\ (36,0)\text{ or }(36,1) &\text{ if }n = 24, m = 3\text{ or }4 \\ (42,2)\text{ or }(44,3) &\text{ if }n = 32, m = 3\text{ or }4 \\ (52,2)\text{ or }(54,3) &\text{ if }n = 48, m = 2\text{ or }3 \\ (68,2), (69,3),\text{ or }(72,4) &\text{ if }n = 64, m = 2, 3,\text{ or }4 \end{cases} }
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{for }i = m\text{ to }T-1\text{ do:}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ \ \ \ tmp= S^{-3}k[i-1],}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ \ \ \ \text{if }m=4\text{ then } tmp=tmp\oplus k[i-3]}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ \ \ \ tmp=tmp\oplus S^{-1}tmp}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ \ \ \ k[i]=\neg k[i-m]\oplus tmp\oplus z[j][(i-m)\text{ mod }62] \oplus 3}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{for }i = 0\text{ to }T-1\text{ do:}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ \ \ \ tmp=x}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ \ \ \ x=y\oplus(Sx \ \ \& \ \ \ S^8x)\oplus S^2x\oplus k[i]}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ \ \ \ y=tmp}

הסמל הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \oplus} מייצג פעולת XOR, הסימן הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \neg} מייצג את אופרטור השלילה, הביטוי פירושו שהערך המצוי בכניסה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k[i-1]} מסובב בהזזה מעגלית לימין 3 סיביות. שים לב שהלולאה הראשונה היא הכנת המפתח והלולאה השנייה היא ההצפנה.

Speck

תיאור מבנה פייסטל של הפונקציה הפנימית בצופן Speck

לצופן Speck יש עשר גרסאות שכולן עוצבו כדי להשיג ביצועים אופטימליים במיוחד בתוכנה. בדומה לצופן הקודם את הגרסאות השונות נהוג לסמן ב-SPECKn/mn, כמו למשל SPECK96/144 כשהכוונה היא לבלוק באורך 96 סיביות ומפתח באורך 144 סיביות. בצופן זה נוספה פעולה בסיסית של חיבור מלא מודולו הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^n} . הצמצום המודולרי מתבצע באופן עקיף כי כשהתוצאה נחתכת בגבולות המילה הדבר דומה למודולו הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^n} כך שאין צורך בחילוק. הפונקציה הפנימית היא:

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle R_k(x,y)=((S^{-\alpha}x+y)\oplus k, S^{\beta}y\oplus (S^{-\alpha}x+y)\oplus k)} .

כאשר הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \alpha=7,\beta=2} אם הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle n=16} (בלוק באורך 32) אחרת הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \alpha=8,\beta=3} . קיים דמיון קל בין פונקציית הסבב של Speck לפונקציית הסבב של צופן Threefish. הפונקציה ההופכית של פונקציית הסבב הנחוצה בפענוח משתמשת בחיסור מודולו הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2^n} במקום חיבור והיא נראית כך:

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle R_k^{-1}(x,y)=(S^{\alpha}((x\oplus k)-S^{-\beta}(x\oplus y)),S^{-\beta}(x\oplus y))} .

הטבלה הבאה מציגה את כל הפרמטרים של גרסאות צופן Spec בהתאמה:

אורך הבלוק הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 2n} אורך המפתח הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle mn} גודל מילה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle n} מספר מילות מפתח הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle m} הזזה מעגלית הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \alpha} הזזה מעגלית הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \beta} מספר סבבים הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle T}
32 64 16 4 7 2 22
48 72 24 3 8 3 22
96 4 23
64 96 32 3 8 3 26
128 4 27
96 96 48 2 8 3 28
144 3 29
128 128 64 2 8 3 32
192 3 33
256 4 34

תהליך הרחבת המפתח מקבל את המפתח הסודי של המשתמש ומפיק ממנו הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle T} מפתחות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k_0,...,k_{T-1}} כאשר הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle T} הוא מספר הסבבים. ההצפנה היא הרכבה של הפונקציות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle R_{k_{T-1}}\circ\cdots\circ R_{k_1},R_{k_0}} (מימין לשמאל). במילים אחרות זהו מבנה המתקבל משילוב שתי העתקות דמויות רשת פייסטל ביחס לשתי סוגי פעולות חיבור, האחת: הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle (x,y)\mapsto (y,(S^{-\alpha}x+y)\oplus k)} והשנייה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle (x,y)\mapsto(y,S^{\beta}x\oplus y)} .

הכנת מפתח

תהליך הכנת המפתח של Speck מנצל את פונקציית הסבב כדי להכין את המפתחות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k_i} . אם הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle K} הוא המפתח אפשר לכתוב אותו בצורה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle K=(\ell_{m-2},...,\ell_0,k_0)} , כאשר הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ell_i,k_0\in\text{GF}(2)^n} עם ערך של הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle m\in\{2,3,4\}} . הסדרות הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k_i} ו-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ell_i} מוגדרות כך:

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ell_{i+m-1}=(k_i+S^{-\alpha}\ell_i)\oplus i} , וכן
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k_{i+1}=S^{\beta}k_i\oplus\ell_{i+m-1}} . המילה הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle k_i} היא מפתח הסבב ה-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle i} עבור הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle 0\le i<T} .

פסידו-קוד

הקלט הוא בלוק הטקסט הגלוי כשהוא מחולק לשני חצאים הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle (x,y)} והמפתח הסודי באורך הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle m} מילים המסומנות ב-הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ell[m-2],\cdots\ell[0],k[0]} .

הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle n =\text{ word size }(16, 24, 32, 48,\text{ or }64),}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle T =\begin{cases} 22&\text{ if } n = 16 \\ 22\text{ or }23 &\text{ if }n = 24, m = 3 \text{ or } 4 \\ 26\text{ or }27 &\text{ if }n = 32, m = 3 \text{ or } 4 \\ 28\text{ or }29 &\text{ if }n = 48, m = 2 \text{ or }3 \\ 32, 33, \text{ or } 34 &\text{ if }n = 64, m = 2, 3, \text{ or } 4\end{cases}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle (\alpha,\beta) = (7,2)\text{ if }n = 16,\text{ or }(8,3)\text{ otherwise}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{for }i = 0\text{ to }T-2\text{ do:}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ \ \ \ \ \ell[i+m-1]=(k[i] + S^{-\alpha}\ell[i]) \oplus i}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ \ \ \ \ k[i+1]=S^{\beta}k[i] \oplus \ell[i+m-1]}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \text{for }i = 0\text{ to }T-1\text{ do:}}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ \ \ \ \ x=(S^{-\alpha}x + y) \oplus k[i]}
הפענוח נכשל (SVG (אפשר להפעיל MathML בעזרת הרחבת דפדפן): תשובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://wikimedia.org/api/rest_v1/":): {\displaystyle \ \ \ \ \ y=S^{\beta}y \oplus x}

בטחון

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

בתחילה ה-NSA לא סיפקו קריפטואנליזה של הצפנים שלהם מלבד ציון העובדה שהם עברו ביקורת קפדנית בתוך הארגון במשך מספר שנים. הסיבה לטענתם לפרסום האלגוריתמים היא כדי לקבל משוב מהאקדמיה ולאפשר לצפנים להנות מביקורת ציבורית רחבת היקף. מאז פרסומם של הצפנים התפרסמו כמה קריפטואנליזות תאורטיות[3][4] שלא ברור מה מידת השפעתם על בטחון הצפנים. בשל הביקורת הציבורית פרסם ה-NSA בינואר 2018 מספר הבהרות בקשר לשיקולים והסיבות שהנחו אותם בפיתוח הצפנים וכן קריפטואנליזה שלהם[5].

סירוב ארגון התקינה הבינלאומי לתקנן את הצפנים

נציגים ממדינות רבות ביניהן ישראל, בלגיה, יפן וגרמניה בארגון התקינה הבינלאומי ISO התנגדו לניסיון של ה-NSA להוסיף את הצפנים שלהם לתקן הבינלאומי בקטגוריית צופן בלוקים קל משקל לחומרה זעירה[6]. הם הביעו דאגה שה-NSA מקדם את הצפנים שלו תוך ידיעה של חולשות נסתרות שכנראה הוכנסו בהם במכוון. ל-NSA היסטוריה עשירה של ניסיונות להחדיר לשוק האזרחי טכנולוגיות הצפנה פרי פיתוחם שידוע לפחות על חלקם שהכילו דלתות סתר וחולשות, חלקם הוחדרו במכוון וחלקם היו ידועים להם ונשמרו בסוד. לטענתם, ה-NSA לא סיפקו קריפטואנליזה, הסברים ושיקולים תאורטיים שהנחו אותם בפיתוח הצפנים ובעיקר בקביעת מספר הסבבים עבור כל וריאציה של הצפנים וכן השיקולים שהנחו אותם לבחירת המטריצות U,V ו-W בתהליך הכנת המפתח. ב-NSA הביעו תרעומת על כך שארגון התקינה בחר שלא לקבל את הצפנים שלהם שלטענתם טובים מאד, למרות שלא הייתה כל בעיה לקבל צפנים שפותחו על ידי הרוסים או הסינים[7]. ד"ר תומר אשור המייצג את בלגיה בוועדת התקינה הגיב: "ארגון ה-NSA התנהג בבריונות וסירב לבקשות הוועדה לקבלת הסברים וכמעט שהצליח בכך", לדעתו "לארגוני מודיעין אין מקום בתקינה אזרחית". אור דונקלמן המייצג את ישראל בארגון התקינה אמר "קיימים אנשים רבים ב-NSA שחושבים שהעבודה שלהם היא להחליש את התקן, תפקידי הוא לחזק אותו". הצפנים היחידים הנתמכים על ידי התקן נכון ל-2018 הם CLEFIA ו-PRESENT.

ברוס שנייר התבטא בבלוג שלו[8] כי הוא אינו מאמין שהצפנים Simon ו-Speck מכילים חולשות נסתרות או דלתות סתר כלשהן. "זה מסקרן לדעת מדוע בכלל הצפנים האלו פורסמו ולמה דווקא בעיתוי זה" הוא אמר. "זה תמיד מרתק לנתח צפנים שפותחו על ידי ה-NSA, בעיקר משך את תשומת ליבי הדמיון של חלקים של Speck ל-Threefish (ששנייר הוא אחד ממפתחיו). התרשמתי ביותר מתהליך הכנת המפתח שלהם, זה תמיד מרתק לראות צופן של ה-NSA, זה כמו להתבונן בטכנולוגיה חייזרית...".

קוד לדוגמה

להלן קוד ייחוס של האלגוריתם בגרסה החזקה ביותר שלו Speck128/256 בשפת C++‎.

typedef unsigned __int64 uint64;

#define ROR(x, r) ((x >> r) | (x << (64 - r)))
#define ROL(x, r) ((x << r) | (x >> (64 - r)))
#define R(x, y, k) (x = ROR(x, 8), x += y, x ^= k, y = ROL(y, 3), y ^= x)

void speck_encrypt(uint64 const pt[2], uint64 ct[2], uint64 const K[4])
{
	uint64 i, b = K[0], a[3];
	ct[0] = pt[0]; ct[1] = pt[1];

	for (i = 0; i < 3; i++){
		a[i] = K[i + 1];
	}

	R(ct[1], ct[0], b);
	for (i = 0; i < 33; i++) {
		R(a[i % 3], b, i);
		R(ct[1], ct[0], b);
	}
}

#define RR(x, y, k) (y ^= x, y = ROR(y, 3), x ^= k, x -= y, x = ROL(x, 8))

void speck_decrypt(uint64 const ct[2], uint64 pt[2], uint64 const K[4])
{
	uint64 i, b = K[0], a[3];
	pt[0] = ct[0]; pt[1] = ct[1];

	for (i = 0; i < 3; i++){
		a[i] = K[i + 1];
	}

	for (i = 0; i < 33; i++){
		R(a[i % 3], b, i);
	}

	for (i = 0; i < 34; i++) {
		RR(pt[1], pt[0], b);
		RR(a[((32) - i) % 3], b, (32 - i));
	}
}

ראו גם

הערות שוליים

Logo hamichlol 3.png
הערך באדיבות ויקיפדיה העברית, קרדיט,
רשימת התורמים
רישיון cc-by-sa 3.0