SAFER (צופן)
SAFER++‎ > הכנת מפתחות

תהליך הכנת תת-המפתחות של SAFER++‎ מפיק מהמפתח המסופק על ידי המשתמש  2r+1 מפתחות באורך 16 בתים כל אחד, כל זוג מתאים לסבב אחד של הפונקציה הפנימית של הצופן. בגלל שמספר הסבבים שונה בהתאם לאורך המפתח של המשתמש ובגלל שבגרסאות הישנות גודל המפתח היה רק 64 סיביות, את המפתחות מפיקים באופן כזה שכל תת-המפתחות הם למעשה קינון של המפתחות בהתאם לסוג הצופן, כלומר המפתחות הראשונים מתאימים לגרסת 64 סיביות, אחריהם המפתחות של גרסת מפתח 128 סיביות ואחריהם המפתחות לגרסת 256. כך שאפשר להשתמש באותו תהליך הכנה לכל הווריאציות של הצופן. את המפתחות מכינים בדרך מאוד פשוטה תחילה מוסיפים בית זוגיות שהוא XOR של כל בתי המפתח שנבחר על ידי המשתמש. ואז מפיקים את כל תת-המפתחות על ידי שילוב של הזזה מעגלית ברמה של סיביות בתוך כל בית, הזזה מעגלית ברמה של בתים של כל מפתח וחיבור עם קבועים הנקראים בתי "הטיה" שמספרם תלוי באורך המפתח. את בתי ההטייה מחשבים על ידי:
כאשר  i מתייחס לאינדקס המפתח ו- j מתייחס למספר הבית בתוך המפתח. עבור מפתח 256 סיביות מחשבים את 48 הבתים האחרונים כך:
בסך הכול קיימים לכל היותר  20\cdot 16 בתי הטיה.
סיכום סדר הפעולות להכנת המפתחות
מתחילים עם המפתח שהמשתמש בחר בסך הכול 16 בתים.
מוסיפים בית זוגיות כך שמתקבלים 17 בתים.
המפתח הראשון  K_{1} הוא בעצם המפתח שהמשתמש בחר כמו שהוא.
מסובבים בהזזה מעגלית את סיביות כל בתי המפתח 6 פוזיציות שמאלה, בגבולות בית אחד.
מסובבים את בתי המפתח בסך הכול שני בתים לשמאל כלומר מתקבל 3,4,5,...,17,1
מחברים עם בתי ההטייה והתוצאה היא המפתח הבא.
חוזרים על הפעולות הללו עד שמקבלים את כל המפתחות הדרושים. עבור מפתח באורך 256 סיביות דרושים בסך הכול 21 תת-מפתחות.
20\cdot 16 בתי ההטייה מופיעים בטבלה הבאה:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 70 | 151 | 177 | 186 | 163 | 183 | 16 | 10 | 197 | 55 | 179 | 201 | 90 | 40 | 172 | 100 |
| 236 | 171 | 170 | 198 | 103 | 149 | 88 | 13 | 248 | 154 | 246 | 110 | 102 | 220 | 5 | 61 |
| 138 | 195 | 216 | 137 | 106 | 233 | 54 | 73 | 67 | 191 | 235 | 212 | 150 | 155 | 104 | 160 |
| 93 | 87 | 146 | 31 | 213 | 113 | 92 | 187 | 34 | 193 | 190 | 123 | 188 | 153 | 99 | 148 |
| 42 | 97 | 184 | 52 | 50 | 25 | 253 | 251 | 23 | 64 | 230 | 81 | 29 | 65 | 68 | 143 |
| 221 | 4 | 128 | 222 | 231 | 49 | 214 | 127 | 1 | 162 | 247 | 57 | 218 | 111 | 35 | 202 |
| 58 | 208 | 28 | 209 | 48 | 62 | 18 | 161 | 205 | 15 | 224 | 168 | 175 | 130 | 89 | 44 |
| 125 | 173 | 178 | 239 | 194 | 135 | 206 | 117 | 6 | 19 | 2 | 144 | 79 | 46 | 114 | 51 |
| 192 | 141 | 207 | 169 | 129 | 226 | 196 | 39 | 47 | 108 | 122 | 159 | 82 | 225 | 21 | 56 |
| 252 | 32 | 66 | 199 | 8 | 228 | 9 | 85 | 94 | 140 | 20 | 118 | 96 | 255 | 223 | 215 |
| 250 | 11 | 33 | 0 | 26 | 249 | 166 | 185 | 232 | 158 | 98 | 76 | 217 | 145 | 80 | 210 |
| 24 | 180 | 7 | 132 | 234 | 91 | 164 | 200 | 14 | 203 | 72 | 105 | 75 | 78 | 156 | 53 |
| 69 | 77 | 84 | 229 | 37 | 60 | 12 | 74 | 139 | 63 | 204 | 169 | 219 | 107 | 174 | 244 |
| 45 | 243 | 124 | 109 | 157 | 181 | 38 | 116 | 242 | 147 | 83 | 176 | 240 | 17 | 237 | 131 |
| 103 | 9 | 148 | 235 | 38 | 168 | 107 | 189 | 24 | 52 | 27 | 187 | 191 | 114 | 247 | 64 |
| 72 | 156 | 81 | 47 | 59 | 85 | 227 | 192 | 159 | 216 | 211 | 243 | 141 | 177 | 255 | 167 |
| 220 | 134 | 119 | 215 | 166 | 17 | 251 | 244 | 186 | 146 | 145 | 100 | 131 | 241 | 51 | 239 |
| 44 | 181 | 178 | 43 | 136 | 209 | 153 | 203 | 140 | 132 | 29 | 20 | 129 | 151 | 113 | 202 |
| 163 | 139 | 87 | 60 | 130 | 196 | 82 | 92 | 28 | 232 | 160 | 4 | 180 | 133 | 74 | 246 |
| 84 | 182 | 223 | 12 | 26 | 142 | 222 | 224 | 57 | 252 | 32 | 155 | 36 | 78 | 169 | 152 |