Loading AI tools
З Вікіпедії, вільної енциклопедії
MARS — шифр-кандидат в AES, розроблений корпорацією IBM, яка створила у свій час DES. За заявою IBM, в алгоритм MARS вкладено 25-річний криптоаналітичний досвід фірми, і поряд з високою криптографічною стійкістю шифр допускає ефективну реалізацію навіть в таких обмежених рамках, які характерні для смарт-карт.
Розробники | Керолін Барвік, Дон Копперсміт (IBM) |
---|---|
Уперше оприлюднений | 1998 р. |
Раундів | 32 |
Тип | Мережа Фейстеля |
У розробці шифру взяв участь Дон Копперсміт, один з авторів шифру Lucifer (DES), відомий низкою статей по криптології: поліпшення структури S-блоків проти диференціального криптоаналізу, метод швидкого перемножування матриць (алгоритм Копперсміта — Винограду), криптоаналіз RSA. Крім нього в розробці алгоритму взяли участь: Керолін Барвік, Едвард Д'Евіньон, Росаріо Женаро, Шай Халеві, Чаранжіт Джутла, Стівен M. Матьяс Мол., Люк О'Коннор, Мохамед Пер'євян, Девід Саффорд, Невенко Зуніч.
За правилами конкурсу AES, учасники могли вносити незначні зміни у свої алгоритми. Скориставшись цим правилом, автори MARSa змінили процедуру розширення ключа, що дозволило знизити вимоги до енергонезалежної і оперативної пам'яті. Нижче буде надана модифікована версія алгоритму.
За результатами конкурсу AES, MARS вийшов у фінал, але поступився Rijndael. Після оголошення результатів (19 травня 2000 року) група розробників склала свою власну думку про конкурс AES[1], де дала коментарі на претензії до свого дітища.
Зараз MARS поширюється по всьому світу під Royalty Free ліцензією.
MARS є блочно-симетричним шифром з відкритим ключем. Розмір блоку при шифруванні 128 біта, розмір ключа може варіюватися від 128 до 448 біт включно (кратні 32 бітам). Творці прагнули поєднати в своєму алгоритмі швидкість кодування і стійкість шифру. В результаті вийшов один з самих криптостійкий алгоритм з алгоритмів, які брали участь в конкурсі AES.
Алгоритм унікальний тим, що використовував практично всі існуючі технології, застосовувані в криптоалгоритмах, а саме:
Використання подвійного перемішування представляє складність для криптоаналіз а, що деякі відносять до недоліків алгоритму. У той же час на даний момент не існує будь-яких ефективних атак на алгоритм, хоча деякі ключі можуть генерувати слабкі підключі.
Автори шифру виходили з наступних припущень:
У шифрі MARS використовувалися такі методи шифрування:
Структуру алгоритму MARS можна описати таким чином:
У першій фазі на кожне слово даних накладається слово ключа, а потім відбувається вісім раундів змішування згідно з мережею Фейстеля третього типу спільно з деякими додатковими змішування. У кожному раунді ми використовуємо одне слово даних (зване, вихідним словом) для модифікації трьох інших слів (звані, цільовими словами). Ми розглядаємо чотири байта вихідного слова як індексів на двох S-блоків, S 0 і S 1 , кожен, що складається з 256 32-розрядних слів, а далі проводимо операції XOR або додавання даних відповідного S-блоку в три інших слова.
Якщо чотири байти вихідного слова b 0 , b 1 , b 2 , b 3 (де b 0 є першим байтом, а b 3 є старшим байтом), то ми використовуємо b 0 , b 2 , як індекси в блоку S 0 і байти b 1 , b 3 , як індекси в S-блоці S 1 . Спочатку зробимо XOR S 0 до першого цільовим речі, а потім додамо S 1 до того ж слова. Ми також додаємо S 0 до другого цільовим слову і XOR блоку-S 1 до третього цільовим слову. У висновку, ми обертаємо вихідне слово на 24 біта вправо.
У наступному раунді ми обертаємо наявні у нас чотири слова: таким чином, нинішні перші цільове слово стає наступним вихідним словом, поточним другий цільове слово стає новим першим цільовим словом, третє цільове слово стає наступний другий цільовим словом, і поточне вихідне слово стає третім цільовим словом.
Більш того, після кожного з чотирьох раундів ми додаємо одне з цільових слів назад у вихідне слово. Зокрема, після першого і п'ятого раундів ми додав третю цільове слово назад у вихідне слово, а після другого і шостого раунду ми додаємо першої цільової слово назад у вихідне слово. Причиною цих додаткових операцій змішування, є ліквідація декількох простих диференціальних криптоатаки в фазі перемішування, щоб порушити симетрію у фазі змішування та отримати швидкий потік.
1. // Перше накладення ключа на дані 2. 3. 4. // Потім 8 раундів прямого перемішування 5. // використовуємо D [0] для модифікування D [1]; D [2]; D [3] 6. // Звертаємося до 4-ем S-блокам 7. 8. 9. 10. 11. // І обертаємо вихідне слово вправо 12. 13. // Також проробимо додаткові операції змішування 14. 15. / / додамо D [3] до вихідного слова 16. 17. / / додамо D [1] до вихідного слова 18. // Обертаємо масив D [] 19. 20.
Криптографічне ядро MARS — мережа Фейстеля 3-го типу, що містить в собі 16 раундів. У кожному раунді ми використовуємо ключову Е-функцію, яка є комбінацією множень, обертань, а також звернень до S-блоків. Функція приймає на вхід слово даних, а повертає три слова, з якими згодом буде здійснена операція додавання або XOR до інших трьох слів даними. У доповненні вихідне слово обертається на 13 біт вліво.
Для забезпечення, серйозного опору до криптоатаки, три вихідних значення Е-функції (O 1 , O 2 , O 3 ) використовуються в перших восьми раундах і в останніх восьми раундах в різних порядках. У перші вісім раундів ми додаємо O 1 і O 2 до першого і другого цільовим речі, відповідно, і XOR O 3 у третьому цільовим слову. За останні вісім раундів, ми додаємо O 1 і O 2 до третього і другого цільовим речі, відповідно, і XOR O 3 до першого цільовим слову.
1. // Проробимо 16 раундів шифрування при використанні ключа 2. 3. 4. 5. 6. // спочатку 8 раундів прямого перетворення 7. 8. 9. // потім 8 раундів зворотного перетворення 10. 11. 12. 13. // Обертаємо масив D [] 14. 15.
E-функція приймає як вхідні дані одне слово даних і використовує ще два ключових слова, виробляючи на виході три слова. У цій функції ми використовуємо три тимчасові змінні, що позначаються L, M і R (для лівої, середньої та правої).
Спочатку ми встановлюємо в R значення вихідного слова зміщеного на 13 біт вліво, а в M — сума вихідних слів і першого ключового слова. Потім ми використовуємо перші дев'ять бітів M як індекс до однієї з 512 S-блоків (яке виходить суміщенням S 0 і S 1 змішуванням фази), і зберігаємо в L значення відповідного S -блоку.
Потім помножимо друге ключове слово на R, зберігши значення в R. Потім обертаємо R на 5 позицій вліво (так, 5 старших бітів стають 5 нижніми бітами R після обертання). Тоді ми робимо XOR R в L, а також переглядаємо п'ять нижніх біт R для визначення величини зсуву (від 0 до 31), і обертаємо M вліво на цю величину. Далі ми обертаємо R ще на 5 позицій вліво і робимо XOR в L. У висновку, ми знову дивимося на 5 молодших бітів R, як на величину обертання і обертаємо L на цю величину вліво. Таким чином результат роботи E-функції — 3 слова (по порядку): L, M, R.
1. // Використовуємо 3 тимчасові змінні L; M; R 2. // додаємо першим ключовим словом 3. / / множимо на друге ключове слово, яке повинно бути парним 4. 5. // взяття S-блоку 6. 7. // ці біти описують величину подальшого обертання 8. // перша обертання на змінну величину 9. 10. 11. 12. // ці біти описують величину подальшого обертання 13. // Друга обертання на змінну величину 14.
Зворотне перемішування практично збігається з прямим перемішуванням, за винятком того факту, що дані обробляються в зворотному порядку. Тобто, якби ми поєднали пряме і зворотне перемішування так, щоб їх виходи і входи були б з'єднані в зворотному порядку (D[0] прямого і D[3] зворотного, D[1] прямого і D[2] зворотного), то не побачили б результату перемішування. Як і в прямому змішування, тут ми теж використовуємо одне вихідне слово і три цільових. Розглянемо чотири перших байта вихідного слова: b 0 , b 1 , b 2 , b 3 . Будемо використовувати b 0 , b 2 як індекс до S-блоку — S 1 , а b 1 b 3 для S 0 . Зробимо XOR S 1 [b 0 ] в перше цільове слово, віднімемо S 0 [b 3 ] з другого слова, віднімемо S 1 [b 2 ] з третього цільового слів і потім проробимо XOR S 0 [b 1 ] також до третього цільового слова. Нарешті, ми повертаємо початкове слово на 24 позицій вліво. Для наступного раунду ми обертаємо наявні слова так, щоб нинішнє перше цільове слово стало наступним вихідним словом, поточне друге цільове слово стало першим цільовим словом, поточне третє цільове слово стало другим цільовим словом, і поточне вихідне слово стало третім цільовим словом. Крім того, перед одним з чотирьох «особливих» раундів ми віднімаємо одне з цільових слів з вихідного слова: перед четвертим і восьмим раундами ми віднімаємо першої цільової слово, перед третьому і сьомим раундами ми віднімемо третя цільова слово з вихідного.
1. // Проводимо 8 раундів зворотного перемішування 2. 3. // Додаткові операції змішування 4. 5. // віднімаємо D [3] з вихідного слова 6. 7. // віднімаємо D [1] з вихідного слова 8. // Звертаємося до чотирьох елементів S-блоків 9. 10. 11. 12. 13. // І обертаємо вихідне слово вліво 14. 15. // Обертаємо масив D [] 16. 17. 18. / / Віднімаємо ключове слово 19. 20.
Процес декодування обернений процесу кодування. Код дешифрування схожий (але не ідентичний) на код шифрування.
1. // Початкове накладення ключа 2. 3. 4. // Потім проводимо 8 раундів прямого перемішування 5. 6. // Обертаємо масив D [] 7. 8. // І обертаємо вихідне слово вправо 9. 10. / / Звертаємося до 4-ем елементам S-блоків 11. 12. 13. 14. 15. // Додаткове змішування 16. 17. // додаємо D [3] до вихідного слова 18. 29. // додаємо D [1] до вихідного слова 20.
1. // Проведемо 16 раундів при використання накладення ключа 2. 3. // Обертаємо масив D [] 4. 5. 6. 7. 8. // останні 8 раундів в прямому порядку 9. 10. 11. // перші 8 раундів у зворотному порядку 12. 13. 14. 15.
1. // Проводимо 8 раундів зворотного перемішування 2. 3. // Обертаємо масив D [] 4. 5. // Додаткові операції переммешіванія 6. 7. // віднімаємо D [3] з вихідного слова 8. 9. // віднімаємо D [1] з вихідного слова 10. // Обертаємо вихідне слово вліво 11. 12. // Звертаємося до чотирьох елементами S-блоків 13. 14. 15. 16. 17. 18. // Віднімання підключа з даних 19. 20.
При створенні S-блоку S, його елементи генерувалися псевдовипадкових генератором, після чого тестувалися на різні лінійні і діффіренціальние властивості. Псевдовипадкові S-блоки були згенеровані при наступних параметрах:
(Де — є j-е слово на виході SHA-1) Тут вважається, що i — 32-бітове без знакове, ціле число, а c1, c2, c3 є деякі константи. У реалізації IBM: c1 = 0xb7e15162; c2 = 0x243f6a88 (які є двійковій записом дробової частини і відповідно). c3 змінювалося поки не були підібрані S-блоки з відповідними властивостями. SHA-1 працює над потоками даних і використовує прямий порядок байт.
Диференціальні властивості.
Вимога № 4 не виконувалося в реалізації IBM для AES, але було виправлено відразу після фіналу. Було відмічено, що в S-блоках присутні наступні елементи, які суперечать цій вимозі[3]:
XOR | Віднімання |
---|---|
Лінійні властивості
процедура розширення ключа розширює заданий масив ключів k [], що складається з n 32-бітових слів (де n ціле число від 4 до 14) в масив K [] з 40 елементів. Вихідний ключ не повинен дотримуватися будь-якої структури. На додаток, процедура розширення ключа гарантує такі властивості ключового слова, використовуваного при перемножуванні в криптографічному ядрі алгоритму:
Опишемо алгоритм розширення ключа.
Шифр був кандидатом AES, після невеликих змін в ході першого раунду конкурсу, пов'язаних зі зміною процедури розширення ключа, MARS успішно пройшов у фінал.
У фіналі конкурсу у MARS був виділений цілий ряд недоліків:
На всі ці недоліки експертна комісія виділила одне велике достоїнство даного алгоритму — його симетричність. Виходячи з виділених недоліків, MARS очікувано не став переможцем AES.
Після оголошення результатів конкурсу AES, група творців MARS випустила свою рецензію на весь конкурс. У ній були поставлені під сумнів критерії оцінки конкурсу. Вони вважали, що головною характеристикою шифру повинна бути саме надійність і його стійкість (наприклад, до brute-force атакам) Крім того вони відповіли на кожну претензію з боку журі до свого алгоритму.
1. MARS не підходить для апаратної реалізації Серед претензій до шифру були його важка апаратна реалізація, яка могла спричинити за собою ускладнення роботи Інтернету, а також впровадження великих, за своїми розмірами, схем.
2. MARS не підходить для реалізації на пристроях з малою пам'яттю Для реалізації на SMART картах є у алгоритмів є всього 128 байт пам'яті. Для процедури розширення ключа MARS вимагає 512 байт.
3. MARS не підходить для реалізації на ППВМ MARS не підходить для реалізації на платформах, де не дозволено обертання (залежать від сторонніх чинників).
4. Розширення ключа MARS є дуже важкою операцією
У висновку розробники приводять свій аналіз алгоритмів учасників AES, за результатами якого MARS, поряд з Serpent, був найкращим кандидатом на звання AES.[1]
В даний час немає ефективних атак на даний алгоритм. Хоча у нього є кілька слабких сторін[1]:
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.