Алгоритм Енігми

У даному співтоваристві я знайшов багато статей про відому шифрувальну машинку «Enigma», але ніде з них не описувався докладний алгоритм її роботи. Напевно багато скажуть, що це не потребує афішування, — я ж сподіваюся, що комусь та буде корисно про це дізнатися. З чого все почалося? У часи першої світової війни великою популярністю користувався шифр Playfair. Його суть полягала в тому, що букви латинського алфавіту записувалися в квадрат 5х5, після чого літери початкового алфавіту розбивалися по парам. Далі, використовуючи квадрат в якості ключа, ці біграми замінювали на інші за певним алгоритмом. Перевага даного шифру було в тому, що він не вимагав додаткових пристроїв, і, як правило, до того моменту, коли повідомлення розшифровували, воно вже втрачало актуальності. Ще одним способом тайнопису був шифратор Джефферсона.
 
 image
 
Се пристрій складався з певної кількості дисків, нанизаних один на одного (зазвичай, їх було 36). Кожен з них ділився на 26 частин, кожна з яких позначало букву. Літери на дисках були розставлені у випадковому порядку. Оператор шляхом обертання дисків набирав потрібне повідомлення, а потім переписував інший рядок. Людина, що прийняв дане повідомлення, повинен був володіти точно таким же пристроєм з точно такою ж розстановкою букв. І той і інший способи були відносно непоганими для тих часів, але враховуючи, що людство вступило вже в XX століття, виникла необхідність механізації процесу шифрування. У 1920 році голландський винахідник Олександр Кох винайшов першу роторну шифрувальну машинку. Потім, на неї отримали патент німецькі винахідники, які вдосконалили її і випустили у виробництво, під назвою «Enigma» (від грец. — Загадка). Таким чином, ця машинка купувалася багатьма фірмами, які бажали зберегти в таємниці свої переписки. У цьому й полягала вся геніальність Енігми — все знали алгоритм шифрування, але ніхто не міг підібрати потрібний ключ, так як число можливих комбінацій перевершувало 15 квадрильйонів. Якщо хочете дізнатися, яким чином Енігму зламували, раджу прочитати книгу Саймона Сінгха «Книга шифрів». Підсумовуючи все вищесказане, хочу сказати, що шифр Енігми був якоюсь сумішшю шифратора Джефферсона і шифру Цезаря.
 
Отже, приступимо до вивчення алгоритму. На даному сайті існує дуже непоганий симулятор, який в доступній і наочній формі показує весь процес цілком і повністю. Давайте ж розберемо принцип роботи Трироторна Енігми. У ній було три відсіки для приміщення трьох роторів і додатковий відсік для розміщення рефлектора. Всього за час Другої світової війни було виготовлено вісім роторів і чотири рефлектора, але одночасно могло використовуватися рівно стільки, на скільки була розрахована машина. Кожен ротор мав 26 перетинів, що відповідало окремої букві алфавіту, а так само 26 контактів для взаємодії з сусідніми роторами. Як тільки оператор натискав на потрібну букву, — замикалася електричний ланцюг, в результаті чого з'являлася шифрована буква. Замикання ланцюга відбувалося за рахунок рефлектора.
 
 image
 
На малюнку представлена ​​ілюстрація натискання клавіші «А» з подальшою дешифрацией в букву «G». Після введення літери крайній правий ротор переміщався вперед, змінюючи тим самим ключ. Так яким же чином одна букву замінювалося на іншу? Як я вже говорив, для Енігми було розроблено вісім різних роторів. Усередині кожного з них було встановлено 26 різних комутацій. Тут представлена ​​докладна специфікація на кожен з них. Наприклад, якщо на вхід першого ротора надходила буква «N», то на виході повинна бути тільки «W» і ніяка інша буква більше. Влуч це буква на другий ротор, вона б уже перетворилася в «T» і т.д. Тобто, кожен ротор виконував чітко поставлене завдання в плані комунікації. А яку ж роль грали кільця? Розглянемо наступний приклад. Встановимо ротори III, II і I, а порядок кілець «C», «U» і «Q».
 
 image
 
Натиснемо на клавішу «A». Крайній правий ротор повернеться вперед на один крок, тобто, буква «Q» перейде в «R». Ротор посередині також повернеться вперед на букву «V», але про це я розповім трохи пізніше. Отже, наша літера «А» починає подорож з першого відсіку, в якому встановлений ротор I і на якому виставлена ​​вже буква «R». Вже перед тим як потрапити на перший ротор буква зазнає своє перше перетворення, а саме: додавання з буквою «R» за модулем 26. Фактично, це шифр Цезаря. Якщо пронумерувати всі букви від 0 до 26, то літера «А» буде як раз таки нульовий. Значить, результатом складання буде буква «R». Далі, ми з вами знаємо, що в першому відсіку ротор I, а в його конструкції закладено, що буква «R» завжди переходить в «U». Тепер на черзі другий відсік з ротором II. Знову, перед попаданням на другому ротор, тепер уже буква «U» змінюється по кілька іншому алгоритму: до неї додається різниця значень подальшого ротора і попереднього. Поясню. На другому роторі очікує нас буква «V», а на попередньому, — «R», їх різниця дорівнює чотирьом буквах, і саме вони додаються до нашої букві «U». Тому, на другому ротор надходить буква «Y». Далі по таблиці знаходимо, що в другому роторі букві «Y» відповідає «O». Далі знову дивимося різницю букв «C» і «V», — вона дорівнює семи. Значить, букву «O» зсуваємо на сім позицій і отримуємо «V». У роторі III «V» переходить в «M». Перед тим як потрапити на рефлектор, з нашої літери віднімається буква «C», перетворюючи її в букву «K». Далі відбувається відображення. Якщо ви помітите, то в кожному роторі утворюються великі циклічні групи, наприклад: (A — E — L — T — P — H — Q — X — R — U), а в рефлекторі вони розбиті по парах: (A — Y) (B — R) (C — U) і т.д. Це зроблено для того, щоб потім це можливо було розшифрувати. Припустимо, що встановлений рефлектор B, в якому «K» замінюється на «N» (і навпаки). Половина шляху пройдена. Тепер ми знову додаємо значення літери «С», отримавши тим самим букву "P". Тут навпаки, в рядку третього ротора знаходимо «P» і дивимося, в при натисканні якої літери вона б з'явилася. Це буква «H». Перетворення в третьому роторі закінчено. Тепер з цієї букви віднімається різниця букв «C» і «V», тобто сім. Отримуємо букву «A». У другому роторі вона переходить саму в себе, тому залишаємо її без змін. Далі, віднімаємо різницю букв «C» і «V», тобто четвірку і отримуємо букву «W». У першому роторі її назад перетворення відображається в букву «N». Залишається тільки відняти з неї букву «R» і отримаємо шукану букву «W». Як бачите, алгоритм роботи машинки виявився не таким складним яким здавався. Для удосконалення шифру німці запровадили коммутационную панель, яка дозволяла попарно міняти місцями літери. Якщо ми з'єднаємо літери «Q» і «W», то при введенні тієї ж «A» іи отримали б «Q», так як за фактом повинна бути «W», але вона замінена літерою «Q».
 
Залишилося лише розповісти про зміщення роторів відносно один одного. Правий ротор повертався завжди при натисканні клавіші на один крок. Наприклад, для ротора I ця позиція дорівнює букві «R». Саме тому в нашому прикладі другий ротор повернувся: перший ротор пройшов через букву «R». Далі, пройшовши через певну позицію, правий ротор приводив у рух лівий на один крок. У більш вдосконалених моделях лівий ротор прокручувався два, а то й три рази.
 
На завершення скажу, що тут зібрані деякі матеріали по злому Енігми, які можуть бути корисні. Сподіваюся, що дана стаття кому-небудь знадобиться.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.