Індекс збігів — один з методів криптоаналізу шифру Віженера. Опис опублікував Вільямо Фрідман в 1920 році.
Метод ґрунтується на обчисленні ймовірності того, що два випадкові елементи тексту збіжаться. Цю ймовірність називають індексом збігів. Вільям Фрідман показав, що значення індексу збігів суттєво відрізняється для текстів різної природи. Це дозволяє спочатку визначити довжину ключа шифру, а потім знайти й сам ключ.
Поява методу індексу збігів відкрила нові можливості в криптоаналізі шифру Віженера. У порівнянні з поширеним в той час методом Казіскі, новий метод був менш трудомістким, вимагав меншої довжини тексту, був придатніший для автоматизації і менш схильний до помилок. Індекс збігів був ефективнішим і допускав аналіз шифрів з довгими ключами.
Історія
Блез Віженер представив опис простого, але стійкого шифру перед комісією Генріха III у Франції в 1586 році, й пізніше винахід шифру було присвоєно саме йому. Шифр Віженера мав репутацію виключно стійкого до «ручного» злому. Перша успішна атака на шифр Віженер була проведена Фрідріхом Казіскі в 1863 році. Його метод залишався основним методом криптоаналізу шифру Віженера аж до 1920 року, коли Вільям Фрідман опублікував монографію «Індекс збігу і його застосування в криптоаналізі» (англ. «Index of Coincidence and Its Applications in Cryptography»). Новий метод, описаний Фрідманом, пропонував більш ефективний і стійкий до помилок спосіб визначення довжини ключа. Метод індексу збігів отримав широке застосування. Пізніше він став використовуватися в криптоаналізі з допомогою машин.
Метод криптоаналізу шифру Віженера
Шифр Віженера є поліалфавітним шифром. Його криптоаналіз можна розбити на 2 етапи:
- Спочатку намагаються визначити довжину ключа. Довжина ключа задає кількість використовуваних алфавітів і період шифрування цими алфавітами. Тому на цьому етапі досліджується періодичність шифротекста;
- Після того, як знайдена довжина, приступають до пошуку конкретного виду ключа. Для цього обчислюють відносні зрушення, використовуваних алфавітів, а потім підбирають ключ перебором.
Індекс збігів
Нижче наведено формули для обчислення індексу збігів. Спочатку розглядається загальний випадок. Потім розглядаються кілька приватних випадків, у яких індекс збігів можна оцінити без аналізу тексту.
Загальний випадок
Розглянемо текст, написаний деякою мовою. Алфавіт мови будемо вважати що складається з символів. Розглянемо досить довгий рядок із символів. Індексом збігу називають імовірність збігу двох довільних символів в рядку. Якщо — кількість -го символу алфавіту в рядку , то індекс збігу обчислюється за формулою:
-
Доведення
Будемо оцінювати вірогідність як відношення сприятливих результатів (кількість пар однакових символів в рядку) до загальної кількості випадків (кількість різних пар символів в рядку).
Кількість разних пар -ого символу в рядку дорівнює:
Кількість пар однакових символів в рядку:
Число різних пар символів в рядку:
Звідси отримуємо:
Відкритий текст
Припустимо, рядок є відкритим текстом або отриманий з нього простою перестановкою. У цьому випадку індекс збігів зручно виразити через ймовірності появи -го символу. Позначимо їх . Тоді отримаємо наступну формулу:
-
Оскільки величини мають цілком певні значення, то для відкритого тексту індекс збігів не залежить від його змісту, а залежить тільки від мови, якою написаний текст. До того, значення досліджено і відоме, що дозволяє розрахувати значення індексу збігів відкритого тексту для різних мов.
Випадковий рядок
Нарешті, нехай — випадковий рядок. Тоді ймовірність появи кожного символу дорівнює
Використовуючи формулу , отримаємо:
-
Цією формулою можна користуватися для оцінки індексу збігів поліалфавітного шифру. Для англійської мови індекс збігів поліалфавітного шифру складе 0,03856, для російського (без букви «ё») — 0,03125.
Значення індексу збігів для відкритого тексту і для поліалфавітного шифру істотно розрізняються. Це дозволяє, знаючи індекс збігів, визначити, отриманий текст із відкритого простою перестановкою, чи є поліалфавитним шифром.
Взаємний індекс збігів
Загальний випадок
Ще одним важливим поняттям є взаємний індекс збігів.
Розглянемо два рядки і з довжинами і відповідно. Алфавіт, як і колись, складається з символів. Взаємним індексом збігів цих рядків називають імовірність того, що символ, випадково вибраний з першого рядка, збіжиться з випадково вибраними символом другого рядка. Нехай — кількість -го символу алфавіту в першому і другому рядках відповідно. Тоді взаємний індекс збігів буде дорівнювати:
-
Доказ цієї формули аналогічний до доведення формули .
Рядки зі зсувом
Практично важливим для методу індексу збігів є приватний випадок, коли обидва рядки, отримані зрушенням алфавіту відкритого тексту. Позначимо — ймовірності появи -го символу в рядку , — зсув алфавіту рядка щодо алфавіту рядка (вліво). Тоді ймовірності появи -го символу алфавіту в рядку рівні (використовується нумерація алфавіту рядка ). Для взаємного індексу збігів отримуємо наступну формулу:
-
Зауважимо, що так як циклічний зсув, то
та взаємний індекс збігів для зрушень і приймає одне й те ж значення.
Нижче наведені значення взаємного індексу збігів в залежності від зсуву для російської та англійської мов. Значення наведені для зрушень від до . Як згадувалося вище, на основі цих значень взаємний індекс збігів може бути обчислений для будь-якого зсуву.
Для російської мови:
Зсув |
Взаємний індекс
|
0 |
0,0553
|
1 |
0,0366
|
2 |
0,0345
|
3 |
0,0400
|
4 |
0,0340
|
5 |
0,0360
|
6 |
0,0326
|
7 |
0,0241
|
8 |
0,0287
|
9 |
0,0317
|
10 |
0,0265
|
11 |
0,0251
|
12 |
0,0244
|
13 |
0,0291
|
14 |
0,0322
|
15 |
0,0244
|
16 |
0,0249
|
|
Для англійської мови:
Зсув |
Взаємний індекс
|
0 |
0,0644
|
1 |
0,0394
|
2 |
0,0319
|
3 |
0,0345
|
4 |
0,0436
|
5 |
0,0332
|
6 |
0,0363
|
7 |
0,0389
|
8 |
0,0338
|
9 |
0,0342
|
10 |
0,0378
|
11 |
0,0440
|
12 |
0,0387
|
13 |
0,0428
|
|
Зазначимо, що при нульовому зсуві взаємний індекс збігів помітно більший, ніж при ненульових зрушеннях. А значить, по відомому значенню взаємного індексу збігів можна зробити висновок, є зрушення алфавітів рядків нульовим, або немає.
Алгоритм знаходження довжини ключа
Розіб'ємо текст на стовпчики розміру .
-
-
-
-
Якщо кратна довжині ключа, то кожні два елементи тексту, віддалені один від одного на позицій, , зашифровані одним і тим же алфавітом. А це означає, що кожен рядок у виписаній вище таблиці отриманий із відкритого тексту перестановкою. Якщо ж не кратна довжині ключа, то рядки є поліалфавітним шифром.
Раніше було показано, що індекс збігів для перестановки відкритого тексту й для поліалфавитного шифру помітно відрізняється. Таким чином, перебираючи різні значення і обчислюючи для кожного з них індекс збігів, ми можемо виділити ті , які кратні довжині ключа. Визначити довжину ключа за цими даними не становить труда.
Алгоритм знаходження ключа
Припустимо, ми визначили довжину ключа . Знайдемо тепер сам ключ.
Знову випишемо текст у стовпці розміру .
-
-
-
-
Розглянемо два рядки цієї таблиці. Зсунемо алфавіт одного з рядків на символи і обчислимо взаємний індекс збігів отриманих рядків. Оскільки кожен із цих двох рядків отриманий зрушенням алфавіту відкритого тексту, то максимум взаємного індексу збігів буде спостерігатися при нульовому кінцевому відносному зсуві.
Тому застосовується наступний алгоритм: обчислюється взаємний індекс збігів для різних , шукається значення , при якому взаємний індекс збігів максимальний. Тоді початковий відносний зсув рядків буде дорівнювати ( — розмір алфавіту). Обчислюються відносні зрушення між усіма парами рядків. Оскільк зрушення рядків таблиці відповідають зрушенням букв ключа, то залишається перебрати можливих ключів і вибрати з них найбільш правдоподібний.
Приклад використання
Нехай дано деякий текст, зашифрований шифром Віженера. Знайдемо ключове слово і прочитаємо відкритий текст.
влцдутжбюцхъяррмшбрхцэооэцгбрьцмйфктъъюьмшэсяцпунуящэйтаьэдкцибр
ьцгбрпачкъуцпъбьсэгкцъгуущарцёэвърюуоюэкааэбрняфукабъарпяъафкъиьжяффнйо
яфывбнэнфуюгбрьсшьжэтбэёчюъюръегофкбьчябашвёэуъъюаднчжчужцёэвлрнчулб
юпцуруньъшсэюъзкцхъяррнрювяспэмасчкпэужьжыатуфуярюравртубурьпэщлафоуф
бюацмнубсюкйтаьэдйюнооэгюожбгкбрънцэпотчмёодзцвбцшщвщепчдчдръюьскасэг
ъппэгюкдойрсрэвоопчщшоказръббнэугнялёкьсрбёуыэбдэулбюасшоуэтъшкрсдугэфл
бубуъчнчтртпэгюкиугюэмэгюккъъпэгяапуфуэзьрадзьжчюрмфцхраююанчёчюъыхьъ
цомэфъцпоирькнщпэтэузуябащущбаыэйчдфрпэцъьрьцъцпоилуфэдцойэдятррачкубу
фнйтаьэдкцкрннцюабугюуубурьпйюэъжтгюркующоъуфъэгясуоичщщчдцсфырэдщэ
ъуяфшёчцюйрщвяхвмкршрпгюопэуцчйтаьэдкцибрьцыяжтюрбуэтэбдуящэубъибрюв
ъежагибрбагбрымпуноцшяжцечкфодщоъчжшйуъцхчщвуэбдлдъэгясуахзцэбдэулькнъ
щбжяцэьрёдъьвювлрнуяфуоухфекьгцчччгэъжтанопчынажпачкъуъмэнкйрэфщэъьбуд
эндадъярьеюэлэтчоубъцэфэвлнёэгфдсэвэёкбсчоукгаутэыпуббцчкпэгючсаъбэнэфърк
ацхёваетуфяепьрювържадфёжбьфутощоявьъгупчршуитеачйчирамчюфчоуяюонкяжы
кгсцбрясшчйотъъжрсщчл
Зважаючи на те, що повний алгоритм пошуку довжини ключа є дуже громіздким, обчислимо індекс збігів тільки для і переконаємося, що довжина ключа дійсно дорівнює 5.
втхмцццтмцяаццацсъавоаябяъфянюстюебаудуву...
лжъшэгмъшпщьигчпэгръюэфъъиффэгшбъгьшънжлл...
цбябобйъэуээббкъгуцрэбуааьнынбьэюочвъчцрб...
дюррорфюснйдрръбкуёюкркрфжйвфржёрфяёюжёню...
уцрхэькьяуткьпуьцщэуанапкяобуьэчъкбэачэчп...
Значення індексу збігів для кожного з рядків:
Рядок
|
Індекс
збігів
|
1
|
0.05676
|
2
|
0.05896
|
3
|
0.06340
|
4
|
0.05810
|
5
|
0.07230
|
Процес пошуку відносних зсувів рядків також наведемо в стислому вигляді:
Знайдене ключове слово: «слово».
Після розшифровки отримуємо наступний відкритий текст:
развебытьздоровымтожесамоечтонебытьбольнымопределенноздоровьеэтонечтоболь
шеедлянасфизическоездоровьеэтоисостояниеиспособностьиэнергиязаниматьсятемчт
онамнеобходимополучатьприэтомудовольствиеивыздоравливатьбезвсякойпомощиз
доровьепарадоксальновынеможетенепосредственнозаставитьсебястатьздоровымвам
остаетсятольконаблюдатьзатемкакудивительнаяспособностьвашегоорганизмаисцеля
тьсебяначинаетдействоватьсамасобойивашебогатствоилибедностьжестокостьилидоб
родетельностьнеимеютздесьповидимомуникакогозначенияздоровьеэтонечтопозитив
ноеононеозначаетотказотудовольствияздоровьеявляетсяестественнымследствиемна
шегообразажизнивзаимоотношенийдиетыокружающейобстановкиздоровьеэтонепре
дметсобственностиэтопроцессэтоточтомыделаемрезультатнашихмыслейичувствэтоо
бразсуществованияинтересночтонаправлениемедицинскихисследованийвсебольшеи
большеотклоняетсявсторонутойобластикотораядосихпорсчиталасьсферойдеятельно
стипсихологовисейчасужетруднопровестичеткиеразграничениямеждуфизическимии
ментальнымифакторамизаболеваний
Примітки
Див. також
Література