ASIMETRIČNA KRIPTOGRAFIJA. SAŽETAK (HASH). DIGITALNI POTPIS I CERTIFIKAT.
Asimetrična kriptografija
Postoje dvije osnovne vrste kriptografije: simetrična i asimetrična.
Osnovna razlika je u tome da simetrični algoritmi koriste isti ključ za enkripciju i dekripciju neke poruke (ili se ključ za dekripciju može lako proizvesti iz originalnog ključa za enkripciju), dok asimetrični algoritmi koriste različite ključeve za enkripciju i dekripciju iste.
ASIMETRIČNA KRIPTOGRAFIJA
Problemi u simetričnoj kriptografiji:
- razmjena ključeva
- nemogućnost digitalnog potpisivanja
asimetrično:
jedan ključ za šifriranje, drugi ključ za dešifriranje
ključevi su međusobno vezani
neizvedivo je poznavajući algoritam i jedan ključ otkriti drugi
često: svejedno je kojim ključem se šifrira, a kojim dešifrira
rade isključivo u paru
Poznavanjem javnog ključa ne može se izračunati tajni ključ u nekom razumnom vremenu
Vrijeme potrebno za izračunavanje tajnog ključa iz poznatog javnog ključa, tj. razbijanje šifre, mjeri se milijunima godina na danas najjačim raspoloživim računalima.
Također poznata kao javni ključ kriptografije.
Koristi dvije različite, ali matematički povezane ključeve – javni ključ i privatni ključ.
Javni ključ se može podijeliti s bilo kojom stranom i koristi se za enkripciju podataka.
Privatni ključ se koristi za dekripciju podataka i mora biti sigurno čuvan.
Ovaj pristup je sigurniji od simetrične kriptografije jer privatni ključ ostaje tajan, a javni ključ se može dijeliti.
Privatni ključ (KP): Svaki korisnik ima svoj privatni ključ koji koristi za dešifriranje poruka ili digitalno potpisivanje dokumenata. Ovaj ključ je tajna informacija i dostupan je samo vlasniku.
Javni ključ (KJ): Svaki korisnik također ima svoj javni ključ koji se može dijeliti s drugima. Javni ključ koristi se za šifriranje poruka ili provjeru digitalnih potpisa. Ovaj ključ je dostupan svima i može se distribuirati.
Šifriranje s javnim ključem: Kada netko želi poslati šifriranu poruku određenom korisniku, koristi javni ključ tog korisnika za šifriranje poruke. Samo vlasnik privatnog ključa može dešifrirati tu poruku.
Dešifriranje s privatnim ključem: Kada korisnik primi šifriranu poruku, koristi svoj privatni ključ za dešifriranje poruke i čitanje sadržaja.
Šifriranje s privatnim ključem: Korisnik također može koristiti svoj privatni ključ za šifriranje poruka. Međutim, takva poruka može se dešifrirati samo s odgovarajućim javnim ključem tog korisnika.
Dešifriranje s javnim ključem: Javni ključ također se može koristiti za dešifriranje poruka koje su šifrirane privatnim ključem. To omogućuje drugim korisnicima provjeru digitalnih potpisa ili dešifriranje poruka koje su poslane određenim korisnicima.
Na slici je prikazan proces asimetrične kriptografije, koji se sastoji od nekoliko ključnih koraka za osiguravanje tajnosti i autentifikacije komunikacije između dva entiteta, označenih kao A (pošiljatelj) i B (primatelj). Asimetrična kriptografija, poznata i kao kriptografija s javnim ključem, koristi par ključeva – privatni i javni ključ – za šifriranje i dešifriranje poruka. Evo kako to funkcionira na slici:
- Izvor poruke (A): Ovo je entitet koji želi poslati šifriranu poruku drugom entitetu.
- Algoritam šifriranja: Pošiljatelj koristi algoritam šifriranja kako bi šifrirao poruku (M). Algoritam zahtijeva javni ključ primatelja (B) označen kao EKPB(M)EKPB(M), gdje je EE funkcija šifriranja koja koristi javni ključ primatelja KPBKPB za šifriranje poruke MM. Rezultat je šifrirana poruka PP.
- Algoritam šifriranja (ponovno): Ovaj korak može predstavljati dodatnu razinu šifriranja, na primjer, za autentifikaciju poruke ili njezin integritet. Poruka PP se šifrira s javnim ključem pošiljatelja KPAKPA i postaje CC, šifrirani tekst.
- Algoritam dešifriranja: Na strani primatelja, šifrirana poruka CC se dešifrira koristeći privatni ključ primatelja DKPB(C)DKPB(C), koji omogućava dobivanje originalne šifrirane poruke PP.
- Algoritam dešifriranja (ponovno): Primatelj tada koristi svoj privatni ključ KPBKPB kako bi dešifrirao poruku PP i dobio izvornu nešifriranu poruku MM.
- Odredište poruke (B): Primatelj sada može pročitati izvornu poruku koju je poslao pošiljatelj.
- Izvor para ključeva: Ovo je sustav ili metoda putem koje se generiraju parovi ključeva koji se koriste u procesu šifriranja/dešifriranja. Ovdje je prikazana dvostruka veza između izvora ključeva i algoritama šifriranja/dešifriranja, što znači da oba entiteta (A i B) imaju pristup svojim privatnim ključevima, dok su njihovi javni ključevi dostupni drugoj strani.
Zeleni blokovi predstavljaju akcije koje su sigurne ili zaštićene (kao što su generiranje ključeva i dešifriranje), dok su plavi blokovi koraci koji uključuju prijenos podataka (poput šifrirane poruke koja putuje od A do B). Sam naslov “TAJNOST I AUTENTIKACIJA” ukazuje na to da su obje ove značajke osigurane ovim procesom: tajnost putem šifriranja, a autentifikacija putem potvrđivanja identiteta uz pomoć javnih i privatnih ključeva.
U ovom scenariju, ako Bob želi poslati poruku Alice, koristi Alicein javni ključ za šifriranje poruke. To znači da Bob koristi javni ključ Alice kako bi transformirao poruku u oblik koji samo Alice može dešifrirati. Zatim Bob šalje šifriranu poruku preko otvorenog kanala komunikacije, poput interneta.
S druge strane, Alex je napadač koji pokušava presresti poruku koju Bob šalje Alice. Budući da Alex ima pristup javnom ključu Alice, može vidjeti šifriranu poruku. Međutim, bez Aliceinog privatnog ključa, Alex nije u mogućnosti dešifrirati poruku i pročitati njezin sadržaj.
Kada Alice primi šifriranu poruku, koristi svoj privatni ključ za dešifriranje poruke i otkrivanje njezinog sadržaja. Budući da samo Alice posjeduje privatni ključ, samo ona može uspješno dešifrirati poruku koju joj je poslao Bob.
Ukratko, asimetrična kriptografija omogućuje sigurnu komunikaciju putem javnog kanala tako što korisnici koriste javne ključeve za šifriranje poruka koje samo vlasnici privatnih ključeva mogu dešifrirati i pročitati. Ovo pruža sigurnost u komunikaciji čak i ako napadač presretne šifrirane poruke.
Evo nekoliko primjera algoritama asimetrične kriptografije koji se često koriste u praksi:
- RSA (Rivest-Shamir-Adleman): Jedan od najčešće korištenih algoritama za digitalno potpisivanje i enkripciju. Temelji se na problemu faktorizacije velikih brojeva.
- ECC (Elliptic Curve Cryptography): Koristi matematičke strukture eliptičkih krivulja za generiranje ključeva i izvođenje kriptografskih operacija. Ovaj algoritam postaje sve popularniji zbog svoje učinkovitosti u odnosu na klasične algoritme kao što je RSA.
- DSA (Digital Signature Algorithm): Algoritam za digitalno potpisivanje koji se često koristi u kombinaciji s drugim algoritmima kao što je SHA (Secure Hash Algorithm) za stvaranje digitalnih potpisa.
- Diffie-Hellman (DH): Algoritam za sigurnu razmjenu ključeva koji omogućava dvama stranama da uspostave zajednički tajni ključ preko nesigurnog kanala.
- ElGamal: Algoritam koji se koristi za enkripciju i digitalno potpisivanje, posebno popularan u sustavima koji zahtijevaju homomorfnu enkripciju.
Važno je razumjeti nekoliko dodatnih aspekata:
- Napadi na asimetričnu kriptografiju: Iako asimetrična kriptografija pruža visoku razinu sigurnosti, podložna je određenim vrstama napada. Jedan takav napad je poznat kao “napad srednjeg čovjeka” (man-in-the-middle attack), gdje napadač uspješno presretne komunikaciju između dvije strane, stvarajući lažne ključeve i lažno potvrđujući identitete kako bi preuzeo kontrolu nad komunikacijom. Kako bi se spriječili takvi napadi, važno je koristiti sigurne metode razmjene javnih ključeva, poput digitalnih certifikata.
- Postupci generiranja ključeva: Generiranje i upravljanje ključevima igra ključnu ulogu u sigurnosti asimetrične kriptografije. Ključevi se moraju generirati na siguran način i pažljivo čuvati kako bi se spriječilo njihovo neovlašteno korištenje. Također je važno periodično mijenjati ključeve radi dodatne sigurnosti.
- Primjene: Asimetrična kriptografija široko se koristi u različitim područjima, uključujući zaštitu internetskog prometa, digitalno potpisivanje dokumenata, sigurnu razmjenu ključeva, autentifikaciju korisnika i mnoge druge aplikacije koje zahtijevaju sigurnu komunikaciju i transakcije putem interneta.
DIGITALNI POTPIS
Digitalni potpis: Jedna od ključnih funkcija asimetrične kriptografije je mogućnost digitalnog potpisivanja dokumenata. Digitalni potpis omogućuje korisnicima da elektronički potvrde autentičnost i integritet dokumenata. Koristeći privatni ključ, pošiljatelj može stvoriti digitalni potpis koji se može provjeriti koristeći njegov javni ključ. Ovo je od vitalnog značaja u mnogim područjima, uključujući elektroničku trgovinu, financije i pravne transakcije.
- Stvaranje potpisa: Kada osoba želi potpisati digitalni dokument ili poruku, prvo generira digitalni potpis koristeći svoj privatni ključ. Ovaj potpis je jedinstveni matematički algoritam koji se stvara na temelju sadržaja dokumenta ili poruke. Proces potpisivanja osigurava da se potpis mijenja čak i ako se promijeni mali dio dokumenta, čime se jamči integritet podataka.
- Verifikacija potpisa: Nakon što je dokument potpisan, on se šalje drugoj strani zajedno s javnim ključem potpisnika. Primač tada koristi javni ključ za provjeru autentičnosti i integriteta potpisanog dokumenta. Prilikom verifikacije, javni ključ se koristi za dešifriranje digitalnog potpisa i dobivanje originalne poruke ili sažetka. Zatim se ponovno izračunava sažetak originalnog dokumenta i uspoređuje s dešifriranim sažetkom. Ako se podaci podudaraju, to znači da je potpis valjan i da dokument nije mijenjan nakon potpisivanja.
- Osiguranje privatnog ključa: Ključni element u procesu digitalnog potpisivanja je privatni ključ. Taj ključ mora biti čuvan tajno i sigurno kako bi se spriječilo neovlašteno potpisivanje dokumenata u ime vlasnika ključa. Gubitak ili kompromitacija privatnog ključa može dovesti do ozbiljnih sigurnosnih problema, uključujući krivotvorenje digitalnih potpisa.
- Primjena digitalnih potpisa: Digitalni potpisi imaju široku primjenu u različitim područjima, uključujući elektroničku trgovinu, financijske transakcije, pravne dokumente, elektroničku poštu, upravljanje identitetima i sigurnu komunikaciju. Oni pružaju visoku razinu sigurnosti i povjerenja u digitalnom okruženju, omogućujući korisnicima da provjere autentičnost dokumenata i poruka te spriječe njihovu manipulaciju.
Ukratko, digitalni potpis je tehnika kriptografskog potpisivanja koja omogućuje autentičnost, integritet i neopozivost digitalnih dokumenata i poruka. On pruža pouzdanu metodu potvrđivanja identiteta i jamči da dokumenti nisu mijenjani nakon što su potpisani.
Prije digitalnog potpisivanja treba generirati sažetak (hash, digest) poruke.
SAŽETAK (HASH)
Sažetak, također poznat kao hash ili digest, je jedinstveni digitalni otisak (digitalni otisak prsta) nekog podatka, kao što je poruka ili datoteka. Ovaj otisak se generira korištenjem algoritma za sažimanje (hashing algorithm) i predstavlja fiksnu duljinu bitova, neovisno o veličini originalnog podatka.
Evo detaljnijeg objašnjenja ključnih karakteristika sažetka:
- Jedinstvenost: Idealno, svaka različita poruka ili datoteka trebala bi proizvesti jedinstveni sažetak. To znači da čak i manja promjena u originalnom podatku trebala bi rezultirati potpuno različitim sažecima. Ovo osigurava pouzdanost i integritet sažetka.
- Fiksna duljina: Sažetak ima fiksnu duljinu, što znači da neovisno o veličini ulaznog podatka, sažetak će uvijek biti iste duljine. Na primjer, SHA-256 algoritam za sažimanje proizvodi sažetak duljine 256 bitova.
- Brzina izračuna: Algoritmi za sažimanje su dizajnirani da budu brzi i učinkoviti, omogućujući generiranje sažetka za velike količine podataka u kratkom vremenskom periodu. To je ključno za praktičnu primjenu u digitalnom potpisivanju, provjeri integriteta podataka i mnogim drugim aplikacijama.
- Nepovratnost: Sažetak je jednosmjeran proces, što znači da nije moguće rekonstruirati originalni podatak iz sažetka. Ovo osigurava sigurnost podataka jer čak i ako se sažetak otkrije, nije moguće doći do originalnog sadržaja.
Primjena sažetka u digitalnom potpisivanju je ključna. Prije nego što se poruka potpiše digitalnim potpisom, generira se sažetak poruke korištenjem algoritma za sažimanje poput SHA-256 ili SHA-3. Zatim se taj sažetak potpisuje korištenjem privatnog ključa pošiljatelja, stvarajući digitalni potpis. Kada primatelj dobije poruku i digitalni potpis, generira sažetak poruke iz primljene poruke i uspoređuje ga s sažetkom koji je potpisan digitalnim potpisom. Ako se sažeci podudaraju, to potvrđuje integritet poruke i autentičnost digitalnog potpisa.
Ukratko, sažetak (hash) je digitalni otisak podataka koji se koristi za provjeru integriteta, autentičnosti i jedinstvenosti podataka, a ključan je element u digitalnom potpisivanju i mnogim drugim sigurnosnim aplikacijama.
Osnovna svojstva hash funkcije:
- hash je jednosmjerna funkcija
- jednostavno ju je izračunati za zadanu poruku
- nije moguće na osnovu izlaza regenerirati ulaznu poruku
- nije moguće odrediti ulaznu poruku koja bi imala zadani hash
- neizvedivo da se pronađu dvije različite poruke koje bi imale isti hash
- promjena jednog bita ulaza rezultira potpuno drugačijim izlazom
KORISTI SE ZA:
- digitalni potpisi
- Message Authentication Code (MAC)
- autentifikacija
- hash-tablice (raspršeno adresiranje)
- za detekciju kopija binarnih sadržaja
- za jednoznačnu identifikaciju binarnih sadržaja
- za izračunavanje kontrolne sume (checksum)
ALGORITMI:
- Secure Hash Algorithm (SHA-1)
- algoritam američke vlade (NSA), vjerojatno najsigurniji
- daje hash vrijednost duljine 160 bita iz niza znakova bilo koje duljine
- kolizija otkrivena u 269 hasheva, 2005. godine
- SHA-2, SHA-3
- Message Digest Algorithm 5 (MD5)
- daje hash duljine 128 bita
- prethodnik MD4 je probijen
- MD5 razvaljen 2008.
- Digital Signature Standard (DSS)
- samo za potpisivanje, 80 bita
- koristi SHA-1 za izračunavanje hasha
Evo jednostavnog primjera izračunavanja sažetka (hasha) korištenjem Python programskog jezika i ugrađene biblioteke hashlib. U ovom primjeru koristit ćemo SHA-256 algoritam za sažimanje.
import hashlib
# Definiranje poruke koju ćemo sažeti
poruka = "Ovo je jednostavan primjer izračunavanja sažetka."
# Korištenje SHA-256 algoritma za sažimanje poruke
sažetak = hashlib.sha256(poruka.encode()).hexdigest()
# Ispis rezultata
print("Poruka:", poruka)
print("Sažetak (SHA-256):", sažetak)
Izlaz će biti:
Poruka: Ovo je jednostavan primjer izračunavanja sažetka.
Sažetak (SHA-256): 22bf7ad1f3de7c3c7d1f1421dbd8b93b13973f3b3fdd5d08f73ae2ae88a98897
Ovdje smo koristili metodu hashlib.sha256()
za stvaranje objekta sažetka s SHA-256 algoritmom. Metoda encode()
koristi se za pretvaranje teksta u niz bajtova, koji se zatim koristi kao ulaz za izračunavanje sažetka. Na kraju, koristimo metodu hexdigest()
kako bismo dobili heksadecimalnu reprezentaciju sažetka.
Primijetite da se čak i mala promjena u ulaznoj poruci rezultira potpuno drugačijim sažetkom. Ovo je ključna karakteristika algoritama za sažimanje, koja omogućava pouzdanu provjeru integriteta i autentičnosti podataka.
DIGITALNI CERTIFIKAT
Digitalni certifikat je elektronički dokument koji se koristi za potvrdu autentičnosti identiteta pojedinca, organizacije ili web mjesta te povezanost tog identiteta s određenim javnim ključem. Ovi certifikati izdaju pouzdane institucije poznate kao certifikacijski autoriteti (CA). Evo detaljnijeg objašnjenja ključnih komponenti i funkcija digitalnih certifikata:
- Podaci o identitetu: Digitalni certifikat sadrži informacije o identitetu subjekta za kojeg se izdaje. Ovo može uključivati ime organizacije, naziv pojedinca, adresu, e-mail adresu i druge relevantne informacije koje identificiraju subjekt.
- Javni ključ: Digitalni certifikat sadrži javni ključ subjekta, tj. ključ koji se koristi za šifriranje podataka koji su namijenjeni tom subjektu ili za provjeru digitalnih potpisa koje je subjekt generirao. Javni ključ je temeljna komponenta asimetrične kriptografije i omogućuje drugim korisnicima da sigurno komuniciraju s ovim subjektom.
- Potpis certifikata: Digitalni certifikat sadrži digitalni potpis koji ga izdaje certifikacijski autoritet (CA). Potpis certifikata potvrđuje autentičnost certifikata i jamči da su informacije u certifikatu vjerodostojne i nepromijenjene od strane neovlaštenih strana.
- Vremensko ograničenje: Certifikat također može sadržavati informacije o vremenskom periodu za koji je certifikat valjan. Ovo osigurava da certifikat nije koristan nakon isteka datuma ili da se automatski povuče ako dođe do promjene u statusu subjekta (npr. gubitak povjerenja ili prestanak važenja ključa).
- Identifikacija izdavatelja: Digitalni certifikat također sadrži informacije o certifikacijskom autoritetu koji je izdao certifikat. Ovo omogućuje korisnicima da provjere autentičnost certifikata i povjerenje u izdavatelja.
Kada korisnik prima digitalni certifikat, može provjeriti njegovu valjanost na nekoliko načina. Prvo, korisnik može provjeriti digitalni potpis certifikata koristeći javni ključ certifikacijskog autoriteta. Ako je potpis valjan, to potvrđuje autentičnost certifikata. Također, korisnik može provjeriti vremensko ograničenje certifikata kako bi osigurao da je certifikat još uvijek važeći.
Digitalni certifikati su ključni element infrastrukture javnih ključeva (PKI) i koriste se u mnogim aplikacijama koje zahtijevaju sigurnu komunikaciju putem interneta, kao što su SSL/TLS zaštita web stranica, digitalno potpisivanje dokumenata, elektronička pošta, virtualne privatne mreže (VPN) i mnoge druge.
- rješava problem dokazivanja identiteta
- skup informacija koje identificiraju korisnika i davatelja usluge certificiranja
- sadržaj certifikata:
- npr. ime organizacije koja izdaje certifikat, ime organizacije ili korisnika kojem pripada certifikat, njegovog javnog ključa, vremena važenja certifikata, elektroničke adrese organizacije ili korisnika, zemlje porijekla korisnika te ostalih bitnih informacija koje identificiraju stranu kojoj se izdaje certifikat
- standardizacija:
- X.509 format – ISO, ITU-T
Certifikacijski autoriteti (CA) su organizacije ili institucije koje izdaju digitalne certifikate i potvrđuju identitet korisnika ili entiteta na internetu. Evo nekoliko primjera CA-ova u Hrvatskoj i svijetu:
- HALMEDCA (Hrvatska agencija za lijekove i medicinske proizvode): HALMEDCA je certifikacijski autoritet u Hrvatskoj koji izdaje digitalne certifikate za potrebe elektroničke razmjene informacija u zdravstvenom sektoru.
- CARNet CA (CARNet – Hrvatska akademska i istraživačka mreža): CARNet CA izdaje digitalne certifikate za članove akademske i istraživačke zajednice u Hrvatskoj, omogućavajući sigurnu komunikaciju i autentifikaciju na CARNet mreži.
- Financijska agencija (FINA). FINA ima važnu ulogu u elektroničkom poslovanju i financijskim transakcijama u Hrvatskoj, te izdaje digitalne certifikate potrebne za elektroničko poslovanje, elektroničko fakturiranje, elektroničko plaćanje i druge financijske aktivnosti. FINA-ino CA djeluje kao ključna infrastruktura za osiguravanje sigurnosti i integriteta financijskih transakcija i komunikacije u Hrvatskoj.
Primjeri CA-ova diljem svijeta:
- VeriSign: VeriSign (sada dio Symantec korporacije) jedan je od najpoznatijih svjetskih CA-ova. Specijalizirani su za izdavanje SSL/TLS certifikata za web stranice i osiguravanje sigurne komunikacije na internetu.
- Comodo: Comodo je još jedan veliki svjetski CA koji izdaje SSL/TLS certifikate za web stranice, digitalne potpise i druge potvrde.
- Let’s Encrypt: Let’s Encrypt je besplatni CA koji se financira donacijama i pruža SSL/TLS certifikate besplatno kako bi potaknuo širenje HTTPS protokola na webu.
- DigiCert: DigiCert je globalni CA koji se ističe svojom reputacijom za sigurnost i pouzdanost. Specijalizirani su za izdavanje SSL/TLS certifikata, digitalnih potpisa i drugih vrsta certifikata.
CA(Certificate Authority) nakon provjere korisnika izdaju mu digitalni certifikat.
Kako to funkcionira u praksi,npr. Ivan podnosi zahtjev za izdavanje certifikata CA kompaniji. CA provjerava njegov identitet na osnovu osobnih dokumenata koje im je prikazao pri podnošenju zahtjeva. Ako je sve u redu Ivan im prosljeđuje svoj javni ključ za koji CA kreira digitalni potpis i nakon toga izdaje certifikat kojim se potvrđuje da taj javni ključ uistinu pripada Ivanu