בקריפטוגרפיה, **Hummingbird** הוא שם כולל למשפחה של צפני בלוקים קלי משקל המיועדים להצפנת תקשורת בחומרה מוגבלת משאבים כתיוג אלקטרוני,מיקרו-בקר, כרטיס חכם וסנסור אלחוטי. Hummingbird הוא פיתוח ייעודי בהשראת מכונת האניגמה במבנה *היברדי* המשלב צופן בלוקים עם צופן זרם, הוא המקבל בלוק טקסט קריא באורך 16 סיביות (שני בתים), מפתח הצפנה באורך 256 סיביות (32 בתים), הוא כולל מצב פנימי (זיכרון) באורך 80 סיביות (עשרה בתים) ומפיק בלוק מוצפן באורך 16 סיביות. השילוב של סיביות המפתח והזיכרון הפנימי מספק לדעת המפתחים ביטחון רב-נגד קריפטואנליזה מודרנית (דיפרנציאלית וליניארית). הוא מתאים להטמעה במערכות משובצות מחשב זעירות, יעיל בתוכנה וגם בחומרת 8-ביט/16-ביט. נחשב צופן בלוקים קל משקל 'סטייט אוף דה ארט' ומציג ביצועים טובים מצופן PRESENT.

הצופן הראשון Hummingbird (בעברית "יונק דבש") פותח ב-2009 על ידי דניאל אנגלס מחברת Revere Security ועמיתיו מ-CACR (מרכז מחקר לקריפטוגרפיה יישומית) אוניברסיטת ווטרלו קנדה. הוצג ב-2010 WLC (ועידה שנתית בינלאומית לקריפטוגרפיה קלת משקל עבור חומרה מוגבלת משאבים) וב-RISC ’09. עד כמה שידוע אינו מוגן בפטנט וחופשי לשימוש. הצופן Hummingbird-2 פותח ב-2011 בעקבות קריפטואנליזה של קודמו והוצג ב-RFIDSec'11. הוא מספק הצפנה מאומתת, אורך המפתח הופחת ל-128 סיביות והזיכרון הפנימי הורחב ל-128 סיביות. הוא מכיל שיפורים אחדים לעומת קודמו כדי לחזקו נגד קרפיטואנליזה. המפרט שלו, התפוקה והביטחון שלו מותאמים לתקן איזו ISO/IEC 18000-6:2010.

מבוא ותיאור כללי
----------------

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

קריפטוגרפיה קלת משקל פותחה כדי לתת מענה לצורך זה. בין היתר פותחו צפני בלוקים בקטגוריה **צפני בלוקים קלי משקל** שהיעד העיקרי בהם הוא לפעול בסביבה בה יש צורך לשקלל או להתפשר על מספר גורמים: ביטחון מול עלות מול ביצועים ולהשיג את המיטב בתנאים מוגבלים. קיימות כיום מספר הצעות טובות המתחלקות לשלוש קטגוריות עיקריות: *מיטוב* צפנים קיימים כמו AES ו-IDEA, *שינוי* צפנים קיימים כמו DES-XL והשלישי פיתוח צפנים ייעודיים כמו HIGHT, SEA, KATAN ו-PRESENT. בנוסף קיימים צפני זרם קלי משקל ביניהם גריין ו-Trivium.

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

תיאור צופן Hummingbird
----------------------

מבנה Hummingbird בנוי באופן בלתי שגרתי בניסיון ליהנות מיתרונות שני תחומים שונים בהצפנה סימטרית, צופן זרם וצופן בלוקים. הוא מורכב מצופן בלוקים המקבל קלט באורך 16 סיביות ומתחלק לארבעה עם ארבעה מפתחות שונים: {\displaystyle E\_{k\_{1}},E\_{k\_{2}},E\_{k\_{3}},E\_{k\_{4}}} בהתאמה, ארבעה אוגרים פנימיים באורך 16 סיביות כל אחד: {\displaystyle RS1,RS2,RS3,RS4} ואוגר זיזה ממושב LFSR עם 16 מצבים. המפתח הסודי המסופק על ידי המשתמש מחולק לארבעה תת-מפתחות באורך 64 סיביות: {\displaystyle k\_{1},k\_{2},k\_{3},k\_{4}} המתאימים לצופן הבלוקים האמור.

להצפנה, בלוק טקסט קריא באורך 16 סיביות {\displaystyle PT\_{i}} מחובר תחילה מודולו {\displaystyle 2^{16}} עם תכולת האוגר הראשון {\displaystyle RS1} והתוצאה מוצפנת עם צופן הבלוקים הראשון {\displaystyle E\_{k\_{1}}} והפלט הופך קלט לשלב הבא. תהליך זה חוזר על עצמו בדרך דומה שלוש פעמים נוספות עם יתר האוגרים והצפנים, כאשר פלט {\displaystyle E\_{k\_{4}}} הוא הטקסט המוצפן {\displaystyle CT\_{i}}. המצב הפנימי (ארבעת האוגרים) של הצופן מעודכן באופן בלתי צפוי, בהתאם לערכם הנוכחי, פלט שלושת צפני הבלוקים הראשונים וה-LFSR יחד. פענוח מתנהל בדרך דומה להצפנה אף בסדר הפוך.

לצופן שלושה מצבים אפשריים: מצב אתחול, מצב הצפנה ומצב פענוח. לפני הצפנה/פענוח יש צורך לאתחל את המצב הפנימי של הצופן כדלהלן: תחילה וקטור אתחול המונה ארבעה ערכים אקראיים באורך 16 סיביות: {\displaystyle {\text{NONCE}}\_{i}} כאשר {\displaystyle i=1,2,3,4} נטען לתוך ארבעת האוגרים בהתאמה ואז מצפינים את {\displaystyle RS1\boxplus RS3} (חיבור של האוגר הראשון והשלישי מודולו {\displaystyle 2^{16}}) במצב אתחול כשהפלט הסופי {\displaystyle TV\_{i}} משמש כערכים התחלתיים של ה-LFSR. יתרה מזו, הסיבית ה-13 של ה-LFSR נקבעת תמיד ל-1 כדי למנוע מצב שהאוגר יהיה כולו אפסים. ה-LFSR מופעל פעימה אחת לפני שהוא מפיק פלט כדי לעדכן את האוגר השלישי. הטבלה הבאה מסכמת את מהלכי האלגוריתם בשלושת המצבים האמורים:

|  |  |  |
| --- | --- | --- |
| **הצפנה** | {\displaystyle V12\_{t}=E\_{k\_{1}}(PT\_{i}\boxplus RS1\_{t})}
{\displaystyle V23\_{t}=E\_{k\_{2}}(V12\_{t}\boxplus RS2\_{t})}
{\displaystyle V34\_{t}=E\_{k\_{3}}(V23\_{t}\boxplus RS3\_{t})}
{\displaystyle CT\_{i}=E\_{k\_{4}}(V34\_{t}\boxplus RS4\_{t})} | **עדכון מצב פנימי** (זהה בכל המצבים)
{\displaystyle LFSR\_{t+1}\leftarrow LFSR\_{t}}
{\displaystyle RS1\_{t+1}=RS1\_{t}\boxplus V34\_{t}}
{\displaystyle RS3\_{t+1}=RS3\_{t}\boxplus V23\_{t}\boxplus LFSR\_{t+1}}
{\displaystyle RS4\_{t+1}=RS4\_{t}\boxplus V12\_{t}\boxplus RS1\_{t+1}}
{\displaystyle RS2\_{t+1}=RS2\_{t}\boxplus V12\_{t}\boxplus RS4\_{t+1}}
{\displaystyle RS1\_{t+1}=RS1\_{t}\boxplus TV\_{t}}
{\displaystyle RS2\_{t+1}=RS2\_{t}\boxplus V12\_{t}}
{\displaystyle RS3\_{t+1}=RS3\_{t}\boxplus V23\_{t}}
{\displaystyle RS4\_{t+1}=RS4\_{t}\boxplus V34\_{t}}
‎
‎
‎
‎ |
| **פענוח** | {\displaystyle V34\_{t}=D\_{k\_{4}}(CT\_{i})\boxminus RS4\_{t}}
{\displaystyle V23\_{t}=D\_{k\_{3}}(V34\_{t})\boxminus RS3\_{t}}
{\displaystyle V12\_{t}=D\_{k\_{2}}(V23\_{t})\boxminus RS2\_{t}}
{\displaystyle PT\_{i}=D\_{k\_{1}}(V12\_{t})\boxminus RS1\_{t}} |
| **אתחול** (ארבעה סבבים) | {\displaystyle V12\_{t}=E\_{k\_{1}}((RS1\_{t}\boxplus RS3\_{t})\boxplus RS1\_{t})}
{\displaystyle V23\_{t}=E\_{k\_{2}}(V12\_{t}\boxplus RS2\_{t})}
{\displaystyle V34\_{t}=E\_{k\_{3}}(V23\_{t}\boxplus RS3\_{t})}
{\displaystyle TV=E\_{k\_{4}}(V34\_{t}\boxplus RS4\_{t})} |

### צופן בלוקים 16-ביט

צופן הבלוקים הפנימי {\displaystyle E\_{k\_{i}}} בנוי בסגנון רשת החלפה-תמורה עם בלוק באורך 16 סיביות (2 בתים) ולמעשה מחולק לארבעה צפנים כשכל אחד מהם מקבל תת-מפתח {\displaystyle K^{(i)}} באורך 64 סיביות (8 בתים) כאשר {\displaystyle i\in \{1,2,3,4\}} מתייחס למספר הצופן. למעט המפתח השונה הצופן זהה בכל הארבעה והוא פועל עם ארבעה סבבים רגילים בשלוש שכבות החלפה/פיזור/הוספת מפתח וסבב חמישי המכיל רק את שכבת הוספת המפתח וההחלפה לא הפיזור. תת-המפתח מחולק לארבעה מפתחות קטנים באורך 16 סיביות כל אחד: {\displaystyle k\_{1}^{(i)},k\_{2}^{(i)},k\_{3}^{(i)},k\_{4}^{(i)}} כל מפתח מתאים לסבב אחד ולצורך הסבב האחרון מכינים שני מפתחות נוספים {\displaystyle k\_{5}^{(i)},k\_{6}^{(i)}} הנגזרים ישירות מהמפתחות הקודמים (המפתח החמישי הוא תוצאת XOR של המפתח הראשון עם השני והמפתח השישי הוא XOR של המפתח השני עם הרביעי).

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

1. המפתח מחובר ב-XOR עם הקלט (16 סיביות).
2. ההחלפה מתבצעת עם ארבע תיבות ההחלפה בסגנון סרפנט המקבלות ארבע סיביות ומחזירות ארבע סיביות, עם קריטריון נוסף, המעלה של כל תיבת החלפה בהצגה בוליאנית שלה תהיה לפחות 3.
3. שכבת הפיזור מתבצעת על ידי הטרנספורמציה הליניארית: {\displaystyle L(m)=m\oplus (m\ll 6)\oplus (m\ll 10)}.

כאשר {\displaystyle m=(m\_{0},m\_{1},...m\_{15})} הוא בלוק הקלט באורך 16 סיביות. כדי לחסוך בצריכת זיכרון ואנרגיה אפשר להשתמש רק בתיבת החלפה אחת במקום ארבעה. הגרסה עם תיבת החלפה אחת החוזרת על עצמה ארבע פעמים היא קומפקטית ומשיגה אותה רמת ביטחון כמו עם ארבע תיבות החלפה שונות.

בסבב האחרון לא מבצעים את שכבת הפיזור אלא מבצעים XOR עם המפתח האחרון.

### תיבות ההחלפה

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
| S1(x) | 8 | 6 | 5 | F | 1 | C | A | 9 | E | B | 2 | 4 | 7 | 0 | D | 3 |
| S2(x) | 0 | 7 | E | 1 | 5 | B | 8 | 2 | 3 | A | D | 6 | F | C | 4 | 9 |
| S3(x) | 2 | E | F | 5 | C | 1 | 9 | A | B | 4 | 6 | 8 | 0 | 7 | 3 | D |
| S4(x) | 0 | 7 | 3 | 4 | C | 1 | A | F | D | E | 6 | B | 2 | 8 | 9 | 5 |

Hummingbird-2
-------------

Hummingbird-2 הוא צופן בלוקים היברידי המיועד לחומרה מוגבלת משאבים, פותח בהשראת האניגמה ומשלב תכונות של צופן בלוקים עם צופן זרם. הוא מקבל מפתח סודי באורך 128 סיביות ווקטור אתחול באורך 64 סיביות ומצפין בלוק מידע באורך 16 סיביות ואם נדרש מייצר בנוסף תג אימות עבור כל בלוק קלט שהוצפן. כקודמו Hummingbird-1 זהו צופן קל משקל שפותח בעיקר עבור מיקרו-בקרים ומערכות משובצות מחשב בהתקנים קטנים כמו RFID וסנסור אלחוטי. בהשוואה לגרסה הקודמת ובהתחשב בקריפטואנליזה חדשה של הצופן בעיקר בגרסה הקודמת נעשו מספר שינויים. המצב הפנימי הורחב ל-128 סיביות, פונקציית העדכון של המצב הפנימי שופצה בהתאם. כמו כן נעשו שינויים בתיבות ההחלפה ופונקציית הסבב הפנימית.

### הצפנה מאומתת

 ערך מורחב – **הצפנה מאומתת**  

Hummingbird-2 משמש גם כ**אלגוריתם הצפנה מאומתת** המספק במקביל סודיות והגנה על שלמות המידע בריצה אחת. כתוצאה מכך יעילות האלגוריתם גבוהה במיוחד ביישום בחומרה. כקודמו, הצופן אינו מתאים בדיוק לקטגוריה של צופן בלוקים או צופן זרם, אלא מעין הכלאה של השנים בסגנון דומה לצפנים Helix ו-Phelix. הוא פותח בעקבות הפקת לקחים במיוחד לאור קריפטואנליזה של Saarinen נגד הצופן הקודם Hummingbird-1 ולדעת המפתחים הצופן החדש עמיד נגד כל ההתקפות הקריפטואנליטיות הידועות, אם כי קיים מחקר שמראה אחרת.

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

Hummingbird-2 מקבל בלוק טקסט גלוי באורך 16 סיביות (שני בתים), מפתח סודי באורך 128 סיביות (32 בתים) ווקטור אתחול באורך 64 סיביות (16 בתים) ומפיק בלוק מוצפן באורך 16 סיביות וכן במידה שנדרש מפיק **תג אימות** (באורך של עד שמונה מילים) של הבלוק המוצפן בנוסף למידע אחר גלוי שנקרא *מידע נלווה* אם קיים, כמו הערכים החד-פעמיים הגלויים המשמשים לאתחול הצופן או חבילת כותר המכילה מידע תפעולי.

וקטור האתחול {\displaystyle IV} מחולק לארבע מילים: {\displaystyle IV\_{1},IV\_{2},IV\_{3},IV\_{4}}, המפתח הסודי K מחולק לשמונה מילים: {\displaystyle K\_{1},K\_{2},...K\_{8}} והמצב הפנימי (הזיכרון) R של הצופן מחולק לשמונה אוגרים: {\displaystyle R\_{1},R\_{2},...R\_{8}}. כל המילים הן באורך 16 סיביות. הפעולות הן חיבור מודולו 65536, XOR ופונקציית ערבוב אי-ליניארית f(x). הפונקציה האי-ליניארית מורכבת מארבע תיבות תמורה לפי טבלה קבועה על כל המילים ולאחריהם מתבצע פיזור ליניארי. תיבות ההחלפה מוצגות בטבלה הבאה:

| **תיבות ההחלפה** |
| --- |
| x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| S1(x) | 7 | 12 | 14 | 9 | 2 | 1 | 5 | 15 | 11 | 6 | 13 | 0 | 4 | 8 | 10 | 3 |
| S2(x) | 4 | 10 | 1 | 6 | 8 | 15 | 7 | 12 | 3 | 0 | 14 | 13 | 5 | 9 | 11 | 2 |
| S3(x) | 2 | 15 | 12 | 1 | 5 | 6 | 10 | 13 | 14 | 8 | 3 | 4 | 0 | 11 | 9 | 7 |
| S4(x) | 15 | 4 | 5 | 8 | 9 | 7 | 2 | 1 | 10 | 3 | 0 | 14 | 6 | 12 | 13 | 11 |

תיבות ההחלפה של Hummingbird-2 תופסות שטח של 256 סיביות (32 בתים).

להלן הגדרה פורמלית של הפונקציה f(x) המשתמשת בתורה בפונקציית ההחלפה {\displaystyle S(x)} הכוללת את ארבע תיבות ההחלפה המתוארות ובפונקציה הליניארית {\displaystyle L(x)}:

|  |
| --- |
| {\displaystyle {\boldsymbol {f(x)=L(S(x))}}}
{\displaystyle \ \ \ \ S(x)=S\_{1}(x\_{0})\ |\ S\_{2}(x\_{1})\ |\ S\_{3}(x\_{2})\ |\ S\_{4}(x\_{3})}
{\displaystyle \ \ \ \ L(x)=x\oplus (x\lll 6)\oplus (x\lll 10)} |

### פונקציית ההצפנה

מבנה כללי של פונקציית הסבב הפנימית {\displaystyle WD16(x,a,b,c,d)} המקבלת חמש מילים, את הקלט x וארבעה מפתחות ומשתמשת ב-f הוא:

{\displaystyle {\boldsymbol {WD16(x,a,b,c,d)=f(f(f(f(x\oplus a)\oplus b)\oplus c)\oplus d)}}}

הפונקציה ההופכית {\displaystyle f^{-1}(x)} וכן הפונקציה ההופכית {\displaystyle WD16^{-1}} נגזרות ישירות מהפונקציות האמורות.

### אתחול

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

{\displaystyle R^{(0)}=(IV\_{1},IV\_{2},IV\_{3},IV\_{4},IV\_{1},IV\_{2},IV\_{3},IV\_{4})}
ומפעילים את פונקציית הסבב ארבע פעמים:

|  |
| --- |
| {\displaystyle t\_{1}=WD16(R\_{1}^{(i)}\boxplus \langle \ i\ \rangle ,K\_{1},K\_{2},K\_{3},K\_{4})}
{\displaystyle t\_{2}=WD16(R\_{2}^{(i)}\boxplus t\_{1},K\_{5},K\_{6},K\_{7},K\_{8})}
{\displaystyle t\_{3}=WD16(R\_{3}^{(i)}\boxplus t\_{2},K\_{1},K\_{2},K\_{3},K\_{4})}
{\displaystyle t\_{4}=WD16(R\_{4}^{(i)}\boxplus t\_{3},K\_{5},K\_{6},K\_{7},K\_{8})}
{\displaystyle R\_{1}^{(i+1)}=(R\_{1}^{(i)}\boxplus t\_{4})\lll 3}
{\displaystyle R\_{2}^{(i+1)}=(R\_{2}^{(i)}\boxplus t\_{1})\ggg 1}
{\displaystyle R\_{3}^{(i+1)}=(R\_{3}^{(i)}\boxplus t\_{2})\lll 8}
{\displaystyle R\_{4}^{(i+1)}=(R\_{4}^{(i)}\boxplus t\_{3})\lll 1}
{\displaystyle R\_{5}^{(i+1)}=R\_{5}^{(i)}\oplus R\_{1}^{(i+1)}}
{\displaystyle R\_{6}^{(i+1)}=R\_{6}^{(i)}\oplus R\_{2}^{(i+1)}}
{\displaystyle R\_{7}^{(i+1)}=R\_{7}^{(i)}\oplus R\_{3}^{(i+1)}}
{\displaystyle R\_{8}^{(i+1)}=R\_{8}^{(i)}\oplus R\_{4}^{(i+1)}} |

המצב ההתחלתי לפני ההצפנה של הבלוק הראשון הוא {\displaystyle R^{(4)}}. הסמל {\displaystyle \langle \ i\ \rangle } מייצג את המשלים ל-2 של i.

### הצפנה

פונקציית ההצפנה של בלוק אחד: {\displaystyle C\_{i}=E(P\_{i})} מבצעת ארבע קריאות לפונקציית הסבב הפנימית:

|  |
| --- |
| {\displaystyle t\_{1}=WD16(R\_{1}^{(i)}\boxplus P\_{i},K\_{1},K\_{2},K\_{3},K\_{4})}
{\displaystyle t\_{2}=WD16(R\_{2}^{(i)}\boxplus t\_{1},K\_{5}\oplus R\_{5}^{(i)},K\_{6}\oplus R\_{6}^{(i)},K\_{7}\oplus R\_{7}^{(i)},K\_{8}\oplus R\_{8}^{(i)})}
{\displaystyle t\_{3}=WD16(R\_{3}^{(i)}\boxplus t\_{2},K\_{1}\oplus R\_{5}^{(i)},K\_{2}\oplus R\_{6}^{(i)},K\_{3}\oplus R\_{7}^{(i)},K\_{4}\oplus R\_{8}^{(i)})}
{\displaystyle C\_{i}=WD16(R\_{4}^{(i)}\boxplus t\_{3},K\_{5},K\_{6},K\_{7},K\_{8})\boxplus R\_{1}^{(i)}}. |

והטקסט המוצפן הוא {\displaystyle C\_{i}}.

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

### עדכון מצב פנימי

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

|  |
| --- |
| {\displaystyle R\_{1}^{(i+1)}=R\_{1}^{(i)}\boxplus t\_{3}}
{\displaystyle R\_{2}^{(i+1)}=R\_{2}^{(i)}\boxplus t\_{1}}
{\displaystyle R\_{3}^{(i+1)}=R\_{3}^{(i)}\boxplus t\_{2}}
{\displaystyle R\_{4}^{(i+1)}=R\_{4}^{(i)}\boxplus R\_{1}^{(i)}\boxplus t\_{3}\boxplus t\_{1}}
{\displaystyle R\_{5}^{(i+1)}=R\_{5}^{(i)}\oplus (R\_{1}^{(i)}\boxplus t\_{3})}
{\displaystyle R\_{6}^{(i+1)}=R\_{6}^{(i)}\oplus (R\_{2}^{(i)}\boxplus t\_{1})}
{\displaystyle R\_{7}^{(i+1)}=R\_{7}^{(i)}\oplus (R\_{3}^{(i)}\boxplus t\_{2})}
{\displaystyle R\_{8}^{(i+1)}=R\_{8}^{(i)}\oplus (R\_{4}^{(i)}\boxplus R\_{1}^{(i)}\boxplus t\_{3}\boxplus t\_{1})}. |

### תג אימות

לאחר עיבוד כל המידע המוצפן והמידע הגלוי (שאינו מוצפן רק מועבר כמו שהוא) אפשר לייצר תג אימות T באורך של {\displaystyle n\leq 8} מילים. תחילה מפעילים את הצופן שלוש פעמים ללא פלט כלשהו:

|  |
| --- |
| {\displaystyle E(IV\_{1}\boxplus R\_{1}\boxplus R\_{3}\boxplus n)}
{\displaystyle E(IV\_{2}\boxplus R\_{1}\boxplus R\_{3})}
{\displaystyle E(IV\_{3}\boxplus R\_{1}\boxplus R\_{3})}. |

כאשר R\_1 ו-R\_3 מייצגים את תכולת הזיכרון באוגרים האמורים בכל סבב לפני הפעלת פונקציית ההצפנה E. התג T מורכב מהמילים:

|  |
| --- |
| {\displaystyle T\_{1}=E(IV\_{4}\boxplus R\_{1}\boxplus R\_{3})}
{\displaystyle T\_{i}=E(R\_{1}\boxplus R\_{3})}, עבור {\displaystyle i=2,3,...n}. |

### מצב הפעלה המדמה צופן זרם

לעיתים נדרש להצפין ולאמת יחידות מידע הקטנות ממילה באורך 16 סיביות, במקרה כזה אפשר פשוט להצפין את המידע על ידי תוצאה חתוכה של פונקציית ההצפנה. למשל אם המידע x באורך n סיביות, כאשר {\displaystyle n\leq 15} מצפינים פעם אחת בלוק של 16 אפסים ומחברים ב-XOR את n הסיביות הראשונות של התוצאה המוצפנת עם בלוק המידע x כך: {\displaystyle C=x\oplus E(0)}. לצורך תג האימות ממשיכים להריץ את הצופן, מעדכנים את המצב הפנימי ומפיקים תג אימות כמתואר לעיל.

היות ש-Hummingbird-2 הוא אלגוריתם הצפנה מאומתת כמו GCM, הוא כולל שימוש בוקטור אתחול חד-פעמי. אף על פי שצופן זה אינו רגיש לשימוש חוזר כמו GCM, מומלץ להימנע משימוש חוזר בוקטור אתחול כל עוד המפתח לא הוחלף (אחד משניהם חייב להיות שונה לפני שמצפינים ומאמתים מסרים נוספים). במילים אחרות ההסתברות ששני מסרים יוצפנו עם אותו מפתח ואותו וקטור אתחול צריכה להיות נמוכה מ-2^{32}. במקרה שהמשתמש לא עמד בקריטריון זה התוצאה תהיה שהמתקיף יוכל לזהות הצפנה של בלוקים זהים. דבר שרצוי להימנע ממנו במקרים מסוימים.

ביטחון ועילות
-------------

בגרסה הראשונה התגלו חולשות בצופן הבלוקים הפנימי. Markku-Juhani O. Saarinen פרסם התקפה דיפרנציאלית שמסוגלת לשחזר את המפתח תוך מספר מיליוני מסרים נבחרים במה שקרוי התקפת גלוי-נבחר בסיבוכיות של {\displaystyle 2^{64}} פעולות אוף ליין. גרסה 2 יחסית חדשה ועדיין אין הרבה קריפטואנליזה שלה. קיים מחקר שמבוסס על התנגשויות דיפרנציאליות נגד פונקציית הסבב הפנימית, שמראה שקיימת בה בעיה דומה. המחברים מראים אפשר לשבור את הצופן בזמן של {\displaystyle 2^{32.6}} בסיבוכיות מקום של {\displaystyle 2^{32.6}} עם מספר זוגות של מפתחות קשורים.

ראו גם
------

* צופן בלוקים
* AES
* מכונת האניגמה
* הצפנה מאומתת

הערות שוליים
------------

1. ↑  D. ENGELS, X. FAN, G. GONG, H. HU AND E. M. SMITH. "Hummingbird: UltraLightweight Cryptography for Resource-Constrained Devices." 1st International Workshop on Lightweight Cryptography for Resource-Constrained Devices (WLC'2010). Tenerife, Canary Islands, Spain, January 2010
2. ↑  D. ENGELS, X. FAN, G. GONG, H. HU AND E. M. SMITH. "Ultra-Lightweight Cryptography for Low-Cost RFID Tags: Hummingbird Algorithm and Protocol." Centre for Applied Cryptographic Research (CACR) Technical Reports, CACR-2009-29.
3. ↑  1st International Workshop on Lightweight Cryptography for Resource-Constrained Devices (WLC'2010)
4. ↑  RFIDSec 2011: RFID. Security and Privacy pp 19-31, The Hummingbird-2 Lightweight Authenticated Encryption Algorithm Daniel EngelsMarkku-Juhani O. SaarinenPeter SchweitzerEric M. Smith
5. 1 2  Cryptanalysis of Hummingbird-1, Markku-Juhani O. Saarinen, 2011]
6. ↑  Cryptanalysis of Hummingbird-2 Kai Zhang, Lin Ding and Jie Guan

| * צ
* ש
* ע
קריפטוגרפיה |
| --- |
| 

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

 |

 |
| 

| הצפנה קלאסית |
| --- |
| 
* מכונת הצפנה
* צופן החלפה
* צופן אתב"ש
* צופן קיסר
* צופן ויז'נר
* צופן ורנם
* צופן פלייפייר
* צופן היל
* אולטרה
* אניגמה
* ציקלומטר
* קולוסוס
* PURPLE
* ג'ייד
* מג'יק
* צופן שחלוף

 |

 |
| 

| צופן בלוקים |
| --- |
| 
* לוציפר
* AES
* 3DES
* DES
* Threefish
* Twofish
* Blowfish
* FEAL
* SEED
* CAST
* IDEA
* RC2
* RC6
* MARS
* RC5
* GOST
* Serpent
* MISTY
* KASUMI
* קמליה
* ARIA
* SAFER
* TEA
* LEA
* CLEFIA
* SEA
* Hummingbird
* PRESENT
* KATAN
* KeeLoq
* Simon & Speck
* אנוביס

 |

 |
| 

| אופני הפעלה |
| --- |
| 
* אופן הפעלה של צופן בלוקים
* EAX
* OCB
* IAPM
* CWC mode
* GCM
* CCM

 |

 |
| 

| צופן זרם |
| --- |
| 
* RC4
* Salsa20
* SOSEMANUK
* Grain
* E0
* A5/1
* A5/2
* A5/3
* A5/4
* MICKEY
* HC-128
* SNOW
* Trivium
* Rabbit
* ZUC
* ChaCha

 |

 |
| 

| הצפנה אסימטרית |
| --- |
| 
* פרוטוקול דיפי-הלמן
* חידות מרקל
* חתימת למפורט
* הצפנת תרמיל
* RSA
* הצפנת רבין
* חתימה דיגיטלית רבין
* צופן אל-גמאל
* חתימה דיגיטלית אל-גמאל
* DSA
* הצפנת בלום-גולדווסר
* ECC
* הצפנת קריימר-שופ
* הצפנת פאיי
* הצפנת מקאליס
* GGH
* NTRU
* עקום 25519
* חתימה דיגיטלית של שנור
* הצפנת אוקמוטו-אושיאמה

 |

 |
| 

| פרוטוקולים |
| --- |
| 
* עץ מרקל
* פרוטוקול אתגר-מענה
* פרוטוקול נידהאם-שרודר
* פרוטוקול קרברוס
* הוכחה באפס ידע
* פרוטוקול פייגה-פיאט-שמיר
* העברה עלומה
* חלוקת סוד
* TLS (SSL)
* Secure Shell
* MQV
* X.509
* פרוטוקול שיתוף מפתח
* מיסור שלא לפרסום
* פרוטוקול סיגנל

 |

 |
| 

| פרימיטיבים תאורטיים |
| --- |
| 
* מחולל פסבדו-אקראי קריפטוגרפי
* פונקציה חד-כיוונית
* תמורה חד-כיוונית
* סיבית קשה
* פונקציה פסבדו-אקראית קריפטוגרפית
* תמורה פסאודו-אקראית
* פונקציית גיבוב קריפטוגרפית
* וקטור אתחול
* פונקציית ספוג
* הצפנה מבוססת סריג

 |

 |
| 

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

 |

 |
| 

| בעיות מתמטיות ואלגוריתמים |
| --- |
| 
* בעיית לוגריתם דיסקרטי
* תחשיב אינדקסים
* נפה ריבועית
* אלגוריתם rho של פולרד
* נפת שדה מספרים
* אלגוריתם רו של פולרד ללוגריתמים
* אלגוריתם פוליג-הלמן

 |

 |
| 

| פונקציות גיבוב קריפטוגרפיות |
| --- |
| 
* SHA
* MD5
* MD4
* SHA-1
* SHA-2
* SHA-3
* RIPEMD
* Skein
* BLAKE
* Grøstl
* SipHash

 |

 |
| 

| אימות וזיהוי |
| --- |
| 
* אימות זהות
* סיסמה
* קוד אימות מסרים
* Poly1305
* סיסמה חד-פעמית

 |

 |
| 

| נושאים נלווים |
| --- |
| 
* מספר אקראי
* מספר ראשוני
* יתירות
* מפתח שיחה
* סטגנוגרפיה
* הצפנה קוונטית
* הצפנה פוסט-קוונטית
* עקרון קרקהופס
* אבטחת מידע
* קריפטוגרפיה ויזואלית
* אליס ובוב
* מסיבת חתימה על מפתחות ציבוריים
* שידור מוצפן
* הצפנת דיסקים
* הצפנת סף
* חתימה דיגיטלית מבוססת פונקציית גיבוב
* פונקציה זניחה
* רשת פייסטל
* רשת החלפה-תמורה
* הלבנה
* אימות מסרים
* חתימה עיוורת
* חישוב רב משתתפים בטוח

 |

 |