PRESENT (צופן)

PRESENT הוא צופן בלוקים קל משקל, בסגנון רשת החלפה-תמורה, המיועד לריצה על חומרה מוגבלת משאבים כמו RFID ורשת סנסורים אלחוטיים. פותח על ידי קבוצת חוקרים ממעבדות אורנג', DTU (האוניברסיטה הטכנית של דנמרק) ו-RUB (אוניברסיטת רוהר בוכום) והוצג בסדנת CHES 2007 (ועידה בנושא קריפטוגרפיה בחומרה ומערכות משובצות) בווינה. ידוע בקומפקטיות שלו, הוא קטן מ-AES פי שנים וחצי בקירוב ונכלל בתקן איזו ISO/IEC 29192-2 בקטגוריית צופן בלוקים קל משקל. הצופן עוצב במיוחד תוך התחשבות בסביבת מחשוב אולטרה זעירה, עם צריכת אנרגיה מאוד נמוכה. הוא משלב מוטיבים מצופן DES ומסרפנט (מכאן שמו). בנוי בסגנון רשת החלפה-תמורה עם תיבת החלפה אחת בגודל 4 × 16 {\displaystyle 4\times 16} סיביות. מקבל בלוק טקסט גלוי באורך 64 סיביות (שמונה בתים), מפתח הצפנה באורך 80 או 128 סיביות (עשרה או שישה עשר בתים) לפי העדפה ומחזיר בלוק מוצפן באורך 64 סיביות. טכנולוגית מחשוב מפושט (Pervasive Computing) מצריכה התייחסות שונה מהיבט קריפטוגרפי. הכלים הקיימים כמו AES או סרפנט אינם מתאימים במיוחד כיוון שהם פותחו תוך חשיבה על מחשבים שולחניים או שרתים המצוידים במעבד חזק וזיכרון בשפע ולא על סביבה מוגבלת במשאבים כמו כרטיס חכם או תיוג אלקטרוני עם או בלי מקור אנרגיה עצמאי. כבר אפשר לראות את סכנות השימוש במכשירים אילו מהיבט ביטחוני והשימוש בהם רק הולך וגובר בקצב מסחרר. בגלל הצורך בכלים קריפטוגרפיים ייעודיים לחומרה זעירה גבר לאחרונה העניין בפיתוח פרימיטיבים כאלו, במיוחד צופן בלוקים וצופן זרם. במסגרת פרויקט eSTREAM פותחו מספר צפני זרם מאוד יעילים בחומרה ביניהם גריין ו-Trivium. אך בניגוד לצופן זרם, צופן בלוקים נחשב לפרימיטיב יותר ורסטילי. יתרה מזו, אמנות פיתוח צופן בלוקים מבוססת ומובנת יותר מפיתוח צופן זרם. למרות שקיימת תאוריה עשירה בנושא LFSR שנחשב לכלי הטוב ביותר לבניית צופן זרם מהיר במינימום מעגלים, עדיין קשה להגיע לשילוב בטוח ובשל כך האמון בצופן זרם מסוג כזה חלש יותר. בבניית צופן בלוקים קל משקל כמו PRESENT, אין די במיטוב אלגוריתם קיים אלא עדיף לפתח אותו מההתחלה תוך התחשבות בסביבה בה יפעל. כמובן בהתחשב במינימום הביטחון ההכרחי בסטנדרטים של ימינו. למשל יש לקחת בחשבון שאם הצופן מקבל בלוק קצר מדי, למשל 64 סיביות הדבר חושף אותו להתקפת יום הולדת ואם ההתקן אמור להצפין כמויות גדולות של מידע (מה שלא סביר שיקרה בהתקנים זעירים) יש צורך להחליף מפתחות בתדירות גבוהה יותר. ידוע שצופן DES נחשב ליעיל מאוד בחומרה אפילו בהשוואה לצפנים מודרניים. הסיבה היא שמפתחי הצופן מראש שאפו לייעדו לחומרה. בהתחשב בעובדה שבעת פיתוח DES מזעור המוליכים למחצה היה עדיין בחיתוליו זה לא מפתיע שניתן לממש את DES בחומרה עם 2300 GE (שערים לוגיים). לשם השוואה AES במימוש הכי ממוטב בחומרה, צורך לפחות 3600 שערים. בקטגוריה של צפנים קלי משקל קיימות מספר הצעות טובות כמו SEA, TEA, mCrypton ו-HIGHT שבממוצע צורכים כ-2500 GE. הבעיה עם DES היא העובדה שהמפתח קצר מדי (רק 56 סיביות לעומת צפנים מודרניים 128 סיביות לפחות), הגרסה המשופרת שלו DESXL (עם מפתחות באורך כולל של 168 סיביות) צורכת כ-2200 GE. את PRESENT אפשר לממש בחומרה עם 1570 GE מה שמעמיד אותו כמתחרה ראוי אף לצופן זרם. צופן PRESENT הוא צופן פשוט שפותח במיוחד לסביבה בעלת משאבים נמוכים מאוד ואינו מתאים לשימוש כללי. הוא מומלץ לשימוש רק במקרים מיוחדים כאשר AES אינו מתאים. באופן כללי: צופן PRESENT מיועד למימוש בחומרה. הוא מתאים רק במקרים בהם נדרש ביטחון סביר ולא ברמה הכי גבוהה. לכן מפתח באורך 80 סיביות מספק. הצופן לא נועד להצפנת כמויות גדולות של מידע ולכן גודל הבלוק הוגבל ל-64 סיביות. יש מקרים שבהם כדאי להטמיע את המפתח הסודי בחומרה. במקרה כזה שהמפתח קבוע התקפות שמסתמכות על מניפולציות של המפתח אינן ישימות. האספקטים החשובים שיש לוודא במימוש האלגוריתם, לפי סדר יורד, הם: ביטחון, שטח פיזי, צריכת אנרגיה ולבסוף תפוקה. במצב מונה אפשר לממש רק את פונקציית ההצפנה של הצופן, מה שחוסך במקום נוסף. PRESENT בנוי בסגנון רשת החלפה תמורה ב-31 סבבים. הוא מקבל מפתח הצפנה סודי בשני אורכים אפשריים. מפתח באורך 80 סיביות המתאים לשימוש רגיל בדומה לתקן eSTREAM למימוש צופן זרם בחומרה מוגבלת, כאשר דרישות הביטחון נמוכות. או מפתח באורך 128 סיביות לפי המינימום הנדרש בתקן AES במידה שיש צורך בביטחון גבוה יותר. המפתח מורחב ל-32 תת-מפתחות K 1 , K 2 , . . . , K 32 {\displaystyle K_{1},K_{2},...,K_{32}} בתהליך שמתואר בהמשך. בכל סבב מבוצעים שלושה מהלכים: חיבור עם תת-המפתח K i {\displaystyle K_{i}} (כאשר i {\displaystyle i} מתייחס למספר הסבב) והמפתח K 32 {\displaystyle K_{32}} משמש להלבנה מסיימת. שכבת פיזור שהיא תמורה ליניארית ברמת סיביות. שכבת החלפה אי-ליניארית הכוללת תיבת החלפה S-box בגודל 4 סיביות המבוצעת 16 פעמים במקביל. החיבור עם המפתח שנקרא "addRoundKey" הוא חיבור XOR של 64 סיביות המצב הפנימי (הזיכרון) של הצופן עם 64 הסיביות הראשונות של תת-המפתח K i {\displaystyle K_{i}} . ההחלפה הנקראת "sBoxLayer" היא פעולת החלפה של ארבע סיביות בארבע סיביות לפי טבלה קבועה. מחלקים את בלוק המצב המכיל 64 סיביות: b 63 , . . . , b 0 {\displaystyle b_{63},...,b_{0}} ל-16 חלקים באורך ארבע סיביות כל אחד: w 15 , . . . , w 0 {\displaystyle w_{15},...,w_{0}} כאשר w i = b 4 i + 3   ‖   b 4 i + 2   ‖   b 4 i + 1   ‖   b 4 i {\displaystyle w_{i}=b_{4i+3}\ \|\ b_{4i+2}\ \|\ b_{4i+1}\ \|\ b_{4i}} עבור 0 ≤ i ≤ 15 {\displaystyle 0\leq i\leq 15} ומחליפים אותם במקביל לפי הטבלה הבאה: שכבת הפיזור הנקראת "pLayer" מובאת בטבלה הבאה: לדוגמה אם הקלט הוא i = 33 {\displaystyle i=33} הפלט הוא P ( 33 ) = 24 {\displaystyle P(33)=24} . הפרוצדורה "generateRoundKeys" אחראית להכנת המפתח המסופק על ידי המשתמש להצפנה. במקרה של 80 סיביות, תחילה טוענים את המפתח לאוגר באורך 80 סיביות: K 79 , . . . , K 0 {\displaystyle K_{79},...,K_{0}} . בכל סבב משתמשים רק ב-64 הסיביות הראשונות (הכי פחות משמעותיות) של המפתח: K 63 , . . . , K 0 {\displaystyle K_{63},...,K_{0}} ובכל סבב הפרוצדורה "update" מעדכנת את אוגר המפתח כדלהלן: [ k 79 k 78 ⋯ k 1 k 0 ] = [ k 18 k 17 ⋯ k 20 k 19 ] {\displaystyle [k_{79}k_{78}\cdots k_{1}k_{0}]=[k_{18}k_{17}\cdots k_{20}k_{19}]} [ k 79 k 78 k 77 k 76 ] = S [ k 79 k 78 k 77 k 76 ] {\displaystyle [k_{79}k_{78}k_{77}k_{76}]=S[k_{79}k_{78}k_{77}k_{76}]} [ k 19 k 18 k 17 k 16 k 15 ] = [ k 19 k 18 k 17 k 16 k 15 ] ⊕ RoundCounter {\displaystyle [k_{19}k_{18}k_{17}k_{16}k_{15}]=[k_{19}k_{18}k_{17}k_{16}k_{15}]\oplus {\text{RoundCounter}}} במילים: בכל סבב מבצעים הזזה מעגלית של אוגר המפתח 61 סיביות שמאלה, ארבע הסיביות השמאליות ביותר מוחלפות לפי תיבת ההחלפה של PRESENT וחמש הסיביות הימניות ביותר (הכי פחות משמעותיות) של מונה הסבב RoundCounter {\displaystyle {\text{RoundCounter}}} (ערכו של i {\displaystyle i} ) מחוברות ב-XOR עם סיביות המפתח בפוזיציות k 19 , k 18 , k 17 , k 16 , k 15 {\displaystyle k_{19},k_{18},k_{17},k_{16},k_{15}} . להלן פסבדו קוד הממחיש את האלגוריתם באופן כללי. לאור העובדה שהצופן מיועד מראש לספק ביטחון בינוני אין לראות בו כתחליף ל-AES והקריפטואנליזה שלו בהתאם צריכה להתחשב בעובדה זו. הצופן חדש יחסית ובאופן כללי לא התגלו בו בעיות רציניות. התקפת איזון זמן/זיכרון המבוססת על פרדוקס יום ההולדת בדרך כלל מהווה איום משמעותי על צופן בלוקים עם בלוק קטן יחסית כמו PRESENT, אולם בהתחשב בסביבה המיוחדת בה הוא אמור לפעול האיום הזה לדעת המפתחים אינו חמור. התקפת ערוץ צדדי יכולה להיות ישימה נגד PRESENT כמו נגד צפנים אחרים, שוב בשל הפלטפורמה הספציפית שבה אמור הצופן להיות מיושם התקפה זו אינה מהווה איום ממשי לדעת המפתחים. צופן בלוקים AES PRESENT: An Ultra-Lightweight Block Cipher, A. BogdanovL. R. KnudsenG. LeanderC. PaarA. PoschmannM. J. B. RobshawY. SeurinC. Vikkelsoe, CHES 2007 ISO/IEC 29192-2:2012 Blondeau, Cline; Nyberg, Kaisa (2014). "Links between truncated differential and multidimensional linear properties of block ciphers and underlying attack complexities". Lecture Notes in Computer Science. 8441 (Advances in Cryptology EUROCRYPT 2014): 165–182. Lee, Changhoon (2014-01-28). "Biclique cryptanalysis of PRESENT-80 and PRESENT-128". The Journal of Supercomputing. 70 (1): 95–103 Faghihi Sereshgi, Mohammad Hossein; Dakhilalian, Mohammad; Shakiba, Mohsen (2015-10-06). "Biclique cryptanalysis of MIBS-80 and PRESENT-80 block ciphers". Security and Communication Networks