Movatterモバイル変換


[0]ホーム

URL:


לדלג לתוכן
ויקיפדיההאנציקלופדיה החופשית
חיפוש

Simon & Speck

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

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

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

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

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

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

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

אורך הבלוקאורך המפתח
3264
4872, 96
6496, 128
9696, 144
128128, 192, 256

Simon

[עריכת קוד מקור |עריכה]
תיאור מבנה פייסטל של הפונקציה הפנימית בצופן Simon

צופן Simon הוא רשת פייסטל מאוזנת הפועלת עלמילים באורךn{\displaystyle n} סיביות ולכן הבלוק באורך2n{\displaystyle 2n} סיביות. הצופן מקבל בלוק קריא באורך2n{\displaystyle 2n} סיביות ומחזיר בלוק מוצפן באורך2n{\displaystyle 2n} סיביות. למען הנוחות הוא מסומן בקיצור SIMON2n כאשרn{16,24,32,48,64}{\displaystyle n\in \{16,24,32,48,64\}}. אםm{2,3,4}{\displaystyle m\in \{2,3,4\}} אז צופן SIMON2n עם מפתח באורךmn{\displaystyle mn} מסומן בקיצור SIMON2n/mn. לדוגמה SIMON64/128 מתייחס לגרסה הפועלת על מילים באורך 32 סיביות, בלוק באורך 64 סיביות ומפתח באורך 128 סיביות. הצפנה ופענוח ב-SIMON2n עושה שימוש בשלוש פעולות בסיסיות בלבד בסגנון ARX הידוע בחוסנו וקיים בשימוש צפנים רבים ביניהםSalsa20 והם:XOR,‏AND והזזה מעגליתSj{\displaystyle S^{j}} כאשרj{\displaystyle j} מציין את מספר הפוזיציות שיש להזיז (אםj{\displaystyle j} שלילי ההזזה היא לימין).

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

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

עבור מפתחkGF(2)n{\displaystyle k\in {\text{GF}}(2)^{n}} (מחרוזת אקראית באורךn{\displaystyle n} סיביות) פונקציית הסבב תלויית המפתח מתבצעת בשני שלבים. מיפוי פייסטלRk:GF(2)n×GF(2)nGF(2)n×GF(2)n{\displaystyle R_{k}:{\text{GF}}(2)^{n}\times {\text{GF}}(2)^{n}\rightarrow {\text{GF}}(2)^{n}\times {\text{GF}}(2)^{n}} המוגדר על ידי

Rk(x,y)=(yf(x)k,x){\displaystyle R_{k}(x,y)=(y\oplus f(x)\oplus k,x)}

והפונקציהf(x)=(S1x  &  S8x)S2x{\displaystyle f(x)=(S^{1}x\ \ \&\ \ S^{8}x)\oplus S^{2}x} כאשרk{\displaystyle k} הוא מפתח הסבב.

הביטויSix{\displaystyle S^{i}x} פירושו הזזה מעגלית שלx{\displaystyle x} לשמאלi{\displaystyle i} סיביות והסימן & מייצג את האופרטורAND. הפונקציה ההופכית של פונקציית הסבב הנחוצה לצורך הפענוח היאRk1(x,y)=(y,xf(y)k){\displaystyle R_{k}^{-1}(x,y)=(y,x\oplus f(y)\oplus k)}. לעיתים קרובות משקולי יעילות מיישמים את הצפנים הללו בתצורה שבה יש צורך רק בפונקציית ההצפנה שהיא טובה גם להצפנה וגם לפענוח (ראומצב מונה לדוגמה).

תהליך הכנת המפתח מקבל את המפתח שסופק על ידי המשתמש ומייצר ממנו סדרה שלT{\displaystyle T} מילים:k0,k1,...,kT1{\displaystyle k_{0},k_{1},...,k_{T-1}}. כאשרT{\displaystyle T} הוא מספר הסבבים. ההצפנה היא בעצםהרכבה של הפונקציותRkT1Rk1Rk0{\displaystyle R_{k_{T-1}}\circ \cdots \circ R_{k_{1}}\circ R_{k_{0}}} (מימין לשמאל).

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

הכנת המפתח

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

תהליך הכנת המפתח של Simon כולל שימוש בסדרה של קבועי סבב באורך סיבית אחת. תוספת זו הוכנסה כדי להרוס את הסימטריות של ההזזה המעגלית וכן כדי לסכלהתקפת גלישה. למעשה וריאציות של Simon מופרדות באופן קריפטוגרפי על ידי חמש סדרות שונות של קבועים:z0,z1,z2,z3,z4{\displaystyle z_{0},z_{1},z_{2},z_{3},z_{4}}. כל אחת מהן היא פונקציה של אחת משלוש הסדרות המחזוריות הקבועותu,v,w{\displaystyle u,v,w} עם מחזוריות באורך 31 סיביות שאותן מחשבים לפי מטריצות קבועות המובאות להלן. את חמש הסדרות של הקבועים מחשבים כדלהלן: שתי הראשונות הן למעשהz0=u{\displaystyle z_{0}=u} וכןz1=v{\displaystyle z_{1}=v}. שלוש הנותרותz2,z3{\displaystyle z_{2},z_{3}} ו-z4{\displaystyle z_{4}} הן בעלי מחזוריות באורך 62 סיביות ואותן מחשבים על ידי XOR של הסדרה המחזוריתt=t0t1t2,...{\displaystyle t=t_{0}t_{1}t_{2},...} במחזוריות 2 (שהיא המחרוזת "01010101...") עם הסדרותu,v{\displaystyle u,v} ו-w{\displaystyle w} בהתאמה. המטריצות להכנתu,v{\displaystyle u,v} ו-w{\displaystyle w} הן שלושמטריצות קבועות מסדר5×5{\displaystyle 5\times 5} מעלGF(2){\displaystyle GF(2)}:

U=[0100000100100100000110001],V=[0110000100100100000110000],W=[0100000100100100000110000]{\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}}}

הסיבית ה-i{\displaystyle i} בכל רצף מחושבת על ידי אתחולאוגר זיזה ממושב באורך חמש סיביות בערכים 00001, ואז מפעילים את האוגרi{\displaystyle i} פעמים עם המטריצה המתאימה, וחילוץ הסיבית המשמעותית ביותר. למשלui=(0,0,0,0,1)Ui(0,0,0,0,1)t{\displaystyle u_{i}=(0,0,0,0,1)U^{i}(0,0,0,0,1)^{t}}.

יהיc=2n4{\displaystyle c=2^{n}-4} שהוא מחרוזת שלn2{\displaystyle n-2} אחדים המסתיימת בשני אפסים ("111...11100{\displaystyle 111...11100}"). אז עם מילות המפתח הסודי של המשתמשkm1,km2,...,k1,k0{\displaystyle k_{m-1},k_{m-2},...,k_{1},k_{0}} ומחרוזת הקבועיםzj{\displaystyle z_{j}}, מחשבים תת-מפתחות נוספים עבור כל הסבבים של הצופן:

ki+m={c(zj)iki(IS1)S3ki+1,if m=2c(zj)iki(IS1)S3ki+2,if m=3c(zj)iki(IS1)(S3ki+3ki+1),if m=4{\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}}}

עבור0i<Tm{\displaystyle 0\leq i<T-m}. שימו לב שהמיליםk0{\displaystyle k_{0}} עדkm1{\displaystyle k_{m-1}} משמשים ל-m{\displaystyle m} הסבבים הראשונים של הצופן, הם נטענים כמו שהם לאוגר הזיזה כאשרk0{\displaystyle k_{0}} מצד ימין ו-km1{\displaystyle k_{m-1}} מצד שמאל (הצד העליון או הכי משמעותי של הערך). הטבלה הבאה כוללת את כל הקבועים תלויי הגרסה של Simon.

אורך הבלוק2n{\displaystyle 2n}אורך המפתחmn{\displaystyle mn}גודל מילהn{\displaystyle n}מספר מילות המפתחm{\displaystyle m}הקבוע seqמספר סבביםT{\displaystyle T}
3264164z0{\displaystyle z_{0}}32
4872243z0{\displaystyle z_{0}}36
964z1{\displaystyle z_{1}}36
6496323z2{\displaystyle z_{2}}42
1284z3{\displaystyle z_{3}}44
9696482z2{\displaystyle z_{2}}52
1443z3{\displaystyle z_{3}}54
128128642z2{\displaystyle z_{2}}68
1923z3{\displaystyle z_{3}}69
2564z4{\displaystyle z_{4}}72

פסאודו-קוד

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

הקלט הוא בלוק הטקסט הגלוי כשהוא מחולק לשני חצאים(x,y){\displaystyle (x,y)} והמפתח הסודי באורךm{\displaystyle m} מילים המסומנות ב-k[0]{\displaystyle k[0]} עדk[m1]{\displaystyle k[m-1]}.

n=word size (16,24,32,48, or 64){\displaystyle n={\text{word size }}(16,24,32,48,{\text{ or }}64)},
m= number of keys: {4 if n=16,3 or 4 if n=24 or 32,2 or 3 if n=482,3, or 4 if n=64{\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}}}
z=[11111010001001010110000111001101111101000100101011000011100110,10001110111110010011000010110101000111011111001001100001011010,10101111011100000011010010011000101000010001111110010110110011,11011011101011000110010111100000010010001010011100110100001111,11010001111001101011011000100000010111000011001010010011101111]{\displaystyle z={\begin{matrix}[11111010001001010110000111001101111101000100101011000011100110,\\10001110111110010011000010110101000111011111001001100001011010,\\10101111011100000011010010011000101000010001111110010110110011,\\11011011101011000110010111100000010010001010011100110100001111,\\11010001111001101011011000100000010111000011001010010011101111]\end{matrix}}}
(T,j)={(32,0), if n=16(36,0) or (36,1) if n=24,m=3 or 4(42,2) or (44,3) if n=32,m=3 or 4(52,2) or (54,3) if n=48,m=2 or 3(68,2),(69,3), or (72,4) if n=64,m=2,3, or 4{\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}}}
for i=m to T1 do:{\displaystyle {\text{for }}i=m{\text{ to }}T-1{\text{ do:}}}
    tmp=S3k[i1],{\displaystyle \ \ \ \ tmp=S^{-3}k[i-1],}
    if m=4 then tmp=tmpk[i3]{\displaystyle \ \ \ \ {\text{if }}m=4{\text{ then }}tmp=tmp\oplus k[i-3]}
    tmp=tmpS1tmp{\displaystyle \ \ \ \ tmp=tmp\oplus S^{-1}tmp}
    k[i]=¬k[im]tmpz[j][(im) mod 62]3{\displaystyle \ \ \ \ k[i]=\neg k[i-m]\oplus tmp\oplus z[j][(i-m){\text{ mod }}62]\oplus 3}
for i=0 to T1 do:{\displaystyle {\text{for }}i=0{\text{ to }}T-1{\text{ do:}}}
    tmp=x{\displaystyle \ \ \ \ tmp=x}
    x=y(Sx  &   S8x)S2xk[i]{\displaystyle \ \ \ \ x=y\oplus (Sx\ \ \&\ \ \ S^{8}x)\oplus S^{2}x\oplus k[i]}
    y=tmp{\displaystyle \ \ \ \ y=tmp}

הסמל{\displaystyle \oplus } מייצג פעולת XOR, הסימן¬{\displaystyle \neg } מייצג אתאופרטור השלילה, הביטויS3k[i1]{\displaystyle S^{-3}k[i-1]} פירושו שהערך המצוי בכניסהk[i1]{\displaystyle k[i-1]} מסובב בהזזה מעגלית לימין 3 סיביות. שימו לב שהלולאה הראשונה היא הכנת המפתח והלולאה השנייה היא ההצפנה.

Speck

[עריכת קוד מקור |עריכה]
תיאור מבנה פייסטל של הפונקציה הפנימית בצופן Speck

לצופן Speck יש עשר גרסאות שכולן עוצבו כדי להשיג ביצועים אופטימליים במיוחד בתוכנה. בדומה לצופן הקודם את הגרסאות השונות נהוג לסמן ב-SPECK2n/mn, כמו SPECK96/144 כשהכוונה היא לבלוק באורך 96 סיביות ומפתח באורך 144 סיביות. בצופן זה נוספה פעולה בסיסית של חיבור מלא מודולו2n{\displaystyle 2^{n}}. הצמצום המודולרי מתבצע באופן עקיף כי כשהתוצאה נחתכת בגבולות המילה הדבר דומה למודולו2n{\displaystyle 2^{n}} כך שאין צורך בחילוק. הפונקציה הפנימית היא:

Rk(x,y)=((Sαx+y)k,Sβy(Sαx+y)k){\displaystyle R_{k}(x,y)=((S^{-\alpha }x+y)\oplus k,S^{\beta }y\oplus (S^{-\alpha }x+y)\oplus k)}.

כאשרα=7,β=2{\displaystyle \alpha =7,\beta =2} אםn=16{\displaystyle n=16} (בלוק באורך 32) אחרתα=8,β=3{\displaystyle \alpha =8,\beta =3}. קיים דמיון קל בין פונקציית הסבב של Speck לפונקציית הסבב של צופןThreefish. הפונקציה ההופכית של פונקציית הסבב הנחוצה בפענוח משתמשת בחיסור מודולו2n{\displaystyle 2^{n}} במקום חיבור והיא נראית כך:

Rk1(x,y)=(Sα((xk)Sβ(xy)),Sβ(xy)){\displaystyle R_{k}^{-1}(x,y)=(S^{\alpha }((x\oplus k)-S^{-\beta }(x\oplus y)),S^{-\beta }(x\oplus y))}.

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

אורך הבלוק2n{\displaystyle 2n}אורך המפתחmn{\displaystyle mn}גודל מילהn{\displaystyle n}מספר מילות מפתחm{\displaystyle m}הזזה מעגליתα{\displaystyle \alpha }הזזה מעגליתβ{\displaystyle \beta }מספר סבביםT{\displaystyle T}
32641647222
48722438322
96423
64963238326
128427
96964828328
144329
1281286428332
192333
256434

תהליך הרחבת המפתח מקבל את המפתח הסודי של המשתמש ומפיק ממנוT{\displaystyle T} מפתחותk0,...,kT1{\displaystyle k_{0},...,k_{T-1}} כאשרT{\displaystyle T} הוא מספר הסבבים. ההצפנה היא הרכבה של הפונקציותRkT1Rk1,Rk0{\displaystyle R_{k_{T-1}}\circ \cdots \circ R_{k_{1}},R_{k_{0}}} (מימין לשמאל). במילים אחרות זהו מבנה המתקבל משילוב שתי העתקות דמויות רשת פייסטל ביחס לשני סוגי פעולות חיבור, האחת:(x,y)(y,(Sαx+y)k){\displaystyle (x,y)\mapsto (y,(S^{-\alpha }x+y)\oplus k)} והשנייה(x,y)(y,Sβxy){\displaystyle (x,y)\mapsto (y,S^{\beta }x\oplus y)}.

הכנת מפתח

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

תהליך הכנת המפתח של Speck מנצל את פונקציית הסבב כדי להכין את המפתחותki{\displaystyle k_{i}}. אםK{\displaystyle K} הוא המפתח אפשר לכתוב אותו בצורהK=(m2,...,0,k0){\displaystyle K=(\ell _{m-2},...,\ell _{0},k_{0})}, כאשרi,k0GF(2)n{\displaystyle \ell _{i},k_{0}\in {\text{GF}}(2)^{n}} עם ערך שלm{2,3,4}{\displaystyle m\in \{2,3,4\}}. הסדרותki{\displaystyle k_{i}} ו-i{\displaystyle \ell _{i}} מוגדרות כך:

i+m1=(ki+Sαi)i{\displaystyle \ell _{i+m-1}=(k_{i}+S^{-\alpha }\ell _{i})\oplus i}, וכן
ki+1=Sβkii+m1{\displaystyle k_{i+1}=S^{\beta }k_{i}\oplus \ell _{i+m-1}}. המילהki{\displaystyle k_{i}} היא מפתח הסבב ה-i{\displaystyle i} עבור0i<T{\displaystyle 0\leq i<T}.

פסאודו-קוד

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

הקלט הוא בלוק הטקסט הגלוי כשהוא מחולק לשני חצאים(x,y){\displaystyle (x,y)} והמפתח הסודי באורךm{\displaystyle m} מילים המסומנות ב-[m2],,[0],k[0]{\displaystyle \ell [m-2],\cdots ,\ell [0],k[0]}.

n= word size (16,24,32,48, or 64),{\displaystyle n={\text{ word size }}(16,24,32,48,{\text{ or }}64),}
m= number of key words: {4 if n=163 or 4 if n=24 or 322 or 3 if n=482 or 3 or 4 if n=64{\displaystyle m={\text{ number of key words: }}{\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{\text{ or }}3{\text{ or }}4&{\text{ if }}n=64\end{cases}}}
T={22 if n=1622 or 23 if n=24,m=3 or 426 or 27 if n=32,m=3 or 428 or 29 if n=48,m=2 or 332,33, or 34 if n=64,m=2,3, or 4{\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}}}
(α,β)=(7,2) if n=16, or (8,3) otherwise{\displaystyle (\alpha ,\beta )=(7,2){\text{ if }}n=16,{\text{ or }}(8,3){\text{ otherwise}}}
for i=0 to T2 do:{\displaystyle {\text{for }}i=0{\text{ to }}T-2{\text{ do:}}}
     [i+m1]=(k[i]+Sα[i])i{\displaystyle \ \ \ \ \ \ell [i+m-1]=(k[i]+S^{-\alpha }\ell [i])\oplus i}
     k[i+1]=Sβk[i][i+m1]{\displaystyle \ \ \ \ \ k[i+1]=S^{\beta }k[i]\oplus \ell [i+m-1]}
for i=0 to T1 do:{\displaystyle {\text{for }}i=0{\text{ to }}T-1{\text{ do:}}}
     x=(Sαx+y)k[i]{\displaystyle \ \ \ \ \ x=(S^{-\alpha }x+y)\oplus k[i]}
     y=Sβyx{\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++‎ ללא אופטימיזציות.

typedefunsigned__int64uint64;#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)voidspeck_encrypt(uint64constpt[2],uint64ct[2],uint64constK[4]){uint64i,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))voidspeck_decrypt(uint64constct[2],uint64pt[2],uint64constK[4]){uint64i,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));}}

ראו גם

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

הערות שוליים

[עריכת קוד מקור |עריכה]
  1. ^The SIMON and SPECK families of lightweight block ciphers
  2. ^Simon and Speck: Block Ciphers for the Internet of Things
  3. ^Differential Analysis of Block Ciphers SIMON and SPECK
  4. ^Linear Cryptanalysis of Reduced-Round Speck
  5. ^Notes on the design and analysis of Simon and Speck
  6. ^ISO rejects the NSA's IoT crypto standard, believing it to be backdoored
  7. ^NSA: Our Crypto Is Good. ISO: No Thanks Though
  8. ^SIMON and SPECK: New NSA Encryption Algorithms
מושגי יסוד
RC4Salsa20SOSEMANUKגרייןE0A5/1A5/2A5/3A5/4MICKEYHC-128SNOWTriviumRabbitZUCChaCha
פרימיטיבים תאורטיים
בעיות מתמטיות ואלגוריתמים
SHAMD5MD4SHA-1SHA-2SHA-3RIPEMDSkeinBLAKEGrøstlSipHash
אימות וזיהוי
נושאים נלווים
אוחזר מתוך "https://he.wikipedia.org/w/index.php?title=Simon_%26_Speck&oldid=40261398"
קטגוריה:

[8]ページ先頭

©2009-2026 Movatter.jp