![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Шифр множення матриць.
Шифр множення матриць використовує перетворення Y=C·X, де X – вектор-стовпчик числових кодів знаків відкритого тексту, C – квадратна ключ-матриця, Y – вектор-стовпчик числових символів кріптограми. Даний шифр є блоковим. Розмір блоку відкритого тексту співпадає з порядком n матриці C, який має бути не меншим двох, тобто n ³ 2. Внаслідок перетворення утворюється блок кріптограми такого ж розміру. Зрозуміло, що чим більший порядок матриці C, тим складніше кріптографічне перетворення і тим більша стійкість шифру. Наприклад, для алфавіту “АБВГДЕЖЗИК” обсягом m=10 таблиця числових кодів знаків має наступний вигляд: Виберемо ключем квадратну матрицю Зашифруємо відкритий текст “КВАД”, для якого відповідна послідовність числових кодів знаків має вигляд (9, 2, 0, 4): Враховуючи, що величина елементів ключ-матриці та числових кодів знаків така, що не приводить до появи більш як двозначних символів, отриману кріптограму можна представити у вигляді “20420412”. Для дешифрування кріптограм застосовується перетворення Отримуємо дешифровану послідовність кодів знаків відкритого тексту: (9, 2, 0, 4) тобто “КВАД”.
Шифр скалярних добутків Нагадаємо, що скалярним добутком двох ненульових векторів Кожний знак відкритого тексту si представимо у вигляді n-розрядного двійкового числа Тепер кожний символ кріптограми можна отримувати шляхом обчислення скалярного добутку si× K. Побудуємо, наприклад, шифрувальну таблицю для алфавіту “ABCDEFGH” обсягом m=8.При алфавіті указаного обсягу для кодування кожного знаку достатньо трьох двійкових розрядів. Оскільки кожний знак відкритого тексту представлено у вигляді трьохрозрядного двійкового числа, то і ключ-вектор теж виберемо трьохкоординатним, наприклад, K = {5, 1, 3}. Для такого ключ-вектора маємо наступні результати обчислень: Остаточно шифрувальна таблиця набуває наступного вигляду: У відповідності з наведеним прикладом шифрувальної таблиці, відкритий текст GEAD (двійковий код 110100000011) шифрується як “6504”. Дешифрування кріптограм здійснюється за цією ж шифрувальною таблицею.
Афінна система моноалфавітної заміни Афінна система моноалфавітної заміни вигідно відрізняється від замін Цезаря. Вона дозволяє добитись суттєвої відмінності порядку слідування знаків вторинного алфавіту у порівнянні з первинним. Афінна система моноалфавітної заміни використовує модулярну арифметику. Її загальна формула має вигляд · jx – порядковий номер знака відкритого тексту в алфавіті, · jy – порядковий номер знака кріптограми в алфавіті, · m – обсяг алфавіту, · a, b – ключ заміни, який являє собою пару цілих числа, що задовольняють умовам 0 ≤ a < m і 0 ≤ b < m. Для побудови шифрувальної таблиці цю формулу застосовують послідовно до кожного знаку алфавіту. При цьому указане кріптографічне перетворення є взаємно однозначним на даному алфавіті тільки при умові, що числа a і m – взаємно прості, тобто їх найбільший спільний дільник рівний одиниці НСД(a, m) = 1. Побудуємо, наприклад, шифрувальну таблицю для алфавіту “АБВГДЕЖЗИК” обсягом m=10, використовуючи ключ (a, b) = (7, 2). При цьому всі указані вище умови виконуються, в тому числі НСД(7, 10) = 1. Шифрувальна таблиця набуває наступного вигляду: У відповідності з наведеним прикладом шифрувальної таблиці, відкритий текст ЖАЖДА шифрується як ДВДАВ. Дешифрування кріптограм здійснюється за цією ж шифрувальною таблицею.
Шифр Вижинера використовує модулярну арифметику. У загальному випадку застосування шифру Вижинера полягає в наступному. Розглянемо алфавіт відкритого тексту A=(a0, a1, a2,..., am-1), що містить m знаків. Розглянемо ключ K=(k0, k1, k2,..., kn-1), знаки якого випадковим способом вибрано із алфавіту A. Довжина ключа n рівна довжині відкритого тексту X=(x0, x1, x2,..., xn-1). Накладемо ключ на відкритий текст. Розглянемо деякий знак xp, p=0, 1, 2,..., n-1 відкритого тексту X. Він має порядковий номер i в алфавіті A. Розглянемо також відповідний знак ключа kp. Він має в алфавіті A порядковий номер j. Тоді знак xp відкритого тексту перетворюється у знак кріптограми yp у відповідності з правилом yp=a(i+j) mod m. Наприклад, для алфавіту “abcd” обсягом m=4 таблиця порядкових номерів знаків відкритого тексту має наступний вигляд: Зашифруємо відкритий текст “addcbdc” за допомогою ключа “cbccddb” тієї ж самої довжини. Ще раз підкреслимо, що і знаки відкритого тексту, і знаки ключа вибрано із одного й того ж алфавіту. Процес застосування шифру Вижинера можна представити у вигляді наступної таблиці Таким чином, отримуємо кріптограму “cabaacd”. Для дешифрування кріптограм необхідно спочатку отримати відповідний ключ. Тут застосовується дуже просте правило: якщо деякий знак ключа шифрування має порядковий номер j у складі алфавіту A, то відповідний знак ключа дешифрування знаходиться в тому ж алфавіті під номером (m-j) mod m. Для прикладу ключ шифрування “cbccddb” перетворимо у відповідний ключ дешифрування при умові, що використовується той же алфавіт Таким чином, отримуємо ключ дешифрування “cdccbbd”. Тепер дешифрування кріптограми можна здійснити у точно такий же спосіб, як і шифрування відкритого тексту. Наприклад, для того ж самого алфавіту дешифруємо кріптограму “cabaacd”. Таким чином, отримуємо відкритий текст “addcbdc”.
|