Post on 07-Jul-2018
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 1
Kripto-pagrindai
Rolandas Griškevičius
rolandas.griskevicius@fm.vgtu.lt
MSN: rgrisha@hotmail.com
http://fmf.vgtu.lt/~rgriskevicius
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 2
Terminai● Graikiškai - kryptos
● κρυπτός, (“kryptos” - slaptas) + γράφω (“grafo” - rašyti)
● Šifras ● (pranc. “shiffre”, viduramžių lot. “cifra”) - senosios Europos
ir Rytų kalbose reiškė nulį. Vėliau buvo įvestas terminas “šifravimas”, reiškiantis informacijos perkodavimą nuslepiant (bet išsaugant) turinį
● Dažnai painiojama su terminu “kodavimas” (encode)● Kodavimas – tai sutarto kodo panaudojimas keisti
duomenims įvairiems tikslams:
– Duomenų kompresijai (zip, mpeg4, mp3 etc)– Duomenų perdavimui (nebūtinai slaptam)– Identitikavimui (pvz, prekės kodas), etc …
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 3
Kriptografijos panaudojimas● Šiuolaikinėje kompiuterijoje naudojami šie
kriptografijos elementai:● Šifravimas (crypt)
– RSA, PGP, DES(3), AES(128|256), etc– Saugus duomenų perdavimas– Mokėjimo kortelių PIN kodų slaptumo užtikrinimas
● Santrauka (digest) / maiša (hash)
– CRC, MD5, SHA-1, – Elektrininis parašas– Slaptažodžių saugojimas / patikra
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 4
Kriptografijos panaudojimas (2)● Atsitiktinių skaičių generavimas
● Aparatūriniai, paremti fizikinių procesų matavimu● Programiniai, pseudo-atsitiktiniai, tam tikras algoritmas
● Panaudojimas:
– Http vartotojo sesijos – Kazino automatai– GSM pokalbio kodavimo raktai– CAPTCHA– Etc (pagalvokite kur daugiau ?)
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 5
Šifravimo algorimai● Klasikiniai
● Raidžių arba raidžių grupių permutacijos
– Cezario šifras (rot13) http://www.personal-computer-tutor.com/abc3/v29/vic29.htm
– Edgar Poe “Golden bug”. http://etext.virginia.edu/toc/modeng/public/PoeGold.html
– Sir Arthur Conan Doyle “The Adventure of the Dancing Men” http://en.wikipedia.org/wiki/The_Adventure_of_the_Dancing_Men
● Permutacija su raktu
– Jules Verne “La Jangada” (english version: “Eight Hundred Leagues on the Amazon” ) http://www.gutenberg.org/files/3091/3091-h/3091-h.htm
– Enigma (Google pilna, http://rtn.elektronika.lt/rtn/0401/enigma.html)
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 6
Širavimo algoritmai (2)● Modernūs
● Asimetriniai (viešo ir privataus rakto) – RSA● Simetriniai
– Srautiniai RC4, A5/1– Blokiniai DES, AES, Blowfish
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 7
RSA● Principai:
1. Generate two large random primes, p and q, of approximately equal size such that their product n = pq is of the required bit length, e.g. 1024 bits.
2. Compute n = pq and (φ) phi = (p-1)(q-1).
3. Choose an integer e, 1 < e < phi, such that gcd(e, phi) = 1.
Most frequently, 3 (F0), 17(F1) and 65537(F4) used
4. Compute the secret exponent d, 1 < d < phi, such that ed ≡ 1 (mod phi).
Extended Euclidean Algorithm
5. The public key is (n, e) and the private key is (n, d). Keep all the values d, p, q and phi secret.
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 8
RSA (2)
1.Šifravimas:
Recipient A:
1. Obtains the recipient B's public key (n, e).
2. Represents the plaintext message as a positive integer m. Some random padding involved to secure message additionally
3. Computes the ciphertext c = me mod n.
4. Sends the ciphertext c to B.
2.Dešifravimas:
Recipient B:
1. Uses his private key (n, d) to compute m = cd mod n.
2. Extracts the plaintext from the message representative m.
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 9
RSA (3)● GCD – greatest common divisor, bendras didžiausias
daliklis. Algoritmas - Euklidas, “Elementai”, 1 ir 2 skyrius
● Kaip paskaičiuojamas pakankamai didelis pirminis skaičius ?● Maža paskaičiuoti p ir q, reikia, kad skirtumas tarp jų būtų
gana didelis – kitaip pasinaudojus Ferma algoritmu juos galima išskaičiuoti
● Įvairių įrodytų teoremų pagalba – Ferma skaičiai, Merseno skaičiai, etc. “Grubiai” tikrinti, ar pasirinktas skaičius pirminis, būtų sunkoka
● Kadangi n turimas, (jis yra rakto dalis), norint “nulaužti” agoritmą reikia paskaičiuoti phi, o tai reiškia, kad reikia surasti p ir q
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 10
RC4● Vienas iš lengviausiai suprogramuojamų algoritmų
● C kalboje - ~20 – 30 eilučių
● Sudaro 2 žingsniai● Inicializacija
– Kintamo ilgio raktui atliekama permutacija naudojant KSA (key sheduling)
● PRNG – pseudo randominės sekos generavimas
● http://en.wikipedia.org/wiki/RC4
● WEP – viena iš nesėkmingiausių RC4 implementacijos pavyzdžių
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 11
DES● Rakto ilgis – 64 bitai, bet 1 bitas kiekviename baite
yra naudojamas kaip patikra (parity), todėl lieka 56
● Šifrvimas vyksta blokais po 8 baitus, t.y. į DES automato įėjimą duomenys patenka gabalais po 8 baitus.
● Prieš šifravimą įvykdoma pirminė bitų permutacija, o baigus šifruoti galutinė permitacija, atvirkštinė pirminei
● Toliau vykdoma 16-kos analogiškų žingsnių seka, kai specialia Feistelio (vienas iš kūrėjų) funkcija permutuojamos įėjimo dalys (2 po 32 bitus), parenkant 48 bitų permutaciją iš rakto reikšmės
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 12
DES (2)● f – Feistelio funkcija
● Ln,R
n – į 32 bitus
padalintas įėjimas
● Kn – 48 bitų rakto dalis
Iš http://www.itl.nist.gov/fipspubs/fip46-2.htm
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 13
DES saugumas ir realizacija● DES yra gana nesunkiai realizuojamas procesoriaus
pagalba
● Siekiant greitaveikos, permutacijos dalys, taip pat L,R porų keitimasis gali būti atliekami asembleriu
● DES, kaip ir kiti bitų permutacijos algoritmai yra labai patogūs realizuoti eletroninių programuojamų masyvų pagalba (FPGA).
● Copacobana mašina yra
sukonstruota iš 120 FPGA
Pilnai “perrenka” DES per
9 dienas
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 14
3DES
● 3DES (“tripple DES”) - 3 kartus nuosekliai sujungtas DES algoritmas
● Rakto ilgis – 192 bitai
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 15
CRC32● Vienas iš maždaug 30 CRC[x] variantų:
x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
● Pentium, SSE4.2, Application targeter acceletor istruction set, viena iš 7 → CRC32
● http://www.algorithm-code.com/wiki/CRC32_Algorithm
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 16
Maišos funkcijos● Egzistuoja labai daug variantų
● Viena iš seniausių – djb2 :
djb2
unsigned long hash(unsigned char *str) { unsigned long hash = 5381; int c;
while (c = *str++) hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash; }
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 17
Santrauka. MD5● Skirtingai nuo
(absoliučiai kalbant) maišos funkcijų, santrauka yra (turi būti) visada unikali.
● Naudojamos 4 F funkcijos:
● F(X,Y,Z) = (X Y) ( X Z)∧ ∨ ┐ ∧
● G(X,Y,Z) = (X Z) (Y Z)∧ ∨ ∧┐
● H(X,Y,Z) = X Y Z⊕ ⊕
● I(X,Y,Z) = Y (X Z) ⊕ ∨┐
2010-10-15 R. Griškevičius, Saugus programavimas, VGTU, 2010 18
Kombinuotas CRC + MD5● MD5 yra gana “brangus” algoritmas, todėl kai
kuriuose projektuose naudojamas CRC32 + MD5 sprendimas
● Paaiškinkite kaip ?