Analiza częstotliwości

Kapitoly: Kryptografia, Analiza częstotliwości

Analiza częstotliwości to ogólna procedura, która może być używana podczas łamania kilku różnych rodzajów szyfrów. W analizie częstotliwości zazwyczaj przeglądamy tekst szyfru i próbujemy znaleźć pewne podobieństwa do języka, w którym napisana jest wiadomość.

Częstotliwość występowania liter w szyfrogramie

Jednym z podstawowych narzędzi analizy częstotliwości jest częstotliwość występowania znaków w danym języku. Jeśli przeanalizujemy wystarczającą ilość czeskich tekstów, możemy obliczyć różne informacje statystyczne, w tym ile razy które litery wystąpiły w tych tekstach.

Ponieważ pewnego dnia kupiłem około pięciu tysięcy czeskojęzycznych książek, przeprowadziłem na nich taką analizę. W tych pięciu tysiącach książek było łącznie 1 404 443 151 liter. Poniższa tabela przedstawia rozkład liter (po usunięciu znaków diakrytycznych):

LiteraLiczba wystąpieńLiteraLiczba wystąpień
a134 675 829n83 104 322
b24 944 593o112 776 769
c42 120 335p43 747 863
d53 015 496q83 322
e153 141 622r61 750 942
f2 458 624s78 451 777
g3 087 128t75 633 324
h35 075 708u50 265 458
i93 903 002v55 510 103
j32 383 080w762 129
k49 549 907x504 334
l80 345 129y40 132 126
m50 636 489z46 383 740

Poniższa tabela przedstawia względną częstotliwość występowania liter:

LiteraWzględna częstotliwośćLiteraWzględna częstotliwość
a0.09589269n0.05917244
b0.0177612o0.08029999
c0.02999077p0.03114961
d0.03774841q0.00005933
e0.10904081r0.04396827
f0.0017506s0.0558597
g0.00219812t0.05385289
h0.02497482u0.03579031
i0.06686138v0.03952464
j0.02305759w0.00054266
k0.03528082x0.0003591
l0.05720782y0.02857512
m0.0360545z0.03302643

Z tabeli wynika więc, że około 9,58% liter we wszystkich książkach było literą "a". Z tego możemy wywnioskować, że około 9,58% liter w normalnym czeskim tekście byłoby literą "a".

Każda taka statystyka pokaże nieco inne wartości, ale to w porządku - nie chodzi o dokładne wartości, których i tak nie można znaleźć, a jedynie o wartości przybliżone.

Odchylenie częstotliwości liter od częstotliwości liter w języku

Jeśli znamy oczekiwane względne częstotliwości każdej litery w danym języku, możemy obliczyć odchylenie jakiegoś tekstu od oczekiwanych wartości. Jako przykład rozważmy dwa teksty: "fhes dudy fqhup ijhecuc fhejepu eriqxkzu ahkpdysu" i "proc neni parez tree because it contains crucifixes". Na pierwszy rzut oka widać, że pierwszy tekst to jakiś bełkot, a drugie zdanie to tekst czeski. Obliczmy odchylenie - powinno wyjść, że odchylenie pierwszego tekstu będzie znacznie większe niż drugiego.

Najpierw obliczmy liczbę wystąpień liter w każdym tekście:

LiteraLiczba literWzględna częstotliwość
Pierwszy tekstDrugi tekstPierwszy tekstDrugi tekstJęzyk czeski
a120.023260.046510.09589
b0100.023260.01776
c220.046510.046510.02999
d300.0697700.03775
e560.116280.139530.10904
f300.0697700.00175
g00000.0022
h510.116280.023260.02497
i220.046510.046510.06686
j210.046510.023260.02306
k210.046510.023260.03528
l00000.05721
m0200.046510.03605
n0300.069770.05917
o0500.116280.0803
p330.069770.069770.03115
q200.0465100.00006
r150.023260.116280.04397
s220.046510.046510.05586
t0200.046510.05385
u620.139530.046510.03579
v00000.03952
w00000.00054
x100.0232600.00036
y200.0465100.02858
z130.023260.069770.03303

Teraz obliczamy odchylenia. Obliczamy je, odejmując względną częstotliwość występowania litery w języku od względnej częstotliwości w pierwszym tekście i podnosząc do kwadratu. Oznacza to, że dla litery "a" i pierwszego tekstu otrzymalibyśmy odchylenie jako

$$ (0.0232558 - 0.0958927)^2=0.0052761 $$

i podobnie dla wszystkich pozostałych liter. Po najechaniu kursorem myszy na komórkę z wynikiem wyświetlane jest również wyrażenie, które zostało użyte do uzyskania wyniku.

Częstotliwość względnaOdchylenie
1. tekst2. tekstJęzyk czeski1. tekst2. tekst
a0.023260.046510.095890.00527610.0024385
b00.02325580.01776120.00031550.0000302
c0.04651160.04651160.02999080.00027290.0002729
d0.069767400.03774840.00102520.0014249
e0.11627910.13953490.10904080.00005240.0009299
f0.069767400.00175060.00462630.0000031
g000.00219810.00000480.0000048
h0.11627910.02325580.02497480.00833650.000003
i0.04651160.04651160.06686140.00041410.0004141
j0.04651160.02325580.02305760.00055010
k0.04651160.02325580.03528080.00012610.0001446
l000.05720780.00327270.0032727
m00.04651160.03605450.00129990.0001094
n00.06976740.05917240.00350140.0001123
o00.11627910.08030.00644810.0012945
p0.06976740.06976740.03114960.00149130.0014913
q0.046511600.00005930.00215780
r0.02325580.11627910.04396830.0004290.0052289
s0.04651160.04651160.05585970.00008740.0000874
t00.04651160.05385290.00290010.0000539
u0.13953490.04651160.03579030.01076290.0001149
v000.03952460.00156220.0015622
w000.00054273e-73e-7
x0.023255800.00035910.00052431e-7
y0.046511600.02857510.00032170.0008165
z0.02325580.06976740.03302640.00009550.0013499
0.05585460.0211603

Na koniec zsumowaliśmy wszystkie odchylenia. Prawidłowo powinniśmy jeszcze podzielić tę wartość przez liczbę liter, a następnie odjąć, aby naprawdę uzyskać odchylenie. Ale te operacje nie zmieniają faktu, że drugi tekst ma znacznie niższe odchylenie, więc jest znacznie bardziej prawdopodobne, że jest to tekst czeski.

Najpopularniejsze słowa w języku

Czasami przydatna może być lista najczęściej używanych słów w danym języku.

SłowoWystępowanieSłowoWystępowanieSłowoWystąpieniaSłowoWystępowanie
Jestem2 516 782Tutaj286 606reklamowany203 656być może163 296
jako1 321 843dobrze273 130zapytany201 509Ręce161 382
kiedy1 237 411na chwilę269 045mela199 285również161 174
jego974 131Wszystkie268 277jeśli197 778widziany160 506
był689 849jeśli262 429więc193 357po wszystkim160 228
było657 760procent262 226Mr.193 123prilis156 839
reklama644 137nigdy260 096wszystko192 988Miejsce156 221
więcej608 371mógł259 919Wszystko185 965przez155 250
Jesteśmy549 840było255 072potem183 655ponownie154 924
Który522 587pomiędzy253 466w ogóle179 968wystarczająco154 784
lub489 592około251 146jego178 390niektóre154 165
który483 800do243 646Szybko175 422głowa153 777
przed460 548re235 604trochę174 553do153 655
coś448 947może235 161stały174 451przez151 450
z tego446 667po prostu233 467ze mną173 820rozpoczęty przez151 309
idąc do412 128muza227 622tylko172 716mężczyzna149 240
Jesteś394 867również224 705kto172 342poszukiwany148 978
376 431więcej221 056ludzie169 569przeciw148 603
ich331 235To samo218 216to167 825nie było147 829
nie318 782jeśli217 917Ktoś165 736bardzo145 921
Ja304 981sam211 148Po pierwsze164 858drzwi141 094
ponieważ302 978oni210 384dlatego164 817rzeczy140 673
każdy301 623jeden208 864Więc164 637wiedział140 656
Który295 817były206 830nikt164 442myśleć139 935
ona288 095via205 040Cześć163 638Pewnego razu136 314