Шифр Віженера
Шифр Віженера — відомий шифр, що використовує кілька шифрувальних алфавітів, завдяки чому він набагато стійкіший до класичного частотного аналізу.
Принцип шифрування й дешифрування
Процес шифрування можна пояснити за допомогою шифру Цезаря. Ключем шифру Віженера є будь-яке слово, що складається з літер англійського алфавіту, тобто a—z. Ключем може бути, наприклад, слово «bcf». Шифрування відбувається так: записуємо відкритий текст, а просто під ним — ключ, який повторюємо доти, доки він не стане такої самої довжини, як відкритий текст. Шифр працює з латинським алфавітом, тому українські слова записуємо латинкою. Для відкритого тексту «dobryivechir» («добрий вечір») це виглядало б так:
| Відкритий текст: | d | o | b | r | y | i | v | e | c | h | i | r |
| Ключ: | b | c | f | b | c | f | b | c | f | b | c | f |
Тепер усі літери відкритого тексту зашифруємо за допомогою шифру Цезаря з відповідним ключем, тобто з ключем у тому самому стовпчику. Шифр Цезаря — це шифр зсуву: ключ показує, на скільки літер потрібно зсунути літеру відкритого тексту, рахуючи від літери «a». Літера «b», наприклад, означає зсув на одну літеру алфавіту «праворуч». Літера «d» означає зсув на три літери праворуч. Слово «pryvit» шифром Цезаря з ключем «b» ми зашифрували б у «qszwju».
Якщо в шифрі Цезаря ми шифруємо весь текст однією літерою, то в шифрі Віженера зазвичай шифруємо кількома літерами. Шифрування тексту «dobryivechir» з ключем «bcf» виглядало б так:
| Відкритий текст: | d | o | b | r | y | i | v | e | c | h | i | r |
| Ключ: | b | c | f | b | c | f | b | c | f | b | c | f |
| Шифрований текст: | e | q | g | s | a | n | w | g | h | i | k | w |
Першу літеру «d» ми шифрували з ключем «b», тобто зсув на одну літеру, тому результат — літера «e». Літеру «o» ми шифрували з ключем «c», тобто зсув на дві літери, результат — літера «q». І так далі.
Дешифруємо цілком так само, лише замість того, щоб зсувати літери «праворуч», зсуваємо їх «ліворуч».
Онлайн-інструмент для шифрування й дешифрування шифром Віженера
Квадрат Віженера
Увесь процес шифрування й дешифрування можна також пояснити на квадраті Віженера — це допоміжна таблиця, якою можна користуватися під час шифрування. Квадрат Віженера — це таблиця з 26 рядків і 26 стовпців. У кожному рядку записано алфавіт, причому в кожному наступному рядку він зсунутий на одну літеру:
Якщо маємо такий квадрат Віженера, шифрування відбувалося б так: беремо літеру з відкритого тексту й знаходимо рядок із цією літерою. Потім беремо літеру з ключа й знаходимо стовпчик. Літерою шифрованого тексту буде літера на перетині відповідного рядка й стовпця.
У попередньому прикладі ми шифрували «dobryivechir» з ключем «bcf». Отже, знаходимо рядок, що починається з «d», і стовпчик, що починається з «b». На перетині цього рядка й стовпця стоїть літера «e» — отримана літера шифрованого тексту.
Під час дешифрування діяли б навпаки. Якби ми хотіли дешифрувати літеру «e» з ключем «b», то знайшли б стовпець «b», у ньому знайшли б рядок, що містить літеру «e», а літера на початку цього рядка і була б літерою відкритого тексту.
Головна сила шифру Віженера
Чому шифр Віженера свого часу був таким сильним? Тому що він значно ускладнював класичний частотний аналіз. Наприклад, у шифрі Цезаря дві однакові літери відкритого тексту шифруються в однакові літери шифрованого тексту. Але в шифрі Віженера це не так — принаймні не завжди.
Якби ми зашифрували текст «dobre dobre dobre» з ключем «stan», то отримали б шифрований текст «vhbew woojx dbtke». Бачимо, що хоча відкритий текст містить три однакові слова, у шифрованому тексті кожне слово виглядає зовсім по-іншому. Середнє слово «woojx» навіть містить дві літери «o», які, однак, утворилися з двох різних літер відкритого тексту: «ob».
Вибір ключа
Безпека шифру Віженера дуже залежить від вибору ключа. Якщо в шифрі Цезаря було байдуже, яку літеру обрати, аби вона відрізнялася від «a», то в шифрі Віженера різні ключі дають різну міцність шифру.
- Ключ, що складається лише з однієї літери, зводить шифр Віженера назад до шифру Цезаря.
- Ключ, що складається з кількох однакових літер, наприклад «mmm», знову призведе до шифру Цезаря.
- Текст, зашифрований коротким ключем, буде дуже легко розшифрувати.
- Досить довгий шифрований текст, зашифрований не надто коротким ключем (близько п'ятдесяти знаків), також буде дуже легко розшифрувати. На комп'ютері — за лічені секунди.
- Текст, зашифрований ключем, який цілком випадковий і має таку саму довжину, як сам текст, розшифрувати неможливо.