180 likes | 347 Views
Cyfer – biblioteka kriptografskih funkcija. Senko Rašić. Vrste kriptografskih algoritama. Funkcije za izračunavanje sažetka poruke ( message digest, hash algorithms ) Simetrični kriptografski algoritmi ( symmetric block ciphers, symmetric stream ciphers )
E N D
Cyfer – biblioteka kriptografskih funkcija Senko Rašić
Vrste kriptografskih algoritama • Funkcije za izračunavanje sažetka poruke (message digest, hash algorithms) • Simetrični kriptografski algoritmi (symmetric block ciphers, symmetric stream ciphers) • Asimetrični kriptografski algoritmi (asymmetric ciphers, public-key algorithms) • Razmjena ključeva (key-exchange)
Način rada hash algoritma • Funkcija sa izračunavanje sažetka poruke na osnovu poruke proizvoljno velike duljine računa sažetak točno određene duljine • Poruka se nadopunjava i dijeli u blokove određene duljine • Nad svakim blokom obavlja se funkcija sažimanja • Krajnji izlaz funkcije je sažetak poruke
Simetrični kriptografski algoritmi • Jasni tekst se kriptira enkripcijskom funkcijom čiji je parametar tajni ključ • Kriptirani tekst ne daje nikakve informacije o jasnom tekstu ili ključu • Isti ključ koristi se i za enkripciju i za dekripciju (problem) • Algoritmi rade nad blokovima ili tokovima podataka
Asimetrični kriptografski algoritmi • Različiti ključevi za enkripciju i dekripciju – riješen problem distribucije ključeva • Dodatno omogućuju elektroničke potpise razmjenu sjedničkih ključeva • Baziraju se na jednosmjernim funkcijama s tajnim vratima – često korišten problem je rastavljanje vrlo velikih brojeva na proste faktore • Spori – koriste se u kombinaciji sa funkcijama za izračunavanje sažetka poruke i simetričnim kriptografskim algoritmima
Rad asimetričnih algoritama (RSA) • Generiranje ključeva: • generirati velike proste brojeve p i q • izračunati n = pq, z = (p – 1)(q – 1) • odabrati e tako da e i z budu relativno prosti • izračunati d takav da je ed≡ 1 (mod z) • Enkripcija: • poruka je cijeli broj m [0, n – 1] • kriptirana poruka je c = me mod n • Dekripcija: • kriptirana poruka je cijeli broj c [0, n – 1] • originalna poruka je m = cd mod n • Elektronički potpis je enkripcija privatnim ključem (d, n) • Provjera potpisa obavlja se javnim ključem (e, n)
Biblioteke kripto-algoritama • Sakrivaju od aplikacijskog programera zamorne detalje rada algoritama • Pružaju standardizirano programsko sučelje (API) za korištenje svih podržanih algoritama • Omogućuju izmjenu i dodavanje novih algoritama bez promjene aplikacija koje ih koriste • Većinom organizirane oko infrastrukture javnog ključa
Što je Cyfer? • Cyfer je low-level biblioteka kriptografskih funkcija • Ne sadrži podršku za infrastrukturu javnog ključa • Ciljevi: • Jednostavan API • Implementacija što više algoritama • Modularnost, proširivost • Prenosivost na različite platforme • Podrška za različite programske jezike
Podržani algoritmi • Funkcije za izračunavanje sažetka poruke: • MD2, MD4, MD5, RIPEMD-160, SHA-1, SHA-256, Snefru • Simetrični algoritmi: • AES, Blowfish, DEAL, DES, DESX, TripleDES, IDEA, RC2, RC4, RC5, RC6, ThreeWay • Načini rada simetričnih blok algoritama: • ECB, CBC, CFB, OFB • Asimetrični algoritmi: • RSA, ElGamal, LUC, Diffie-Hellman
Korištenje biblioteke (I) • Primjer računanja sažetka poruke (C): int l; // odabir algoritma int type = CYFER_Hash_Select(“SHA-256”, &l); char *hash = malloc(l); // kreiranje konteksta CYFER_HASH_CTX *ctx = CYFER_Hash_Init(type); // obrada bloka podataka CYFER_Hash_Update(ctx, “poruka”, 6); // završetak algoritma, dobavljanje rezultata CYFER_Hash_Finish(ctx, hash);
Korištenje biblioteke (II) • Primjer kriptiranja bloka podataka (Java): byte[] kljuc = “Tajni kljuc”.getBytes(); byte[] poruka = “skriveno”.getBytes(); // inicijalizacija algoritma BlockCipher c = new cyfer.BlockCipher( “Blowfish”, kljuc, “OFB”, null); // enkripcija byte[] rezultat = c.Encrypt(poruka); String kriptirano = new String(rezultat);
Korištenje biblioteke (III) • Primjer korištenja kriptografije javnog ključa (Python): # inicijalizacija RSA algoritma ctx = cyfer.pk.Pk(“RSA”) # stvaranje privatnog i javnog ključa ctx.GenerateKey(1024) # izvoz ključeva kljucevi = ctx.ExportKey() # enkripcija kriptirano = ctx.Encrypt(“Poruka...”)
Modularnost • Jednostavno proširivanje novim algoritmima • Novi algoritmi odmah dostupni aplikaciji koja koristi biblioteku, bez ponovnog prevođenja • Moguće izdvajanje pojedinog modula i korištenje izvan biblioteke • Elegantni dizajn smanjuje složenost sustava i mogućnost grešaka te olakšava održavanje programske podrške
Prenosivost • Cyfer se ne oslanja na posebnosti pojedinih operacijskih sustava • Ostvarenja algoritama ne ovise o poretku okteta u riječi, niti o duljini riječi (minimum je 32 bita) • Prenosivost na gotovo sve platforme za koje postoji C prevodioc • Biblioteka je testirana na x86 (Linux, FreeBSD, Windows) i SPARC (Solaris) platformama
Podržani programski jezici • Niti jedan programski jezik nije savršen • Podržati što više programskih jezika kako se programera ne bi sputavalo • Biblioteka je pisana u C-u, za ostale jezike napravljeni su omotači (wrappers) • Programsko sučelje (API) je konzistentno za sve jezike, no pojedini omotači koriste posebnosti jezika (npr. objekte) • Podržani su: C, C++, C#, Java, Python, Perl, PHP
Literatura • L. Budin, “Operacijski sustavi 2 – bilješke s predavanja”, 2004 • Menzes, Oorschot, Vanstone, “Handbook of Applied Cryptography”, 1996 • “Radovi studenata iz područja računalne sigurnosti”, http://sigurnost.zemris.fer.hr/ • Specifikacije algoritama, standardi i razni članci na Internetu