YaChudo

SAFER

Переглядів: 0. Оновлено 28.10.2026.

SAFER
РозробникиДжеймс Мессі
Уперше оприлюднений1993 рік
Деталі шифру
Розмір ключа64 (128, 192, 256) біт
Розмір блоку64 (40, 128) біт
Раундів6-16
ТипМережа замін-перестановок

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

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

Схема шифрування одного раунду алгоритмом SAFER K-64

Довжина блоку, що шифрується, і довжина ключа дорівнюють 64 бітам. Алгоритм є ітеративним блоковим шифром, тобто одна й та сама функція шифрування послідовно застосовується до вхідного блоку кілька разів, при цьому на кожному етапі використовуються різні ключі. У кожному раунді шифрування та дешифрування беруть участь два 64-бітових ключа[2].

Загальна схема шифрування алгоритмом SAFER K-64

Схему шифрування одного раунду алгоритму подано на схемі. Блок даних подається у вигляді 8-байтового масиву (байти нумеруються зліва направо від 1 до 8). Алгоритм є мережею замін-перестановок, у кожному раунді якої виконуються наступні операції[2]:

  1. На дані накладається 8-байтний фрагмент розширеного ключа K 2 i − 1 {\displaystyle K_{2i-1}} , де i {\displaystyle i}  — номер поточного раунду. Раунди нумеруються починаючи з 1. Байти ключа № 1, 4, 5 та 8 накладаються на аналогічні байти даних за допомогою побітової логічної операції «або» (XOR); для накладення решти байтів (№ 2, 3, 6 та 7) ключа використовується операція додавання за модулем 256.
  2. Байти даних № 1, 4, 5 і 8 обробляються наступною операцією (у схемі позначена як Е): y = 45 x  mod  257 {\displaystyle y=45^{x}{\mbox{ mod }}257} , де x {\displaystyle x}  — вхідне значення, а y {\displaystyle y}  — вихідне значення цієї операції. Причому якщо y = 256 {\displaystyle y=256} (що відбувається за умови x = 128 {\displaystyle x=128} ), то його значення обнуляється: y = 0 {\displaystyle y=0} . Інші байти даних (№ 2, 3, 6 та 7) обробляються наступною операцією (у схемі позначена як L): y = l o g 45  mod  256 {\displaystyle y=log_{45}{\mbox{ mod }}256} , причому якщо x = 0 {\displaystyle x=0} , то значення y = 128 {\displaystyle y=128} .
  3. Друге накладення ключа виконується аналогічно до першого (проте з використанням іншого фрагмента розширеного ключа, а саме K 2 i {\displaystyle K_{2i}} ), але з інверсним застосуванням операцій: байти, що в першому накладенні ключа опрацьовувалися операцією XOR, тут опрацьовуються додаванням за модулем 256, і навпаки.
  4. Три рівні перетворень PHT (Pseudo Hadamard Transform, псевдоадамарове перетворення); операція РНТ виконує нескладне перетворення двох вхідних байтів даних ( x 1 {\displaystyle x_{1}} та x 2 {\displaystyle x_{2}} ), даючи в результаті два вихідні байти y 1 {\displaystyle y_{1}} та y 2 {\displaystyle y_{2}} . Визначаються вони наступним чином: y 1 = ( 2 x 1 + x 2 )  mod  256 {\displaystyle y_{1}=(2x_{1}+x_{2}){\mbox{ mod }}256} та y 2 = ( x 1 + x 2 )  mod  256 {\displaystyle y_{2}=(x_{1}+x_{2}){\mbox{ mod }}256} . Між рівнями перетворень РНТ виконується перестановка байтів даних позначена на схемі.
    Перестановка байтів даних між перетвореннями PHT
    Байт №1 залишається на своєму місці, вхідне значення байта №2 стає вихідним значенням байта №4, вхідне значення байта №3 стає вихідним значенням байта №2, тощо.

Автор алгоритму рекомендує виконувати 6 раундів описаних вище перетворень (раунди позначаються як R {\displaystyle R} ), але допускає збільшення кількості раундів до 10. Після виконання R {\displaystyle R} раундів алгоритму застосовується вихідне перетворення, повністю аналогічне описаній вище операції першого накладення ключа; у цьому випадку застосовується останній із фрагментів розширеного ключа K 2 R + 1 {\displaystyle K_{2R+1}} . Слід врахувати, що залежно від вимог до реалізації алгоритму описані вище операції Е та 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


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

Схема дешифрування одного раунду алгоритмом SAFER K-64

При розшифровуванні шифротекст насамперед піддається вхідному перетворенню за участю фрагмента розширеного ключа K 2 R + 1 {\displaystyle K_{2R+1}} , що інверсно вихідному перетворенню при зашифровуванні: даних № 1, 4, 5 і 8 обробляються операцією XOR;[2]

інші байти обробляються операцією віднімання: y = x − k  mod  256 {\displaystyle y=x-k{\mbox{ mod }}256} , де y {\displaystyle y} – вихідний байт; x {\displaystyle x} – вхідний байт; k {\displaystyle k} – відповідний байт фрагмента ключа, що накладається [2].

Загальна схема дешифрування алгоритмом SAFER K-64

Після цього виконується R раундів розшифровування, у кожному з яких виконуються наступні дії:

  1. Три рівні зворотного псевдоадамарового перетворення IPНТ (Inverse РНТ), яке визначається таким чином: y 1 = ( x 1 − x 2 )  mod  256 {\displaystyle y_{1}=(x_{1}-x_{2}){\mbox{ mod }}256} та y 2 = ( − x 1 + 2 x 2 )  mod  256 {\displaystyle y_{2}=(-x_{1}+2x_{2}){\mbox{ mod }}256} . Між рівнями перетворень ІРНТ виконується перестановка байтів наведена на рисунку, яка зворотна перестановці, що використовувалася при зашифровуванні.
    Перестановка байтів даних між перетвореннями IPHT
  2. Зворотне друге накладення ключа: на дані накладається 8-байтний фрагмент розширеного ключа K 2 R + 2 − 2 i {\displaystyle K_{2R+2-2i}} . Байти ключа № 2, 3, 6 і 7 накладаються на аналогічні байти даних за допомогою операції XOR; для накладення інших байтів ключа використовується описана вище операція віднімання.
  3. Зворотне нелінійне перетворення: байти даних № 1, 4, 5 і 8 обробляються операцією L; інші байти обробляються операцією E.
  4. Зворотне перше накладення ключа, повністю аналогічне описаному вище вхідному перетворенню; тут використовується фрагмент розширеного ключа K 2 R + 1 − 2 i {\displaystyle K_{2R+1-2i}}

Як видно, при розшифровуванні відбувається виконання зворотних операцій у зворотному порядку. Перетворення ІРНТ також може бути замінено множенням на матрицю M − 1 {\displaystyle M^{-1}} (аналогічно описаному вище для РНТ[2]).

Матриця для дешифрування як заміна операції IPHT
1 -1 -1 1 -1 1 1 -1
-1 1 1 -1 2 -2 -2 2
-1 2 1 -2 1 -2 -1 2
1 -2 -1 2 -2 4 2 -4
-1 1 2 -2 1 -1 -2 2
1 -1 -2 2 -2 2 4 -4
1 -2 -2 4 -1 2 2 -4
-1 2 2 -4 2 -4 -4 8

Примітки

  1. ↑ а б Mukherjee S., Ganguly D., Naskar S. A New Generation Cryptographic Technique // IJCTE — Singapore: 2009. — Vol. 1, Iss. 2. — P. 284–287. — ISSN 1793-8201; 1793-8201 — doi:10.7763/IJCTE
  2. ↑ а б в г д е ж и Панасенко, С. П. (2009). Алгоритмы шифрования. Специальный справочник. СПб.: БХВ-Петербург. с. 576. ISBN 978-5-9775-0319-8.

Джерело: стаття у Вікіпедії та історія редагувань (автори).