גודל הבלוק בחמש הגרסאות הראשונות הוא 64 סיביות, גודל המפתח בסיביות נרמז במספר המופיע לאחר השם, כאשר בגרסאות SK תהליך הכנת המפתח חוזק בגלל חולשות שהתגלו בקריפטואנליזה של הגרסאות הראשונות. בשתי האחרונות, גודל הבלוק שונה ל-128 סיביות כדי להכשירן כמועמדות לתקני ההצפנה הבינלאומיים. בדומה ל-AES אורך המפתח הנתמך מגיע בשלוש וריאציות 128/192/256 בהתאמה. שתי הגרסאות האחרונות פותחו על ידי מסי ועמיתיו מהאקדמיה הלאומית הארמנית והן מציעות שיפור נוסף על פני קודמותיהן הן ביעילות והן בביטחון. אפקט הפיזור של SAFER מושג על ידי טרנספורמציה ליניארית רב-ממדית הנקראת PHT שהיא התמרת פסבדו-אדמר המפורטת בהמשך. בכל הגרסאות הראשונות נעשה שימוש ב-PHT דו-נקודתית formula_1). בגרסה SAFER+ מתבצע פיזור מהיר יותר על ידי מה שנקרא "הערבוב הארמני" שנקרא כך על שם ממציאיו Gurgen Khachatrian ו-Melsik Kuregian. בגרסה SAFER++ בנוסף לשיפורים המנויים, שופר הפיזור באמצעות PHT בארבע נקודות formula_2). גרסה זו כוללת גם גרסת מורשת (legacy) עם בלוק באורך 40 סיביות.
שיקולי פיתוח ומאפיינים כלליים.
שם הצופן ניתן על ידי ג'יימס מסי שהיה ממפתחי IDEA והרעיונות ששולבו לראשונה ב-IDEA היוו מקור השראה ל-SAFER. התוספת SK בגרסאות המתקדמות היא ראשי התיבות Strengthened Key (מפתח מחוזק) והיא ניתנה בעקבות קריפטואנליזה שבוצעה על ידי לארס קנודסן שגילה שאם הצופן משמש בתצורת פונקציית גיבוב, בגלל "קיבעון" כלשהו של בתי המפתח אפשר למצוא התנגשויות בפחות מהזמן הדרוש בכוח גס. הוא הציע לשנות את התהליך כדי למנוע חולשה זו ובעקבות כך פותחה הגרסה SK. יש המפרשים בהלצה את ראשי התיבות SK כ-Stop Knudesen שהיא "עצה טובה לפיתוח כל צופן בלוקים".
העקרונות המובילים בפיתוח אלגוריתם SAFER במיוחד SAFER++ הם:
התמרת פסבדו-אדמר.
הרעיון המרכזי של שאנון לפיתוח צופן בלוקים הוא ליצור "אפקט מפולת" או פיזור (diffusion) מהיר ככל האפשר על ידי פונקציית הצפנה שמבוצעת באופן חוזר ונשנה, כך שתוך מספר מצומצם של חזרות, שינוי קל מאוד בטקסט המקורי יתפתח לשינוי גדול בטקסט המוצפן. ולא יהיה שום יחס או קורלציה בין שני טקסטים מקוריים הנבדלים ביניהם רק בסיבית אחת על ידי יחס דומה בין הטקסטים המוצפנים. לצורך אפקט הפיזור צופן SAFER מיישם מוטיב קריפטוגרפי בלתי שיגרתי; טרנספורמציה ליניארית הנקראת "התמרת פסבדו אדמר" או "התמרת וולש-אדמר".
הנוסחה הסטנדרטית של התמרת וולש-אדמר היא: formula_8. אולם הדטרמיננטה של מטריצת המקדמים במקרה זה היא formula_9 ולכן באריתמטיקה מודולו 256 כאשר formula_10 היא אינה הפיכה, בנוסף לעובדה שנדרשת פעולת כפל. הנוסחה של התמרת פסבדו אדמר בשלושה ממדים בשתי נקודות (מקבלת זוג קלטים) המסומנת formula_1 היא:
והפעולה ההופכית המסומנת כאן בקיצור formula_14 היא:
כאשר formula_17 ו-formula_18 הם שני בתי הקלט. עם שינוי זה מתקבלת המטריצה formula_19 שהדטרמיננטה שלה היא 1 כלומר מטריצה הפיכה וכן אין צורך בפעולת כפל שזה רצוי מהיבט של יעילות. והמטריצה ההופכית היא formula_20. בתהליך ההצפנה מבצעים כפל של וקטור הקלט עם המטריצה: formula_21 ואילו בפענוח מבצעים formula_22. לדוגמה:
באופן דומה אפשר לבנות התמרת פסבדו-אדמר במספר נקודות (קואורדינטות) גדול יותר. התכונה המיוחדת במערכת כזו היא שכל בית בקלט ה-PHT משפיע על כל בתי הפלט ולמעשה מובטח פיזור כמעט מלא בתוך שנים או שלושה מהלכים אפילו בשינוי קל של הקלט. לדעת המפתחים, לא ידוע על צופן אחר שמשיג אפקט פיזור כזה גבוה בתוך מספר כה קצר של סבבים.
SAFER K-64.
צופן SAFER K-64 הוא צופן בלוקים איטרטיבי בסגנון רשת החלפה תמורה המקבל בלוק טקסט קריא באורך 8 בתים ומפתח סודי באורך 8 בתים ומפיק טקסט מוצפן באורך 8 בתים. הפונקציה פנימית של הצופן מבוצעת שש פעמים (או יותר) כאשר בכל סבב פלט הפונקציה הופך לקלט בסבב הבא ופלט הצופן הסופי הוא פונקציה מסיימת של התוצאה מהסבב האחרון. בכל סבב שני תת-מפתחות באורך 8 בתים כל אחד, אותם מכינים באמצעות תהליך הכנה שיתואר להלן, מחוברים עם הבלוק הנוכחי בשיטה מיוחדת, מלבד פעולות פיזור וערבוב המפורטים להלן. בסך הכול הצופן משתמש ב-formula_25 תת-מפתחות עבור formula_26 סבבים, כל אחד באורך שמונה בתים. הפונקציה המסיימת היא XOR של הבתים 1,4,5,8 עם הבתים המתאימים של תת-המפתח formula_25 בית אחרי בית וחיבור מודולו 256 של יתר הבתים 2,3,6,7 עם הבתים המתאימים במפתח. לפי המוסכמה סדר הבתים גדול, בית מס' 1 הוא הבית הכי משמעותי (מסדר גבוה). סדר פעולות ההצפנה מתואר בתרשים משמאל.
מבנה פונקציית ההצפנה.
הצעד הראשון בתוך הסבב ה-formula_4 כמתואר בתרשים משמאל, הוא חיבור בשני אופנים של המפתח עם בלוק הקלט, הבתים 1,4,5,8 מחוברים ב-XOR ואילו הבתים 2,3,6,7 מחוברים בחיבור רגיל מודולו 256 (בגבולות בתים). הסיבה לטכניקה זו היא ניסיון להרוס ליניאריות על ידי שילוב של פעולות מחבורות אלגבריות שונות כך שלא תהיה אסוציאטיביות ביניהן. התוצאה מועברת בשכבה אי-ליניארית אשר מיישמת החלפה לפי שני סוגי תיבות החלפה המשלימים זה את זה, (1) תיבות החלפה שערכיהן הם כל החזקות formula_5 של 45 מודולו 257 כאשר formula_30, למעט יוצא דופן אחד formula_31 ולא 256 ו(2) תיבות החלפה שערכיהן הם לוגריתם בדידי בבסיס 45 של כל הערכים formula_32 מודולו 257, למעט יוצא דופן אחד במקרה ש-formula_33 התוצאה היא 128. לפי התיבות הראשונות אם הקלט הוא formula_34 התוצאה היא formula_35, לפי התיבות השניות אם הקלט הוא formula_34 הפלט הוא formula_37 כך שמתקיים formula_38. בפועל משתמשים בשתי טבלאות אחזור (look-up) שהוכנו מראש. ההחלפה מתבצעת לפי כלל דומה, הבתים 1,4,5,8 מוחלפים לפי התיבות מהסוג הראשון והאחרים לפי התיבות מהסוג השני. הפלט של שמונה הפונקציות האי-ליניאריות משולב עם תת-מפתח אחר באותו אופן אך בסדר הפוך, הבתים 1,4,5,8 מחוברים בחיבור רגיל ואילו הבתים 2,3,6,7 מחוברים ב-XOR. הפלט לאחר החיבור האחרון עם המפתח המתאים עובר בשלוש רמות של הטרנספורמציה הליניארית formula_1 המתוארת לעיל. פונקציה זו פועלת על שני בתים לכן מתבצעות בסך הכול ארבע טרנספורמציות בכל רמה (כל אחת מקבלת שני בתים ופולטת שני בתים) כשבין כל רמה של PHT מתבצעת תמורה (סידור מחדש) ברמה של בתים הנקראת Decimation-by-2 שהיא טריק ידוע מ-FFT שבו פשוט כל זוג מחליף בית אחד עם זוג אחר. למשל הבית השני בפלט של ה-PHT הראשון עובר למיקום השלישי ולאחר ה-PHT השני עובר למיקום החמישי. לאחר הפיזור הליניארי מסתיים הסבב וחוזרים להתחלה.
מבנה פונקציית הפענוח.
מבנה הפענוח כמתואר בתרשים משמאל הוא פשוט הפעולות ההופכיות, בסדר הפוך למבנה ההצפנה צעד אחרי צעד ובסדר הפוך של המפתחות. תחילה מבוצעת טרנספורמציה על הקלט שהיא חיסור מודולו 256 של בתי תת-המפתח formula_40 המתאימים וכן XOR של יתר הבתים. היות ש-XOR הופכי של עצמו פשוט חוזרים עליו שוב ומתקבל הערך המקורי לדוגמה אם המפתח הוא 15 ובית המידע הוא 66 הרי שמתקבל formula_41. בחיסור מודולו 256 מספר שלילי הופך להיות חיובי על ידי החסרה מהמודולוס למשל המספר השלילי formula_42 הוא בעצם formula_43. לאחר מכן מבצעים formula_26 סבבים המבטלים את formula_26 הסבבים של ההצפנה. תחילה מעבירים את הקלט בטרנספורמציה הליניארית ההופכית IPHT וכן מעבירים בתמורות ההופכיות (ראה חיצים), מחסרים את תת-המפתח formula_46 מהפלט לפי הסדר, בבתים 1,4,5,8 מבצעים חיסור מודולו 256, ביתר הבתים מבצעים XOR. ועוברים לשלב האי-ליניארי ההופכי. בשלב זה פשוט מבצעים החלפה לפי סדר הפוך מסדר ההחלפה בהצפנה, היות שתיבות ההחלפה משלימות זו את זו, האפקט המתקבל הוא ביטול השפעת ההחלפה משלב ההצפנה. אם מחליפים ערך נתון לפי תיבת החלפה מסוג אחד ולאחר מכן מחליפים את התוצאה בתיבת ההחלפה מהסוג השני מתקבל הערך המקורי לדוגמה אם בית המידע הוא 174 אז formula_47 לכן formula_48. שוב מחסרים את המפתח המתאים לפי הסדר המופיע בהצפנה ובזה הושלם סבב אחד עליו חוזרים כמובן formula_26 פעמים עם המפתחות המתאימים. תהליך הפענוח מתואר בתרשים משמאל.
הכנת מפתח.
תהליך הכנת המפתח (key schedule) של SAFER K-64 מייצר סדרה של formula_25 תת-מפתחות formula_51 שכל אחד מהם באורך 8 בתים וכל זוג מתאים לסבב בודד. המפתח הנוסף משמש בסוף התהליך לצורך הפונקציה המסיימת. את המפתחות מכינים ממפתח המאסטר שסופק על ידי המשתמש באופן כזה שהמפתחות "ייראו" אקראיים ובלתי תלויים זה בזה. כדי להימנע ממפתחות חלשים (מפתחות שמכילים הרבה אפסים) מבצעים "הטיה" של כל המפתחות למעט הראשון על ידי חיבור עם רצף של בתי הטיה formula_52. המפתח הראשון formula_53 הוא בעצם המפתח שסופק על ידי המשתמש כמו שהוא. הפונקציות להכנת ערכי ההטייה הן העלאה כפולה בחזקת 45 כדלהלן:
כאשר formula_55 מתייחס לבית ה-formula_5 של ההטייה formula_4. את ההטיות כמובן אפשר לחשב מראש ולאחסן בטבלה. את כל תת-המפתחות מייצרים כך: המפתח formula_53 שהוא מפתח המאסטר שהמשתמש בחר מועתק ל-formula_59 ו"מסובב" על ידי הזזה מעגלית של הסיביות בתוך כל בית 3 פוזיציות ואז חיבור עם ההטייה המתאימה formula_60 מודולו 256. עוברים למפתח הבא וכן הלאה עבור כל המפתחות.
SAFER K-128.