Skip to content

Asimetrična Kriptografija

Zašto postoji asimetrična kriptografija?

U simetričnoj kriptografiji isti ključ se koristi i za šifrovanje i za dešifrovanje. Problem nastaje kada dve strane žele da komuniciraju, a nikada nisu razmenjivale ključ na bezbedan način. Kako se dogovoriti o tajnom ključu kada je kanal komunikacije nesiguran?

Asimetrična kriptografija rešava ovaj problem uvođenjem para ključeva:

  • Javni ključ — može se slobodno deliti sa svima

  • Privatni ključ — čuva ga samo vlasnik, nikad se ne deli

Poruka šifrovana javnim ključem može se dešifrovati samo odgovarajućim privatnim ključem, i obrnuto. Ovaj princip omogućava bezbednu komunikaciju između strana koje se nikada nisu srele.


Massey–Omura protokol (idejno)

Massey–Omura je jedan od prvih protokola koji demonstrira kako dve strane mogu razmeniti poruku bez zajedničkog ključa, koristeći ideju „katanaca bez ključa":

  1. Alisa zaključava poruku svojim katancem i šalje Bobanu.
  2. Boban dodaje i svoj katanac — šalje nazad Alisi.
  3. Alisa skida svoj katanac — šalje Bobanu.
  4. Boban skida samo još njegov katanac i čita poruku.

Niko na mreži nikad nije video poruku bez bar jednog katanca. U praksi se ovo realizuje modularnim stepenovanem, ali RSA i Diffie–Hellman su modernija i praktičnija rešenja.


Malo matematike

Rastavljanje na faktore — osnova RSA

Množenje dva velika prosta broja je lako:

p = 982_451_653
q = 179_424_673
n = p × q = 176_284_630_799_479

Međutim, polazeci od n naći p i q nazad je izuzetno teško (za dovoljno velike brojeve). Ovo je matematička osnova RSA algoritma — asimetrija između lakše i teže operacije.


RSA

Šta je RSA i kako radi?

RSA (Rivest–Shamir–Adleman, 1977) je najrasprostranjeniji asimetrični algoritam. Bezbednost mu se zasniva na teškoći rastavljanja velikog broja na proste faktore.

Generisanje ključeva — korak po korak

1. Odaberi dva prosta broja:   p, q
2. Izračunaj:                  n = p × q
3. Izračunaj Eulerovu funkciju: φ(n) = (p−1)(q−1)
4. Odaberi javni eksponent e:  1 < e < φ(n),  gcd(e, φ(n)) = 1
5. Izračunaj privatni eksponent d: d × e ≡ 1 (mod φ(n))
Vrednost Uloga
(n, e) Javni ključ
(n, d) Privatni ključ
p, q Tajni parametri (bacaju se nakon generisanja)

Šifrovanje i dešifrovanje

Šifrovanje:   C = M^e  mod n
Dešifrovanje: M = C^d  mod n

Jednostavan primer: p = 5, q = 11

p = 5,  q = 11
n = 5 × 11 = 55
φ(n) = (5−1)(11−1) = 4 × 10 = 40

Biramo e = 3   tako da važi gcd(e, 40) = 1
Tražimo d tako da: 3 × d ≡ 1 (mod 40)
→ d = 27       (jer 3 × 27 = 81 = 2×40 + 1)

Javni ključ:   (n=55, e=3)
Privatni ključ: (n=55, d=27)

Šifrujemo poruku M = 2:
  C = 2^3 mod 55 = 8

Dešifrujemo:
  M = 8^27 mod 55 = 2  

PEM fajlovi

RSA ključevi se čuvaju u .pem (Privacy Enhanced Mail) fajlovima. Postoje dve vrste:

Privatni ključ (private_key.pem):

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA2a2rwplBQLzHPZe5RJr9vFqnMn3EnEaqJ7W2yGH9uGFTIGiL
...
-----END RSA PRIVATE KEY-----

Javni ključ (public_key.pem):

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2a2rwplBQLzHPZe5RJr9
...
-----END PUBLIC KEY-----

Sadržaj je Base64-enkodovani ASN.1/DER format koji sadrži sve parametre.

Pregled detalja iz PEM fajlova

Generisanje i inspekcija ključa u terminalu:

# Generisanje RSA ključa (2048 bita)
openssl genrsa -out private_key.pem 2048

# Prikaz internih parametara (p, q, n, e, d, ...)
openssl rsa -in private_key.pem -text -noout

Izlaz prikazuje:

Private-Key: (2048 bit, 2 primes)
modulus (n):        00:d6:9a:5f:... (256 bajta)
publicExponent (e): 65537 (0x10001)
privateExponent (d): 1a:3b:7c:...
prime1 (p):         00:f3:1a:...
prime2 (q):         00:e1:09:...
exponent1:          d mod (p-1)
exponent2:          d mod (q-1)
coefficient:        q^(-1) mod p   

Napomena: e = 65537 je standardni izbor.


Problem diskretnog logaritma

Ako znamo g, p i rezultat A:

A = g^a mod p
Pronaći a je računarski neizvodljivo za dovoljno velike p. Ovo je osnova Diffie–Hellman i ElGamal algoritama.

Razmena ključeva — Diffie–Hellman (DH)

DH omogućava da dve strane izvedu zajednički tajni ključ kroz nesiguran kanal, bez da ključ ikad bude eksplicitno prenet.

# GLOBALNI PARAMETRI (javni, svi ih znaju):
p = veliki_prost_broj   # npr. 2048-bitni prost broj
g = generator           # primitivni koren mod p

# ALISA:
a = random()            # privatni ključ (čuva za sebe)
A = pow(g, a, p)        # javni ključ = g^a mod p

# BOBAN:
b = random()            # privatni ključ (čuva za sebe)
B = pow(g, b, p)        # javni ključ = g^b mod p

# RAZMENA (javnim kanalom):
Alisa --> A --> Boban
Boban --> B --> Alisa

# IZRAČUNAVANJE ZAJEDNIČKE TAJNE:
Alice: shared = pow(B, a, p)   # = (g^b)^a mod p = g^(ab) mod p
Bob:   shared = pow(A, b, p)   # = (g^a)^b mod p = g^(ab) mod p

# REZULTAT:
zajednicki_kljuc = g^(a*b) mod p   # identičan s obe strane 

Napadač vidi g, p, A, B — ali ne može lako naći a ili b (problem diskretnog logaritma).

DH sam po sebi ne autentifikuje strane — podložan je Man-in-the-Middle napadu bez sertifikata.

Šifrovanje — ElGamal (osnovno)

ElGamal je sistem šifrovanja zasnovan na DH principu:

Generisanje ključeva:
  Javni:    (p, g, A)  gde A = g^a mod p
  Privatni: a

Šifrovanje poruke M:
  Bira slučajno k
  C1 = g^k mod p
  C2 = M × A^k mod p
  Šifrat = (C1, C2)

Dešifrovanje:
  M = C2 × (C1^a)^(-1) mod p

Eliptičke krive

Jednačina

Eliptička kriva u Weierstrassovom obliku:

y² = x³ + ax + b   (mod p)

Za kriptografiju se koriste krive nad konačnim poljima (skupovi tačaka imaju konačan broj elemenata).

Sabiranje tačaka

Sabiranje dve tačke P i Q na eliptičkoj krivi:

  • Povuče se prava kroz P i Q
  • Presek prave sa krivom daje tačku R'
  • R = refleksija R' po x-osi je rezultat: P + Q = R

Dupliranje tačke

Ako P = Q, povlači se tangenta na krivu u tački P, a postupak refleksije ostaje isti: P + P = 2P.

Diskretni logaritam na eliptičkim krivama (ECDLP)

Analogija sa DH:

Poznato: G (bazna tačka), Q = k·G
Naći: k  ← računarski neizvodljivo

k·G znači G sabran sa samim sobom k puta (skalarna multiplikacija).

Glavna prednost ECC

Algoritam Dužina ključa Sigurnosni nivo
RSA 1024 bita ~80 bita
RSA 2048 bita ~112 bita
ECC 160 bita ~80 bita
ECC 256 bita ~128 bita

160-bitni ECC ključ nudi istu sigurnost kao 1024-bitni RSA ključ — uz znatno manje memorije, brže operacije i manju potrošnju energije. Zbog toga ECC dominira na mobilnim uređajima i IoT.


Digitalni potpisi

Princip rada

POTPISIVANJE:
  1. poruka  →  [hash funkcija]  →  hes (npr. SHA-256)
  2. hes     →  [šifrovanje privatnim ključem]  →  potpis
  3. šalje se: poruka + potpis

VERIFIKACIJA:
  1. primljena poruka  →  [hash funkcija]  →  hes₁
  2. potpis  →  [dešifrovanje javnim ključem]  →  hes₂
  3. hes₁ == hes₂  →  potpis validan ✓

Osobine digitalnih potpisa

  • Autentičnost — samo vlasnik privatnog ključa može kreirati validan potpis
  • Integritet — svaka promena poruke narušava potpis
  • Neporecivost — potpisnik ne može tvrditi da nije potpisao
  • Vezanost za poruku — potpis se ne može odvojiti i koristiti uz drugu poruku

Sign-then-Encrypt vs Encrypt-then-Sign

Sign-then-Encrypt (preporučeno)

poruka → [potpis] → poruka+potpis → [šifrovanje] → šifrat
	

  • Štiti identitet pošiljaoca (potpis je unutar šifrata)
  • Primalac prvo dešifruje, pa verifikuje potpis
  • Smatra se sigurnijim pristupom

Encrypt-then-Sign

poruka → [šifrovanje] → šifrat → [potpis] → šifrat+potpis
	

  • Potpis je vidljiv bez dešifrovanja
  • Primalac može verifikovati autentičnost pre dešifrovanja
  • Korisno u nekim specifičnim scenarijima

Sertifikati i Certificate Authority (CA)

Man-in-the-Middle napad

Bez sertifikata, napadač može presresti DH razmenu:

Alisa ←→ [NAPADAČ] ←→ Boban

Alisa misli da komunicira sa Bobanom.
Boban misli da komunicira sa Alisom.
Napadač vidi sve — u oba smera.

Šta sadrži sertifikat?

Sertifikat je potpisani digitalni dokument koji vezuje javni ključ za identitet:

Polje Opis
Javni ključ Ključ entiteta kome sertifikat pripada
Subjekt Domen (npr. example.com), možda i vlasnik
Izdavač Naziv CA koji je potpisao sertifikat
Период važenja Not Before / Not After datumi
Namena Server autentifikacija, potpisivanje koda...
Potpis CA Digitalni potpis CA koji garantuje autentičnost

Pregled realnog sertifikata

# Pregled sertifikata u sistemu
ls /etc/ssl/certs/

# Detalji konkretnog sertifikata
openssl x509 -in /etc/ssl/certs/DigiCert_Global_Root_CA.pem -text -noout

Kako funkcioniše dobijanje sertifikata

1. Server generiše par ključeva (privatni + javni)
2. Server kreira Certificate Signing Request (CSR):
      openssl req -new -key private.key -out request.csr
3. CSR se šalje CA (sadrži javni ključ i podatke o domenu)
4. CA verifikuje podatke (DNS, vlasništvo domena, itd.)
5. CA potpisuje sertifikat svojim privatnim ključem
6. Sertifikat se instalira na server
7. Klijent dobija sertifikat pri TLS handshake-u
8. Klijent verifikuje potpis CA (čiji javni ključ već ima)

Lanac poverenja (Chain of Trust)

Root CA  (ugrađen u OS/browser)
   └── Intermediate CA  (potpisan od Root CA)
          └── Server sertifikat  (potpisan od Intermediate CA)

Postoji svega ~50-100 Root CA sertifikata ugrađenih u operativne sisteme i browsere. Ako nijedan od njih direktno nije potpisao serverski sertifikat, browser prati lanac poverenja navise dok ne dođe do poznatog Root CA.

Opoziv sertifikata

Šta se dešava kada sertifikat koji je nekad bio validan više ne treba da važi (kompromitovan privatni ključ, promena domena...)?

CRL (Certificate Revocation List)

  • CA objavljuje listu svih opozvanih sertifikata
  • Klijenti periodično preuzimaju listu
  • Problem: lista može biti velika, zastarela, browseri je često ignorišu

OCSP (Online Certificate Status Protocol)

  • Klijent direktno pita CA: „Da li je sertifikat X validan?"
  • CA vraća odgovor: good / revoked / unknown
  • OCSP Stapling: Server sam pribavlja OCSP odgovor i prilaže ga uz sertifikat (smanjuje latenciju, štiti privatnost klijenta)

Vremenski pečati

Vremenski pečat dokazuje da je određeni dokument postojao u određenom trenutku.

TSA — Time Stamping Authority (centralizovano)

1. Korisnik izračuna: hes = SHA256(dokument)
2. Hes se šalje TSA serveru
3. TSA nadovezuje: token = hes || vreme || TSA_identitet
4. TSA potpisuje token svojim privatnim ključem
5. Potpisan token se vraća korisniku

Dokument se nikad ne šalje TSA-u — samo hes. TSA ne zna sadrzaj dokumenta.

Blockchain (decentralizovano)

  • Hes dokumenta se upisuje u blockchain transakciju
  • Nepromenjivost blockchaina garantuje da dokument nije nastao posle bloka
  • Ne zahteva poverenje u centralni entitet

Onion šifrovanje (Tor)

Onion šifrovanje skriva identitet pošiljaoca kroz višeslojno šifrovanje:

Alisa želi da poseti server S kroz čvorove A, B, C:

Alisa šifruje:   Enc_C( Enc_B( Enc_A( poruka ) ) )

Čvor A: dešifruje spoljni sloj → vidi samo B kao sledeći korak
Čvor B: dešifruje srednji sloj → vidi samo C kao sledeći korak  
Čvor C: dešifruje unutrašnji sloj → šalje poruku serveru S

Server S vidi samo C, ne zna da je Alisa poslala poruku.
Čvor A zna da je Alisa poslala nešto, ali ne zna kome.
Nijedan čvor nema kompletnu sliku.

Cilj: Sakriti identitet korisnika i otežati praćenje komunikacije.

Koristi: Tor mreža, I2P (delimično).


Garlic šifrovanje

Proširenje onion koncepta — više poruka se pakuje zajedno:

"Garlic" paket = [ poruka₁ za primaoca X ]
                 [ poruka₂ za primaoca Y ]  → višeslojno šifrovano
                 [ poruka₃ za primaoca Z ]
  • Kombinovanje više poruka otežava analizu saobraćaja (ko komunicira s kim)
  • Svaki čvor dešifruje samo deo koji mu je namenjen
  • Komunikacija je uglavnom unutar I2P mreže (za pristup regularnom internetu manje pogodno)

Gde se koristi asimetrična kriptografija?

Primena Primer
Razmena ključeva TLS handshake — DH/ECDH dogovara simetrični ključ
Autentifikacija servera HTTPS sertifikati — browser verifikuje da li je server legitiman
Digitalni potpisi PDF dokumenti, online ugovori, Git commit-ovi, blockchain transakcije
Login bez lozinke SSH — privatni ključ na klijentu, javni na serveru
Vremenski pečat TSA, blockchain notarizacija
Šifrovanje mejlova PGP (Pretty Good Privacy) — Web of Trust model
Potpisivanje koda App Store, Windows Driver Signing, APT paketi
Blockchain Svaka transakcija potpisana privatnim ključem vlasnika

PGP(Pretty Good Privacy) i Web of Trust

PGP koristi decentralizovani model poverenja: - Korisnici međusobno potpisuju jedni drugima javne ključeve - Poverenje se prenosi transitno: ako Alisa veruje Bobanu, a Boban je potpisao Karolin ključ, Alisa delimično veruje i Karolini - Nema centralnog autoriteta — mreža korisnika gradi poverenje


openssl ilustracije