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):
Litera | Liczba wystąpień | Litera | Liczba wystąpień |
---|---|---|---|
a | 134 675 829 | n | 83 104 322 |
b | 24 944 593 | o | 112 776 769 |
c | 42 120 335 | p | 43 747 863 |
d | 53 015 496 | q | 83 322 |
e | 153 141 622 | r | 61 750 942 |
f | 2 458 624 | s | 78 451 777 |
g | 3 087 128 | t | 75 633 324 |
h | 35 075 708 | u | 50 265 458 |
i | 93 903 002 | v | 55 510 103 |
j | 32 383 080 | w | 762 129 |
k | 49 549 907 | x | 504 334 |
l | 80 345 129 | y | 40 132 126 |
m | 50 636 489 | z | 46 383 740 |
Poniższa tabela przedstawia względną częstotliwość występowania liter:
Litera | Względna częstotliwość | Litera | Względna częstotliwość |
---|---|---|---|
a | 0.09589269 | n | 0.05917244 |
b | 0.0177612 | o | 0.08029999 |
c | 0.02999077 | p | 0.03114961 |
d | 0.03774841 | q | 0.00005933 |
e | 0.10904081 | r | 0.04396827 |
f | 0.0017506 | s | 0.0558597 |
g | 0.00219812 | t | 0.05385289 |
h | 0.02497482 | u | 0.03579031 |
i | 0.06686138 | v | 0.03952464 |
j | 0.02305759 | w | 0.00054266 |
k | 0.03528082 | x | 0.0003591 |
l | 0.05720782 | y | 0.02857512 |
m | 0.0360545 | z | 0.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:
Litera | Liczba liter | Względna częstotliwość | |||
---|---|---|---|---|---|
Pierwszy tekst | Drugi tekst | Pierwszy tekst | Drugi tekst | Język czeski | |
a | 1 | 2 | 0.02326 | 0.04651 | 0.09589 |
b | 0 | 1 | 0 | 0.02326 | 0.01776 |
c | 2 | 2 | 0.04651 | 0.04651 | 0.02999 |
d | 3 | 0 | 0.06977 | 0 | 0.03775 |
e | 5 | 6 | 0.11628 | 0.13953 | 0.10904 |
f | 3 | 0 | 0.06977 | 0 | 0.00175 |
g | 0 | 0 | 0 | 0 | 0.0022 |
h | 5 | 1 | 0.11628 | 0.02326 | 0.02497 |
i | 2 | 2 | 0.04651 | 0.04651 | 0.06686 |
j | 2 | 1 | 0.04651 | 0.02326 | 0.02306 |
k | 2 | 1 | 0.04651 | 0.02326 | 0.03528 |
l | 0 | 0 | 0 | 0 | 0.05721 |
m | 0 | 2 | 0 | 0.04651 | 0.03605 |
n | 0 | 3 | 0 | 0.06977 | 0.05917 |
o | 0 | 5 | 0 | 0.11628 | 0.0803 |
p | 3 | 3 | 0.06977 | 0.06977 | 0.03115 |
q | 2 | 0 | 0.04651 | 0 | 0.00006 |
r | 1 | 5 | 0.02326 | 0.11628 | 0.04397 |
s | 2 | 2 | 0.04651 | 0.04651 | 0.05586 |
t | 0 | 2 | 0 | 0.04651 | 0.05385 |
u | 6 | 2 | 0.13953 | 0.04651 | 0.03579 |
v | 0 | 0 | 0 | 0 | 0.03952 |
w | 0 | 0 | 0 | 0 | 0.00054 |
x | 1 | 0 | 0.02326 | 0 | 0.00036 |
y | 2 | 0 | 0.04651 | 0 | 0.02858 |
z | 1 | 3 | 0.02326 | 0.06977 | 0.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ędna | Odchylenie | ||||
---|---|---|---|---|---|
1. tekst | 2. tekst | Język czeski | 1. tekst | 2. tekst | |
a | 0.02326 | 0.04651 | 0.09589 | 0.0052761 | 0.0024385 |
b | 0 | 0.0232558 | 0.0177612 | 0.0003155 | 0.0000302 |
c | 0.0465116 | 0.0465116 | 0.0299908 | 0.0002729 | 0.0002729 |
d | 0.0697674 | 0 | 0.0377484 | 0.0010252 | 0.0014249 |
e | 0.1162791 | 0.1395349 | 0.1090408 | 0.0000524 | 0.0009299 |
f | 0.0697674 | 0 | 0.0017506 | 0.0046263 | 0.0000031 |
g | 0 | 0 | 0.0021981 | 0.0000048 | 0.0000048 |
h | 0.1162791 | 0.0232558 | 0.0249748 | 0.0083365 | 0.000003 |
i | 0.0465116 | 0.0465116 | 0.0668614 | 0.0004141 | 0.0004141 |
j | 0.0465116 | 0.0232558 | 0.0230576 | 0.0005501 | 0 |
k | 0.0465116 | 0.0232558 | 0.0352808 | 0.0001261 | 0.0001446 |
l | 0 | 0 | 0.0572078 | 0.0032727 | 0.0032727 |
m | 0 | 0.0465116 | 0.0360545 | 0.0012999 | 0.0001094 |
n | 0 | 0.0697674 | 0.0591724 | 0.0035014 | 0.0001123 |
o | 0 | 0.1162791 | 0.0803 | 0.0064481 | 0.0012945 |
p | 0.0697674 | 0.0697674 | 0.0311496 | 0.0014913 | 0.0014913 |
q | 0.0465116 | 0 | 0.0000593 | 0.0021578 | 0 |
r | 0.0232558 | 0.1162791 | 0.0439683 | 0.000429 | 0.0052289 |
s | 0.0465116 | 0.0465116 | 0.0558597 | 0.0000874 | 0.0000874 |
t | 0 | 0.0465116 | 0.0538529 | 0.0029001 | 0.0000539 |
u | 0.1395349 | 0.0465116 | 0.0357903 | 0.0107629 | 0.0001149 |
v | 0 | 0 | 0.0395246 | 0.0015622 | 0.0015622 |
w | 0 | 0 | 0.0005427 | 3e-7 | 3e-7 |
x | 0.0232558 | 0 | 0.0003591 | 0.0005243 | 1e-7 |
y | 0.0465116 | 0 | 0.0285751 | 0.0003217 | 0.0008165 |
z | 0.0232558 | 0.0697674 | 0.0330264 | 0.0000955 | 0.0013499 |
0.0558546 | 0.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łowo | Występowanie | Słowo | Występowanie | Słowo | Wystąpienia | Słowo | Występowanie |
---|---|---|---|---|---|---|---|
Jestem | 2 516 782 | Tutaj | 286 606 | reklamowany | 203 656 | być może | 163 296 |
jako | 1 321 843 | dobrze | 273 130 | zapytany | 201 509 | Ręce | 161 382 |
kiedy | 1 237 411 | na chwilę | 269 045 | mela | 199 285 | również | 161 174 |
jego | 974 131 | Wszystkie | 268 277 | jeśli | 197 778 | widziany | 160 506 |
był | 689 849 | jeśli | 262 429 | więc | 193 357 | po wszystkim | 160 228 |
było | 657 760 | procent | 262 226 | Mr. | 193 123 | prilis | 156 839 |
reklama | 644 137 | nigdy | 260 096 | wszystko | 192 988 | Miejsce | 156 221 |
więcej | 608 371 | mógł | 259 919 | Wszystko | 185 965 | przez | 155 250 |
Jesteśmy | 549 840 | było | 255 072 | potem | 183 655 | ponownie | 154 924 |
Który | 522 587 | pomiędzy | 253 466 | w ogóle | 179 968 | wystarczająco | 154 784 |
lub | 489 592 | około | 251 146 | jego | 178 390 | niektóre | 154 165 |
który | 483 800 | do | 243 646 | Szybko | 175 422 | głowa | 153 777 |
przed | 460 548 | re | 235 604 | trochę | 174 553 | do | 153 655 |
coś | 448 947 | może | 235 161 | stały | 174 451 | przez | 151 450 |
z tego | 446 667 | po prostu | 233 467 | ze mną | 173 820 | rozpoczęty przez | 151 309 |
idąc do | 412 128 | muza | 227 622 | tylko | 172 716 | mężczyzna | 149 240 |
Jesteś | 394 867 | również | 224 705 | kto | 172 342 | poszukiwany | 148 978 |
są | 376 431 | więcej | 221 056 | ludzie | 169 569 | przeciw | 148 603 |
ich | 331 235 | To samo | 218 216 | to | 167 825 | nie było | 147 829 |
nie | 318 782 | jeśli | 217 917 | Ktoś | 165 736 | bardzo | 145 921 |
Ja | 304 981 | sam | 211 148 | Po pierwsze | 164 858 | drzwi | 141 094 |
ponieważ | 302 978 | oni | 210 384 | dlatego | 164 817 | rzeczy | 140 673 |
każdy | 301 623 | jeden | 208 864 | Więc | 164 637 | wiedział | 140 656 |
Który | 295 817 | były | 206 830 | nikt | 164 442 | myśleć | 139 935 |
ona | 288 095 | via | 205 040 | Cześć | 163 638 | Pewnego razu | 136 314 |