Klassikaliste šifrite murdmine Ahto Buldas Kerckhoffi eeldused • Carol teab, kuidas krüpteerimisalgoritm ja dekrüpteerimisalgoritm töötavad. • Kogu salastus tagatakse võtme salastusega. Põhjused: • Algoritme on üsna.

Download Report

Transcript Klassikaliste šifrite murdmine Ahto Buldas Kerckhoffi eeldused • Carol teab, kuidas krüpteerimisalgoritm ja dekrüpteerimisalgoritm töötavad. • Kogu salastus tagatakse võtme salastusega. Põhjused: • Algoritme on üsna.

Klassikaliste šifrite murdmine
Ahto Buldas
Kerckhoffi eeldused
• Carol teab, kuidas krüpteerimisalgoritm ja
dekrüpteerimisalgoritm töötavad.
• Kogu salastus tagatakse võtme salastusega.
Põhjused:
• Algoritme on üsna raske varjata, kui need
on tehtud paljude spetsialistide ühistööna.
• “Tavainimeste” poolt välja mõeldud
algoritmid on enamjaolt kergesti murtavad.
Rünnete tüübid: passiivsed
• Teadaolev krüptogramm -- ründajal on teada
krüptogramm Y. Ründaja püüab leida avateksti X.
• Teadaolev avatekst -- ründajal on teada mingi
hulk avatekst-krüptogramm paare
(X1,Y1),…,(Xn,Yn) ja krüptogramm Y. Ründaja
püüab leida vastavat avateksti X.
Rünnete tüübid: aktiivsed
1. Faas:
2. Faas:
y
xi
Carol
EK
yi = EK(xi)
Carol
x: y=EK(x)
(x1,y1), …, (xn,yn)
Valitav avatekst -• Ründajal on teatava aja jooksul kasutada algoritm
EK() musta kastina.
• Seejärel antakse ründajale krüptogramm y ja ta
peab ära arvama vastava avateksti x.
Rünnete tüübid: aktiivsed
1. Faas:
2. Faas:
y
yi
Carol
DK
xi = DK(yi)
Carol
x: y=EK(x)
(x1,y1), …, (xn,yn)
Valitav krüptogramm -• Ründajal on teatava aja jooksul kasutada algoritm
DK() musta kastina.
• Seejärel antakse ründajale krüptogramm y ja ta
peab ära arvama vastava avateksti x.
Rünnetes kasutatavad põhivõtted
• Võtmekandidaatide läbiproovimine.
• Loomuliku keele statistiliste omaduste
(tähtede ja täheühendite sagedus jne.)
ülekanduvus krüptogrammile.
• Võtme vahetu leidmine avatekstkrüptogramm paaridest.
Tähtede sagedusvahemikud
eestikeelses proosatekstis
A
B
D
E
F
G
H
I
J
K
L
M
0.115
0.007
0.036
0.105
0.000
0.017
0.015
0.087
0.018
0.045
0.057
0.035
0.140
0.010
0.047
0.124
0.001
0.022
0.021
0.102
0.022
0.055
0.064
0.042
N
O
P
R
S
T
U
V
Õ
Ä
Ö
Ü
0.042
0.034
0.015
0.021
0.080
0.068
0.056
0.019
0.010
0.010
0.003
0.006
0.052
0.044
0.022
0.032
0.096
0.080
0.067
0.026
0.015
0.015
0.006
0.010
Tähtede sagedused ingliskeelses
proosatekstis
A
B
C
D
E
F
G
H
I
J
K
L
M
0.082
0.015
0.028
0.043
0.127
0.022
0.020
0.061
0.070
0.002
0.008
0.040
0.024
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
0.067
0.075
0.019
0.001
0.060
0.063
0.091
0.028
0.010
0.023
0.001
0.020
0.001
Afiinse šifri murdmine
• Olgu meil järgmine krüptogramm, mis on
saadud ingliskeelsest tekstist:
ZRHKREOFZFMMPZKEVNIMRHHRRPROHVUFEFTFZ
Tähtede sagedused 37-tähelises krüptogrammis on järgmised:
Z
R
H
K
E
O
F
4
6
4
2
3
2
5
M
P
V
N
I
U
T
3
2
2
1
1
1
1
Hüpotees 1:
• R tähendab e-d ja F tähendab t-d. Saame võrrandisüsteemi:
4 a + b = 17
19 a + b = 5
millest järeldub, et (arvuvallas Z26) 15a = -12 = 14. Aga 14 on
nullitegur, sest 14  13 = 7  2  13 = 7  26  0 (mod 26),
kuid samal ajal süt(15,26)=1 ja seega peaks ka a olema
nullitegur, mis on vastuolus krüpteerimisfunktsiooni
injektiivsusega.
Seetõttu puudub süsteemil lahend arvuvallas Z26 ja hüpotees
on ebakorrektne.
Hüpotees 2:
• R tähendab e-d ja F tähendab a-d. Saame võrrandisüsteemi:
4 a + b = 17
0a+b=5
• Siit saame, et b=5 ja 4a=12, millest a=3.
• Leiame a-1 = 9 ja seega on dekrüpteerimisfunktsioon kujul
x= D(y) = 9(y-5) mod 26.
• Proovime dekrüpteerida ja saame:
YESTERDAYALLMYTROUBLESSEEMEDSOFARAWAY
• Kuna tulemus on ingliskeelne tekst, siis on ülesanne
lahendatud.
Asendusšifri murdmine
• Olgu meil järgmine eestikeelse sõnumi krüptogramm, kus
sõnavahed on säilinud.
pün gõtu näglg puurnsgoog obüinä urni öüttni
oühg grgtüi puurnbvjögog püöäüä sbrjsgi öüvvg
pbtjrjä tjtijlg tgöüpj gjlg pdäpnä gõtur urrg
muurgä og puõõgrnp og äjginä ög ännä vntpn fmj
vnppgij oüüäöjlg vunän pbõagrj näöüsg ännä
gtinä puurnbvjögog ögrrj õggsgöüäö snigln
pnõoüögig og gõtur jn urtüi tffi jtgs gjlg
süürj sböjrig ög aböönä ögmarn og mgppgä
pnõoüögsg pün ög urn pnõoüögtüi üshjä vggõ õnig
püssgõiüä vnppgij oüüäöjlg vunää öjsg pbõag
oüüõij og pfänä äuäntgr snä puursjnäöjõ förjä
pün öj öjsg öugä urnöj
1 etapp: sagedustabeli koostamine
a
b
d
e
f
g
h
i
j
k
l
m
4
9
1
0
5
65
2
19
31
0
7
4
0.009
0.021
0.002
0.012
0.150
0.005
0.044
0.072
0.016
0.009
A
E,I,S
n
o
p
r
s
t
u
v
õ
ä
ö
ü
41
17
28
25
17
17
23
10
16
34
29
29
0.095
0.039
0.065
0.058
0.039
0.039
0.053
0.023
0.037
0.079
0.067
0.067
E,I,S
E,I,S
Järeldus: g tähistab suure tõenäosusega A tähte.
Tähed j, n ja ä tähistavad suure tõenäosusega tähti {E,I,S}
mingis järjestuses.
Tähtede esinemissagedus sõna
esimese tähena
• Eesti keele proosatekstides on tähtede
esinemissagedused sõna esimese tähena
väljendatavad järgmise tabelina:
• Krüptogrammis on tähtede
esinemissagedused esitähena
K
T
S
M,V
P
A,E,O,J
0.130
0.110
0.095
0.085
0.070
0.060
0.025
0.050
0.025
0.075
0.025
0.025
0.013
M,V,T,S
väljendatavad järgmise tabelina:
p
g
n
o
u
ö
s
t
18
7
2
10
5
11
5
3
0.225
0.086
0.025
0.125
0.063
0.136
0.063
0.038
K
M,V,T,S
S,T,M,V
S,T,M,V
m
ä
f
v
õ
j
ü
2
4
2
6
2
2
1
Tähtede esinemissagedus sõna
teise tähena
A
0.200
• Eesti keele proosatekstides on tähtede
esinemissagedused sõna esimese tähena
väljendatavad järgmise tabelina:
• Krüptogrammis on tähtede
esinemissagedused esitähena väljendatavad
järgmise tabelina:
ü
õ
ä
u
b
r
j
g
12
3
2
10
6
6
7
14
0.150
0.036
0.025
0.125
0.075
0.075
0.086
0.175
E,I,U
E,I,U
A
d
n
m
t
f
s
ö
1
12
1
2
2
1
1
E
I
U
O,Õ,Ä
N
Ö,Ü
0.013
0.150
0.013
0.025
0.025
0.013
0.013
0.150
0.110
0.100
0.060
0.050
0.015
E,I,U
PPeale tõenäolisi asendusi gA, pK, äS, öT saame
järgmise teksti:
Kün Aõtu nSAlA KuurnsAooA obüinS urni Tüttni oühA
ArAtüi KuurnbvjTAoA KüTSüS sbrjsAi TüvvA KbtjrjS
tjtijlA tATüKj AjlA KdSKnS Aõtur urrA muurAS oA
KuõõArnK oA SjAinS TA SnnS vntKn fmj vnKKAij
oüüSTjlA vunSn KbõaArj nSTüsA SnnS AtinS
KuurnbvjTAoA TArrj õAAsATüST sniAln KnõoüTAiA oA
Aõtur jn urtüi tffi jtAs AjlA süürj sbTjriA TA
abTTnS TAmarn oA mAKKAS KnõoüTAsA Kün TA urn
KnõoüTAtüi üshjS vAAõ õniA KüssAõiüS vnKKAij
oüüSTjlA vunSS TjsA KbõaA oüüõij oA KfSnS SuSntAr
snS KuursjnSTjõ fTrjS Kün Tj TjsA TuAS urnTj
• Sõnas “KüTSüS” peab ‘ü’ tähendama mingit täishäälikut.
Kõige tõenäolisemalt E, I või U. Ainult U annab üldtarvitatava
sõna “KUTSUS”, mistõttu eeldame edaspidi asendust üU
Peale asendust üU ja saame teksti:
KUn Aõtu nSAlA KuurnsAooA obUinS urni TUttni
oUhA ArAtUi KuurnbvjTAoA KUTSUS sbrjsAi TUvvA
KbtjrjS tjtijlA tATUKj AjlA KdSKnS Aõtur urrA
muurAS oA KuõõArnK oA SjAinS TA SnnS vntKn fmj
vnKKAij oUUSTjlA vunSn KbõaArj nSTUsA SnnS AtinS
KuurnbvjTAoA TArrj õAAsATUST sniAln KnõoUTAiA oA
Aõtur jn urtUi tffi jtAs AjlA sUUrj sbTjriA TA
abTTnS TAmarn oA mAKKAS KnõoUTAsA KUn TA urn
KnõoUTAtUi UshjS vAAõ õniA KUssAõiUS vnKKAij
oUUSTjlA vunSS TjsA KbõaA oUUõij oA KfSnS
SuSntAr snS KuursjnSTjõ fTrjS KUn Tj TjsA TuAS
urnTj
Seega tõenäoliselt on n, u ja j tähendused kas E või I. Vaadates esimest sõna
“KUn”, saame et ainult I sobib nendel eeldustel n tähenduseks. Seega võtame
edaspidises aluseks asenduse nI.
Järelikult kas u või j peaksid teisenema täheks E.
Vaadates samas kontekstis sõna “TuAS”, ei sobiks u koodiks kuidagi E, sest
sõna “TEAS” ei ole üldtarvitatav eestikeelne sõna. Seega võib oletada, et jE.
Tehes asendused nI ja jE, saame teksti:
KUI Aõtu ISAlA KuurIsAooA obUiIS urIi
TUttIi oUhA ArAtUi KuurIbvETAoA KUTSUS
sbrEsAi TUvvA KbtErES tEtiElA tATUKE AElA
KdSKIS Aõtur urrA muurAS oA KuõõArIK oA
SEAiIS TA SIIS vItKI fmE vIKKAiE oUUSTElA
vuISI KbõaArE ISTUsA SIIS AtiIS
KuurIbvETAoA TArrE õAAsATUST sIiAlI
KIõoUTAiA oA Aõtur EI urtUi tffi EtAs AElA
sUUrE sbTEriA TA abTTIS TAmarI oA mAKKAS
KIõoUTAsA KUI TA urI KIõoUTAtUi UshES vAAõ
õIiA KUssAõiUS vIKKAiE oUUSTElA vuISS TEsA
KbõaA oUUõiE oA KfSIS SuSItAr sIS
KuursEISTEõ fTrES KUI TE TEsA TuAS urITE
Ja veidi veel nuputamist annab avateksti:
KUI ARNO ISAGA KOOLIMAJJA JÕUDIS OLID TUNNID
JUBA ALANUD KOOLIÕPETAJA KUTSUS MÕLEMAD
TUPPA KÕNELES NENDEGA NATUKE AEGA KÄSKIS
ARNOL OLLA HOOLAS JA KORRALIK JA SEADIS TA
SIIS PINKI ÜHE PIKKADE JUUSTEGA POISI
KÕRVALE ISTUMA SIIS ANDIS KOOLIÕPETAJA TALLE
RAAMATUST MIDAGI KIRJUTADA JA ARNOL EI OLNUD
NÜÜD ENAM AEGA MUULE MÕTELDA TA VÕTTIS
TAHVLI JA HAKKAS KIRJUTAMA KUI TA OLI
KIRJUTANUD UMBES PAAR RIDA KUMMARDUS PIKKADE
JUUSTEGA POISS TEMA KÕRVA JUURDE JA KÜSIS
SOSINAL MIS KOOLMEISTER ÜTLES KUI TE TEMA
TOAS OLITE
Ja vastava asenduse:
A B D E F G H I J K L M N O P R S T U V Õ Ä Ö Ü
g h i j k l m n o p r s t u v õ ä ö ü a b d e f
Kui sõnavahesid ei ole antud ...
• Siis kasutatakse tähepaaride ja
tähekolmikute esinemissagedusi.
• Inglise keeles on kõige levinumad paarid
TH, HE, IN, ER, AN, RE, ED, ON, ES, ST, EN, AT, TO,
NT, HA, ND, OU, EA, NG, AS, OR, TI, IS, ET, IT, AR,
TE, SE, HI, OF.
• Kõige levinumad kolmikud THE, ING, AND,
HER, ERE, ENT, THA, NTH, WAS, ETH, FOR, DTH.
Vigenere’i šifri murdmine
• Kõigepealt leitakse võtmemärkide arv m
statistiliste meetoditega.
• Seejärel leitakse (ka statistiliste meetoditega)
võtmemärkide (k1,…,km) vahed (m-1 tükki).
• Avaldatakse kõik võtmemärgid üheainsa
võtmemärgi kaudu.
• Proovitakse sagedusanalüüsi abil saadavaid
võtmekandidaate.
Kasiski test
• Kirjeldati esimesena Friedrich Kasiski poolt
aastal 1863.
• Idee: kaks identset avateksti lõiku
krüpteeritakse identseteks lõikudeks, kui nende
lõikude alguspunktide vahe jagub m-ga.
• Vastupidi: Kaks identset krüptogrammi lõiku
pikkusega vähemalt kolm annavad suure
tõenäosusega identsed avateksti lõigud.
Kokkulangevuse indeks
• Olgu X=x1x2…xn, kus xi{A,…Z}.
Def. Jada X kokkulangevuse indeksiks Ic(X)
nimetatakse tõenäosust, et kaks juhuslikult
valitud elementi x ja x’ on võrdsed.
• f0,f1,…f25 -- tähtede A,B,…Z esinemiste arv.
Siis:
f0(f0-1) + … + f25(f25-1)
Ic(X) =
n(n-1)
Tõestus:
• Kahte elementi saab jadast X valida täpselt
n(n-1)/2 erineval viisil.
• Otsitav tõenäosus avaldub järgmiselt:
Pr[x=x’] = Pr[x=x’=A] + … + Pr[x=x’=Z].
• Pr[x=x’=A] = f0(f0-1)/n(n-1), sest kahte A-ga
võrdset elementi on võimalik jadast X
valida täpselt f0(f0-1)/2 erineval viisil.
Indeks Ic(X) loomuliku keele
teksti ja juhusliku sõne korral
• Kui X on inglisekeelne tekst, siis:
Ic(X)  p02 + … + p252 = 0.065,
kus pi on i-nda tähemärgi esinemise tõenäosus.
• Seevastu täiesti juhusliku sõne korral on
Ic(X)  26[1/26]2 = 1/26 = 0.038.
Võtmepikkuse leidmine: põhiidee
• Valime mingi arvu m ja jagame krüptogrammi
Y=y1y2…yn veergudeks järgmisel viisil:
Y1: y1 y1+m y1+2m … y1+km • Kui m on õige võtmepikkus, siis
Y2: y2 y2+m y2+2m … y2+km on Yi lähedane inglisekeelsele
…………………… tekstile ja Ic(Yi)  0.065.
Ym: ym y2m y3m …y(k+1)m • Kui aga m ei ole õige
võtmepikkus, siis on Yi lähedasem
juhuslikule sõnele, sest erinevad
tähed krüpteeritakse erinevate
võtmemärkidega
Omavahelise kokkulangevuse
indeks
• Olgu X=x1x2…xn ja Y=y1y2…yn’ kus xi ja yi{A,…Z}.
Def. Jadade X ja Y omavahelise kokkulangevuse indeksiks
Ic(X,Y) nimetatakse tõenäosust, et kaks juhuslikult
valitud elementi xX ja yY on võrdsed.
Kui f0,f1,…f25 -- tähtede A,B,…Z esinemiste arv jadas X ja
f’0,f’1,…f’25 -- tähtede A,B,…Z esinemiste arv jadas Y,
siis:
f0f’0 + … + f25f’25
Ic(X,Y) =
nn’
Tõestus
• Elemente xX ja yY valida täpselt nn’
erineval viisil.
• Otsitav tõenäosus avaldub järgmiselt:
Pr[x=y] = Pr[x=y=A] + … + Pr[x=y=Z].
• Pr[x=y=A] = f0f’0/nn’, sest kahte A-ga
võrdset elementi on võimaik valida täpselt
f0f’0erineval viisil.
Võtme K=(k1,…,km) leidmine (I)
• Hindame suurust Ic(Yi,Yj). Valime vastavatest
jadadest kaks elementi. Tõenäosus, et mõlemad
elemendid on võrdsed A-ga on
p-kip-kj
kus indeksid on võetud mod 26. Tõenäosus, et
mõlemad valitud elemendid on B-d, on p1-kip1-kj jne.
• Seega Ic(Yi,Yj) = h ph-kiph-kj = h phph+ki-kj sõltub
ainult vahest ki-kj.
• Kui ki-kj=0, siis Ic(Yi,Yj)0.065. Kui aga Kui ki-kj0,
siis Ic(Yi,Yj)0.040.
Võtme K=(k1,…,km) leidmine (II)
• Olgu Ic(X,Yg) =
f0f’-g + … + f25f’25-g
nn’
• Kui Ic(Yi,Yjg)  0.065, siis suure tõenäosusega
g=ki-kj.
• Kui piisaval arvul vahesid ki-kj on teada saadud,
siis lahendatakse lineaarvõrrandisüsteem, millest
kõik võtmetähed avaldatakse ühe võtme (näiteks
k1) kaudu.
Hilli šifri murdmine (I)
• Teadaoleva krüptogrammiga rünne on suhteliselt
keeruline.
• Teadaoleva avatekstiga rünne on aga lihtne.
Olgu Xj = (x1j, x2j,…, xmj) ja Yj=(y1j, y2j,…, ymj) ja
meil on vähemalt m erinevat m-elemendilist jada.
Olgu X=[xij] ja Y=[yij] vastavad mm maatriksid.
Siis krüpteerimisfunktsioon on maatrikskorrutis
Y = X·K.
Hilli šifri murdmine (II)
• Kui maatriks X on pööratav, siis saab võtme
avadada järgmiselt:
K = X-1Y.
• Kui X ei ole pööratav, siis tuleb hankida
lisainfot avatekst/krüptogramm paaridena.
Hilli šifri murdmine: näide
• Olgu m=2 ja ründaja teab paare:
EK(5,17) = (15,16) ja EK(8,3) = (2,5).
• Vastav maatriksvõrrand on
 5 17
15 16
 K = 2 5
8 3
• ja selle võrrandi lahend
-1 15 16

5
17
K=

=  9 1   15 16 =
8 3
2 5
 2 15  2 5 
 7 19
8 3
Nihkeregistri murdmine (I)
• Oletame, et ründaja teab, et võti on m-bitine ja
tema valduses on üks avatekst/krüptogramm
paar: X=(x1,…,xn) ja Y=(y1,…,yn), kus n  2m.
• Esimene samm: leiame vastavad võtmebitid:
zi= yi - xi mod 2.
Nihkeregistri murdmine (II)
• Teine samm. Kasutades seost:
zm+i = c0 zi + c1 zi+1 + … + cm-1 zi,
kirjutame välja järgmise maatriksvõrrandi:
(zm+1,zm+2,…,z2m) =
z1 z2 … zm 
(c0,c1,…,cm-1) z2 z3 … zm+1
……………….
zm zm+1 … z2m-1 
Nihkeregistri murdmine (III)
• Lahendame selle võrrandi ci-de suhtes ja
saame:
(c0,c1,…,cm-1) =
z1 z2 … zm -1
z2 z3 … zm+1
(zm+1,zm+2,…,z2m) ……………….
zm zm+1 … z2m-1 
• Registri struktuuri teadmine on piisav
võtmejada ekstrapoleerimiseks (mõlemas
suunas!)