SÁFER (англ.Secure And Fast Encryption Routine — безпечна і швидка процедура шифрування) — в криптографії сімейство симетричних блокових криптоалгоритмів на основі мережі замін-перестановок. Основний внесок в розробку алгоритмів вніс Джеймс Мессі. Перший варіант шифру був створений і опублікований в 1993 році. Хоча алгоритми SAFER не отримали статусу стандартів в США або ЄС, вони знайшли дуже широке застосування. Зокрема, SAFER+ використовується як основа протоколу аутентифікації в Bluetooth. Однак, в самому алгоритмі шифрування в Bluetooth цей алгоритм не використовується[1].
Незважаючи на те, що в назві алгоритму фігурує слово «fast» (швидкий), за сучасними мірками алгоритми сімейства SAFER є досить повільними.
З точки зору криптостійкости навіть найперша версія алгоритму SAFER K-64 є абсолютно стійкою до диференціального криптоаналізу. Останній алгоритм сімейства — SAFER++, будучи значно модифікованим з урахуванням безлічі атак, здійснених на більш ранні версії алгоритму, став ще більш стійким. В даний час ніяких реально здійсненних атак на алгоритм, не знайдено[1].
З огляду на те, наскільки далеко просунулися алгоритми SAFER за час свого існування — від SAFER K-64 до SAFER++, можна припустити, що на цьому розвиток цих алгоритмів не закінчений[2].
SAFER K-64
Алгоритм шифрування
Довжина блоку, що шифрується, і довжина ключа дорівнюють 64 бітам. Алгоритм є ітеративним блоковим шифром, тобто одна й та сама функція шифрування послідовно застосовується до вхідного блоку кілька разів, при цьому на кожному етапі використовуються різні ключі. У кожному раунді шифрування та дешифрування беруть участь два 64-бітових ключа.
Схему шифрування одного раунду алгоритму подано на схемі. Блок даних подається у вигляді 8-байтового масиву (байти нумеруються зліва направо від 1 до 8). Алгоритм є мережею замін-перестановок, у кожному раунді якої виконуються наступні операції:
На дані накладається 8-байтний фрагмент розширеного ключа , де — номер поточного раунду. Раунди нумеруються починаючи з 1. Байти ключа № 1, 4, 5 та 8 накладаються на аналогічні байти даних за допомогою побітової логічної операції «або» (XOR); для накладення решти байтів (№ 2, 3, 6 та 7) ключа використовується операція додавання за модулем 256.
Байти даних № 1, 4, 5 і 8 обробляються наступною операцією (у схемі позначена як Е): , де — вхідне значення, а — вихідне значення цієї операції. Причому якщо (що відбувається за умови ), то його значення обнуляється: . Інші байти даних (№ 2, 3, 6 та 7) обробляються наступною операцією (у схемі позначена як L): , причому якщо , то значення .
Друге накладення ключа виконується аналогічно до першого (проте з використанням іншого фрагмента розширеного ключа, а саме ), але з інверсним застосуванням операцій: байти, що в першому накладенні ключа опрацьовувалися операцією XOR, тут опрацьовуються додаванням за модулем 256, і навпаки.
Три рівні перетворень PHT (Pseudo Hadamard Transform, псевдоадамарове перетворення); операція РНТ виконує нескладне перетворення двох вхідних байтів даних ( та ), даючи в результаті два вихідні байти та . Визначаються вони наступним чином: та . Між рівнями перетворень РНТ виконується перестановка байтів даних позначена на схемі. Байт №1 залишається на своєму місці, вхідне значення байта №2 стає вихідним значенням байта №4, вхідне значення байта №3 стає вихідним значенням байта №2, тощо.
Автор алгоритму рекомендує виконувати 6 раундів описаних вище перетворень (раунди позначаються як ), але допускає збільшення кількості раундів до 10. Після виконання раундів алгоритму застосовується вихідне перетворення, повністю аналогічне описаній вище операції першого накладення ключа; у цьому випадку застосовується останній із фрагментів розширеного ключа . Слід врахувати, що залежно від вимог до реалізації алгоритму описані вище операції Е та L можуть бути реалізовані напряму або у вигляді таблиць замін.[2]
Перетворення РНТ у сукупності також можуть бути замінені множенням байтового масиву даних на матрицю М (у кінцевому полі GF(256)).[2]
Матриця для шифрування як заміна операції PHT
8
4
4
2
4
2
2
1
4
2
4
2
2
1
2
1
4
2
2
1
4
2
2
1
2
1
2
1
2
1
2
1
4
4
2
2
2
2
1
1
2
2
2
2
1
1
1
1
2
2
1
1
2
2
1
1
1
1
1
1
1
1
1
1
Алгоритм розшифрування
При розшифровуванні шифротекст насамперед піддається вхідному перетворенню за участю фрагмента розширеного ключа , що інверсно вихідному перетворенню при зашифровуванні:
даних № 1, 4, 5 і 8 обробляються операцією XOR;
інші байти обробляються операцією віднімання: , де – вихідний байт; – вхідний байт; – відповідний байт фрагмента ключа, що накладається.
Після цього виконується R раундів розшифровування, у кожному з яких виконуються наступні дії:
Три рівні зворотного псевдоадамарового перетворення IPНТ (Inverse РНТ), яке визначається таким чином: та . Між рівнями перетворень ІРНТ виконується перестановка байтів наведена на рисунку, яка зворотна перестановці, що використовувалася при зашифровуванні.
Зворотне друге накладення ключа: на дані накладається 8-байтний фрагмент розширеного ключа . Байти ключа № 2, 3, 6 і 7 накладаються на аналогічні байти даних за допомогою операції XOR; для накладення інших байтів ключа використовується описана вище операція віднімання.
Зворотне нелінійне перетворення: байти даних № 1, 4, 5 і 8 обробляються операцією L; інші байти обробляються операцією E.
Зворотне перше накладення ключа, повністю аналогічне описаному вище вхідному перетворенню; тут використовується фрагмент розширеного ключа
Як видно, при розшифровуванні відбувається виконання зворотних операцій у зворотному порядку. Перетворення ІРНТ також може бути замінено множенням на матрицю (аналогічно описаному вище для РНТ).
Перекладач повинен розуміти, що відповідальність за кінцевий вміст статті у Вікіпедії несе саме автор редагувань. Онлайн-переклад надається лише як корисний інструмент перегляду вмісту зрозумілою мовою. Не використовуйте невичитаний і невідкоригований машинний переклад у статтях української Вікіпедії!
Машинний переклад Google є корисною відправною точкою для перекладу, але перекладачам необхідно виправляти помилки та підтверджувати точність перекладу, а не просто скопіювати машинний переклад до української Вікіпедії.
Не перекладайте текст, який видається недостовірним або неякісним. Якщо можливо, перевірте текст за посиланнями, поданими в іншомовній статті.