Asimetrična kriptografija:
- Generiranje parova ključeva: U asimetričnoj kriptografiji, par ključeva sastoji se od javnog ključa koji se može sigurno dijeliti s bilo kim i privatnog ključa koji mora ostati tajan. Javni ključ se koristi za šifriranje poruka, dok se privatni ključ koristi za dešifriranje. Koristeći OpenSSL, generirajte par ključeva za RSA kriptografiju s duljinom ključa od 2048 bita.
- Šifriranje poruka: Pošiljatelj koristi javni ključ primatelja za šifriranje poruke. Time se osigurava da poruku može dešifrirati samo osoba s odgovarajućim privatnim ključem – u ovom slučaju, primatelj. Koristeći javni ključ iz prethodno generiranog para ključeva, enkriptirajte tekstualnu datoteku.
- Dešifriranje poruka: Primatelj koristi svoj privatni ključ za dešifriranje poruke koja je šifrirana njegovim javnim ključem. Ovo osigurava da samo primatelj može pristupiti sadržaju šifrirane poruke. Koristeći privatni ključ iz istog para ključeva, dekriptirajte enkriptiranu datoteku i provjerite jesu li podaci ispravno dekriptirani.
Generiranje parova ključeva:
openssl genpkey -algorithm RSA -out private_key.pem -aes256
openssl rsa -pubout -in private_key.pem -out public_key.pem

Enkripcija teksta javnim ključem:
Prvo napravite datoteku plaintext.txt i u nju upišite lozinku po izboru. Zatim tu datoteku enkriptirajte.
openssl rsautl -encrypt -pubin -inkey public_key.pem -in plaintext.txt -out encrypted_text_rsa.bin

Dekripcija teksta privatnim ključem:
openssl rsautl -decrypt -inkey private_key.pem -in encrypted_text_rsa.bin -out decrypted_text_rsa.txt

Cilj Vježbe:
- Generirati i koristiti parove ključeva za asimetričnu kriptografiju koristeći OpenSSL za enkripciju i dekripciju podataka.
- Slanje enkriptiranih podataka preko mreže (npr., koristeći jednostavnu TCP vezu ili HTTP poslužitelje i klijente) te demonstracija sigurne razmjene ključeva.
- Generiranje i verifikacija digitalnih potpisa za osiguravanje integriteta i autentičnosti komunikacije.
- Kreiranje SSL/TLS certifikata za simulaciju sigurne web komunikacije.
- Korištenje Wiresharka za analizu mrežnog prometa i promatranje kako se enkriptirani podaci i protokoli za sigurnost prenose.
Koraci:
- Generiranje Parova Ključeva i Enkripcija Podataka:
- Slijedite prethodno opisane korake za generiranje parova RSA ključeva s OpenSSL-om. Enkriptirajte odabrani tekst ili datoteku koristeći javni ključ i dekriptirajte ga koristeći privatni ključ.
- Priprema za Slanje Podataka:
- Postavljanje jednostavnog poslužitelja i klijenta: Možete koristiti skripte ili alate koji omogućavaju slanje i primanje podataka preko mreže. Python, na primjer, može biti odličan alat za kreiranje jednostavnih TCP klijent/poslužitelj aplikacija.
- Snimanje Prometa s Wiresharkom:
- Prije nego što počnete slati podatke, pokrenite Wireshark i počnite snimati promet na mrežnom sučelju koje ćete koristiti za testiranje.
- Provjerite imate li odgovarajuće filtre postavljene ako želite usmjeriti pažnju na specifične pakete.
- Slanje Enkriptiranih Podataka
- Koristite vašeg klijenta za slanje enkriptiranih podataka poslužitelju. Ovisno o setupu, ovo može uključivati upotrebu naredbenog retka, skriptu ili neki drugi alat.
- Generiranje i Verifikacija Digitalnih Potpisa:
- Generirajte digitalni potpis za enkriptirani dokument koristeći privatni ključ, a zatim verificirajte potpis koristeći pripadajući javni ključ. Ovo demonstrira kako se osigurava integritet i autentičnost podataka.
- Generiranje SSL/TLS Certifikata:
- Koristite OpenSSL za generiranje SSL/TLS certifikata, simulirajući proces koji web poslužitelji koriste za uspostavu sigurnih HTTPS veza. Pregledajte i analizirajte generirani certifikat kako biste razumjeli informacije koje sadrži.
- Analiza s Wiresharkom
- Kada podaci budu poslani, koristite Wireshark za pregled paketa. Trebali biste moći vidjeti enkriptirane podatke kako se prenose, ali ne i njihov sadržaj zbog enkripcije.
- Analizirajte protokole koji se koriste (npr., TCP, HTTP ako koristite web poslužitelj), kao i bilo koje druge informacije dostupne u paketima.
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 9999))
server.listen(1)
print("Server listening on port 9999")
conn, addr = server.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
print("Received data")
import socket
# Definirajte putanju do datoteke koju želite poslati
file_path = 'plaintext.txt'
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(('localhost', 9999)) # Povezivanje s poslužiteljem
with open(file_path, "rb") as file: # Otvorite datoteku u binarnom načinu čitanja
s.sendall(file.read()) # Pošaljite sadržaj datoteke
print("Datoteka plaintext.txt poslana.")
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(('localhost', 9999))
with open("encrypted_text_rsa.bin", "rb") as file:
s.sendall(file.read())
print("Podaci poslani")


Generiranje Digitalnog Potpisa:
Nakon enkripcije datoteke, generirajte digitalni potpis za originalnu (neenkriptiranu) datoteku. Ovo omogućava primatelju da provjeri integritet i autentičnost datoteke.
openssl dgst -sha256 -sign private_key.pem -out signature.sha256 plaintext.txt
Verifikacija Digitalnog Potpisa na Primateljevoj Strani:
Primatelj može verificirati digitalni potpis koristeći javni ključ pošiljatelja, što osigurava da datoteka nije bila mijenjana.
openssl dgst -sha256 -verify public_key.pem -signature signature.sha256 plaintext.txt
Generiranje SSL/TLS Certifikata:
Za simulaciju sigurne web komunikacije, generirajte SSL/TLS certifikat koji se može koristiti za HTTPS server ili za sigurnu autentikaciju.
openssl req -x509 -newkey rsa:2048 -keyout server_key.pem -out server_cert.pem -days 365
Provjera Valjanosti SSL/TLS Certifikata
Kako biste pregledali informacije sadržane u SSL/TLS certifikatu, koristite sljedeću naredbu:
openssl x509 -noout -text -in server_cert.pem
Zaključak:
Ova vježba pruža temeljito razumijevanje asimetrične kriptografije i njenih primjena, uključujući sigurnost digitalnih komunikacija i zaštitu podataka. Kroz praktičan rad s OpenSSL-om, studenti uče kako generirati i koristiti ključeve, enkriptirati i dekriptirati poruke, te stvarati i provjeravati digitalne potpise i SSL/TLS certifikate. Korištenje Wiresharka za analizu mrežnog prometa dodatno produbljuje razumijevanje o tome kako se sigurnosni protokoli koriste za zaštitu podataka u prijenosu.
Ovom vježbom naglašava se ključna uloga kriptografije u modernoj digitalnoj sigurnosti i potiče se na daljnje istraživanje i razvoj sigurnosnih rješenja. Kako se prijetnje u kibernetičkom prostoru nastavljaju razvijati, također se moraju razvijati i naše metode zaštite, potičući kontinuirano učenje i inovacije u polju kriptografije.