Протоколы Internet

         

Алгоритм шифрования SAFER


6.4.8 Алгоритм шифрования SAFER

Семенов Ю.А. (ГНЦ ИТЭФ)

Алгоритм шифрования SAFER (Secure And Fast Encryption Routine; http://fn2.freenet.edmonton.ab.ca/~jsavard/co0403.html) не использует разбивку исходного текста на блоки (как это делается в DES или IDEA). Здесь исходный текст пропускается через S-матрицы, которые заменяются на обратные версии при дешифровании. В SAFER используется 8 циклов. Первый шаг цикла заключается в использовании первого субключа для преобразования 8 байт исходного текста. То, как используется субключ, зависит от номера байта в группе. Так для 1-го, 4-го, 5-го и 8-го для этого служит операция XOR, а для 2-го, 3-го, 6-го и 7-го байтов применяется операция сложения.

Затем при обработке текста в S-матрице байты, для которых было применено исключающее ИЛИ, поступают на обычную матрицу, для остальных применяется инвертированная. s-матрицы представляют собой таблицы байтов, которые получаются по формуле 45N mod 257, где N –номер кода в таблице (после чего выделяются 8 младших разрядов).

1 45 226 147 190 69 21 174

120 3 135 164 184 56 207 63

8 103 9 148 235 38 168 107

189 24 52 27 187 191 114 247

64 53 72 156 81 47 59 85

227 192 159 216 211 243 141 177

255 167 62 220 134 119 215 166

17 251 244 186 146 145 100 131

241 51 239 218 44 181 178 43

136 209 153 203 140 132 29 20

129 151 113 202 95 163 139 87



60 130 196 82 92 28 232 160

4 180 133 74 246 19 84 182

223 12 26 142 222 224 57 252

32 155 36 78 169 152 158 171

242 96 208 108 234 250 199 217

0 212 31 110 67 188 236 83

137 254 122 93 73 201 50 194

249 154 248 109 22 219 89 150

68 233 205 230 70 66 143 10

193 204 185 101 176 210 198 172

30 65 98 41 46 14 116 80

2 90 195 37 123 138 42 91

240 6 13 71 111 112 157 126

16 206 18 39 213 76 79 214

121 48 104 54 117 125 228 237

128 106 144 55 162 94 118 170

197 127 61 175 165 229 25 97

253 77 124 183 11 238 173 75

34 245 231 115 35 33 200 5

225 102 221 179 88 105 99 86

15 161 49 149 23 7 58 40

Обратная матрица при этом имеет вид.


128 0 176 9 96 239 185 253

16 18 159 228 105 186 173 248

192 56 194 101 79 6 148 252

25 222 106 27 93 78 168 130

112 237 232 236 114 179 21 195

255 171 182 71 68 1 172 37

201 250 142 65 26 33 203 211

13 110 254 38 88 218 50 15

32 169 157 132 152 5 156 187

34 140 99 231 197 225 115 198

175 36 91 135 102 39 247 87

244 150 177 183 92 139 213 84

121 223 170 246 62 163 241 17

202 245 209 23 123 147 131 188

189 82 30 235 174 204 214 53

8 200 138 180 226 205 191 217

208 80 89 63 77 98 52 10

72 136 181 86 76 46 107 158

210 61 60 3 19 251 151 81

117 74 145 113 35 190 118 42

95 249 212 85 11 220 55 49

22 116 215 119 167 230 7 219

164 47 70 243 97 69 103 227

12 162 59 28 133 24 4 29

41 160 143 178 90 216 166 126

238 141 83 75 161 154 193 14

122 73 165 44 129 196 199 54

43 127 67 149 51 242 108 104

109 240 2 40 206 221 155 234

94 153 124 20 134 207 229 66

184 64 120 45 58 233 100 31

146 144 125 57 111 224 137 48

После обработки с помощью S-матрицы используется второй субключ, который воздействует на блок преобразуемых данных. В этом случае используется другая последовательность операций: ADD, XOR, XOR, ADD, ADD, XOR, XOR, ADD (сравните с порядком операций, указанным в первом абзаце главы). Далее байты группируются: второй байт заменяется суммой первого байта и второго, первый – суммой нового значения второго байта и первого, четвертый – суммой третьего и четвертого, третий – суммой нового значения четвертого и третьего и т.д. вплоть до 8 байта включительно (см. рис. 6.4.8.1). При суммировании в результате операции учитываются только младшие 8 бит. По завершении этой процедуры байты выкладываются в следующем порядке (цифры означают старое положений байтов):

  • 3 5 7 2 4 6 8




  • Рис. 6.4.8.1. Блок-схема реализации цикла алгоритма SAFER

    После этого процедуры группирования и суммирования и перемешивания байтов повторяются.

    Дешифровка в рамках алгоритма SAFER реализуется для каждой из процедур (путем замены их на обратные), примененной при шифровании независимо.

    В качестве первого 64-битного субключа используется основной ключ шифрования. Для генерации последующих ключей используется циклический сдвиг влево на 3 бита. Полученные результаты объединяются с определенной константой (специфичной для каждого цикла) с помощью операции исключающее ИЛИ (XOR). Для первого субключа эта константа равна нулю. Далее используются константы, приведенные ниже:

    16733B1E8E70BD86

    477E2456F1778846

    B1BAA3B7100AC537

    C95A28AC64A5ECAB

    C66795580DF89AF6

    66DC053DD38AC3D8

    6AE9364943BFEBD4

    9B68A0655D57921F

    715CBB22C1BE7BBC

    63945F2A61B83432

    FDFB1740E6511D41

    8F29DD0480DEE731

    7F01A2F739DA6F23

    FE3AD01CD1303E12

    CD0FE0A8AF82592C

    7DADB2EFC287CE75

    1302904F2E723385

    8DCFA981E2C4272F

    7A9F52E115382BFC

    42C708E409555E8C




    Содержание раздела