# Kryptoanalýza klasických šifer

### Ústav telekomunikací, FEKT VUT Brno

## Metody luštění klasických šifer

Aby byl luštitel schopný šifru rozluštit, musí s šifrovým textem obvykle provést ně kolik základních kroků. Pomocí indexu koincidence se pokusí zjistit, zda jde o šifru polyalfabetickou (která je charakteristická vyrovnáním rozdílu četnosti jednotlivých znaků v textu) nebo jednoduchou substituci či záměnu. V případě jednoduché substituce a transpozice se zároveň pokusí určit, v jakém jazyce byl psán otevřený text. Pro další luštění se používá metoda frekvenční analýzy, která si všímá znakových vazeb charakteristických pro daný jazyk.

Následující metody vycházejí z předpokladu, že otevřený text je psán mezinárodní abecedou (26 znaků).

Index koincidence

Luštitel obvykle na začátku stojí před úkolem zjistit, jakým způsobem je šifrový text zašifrován (tedy zjistit požitý šifrový systém). V případě klasických šifer lze úspěch obvykle znásobit použitím některého ze statických testů, které pomáhají učit typ luštěné šifry. Prvotní analýza textu může často ušetřit spoustu marných pokusů. Významnou metodou pro rozhodování je tzv. index koincidence. Autorem této techniky je William Frederick Friedman (1891 - 1969), který působil jako kryptolog u americké armády. Index koincidence se poprvé objevil v jeho publikaci The Index of Coincidence and Its Applications to Cryptography a zcela pozměnil tehdejší možnosti kryptoanalýzy šifer. Svého času byla tato kniha dokonce označována jako nejvýznamnější počin v oblasti kryptografie a přinášela do tohoto odvětví vyšší matematiku, statistiku a pravděpodobnost.
Index koincidence (dále IC) je míra relativní četnosti písmen v (šifrovém) textu. Tento statistický test může výrazně usnadnit kryptoanalýzu klasických šifer - zejména pak polyalfabetické. Pro určení délky klíče této šifry se dá použít Kasiského metoda nebo jako alternativa právě odhad pomocí IC (více viz zde).
IC je tedy definován jako pravděpodobnost, že dva znaky náhodně vybrané z šifrového textu budou stejné. Tato pravděpodobnost se vyjádří následujícím vztahem:

V tomto vzorci N znamená celkový počet znaků textu, ze kterého je IC počítán, c označuje počet znaků abecedy a n i je počet znaku s indexem i, kde i je celé číslo z rozmezí <0;25> - tedy pro mezinárodní abecedu n 1 je počet všech znaků a v celém textu, n 2 počet všech znaků b atd.). Čitatel zlomku vyjadřuje počet dvojic obsahujících dvě stejná písmena, jmenovatel vyjadřuje počet všech dvojic písmen v analyzovaném textu.

Z uvedeného vzorce vyplývá, že čím větší jsou rozdíly v četnosti výskytu jednotlivých písmen u daného jazyka, tím větší je jeho index koincidence a naopak - v případě analýzy náhodně vygenerovaného sledu znaků je obvykle IC znatelně menší (blíží se hodnotě 0,0385).
Každý jazyk je charakteristický svým indexem koincidence, který hodnotí kolísání četností znaků textu. Pro náhodný text je IC vypočítán jako hodnota 1/26, což vyplývá z následujícího: uvažujeme-li mezinárodní abecedu (26 znaků), pravděpodobnost náhodného výběru jednoho z nich je P(znak) = 1/26 = 0,0385. Tato hodnota zároveň vyjadřuje velikost pravděpodobnosti (označovaná jako kappa(r)), že bude náhodně vybrán identický pár:

Jinými slovy, na každých 100 dvojic písmen připadají necelé čtyři shody znaků. Tato hodnota pravděpodobnosti však platí pouze v případě, kdy písmena jsou rozložena naprosto nahodile, tj. žádné z nich nemá vyšší četnost výskytu než ostatní. Pokud však vezmeme v úvahu charakteristické rysy konkrétního jazyka - např. rozložení hlásek (mezinárodní abeceda) v českém jazyce, pravděpodobnost se změní následujícím způsobem:

kde pi je pravděpodobnost výskytu i-tého znaku v abecedě, tj. na každých 100 dvojic znaků českého textu připadá něco mezi pěti a šesti shodami. Tato hodnota je tedy charakteristická pro každý jazyk.
Známe-li tedy četnost rozložení písmen v daném jazyce, můžeme pomocí zobecněné rovnice

kde N je počet znaků abecedy, určit očekávaný index koincidence příslušného jazyka. Hodnota pro náhodný text je označována jako kappa(r). Jedná se o tzv. kappa - test, který vyjadřuje index koincidence daného jazyka.
Jednotlivé hodnoty kappa(p) pro různé jazyky uvádí tabulka 1.9 (vždy počítáno z mezinárodní abecedy, pouze u ruštiny se jedná o 32 znaků).

jazyk | hodnota IC
--- | ---
Němčina | 0,0824
Francouzština | 0,0801
Španělština | 0,0769
Italština | 0,0754
Angličtina | 0,0676
Slovenština | 0,0581
Čeština | 0,0577
Ruština | 0,0470
Náhodný text | 0,0385

Tab. 1.9: Index koincidence pro vybrané druhy jazyků

Následující obrázek znázorňuje využití IC pro určení typu šifry.

Monoalfabetická šifra a jednoduchá transpozice zachovávají rozložení četnosti znaků. V případě, že se vypo čítaný IC šifrového textu blíží některé z hodnot v tabulce 1.9, je pravděpodobné, že se bude jednat právě o jednoduchou substituci nebo transpozici s otevřeným textem v příslušném jazyce.

Pro rozlišení, zda se jedná o substituci nebo transpozici, pak stačí spočítat pravděpodobnost výskytu jednotlivých znaků v šifrovém textu: pokud jsou pravděpodobnosti shodné s pravděpodobností výskytu znaků v jazyce určeném pomocí IC, jedná se zřejmě o transpozici, naopak pokud jsou pravděpodobnosti pro totožné znaky odlišné, jde o substituci.

Polyalfabetická substituce vyhlazuje rozdíly mezi četností znaků v dané abecedě, to znamená, že IC pro takový šifrový text bude nižší než příklady uvedené v tabulce 1.9, pravděpodobněji se bude blížit hodnotě IC pro náhodný text (tj. 0,0385).

Čím delší šifrový text je k dispozici, tím lépe bude IC fungovat - samozřejmě jen v případě, že nepůjde o otevřený text záměrně napsaný tak, aby nesplňoval základní statistické charakteristiky příslušné danému jazyku.

Frekvenční analýza

Počátky frekvenční analýzy spadají do období kolem r.750 n.l. Arabští učenci a úředníci pro své účely potřebovali bezpečný komunikační systém - nejlépe šifrovaný. Obvykle používali šifrovou abecedu, která vznikla pouhým přeuspořádáním otevřené abecedy. Byl tak položen základ monoalfabetické substituční šifře. Kromě šifrování a dešifrování však tito učenci dokázali tyto šifry také luštit - dá se na ně tedy pohlížet jako na zakladatele kryptoanalýzy. Ta však nemohla vzniknout dříve, než se v dostatečné míře rozvinuly některé další vědní disciplíny - matematika, statistika nebo lingvistika.

Základ pro luštění šifer metodou frekvenční analýzy byl položen v teologických školách, které zkoumaly zjevení proroka Muhammada sepsaná v Koránu. Teologové se snažili jednotlivá zjevení chronologicky uspořádat, a použili k tomu velmi důmyslnou metodu: všímali si četnosti slov v textech jednotlivých zjevení. Vycházeli přitom z předpokladu, že některá slova se vyvinula poměrně nedávno na rozdíl od jiných - takže pokud daný text taková slova obsahoval, zřejmě byl novější než ostatní. Arabští učenci však při analýze textů zašli ještě dál, a to až na úroveň jednotlivých hlásek - všímali si jejich četnosti v textu. Od tohoto byl už jen malý krok k luštění šifer: první známý popis frekvenční analýzy v souvislosti s luštěním šifry pochází od arabského učence, v Evropě známého pod jménem Alkindus, z 9.století n.l.

V době rozmachu arabského umění šifrování a luštění prožívala Evropa v tomto směru zcela dobu temna. Jediné výjimky představovaly kláštery, ve kterých mniši studovali Bibli a snažili se odkrýt utajené významy v jejím textu.

Metoda frekvenční analýzy tedy spočívá v aplikaci statistiky na šifrový text. Každý jazyk (anglický, český...) je charakteristický některými významnými rysy, jako jsou například průměrná četnost jednotlivých hlásek (případně skupin hlásek) nebo vazby mezi samohláskami atd. Při luštění je tedy výhodné znát jazyk otevřeného textu (k čemuž může být nápomocný index koincidence). Tabulka 1.10 zobrazuje první z důležitých vlastností - četnost jednotlivých hlásek v českém jazyce.

znak | počet | % četnost | znak | počet | % četnost | znak | počet | % četnost
a | 357907 | 6,698% | i | 244242 | 4,571% | s | 246867 | 4,62%
á | 113756 | 2,129% | í | 165786 | 3,103% | š | 43636 | 0,817%
b | 88974 | 1,665% | j | 105955 | 1,983% | t | 296779 | 5,554%
c | 85538 | 1,601% | k | 200479 | 3,752% | ť | 2057 | 0,038%
č | 54341 | 1,017% | l | 218906 | 4,097% | u | 167322 | 3,131%
d | 193038 | 3,613% | m | 174323 | 3,262% | ú | 7736 | 0,145%
ď | 1040 | 0,019% | n | 356743 | 6,676% | ů | 30430 | 0,569%
e | 418434 | 7,831% | ň | 3926 | 0,073% | v | 233960 | 4,378%
é | 62945 | 1,178% | o | 442617 | 8,283% | w | 3843 | 0,072%
ě | 79674 | 1,491% | ó | 1704 | 0,032% | x | 4942 | 0,092%
f | 21055 | 0,394% | p | 184548 | 3,454% | y | 93620 | 1,752%
g | 18319 | 0,343% | q | 308 | 0,006% | ý | 50312 | 0,942%
h | 69236 | 1,296% | r | 212533 | 3,977% | z | 113450 | 2,123%
ch | 53802 | 1,007% | ř | 63395 | 1,186% | ž | 54602 | 1,022%

Tab. 1.10: Frekvence písmen české abecedy

Protože se však obvykle šifruje (a tedy i luští) text zbavený diakritických znamének, tabulka 1.11 zobrazuje četnost hlásek české abecedy, zbavené diakritiky (např. četnost výskytu písmene i je rovna součtu četnosti výskytu písmen i a í).

znak | počet | % četnost | znak | počet | % četnost | znak | počet | % četnost
a | 471663 | 8,740% | j | 105955 | 1,963% | s | 290503 | 5,383%
b | 88974 | 1,649% | k | 200479 | 3,715% | t | 298836 | 5,537%
c | 143722 | 3,589% | l | 218906 | 4,056% | u | 205488 | 3,808%
d | 194078 | 3,596% | m | 174323 | 3,230% | v | 233960 | 4,335%
e | 561053 | 10,396% | n | 360669 | 6,683% | w | 3843 | 0,071%
f | 21055 | 0,390% | o | 444321 | 8,233% | x | 4942 | 0,092%
g | 18319 | 0,340% | p | 184548 | 3,420% | y | 143932 | 2,667%
h | 73079 | 2,280% | q | 308 | 0,006% | z | 168052 | 3,114%
i | 410028 | 7,580% | r | 275928 | 5,113% |  |  |

Tab. 1.11: Frekvence písmen základní abecedy (26 znaků)

Následuje výčet některých statistických údajů českého jazyka, které mohou být při luštění monoalfabetické šifry velmi užitečné.

- frekvence znaků - vybereme ty nejčetnější znaky vyskytující se v šifrovém textu a přeložíme je dle tabulky 1.11

- ve slovech se samohlásky se souhláskami téměř pravidelně střídají

- poměr souhlásek a samohlásek v českém textu je přibližně 60:40 (přesněji 58,56:41,44)

- 2 samohlásky uprostřed slova se vedle sebe téměř nevyskytují

- v souhláskových vazbách se písmeno R chová jak samohláska

- nejčastěji vyskytující se písmena na začátku (českých) slov jsou: p (12,50%), s (9,72%), v (9,19%), z (8,95%), n (7,64%) o (5,56%); obecně samohlásky tvoří počátek slov pouze z 15,49%, zbytek tvoří souhlásky

- nejčastěji vyskytující se písmena na konci (českých) slov jsou: e (16,67%), i (13,96%), a (10,94%), o (8,93%), u (7,94%), y (7,03%); obecně souhlásky tvoří počátek slov pouze z 34,53%, zbytek tvoří samohlásky

- důležitými bigramy jsou ST, PR, SK, CH, DN, TR (frekvence výskytu v českém jazyce viz tabulka 1.12)

- bigram CH: písmeno H má (dle tabulky) jen o něco nižší frekvenci než C; CH se často vyskytuje na konci slov a předchází ho samohláska; naopak, pokud ho předchází souhláska, samohláska obvykle následuje (schod)

- bigram PR: často stojí na začátku slov; R má přibližně dvojnásobnou frekvenci výskytu oproti P; obrácený bigram RP se téměř nevyskytuje

- bigram ST: obvykle se vyskytuje na konci i uprostřed slova; písmena S a T mají přibližně stejnou četnost výskytu

- existují také často se vyskytující trigramy (viz tabulka 1.13): STR (to je nejčastější trigram), PRO, UNI, OST, STA, ANI, OVA, YCH, STI, PRI, PRE, OJE, REN, IST, EHO, TER, RED, ICH

- průměrná délka slova v textu činí 5,54 písmene

pořadí | bigram | počet | pořadí | bigram | počet | pořadí | bigram | počet
1. | st | 74285 | 15. | ra | 37531 | 29. | ce | 28280
2. | ní | 60525 | 16. | to | 36355 | 30. | va | 27987
3. | po | 56239 | 17. | ou | 35191 | 31. | př | 27885
4. | ov | 53818 | 18. | no | 32612 | 32. | at | 27603
5. | ro | 51961 | 19. | la | 32336 | 33. | ře | 27181
6. | en | 50645 | 20. | li | 31952 | 34. | er | 27168
7. | na | 46737 | 21. | ho | 31442 | 35. | ti | 26858
8. | je | 42433 | 22. | do | 30665 | 36. | em | 26818
9. | pr | 42099 | 23. | os | 30530 | 37. | in | 26427
10. | te | 40393 | 24. | se | 30454 | 38. | sk | 26085
11. | le | 38926 | 25. | ta | 30177 | 39. | lo | 25981
12. | ko | 38688 | 26. | al | 29682 | 40. | ně | 25739
13. | ne | 38671 | 27. | ed | 29622 |  |  |
14. | od | 38393 | 28. | an | 29326 |  |  |

Tab. 1.12: Nejčastější bigramy českého jazyka

pořadí | trigram | počet | pořadí | trigram | počet | pořadí | trigram | počet
1. | pro | 21322 | 15. | nos | 8557 | 29. | ové | 6810
2. | ost | 18722 | 16. | ick | 8387 | 30. | nov | 6783
3. | sta | 12746 | 17. | ová | 8139 | 31. | pol | 6704
4. | pře | 12057 | 18. | při | 7878 | 32. | spo | 6686
5. | ter | 11936 | 19. | sou | 7541 | 33. | vat | 6489
6. | ení | 11917 | 20. | ist | 7505 | 34. | ním | 6439
7. | ova | 11822 | 21. | edn | 7429 | 35. | jak | 6330
8. | pod | 10168 | 22. | ské | 7349 | 36. | val | 6256
9. | kte | 9603 | 23. | při | 7348 | 37. | dní | 6251
10. | pra | 9521 | 24. | odn | 7251 | 38. | sto | 6189
11. | ého | 9475 | 25. | tel | 7231 | 39. | tak | 6175
12. | sti | 9121 | 26. | ání | 7224 | 40. | lov | 6139
13. | řed | 9103 | 27. | ent | 7114 |  |  |
14. | kon | 9017 | 28. | str | 6903 |  |  |

Tab. 1.13: Nejčastější trigramy českého jazyka

Je důležité uvědomit si, že frekvenční analýzu nelze používat zcela mechanicky. Tabulka četnosti výskytu hlásek v abecedě představuje pouze průměr a nemusí zcela přesně odpovídat poměru výskytu v konkrétním zašifrovaném textu. Zcela záměrně lze totiž vytvořit takový otevřený text, který nebude splňovat průměrné charakteristiky daného jazyka. Obecně čím delší šifrový text je analyzován, tím lépe, protože s největší pravděpodobností bude lépe fungovat statistika a výše popsané poznatky tedy lze spolehlivěji využít. Naopak čím kratší šifrový text, tím je pravděpodobnější, že výskyt hlásek nebude odpovídat tabulce četnosti. Za hranici použitelnosti je považován text o délce minimálně 100 znaků.