Kriptográfia és Információbiztonság 3. eloadásmgyongyi/Crypto/3_Folyam.pdf · 2020-03-03 ·...
Transcript of Kriptográfia és Információbiztonság 3. eloadásmgyongyi/Crypto/3_Folyam.pdf · 2020-03-03 ·...
Kriptográ�a és Információbiztonság3. el®adás
MÁRTON Gyöngyvér
Sapientia Egyetem, Matematika-Informatika Tanszék
Marosvásárhely, Románia
2020
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Mir®l volt szó az elmúlt el®adáson?
Klasszikus kriptográ�ai rendszerek
Helyettesítéses rejtjelezés: a�n-titkosítóMátrixos rejtjelezés: Hill módszerematematikai modell
titkos-kulcsú rendszerek: matematikai modell
az OTP titkosítási rendszer
tökéletes biztonság
biztonság-értelmezések, osztályozások
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Mir®l lesz szó?
titkos-kulcsú rendszerek: matematikai modell, osztályozások
folyam-titkosító rendszerek: OTP, RC4, linear feedback shift register,A5/1, Salsa20
az NTL könyvtárcsomag
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
A titkos-kulcsú rendszerek matematikai modellje
megnevezések: titkos-kulcsú rendszerek, szimmetrikus rendszerek(private-key, symmetric crypto),
jelölés: SKE -vel, a (K ,M,C) halmaz-hármas felett értelmezzük.
3 algoritmus:
Gen, a kulcs-generáló algoritmus, polinom idej¶, véletlenszer¶:
keyR←− Gen(1k), ahol key ∈ K , k ∈ Z≥0 a rendszer biztonsági
paramétere (legtöbb esetben a generált kulcs bit-hossza),Enckey a rejtjelez® algoritmus, polinom idej¶, véletlenszer¶:
cR←− Enckey (m),
a Deckey a visszafejt® algoritmus, polinom idej¶, determinisztikus:m← Deckey (c).Helyesség: Deckey (Enckey (m)) = m, minden m ∈ M esetében.
gyakorlatban a polinom futásidej¶ algoritmus hatékony algoritmust jelent,például elvárjuk, hogy 1 gigabájtnyi adat titkosítását 1 perc alatt végezzeel a rendszer
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
A titkos-kulcsú rendszerek osztályozása
nagy adathalmaz titkosítására alkalmasak
nincs megoldva a felek közötti kulcs-csere, ezt a nyilvános kulcsúkriptográ�a végzi,
két nagy csoportra oszthatóak:
folyam-titkosító rendszerek,blokk-titkosító rendszerek.
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Folyam-titkosító rendszerek
véletlenszer¶en generálnak egy bitsort, a kulcsfolyamot, amelyetlegtöbbször a ⊕ m¶velettel hozzáadnak a nyílt szöveghez,
a kulcsfolyamot egyetlenegyszer használják,
a rendszer biztonságát a kulcsfolyamot generáló algoritmus határozzameg ⇒ álvéletlen-szám generáló algoritmusok (pseudo-random numbergenerators)
nem minden ál-véletlenszám generátor alkalmas a kriptográ�ában,
pl: az xn = a · xn−1 + b (mod p) lineáris kongruenciával értelmezettgenerátor sem alkalmas.
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Folyam-titkosító rendszerek
implementációjuk általában könny¶
hardver-be építve nagyon gyorsak, ezért legtöbbször hardver szintjénimplementálják ®ket
szoftver szintjén nem mindig érik el a megfelel® gyorsaságot
leginkább akkor használják, amikor nem lehet tudni, hogy milyen hosszú anyílt szöveg, pl wireless kommunikáció
katonai környezetben gyakran használják: a kulcsfolyam el®állítást különeszköz végzi, ez jól védett, a XOR m¶veletek elvégzésére pedig máseszközt használnak, amelynek biztonsága már nem olyan fontos
biztonságuk vitatott, pl. az RC4, A5/1 kezdetben titkosak voltak, miutánpublikussá váltak számos gyengeséget fedeztek fel bennük
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az RC4
1987-ben tervezte Ron Rivest, kezdetben nem volt publikus,
1994-ben ismeretlenül felkerült a Cyberpunk levelez®-listájára,
a HTTPS, WEP és számos más protokollban használták,
ma már nem biztonságos, több sikeres támadás érte,
új projekteknél nem ajánlatos használni
a Internet Engineering Task Force (IETF) 2015-t®l tiltja a használatát
Elvi m¶ködése:
egy 128 bites kezdeti érték alapján, a 256 fajta bájtértéket összekeverve,el®állít egy 256 elem¶ bájt-tömböt, amely a generátor alap állapotánakfog megfelelni,
a kulcsfolyam egy bájtja, a 256 elem¶ bájttömb, egy, "véletlenszer¶en"kiválasztott bájtja lesz,
a kulcsfolyam bájtjait ciklikusan állítja el®, amit ⊕ m¶velettel ad hozzá anyílt szöveghez.
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az RC4
Gyengeségek:
annak a valószín¶sége, hogy a második bájt 0 lesz1
256kellene legyen, de
ez nem így van, mert ez2
256lesz; hasonló a helyzet az els® 256 bájttal is
megoldás: a kulcs-folyam els® 256 bájtját nem használjuk fel atitkosításban
a 00 szekvencia gyakrabban fordul el®, mint a 01, 10, 11 szekvencia,
ha két olyan kezdeti kulcsértéket használok, amelyek "közel állnakegymáshoz" további feltörési stratégia válik lehetségessé: related keysattack
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
RC4, inicializálási szakasz
void rc4_init(unsigned char *key, unsigned int key_length) {
for (i = 0; i < 256; i++)
S[i] = i;
for (i = j = 0; i < 256; i++) {
j = (j + key[i % key_length] + S[i]) & 255;
swap(S, i, j);
}
i = j = 0;
}
a key tömb a kulcs bájtjait tartalmazza
az i, j értékek és az S tömb globális, kezdetben megegyezik az identitáspermutációval
a swap függvény felcseréli a megfelel® index¶ elemeket az S tömbb®l
A 256-al történ® maradékos osztás 255-tel való & (AND) m¶velettelhelyettesíthet®
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
RC4, kulcsfolyam-generálás
unsigned char rc4_output() {
i = (i + 1) & 255;
j = (j + S[i]) & 255;
swap(S, i, j);
return S[(S[i] + S[j]) & 255];
}
minden lépésben sor kerül a megfelel® elemek felcserélésére éskiválasztására
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
RC4, string titkosítás/visszafejtés
int main() {int k, output_length;string key = "myKey in 2020";int l = key.length();
//encryptionstring plainText = "Cryptography labor 2020";int pL = plainText.length();string cryptText = "";rc4_init((unsigned char*)key.c_str(), l);for (int i = 0; i < pL; ++i)
cryptText += plainText[i] ^ rc4_output();cout << "encrypted text: " << cryptText << endl << endl;
cout << "encrypted text in HEX: ";for (i = 0; i < pL; ++i)
cout << hex << (0xFF & cryptText[i]) << " ";cout << endl << endl;
//decryptionint cL = cryptText.length();string decryptText = "";rc4_init((unsigned char*)key.c_str(), l);for (int i = 0; i < cL; ++i)
decryptText += cryptText[i] ^ rc4_output();cout << "decrypted text: " << decryptText << endl << endl;
}
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Visszacsatolt, léptet® regiszteres titkosítás, linear feedbackshift register - LFSR
Számos rendszer esetében használták, használják pl.:
DVD titkosítása esetén a rendszer neve CSS (content scramblingsystem)GSM titkosítás esetén a rendszer neve A5/1, A5/2Blutooth titkosítás esetén a rendszer neve E0
hardvare szintjén könnyedén és hatékonyan implementálható
a kulcsfolyamot egy lineáris összefüggés alapján számolják, kiindulva akey = (z1, z2, . . . , zm) értékekb®l:
zi+m = c0zi + c1zi+1 + . . . cm−1zi+m−1 (mod 2),
ahol i ≥ 1 és c0, c1, . . . , cm−1 rögzített konstansok
a c0, c1, . . . , cm−1 konstansok helyes választása esetén a kulcsfolyamperiódusa maximális lesz: 2m − 1.
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az LFSR támadása, feltörhet®sége
Példa 16 bites LFSR:
zi+16 = zi + zi+2 + zi+3 + zi+5 (mod 2),
Ha key = (z1, z2, . . . , z16) = 1010 1100 1110 0001,
akkor a kulcsfolyam els® bitjei a pirossal kijelölt értékek lesznek, aholz17 = z1 + z3 + z4 + z6:
0101 1001 1100 0011 1+ 1+ 0+ 1 = 11011 0011 1000 0111 0+ 0+ 1+ 0 = 10110 0111 0000 1111 1+ 1+ 1+ 0 = 11100 1110 0001 1110 0+ 1+ 0+ 1 = 01001 1100 0011 1100 1+ 0+ 0+ 1 = 00011 1000 0111 1001 1+ 0+ 1+ 1 = 1
a kulcsfolyam: 1010 1100 1110 0001 1110 01
216 − 1 lesz a generátor periódusa
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az LFSR támadása, feltörhet®sége
A támadó, ha tudja, hogy a titkosító 5-bites LFSR-titkosítást alkalmazott ésrendelkezik a következ® titkosított bit-szekvenciával
0 1 1 0 1 1 0 1 1 1
és a bit-szekvencia titkosított értékével:
0 0 1 1 0 1 1 1 1 1
akkor a fenti két bitsorozat xor-olásával, megtudja határozni a kulcsfolyam els®bitjeit:
0 1 0 1 1 0 1 0 0 0
Ez alapján fel tudja írni a következ® lineáris egyenletet, és azt megoldva,megtudja határozni az alkalmazott lineáris összefüggést is, azaz megtudjahatározni a kulcsfolyamot:
(0, 1, 0, 0, 0) = (c0, c1, c2, c3, c4) ·
0 1 0 1 1
1 0 1 1 0
0 1 1 0 1
1 1 0 1 0
1 0 1 0 0
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az LFSR támadása, feltörhet®sége
Meghatározható:
0 1 0 1 1
1 0 1 1 0
0 1 1 0 1
1 1 0 1 0
1 0 1 0 0
−1
=
1 1 1 0 0
1 0 1 1 1
1 1 1 0 1
0 1 0 0 1
0 1 1 1 0
ahonnan:
(c0, c1, c2, c3, c4) = (0, 1, 0, 0, 0) ·
1 1 1 0 0
1 0 1 1 1
1 1 1 0 1
0 1 0 0 1
0 1 1 1 0
= (1, 0, 1, 1, 1)
Tehát a kulcsfolyam kigenerálásához alkalmazott lineáris összefüggés akövetkez®: zi+5 = (zi + zi+2 + zi+3 + zi+4) (mod 2).
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az LFSR támadása, feltörhet®sége
az alkalmazott m¶veletek lineárisak, ezért a rendszer feltörhet®,
ha ismerjük hogy a (x1, x2, . . . , xn) nyílt szövegnek (y1, y2, . . . , yn) arejtjele, illetve ismerjük az m értékét akkor meghatározható azalkalmazott lineáris összefüggés
meghatározzuk: (x1, x2, . . . , xn)⊕
(y1, y2, . . . , yn)⇒ (z1, z2, . . . , zn)
ha n ≥ 2m, akkor a támadó megtudja határozni a (c0, c1, . . . , cm−1)értékeket a következ® módon (következ® oldal):
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az LFSR támadása, feltörhet®sége
felírható:
(zm+1, zm+2, . . . , z2m) = (c0, c1, . . . , cm−1) ·
z1 z2 . . . zmz2 z3 . . . zm+1
.
.
....
.
.
.
zm zm+1 . . . z2m−1
és meghatározható:
(c0, c1, . . . , cm−1) = (zm+1, zm+2, . . . , z2m) ·
z1 z2 . . . zmz2 z3 . . . zm+1
.
.
....
.
.
.
zm zm+1 . . . z2m−1
−1
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az A5/1
a GSM technológiában használják,
hardware szinten szokták implementálni,
három léptet® regiszterrel dolgozik, X, Y, Z-vel amelyek összesen 64 bitet
kezelnek
az X 19 bites: (x0, x1, . . . , x18),az Y 22 bites: (y0, y1, . . . , y21),a Z 23 bites: (z0, z1, . . . , z22),
a kulcs 64 bites, amellyel feltöltik a három regisztert
a következ® bels® "majoráló/növel®" függvényt számoljuk ki mindenóraimpulzusban:
m = maj(x8, y10, z10) =
{0, ha a három bit között több a 0-ás
1, ha a három bit között több az 1-es
ha x8 = m, akkor X-et léptetjük
ha y10 = m, akkor az Y-t léptetjük
ha z10 = m, akkor az Z-t léptetjük
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az A5/1
A kulcsfolyam el®állítása a következ®képpen történik:
X léptetése:t = x13 ⊕ x16 ⊕ x17 ⊕ x18xi = xi−1, i = 18, 17, . . . 1− rex0 = t
Y léptetése:t = y20 ⊕ y21yi = yi−1, i = 21, 20, . . . , 1− rey0 = t
Z léptetése:t = z7 ⊕ z20 ⊕ z21 ⊕ z22zi = zi−1, i = 22, 21, . . . , 1− rez0 = t
a kulcsfolyam aktuális s bitje: s = x18 ⊕ y21 ⊕ z22
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
A Salsa20
a 2008-ban lezáruló eSTREAM projekthez beküldött folyam-titkosító,
tervez®je D.J.Bernstein; teljesen publikus:
http://cr.yp.to/djb.html,
úgy hardver, mint softver implementációja ismert,
feltörési módszerek: az eddigi leghatásosabb módszer az összes kulcskipróbálásának módszere,
hatékonysága: 643 Mb/sec, ∼ 6-szor gyorsabb mint az RC4.
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
A Salsa20
a kulcs mérete: 128 vagy 256-bit hossz,
ha a kulcs mérete 128 bit, akkor a következ® a speci�káció:
a k kulcs mellett a bemenetnek meg kell adni egy 64 bites r nonce(number use at once) értéket, ahol a || összef¶zést jelent:
Salsa20 : {0, 1}128 × {0, 1}64 → {0, 1}nSalsa20(k, r) = H(k||r ||0))||H(k||r ||1)|| . . . ,
A H függvényt a k||r ||i bemeneten hajtjuk végre, ahol az i számlálóértékét 64 biten tároljuk,
A H függvény a 32 bájtból (256 bit) → 64 bájtot állít el®:
(k||r ||i)→ (t0||k||t1||r ||i ||t2||k||t3),
melyen 10-szer alkalmaz egy invertálható h : {0, 1}64 → {0, 1}64függvényt.
a H függvény kimenetét 4 bájtonként (mod 232) szerinti összeadástvégezve adjuk hozzá a nyílt szöveghez.
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Valós rendszerek biztonsági problémái
Közvetett vagy közvetlen módon felmerül a kulcs többszöri felhasználása:
Venona projekt: célja az orosz titkosszolgálat üzeneteinek a megfejtésevolt, 1943-1980 között. Az amerikai hadsereg kb. 3000 üzenetet fejtettmeg ebben a periódusban mert többször birtokába került két-két olyantitkosított érték, ahol mindkét esetben ugyanazt a kulcsot használták atitkosítás során.
MS-PPTP (windows NT): szerver és kliensek közti kommunikáció esete,volt egy megosztott titkos kulcs, ahol a szerver és kliens oldalon isugyanazzal a kulcs-folyammal végezték a titkosítást ⇒ a kulcs többszörifelhasználása. Megoldás: kulcspár használata, amelyet a szerver és akliens is ismer, egyik érték a szerver, másik érték a kliens oldalititkosításhoz.
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Valós rendszerek biztonsági problémái
Közvetett vagy közvetlen módon felmerül a kulcs többszöri felhasználása:
802.11b WEP, több probléma, az egyik: egy 24 bites inicializáló érték(IV) alkalmazása lehet®vé tette a WEP feltörését, mert túl kicsi volt az IVbithossza: 224 ∼ 16 millio IV érték után az IV-k ciklikusan ismétl®dtek.
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az NTL könyvtárcsomag, létrehozás, Visual Studio
töltsük le http://www.shoup.net/ntl/download.html oldalról
csomagoljuk ki pl. a ...Projects\WinNTL mappába,
hozzunk létre egy új projektet: New → Project →Project From Existing Code,
adjunk egy nevet a projektnek, legyen ez NTLLib,
adjuk meg a projekt helyét: ...Projects\WinNTL\src
válasszuk ki a projekt típusát: Static Library (LIB) project
az Include search path-nál adjuk meg a header állományok elérési útvonalát:
...Projects\WinNTL\include
A projekt Properties/General pontnál cseréljük át az sdk verziót 8.1-r®l
10.0....-ra
A projekt Properties/Code Generation pontnál állítsuk
Disable Security Check-re a Security Check beállítást
a Bulid\Solution parancs megadásával létrejön a
...Projects\NTLLib\src\Debug mappában az NTLLib.lib állomány, amit a
további projekteknél kell használni.
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az NTL könyvtárcsomag, használat, Visual Studio
Hozzunk létre egy új projektet: New → Project →Win32 ConsoleApplication,
adjunk egy nevet a projektnek, legyen ez Labor,
jelöljük be a Empty project opciót.
a Labor project-hez az Add Existing Item menüpont segítségével adjukhozzá a megfelel® Debug mappából az NTLLib.libállományt,
a Project/NTLLib/Properties menüpontnál azAdditional Include Directories-nél adjuk meg a header állományokelérési útvonalát: ...\WinNTL\include,
a Project Properties → C/C++ → Code Generation állítsuk be aDisable Security Check-et
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az NTL könyvtárcsomag, létrehozás, Code Blocks
töltsük le és csomagoljuk ki a, pl. a WinNTL mappába:http://www.shoup.net/ntl/download.html
hozzunk létre egy új projektet: New → Project → Static library,
adjunk egy nevet a projektnek, legyen ez NTLLib,
az Add Files-al adjuk hozzá a WinNTL\src mappából az összesállományt,
a Project/Build Options/search Directories menüpontnál adjukmeg a header állományok elérési útvonalát: ... \WinNTL\include
a Build\Bulid parancs megadásával létrejön a NTLLib mappábanlibNTLib.a állomány, ezt kell hozzáadni azokhoz a projektekhez, aholhasználni akarjuk a az NTL függvényeket.
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az NTL könyvtárcsomag, használat, Code Blocks
Hozzunk létre egy új projektet: File → New → Console Application,
adjunk egy nevet a projektnek, legyen ez Labor,
a Project\Build Options\Linker settings menüpont segítségéveladjuk hozzá az NTLLib mappából a létrehozott *.a állományt,
a Project\Build Options\Serach directories-nál adjuk meg aheader állományok elérési útvonalát: ...\WinNTL\include.
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság
Az NTL könyvtárcsomag, használat
a forráskódba:
#ifndef _ZZ_
#define _ZZ_
#include <NTL/ZZ.h>
#include <NTL/matrix.h>
#include <NTL/mat_ZZ.h>
#endif
NTL_CLIENT
ZZ d; a nagy számok kezelésére szolgáló típus,
Mat<ZZ> A; mátrix kezelésére alkalmas típus,
A.SetDims(n, n); az A mátrix méretének a beállítása,
A.NumRows(); sorméret lekérdezés,
A.NumCols(); oszlopméret lekérdezés,
inv(d, invA, A, 0); meghatározza az A mátrix determinánsát, a d
változóba illetve azt az invA mátrixot, amelyre teljesül:(A * invA) / d = I
MÁRTON Gyöngyvér 2020, Kriptográ�a és Információbiztonság