Na nastavi ćemo prolaziti kroz različite primjere kriptiranja (šifriranja), matematičke koncepte koji su nam nužni za to, te primjere postupaka kriptoanalize i načina probijanja za jednostavnije šifre. Većina toga će se pojaviti u obliku video lekcija koje možete pronaći na youtube kanalu. Primjeri programa koji implementiraju pojedine šifre se nalaze ovdje.
Ispod se nalaze svi materijali i zadaci za vježbu organizirani po šiframa. Postoje zadaci koje možete riješiti na papiru (uz kalkulator ako treba) i to su tipovi zadataka i pitanja koji se mogu pojaviti na pisanoj provjeri znanja. Zadaci za vježbu na računalu su programi koje trebate izraditi na vježbama i u konačnici su zadaci kakvi se mogu pojaviti na provjeri za računalom. Uz to uvijek možete pogledati zadatke koji se nalaze u udžbeniku.
Ovdje možete naći sve programe koje koristimo za šifriranje i probijanje Cezarove šifre, te datoteke s tekstovima koji nam trebaju za analizu. Sve definicije funkcija nalaze se u datoteci kriptiranje.py koju ćemo postepeno proširivati sa novim dodacima.
Izračunaj/obrazloži koliko ključeva postoji za Cezarovu šifru ako koristimo hrvatsku abecedu (bez Lj, Nj i Dž).
Šifriraj tekst "KRATKA PORUKA" s cezarovom šifrom za sljedeće ključeve:
+5
+13
-2
Dešifriraj sljedeće poruke kriptirane cezarovom šifrom, uz njih se nalazi ključ kojim su kriptirane:
RĆPOŠĐ GAPNĆ TŠUAOĆ, ključ = 4
ĆČV ĆČV DHBČTSAČ, ključ = 3
FSŽĐF ĆČBKŽCGF IK FDVCKSĐF, ključ = 13
Pogledajte i analizirajte već gotove programe za Cezarovu šifru. Ispod se nalaze i objašnjenja pojedinih programa. Pošto na Cezarovoj šifri prolazimo osnovne korake za sve većina toga sam ja složio unaprijed, ali za kasnije šifre trebate barem razumiti kako ovi programi rade kako bi mogli doraditi te programe za nove šifre.
Cezarova šifra
Kriptoanaliza cezarove šifre
Vektori - komponentni zapis
Kriptoanaliza supstitucijskih šifri
Kriptiranje teksta Cezarovom šifrom u Pythonu
Program za napad grubom silom za Cezarovu šifru
Program za napad frekvencijskom analizom za Cezarovu šifru
Ovdje se nalazi zip arhiva sa novim primjerima programa. U afina.py se nalazi program za kriptiranje afinom šifrom, i imate v.2 kriptografija.py u koju su dodane 3 nove funkcije za afinu šifru (kriptiranje, dekriptiranje i računanje modulo inverza množenja).
Izračunaj/obrazloži koliko različitih ispravnih ključeva (kombinacija faktora a i b) postoji za afinu šifru ako ako koristimo hrvatsku abecedu (bez Lj, Nj i Dž).
Šifriraj tekst "KRATKA PORUKA" s afinom šifrom za sljedeće ključeve:
a = 5, b = -3
a = 11, b = 2
a = 19, b = 8
Napravi pomak za cijelu abecedu ABCČĆDĐEFGHIJKLMNOPRSŠTUVZŽ i označi slova koja se ne bi mogla dešifrirati ako bi koristili sljedeće ključeve za afinu šifru:
a = 2, b = 2
a = 3, b = -3
a = 15, b = 3
Odredi modulo inverz množenja za sljedeće ključeve u afinoj šifri:
a = 4, hrvatska abeceda
a = 3, engleska abeceda
a = 15, hrvatska abeceda
a = 15, engleska abeceda
5. Odredi za koji koju kombinaciju a i b možemo izvrnuti abecedu tako da se sva slova preslože zrcalno. Dakle ABCČĆ... postaje ŽZVUT...
Napravite program koji će korisniku omogućiti da dešifrira poruku kriptiranu Afinom šifrom, ako je ključ poznat. Šifrirani tekst se treba pročitati iz datoteke, a korisnik unosi ključ samostalno. Dešifrirana poruka se sprema u novu datoteku.
(ne zaboravite da u kriptografija.py već imate gotovu funkciju za dešifriranje)
Napravite novi program za šifriranje Afinom šifrom koji bi se ponašao slično onome u cezarova.py - jasni tekst se čita iz datoteke i kriptira se slučajno generiranim ključem (parametri a i b), te se šifrirana poruka sprema u novu datoteku. Ne zaboravite provjeriti da a ima inverz modulo množenja!
Napravite program koji će napraviti probijanje grubom silom za tekst koji je šifriran Afinom šifrom. Možete prilagoditi program bruteforce.py s prethodnih vježbi jer većina koda će ostati ista. Isprobajte kako program radi na kriptiranim porukama koje generira program iz prethodnog zadatka.
Preuzmite program za frekvencijsku analizu supstitucijskih šifri - kako radi je objašnjeno u video lekciji ispod. Kopirajte neki malo veći tekst, zašifrirajte ga programom iz drugog zadatka i onda ga pokušajte dešifrirati pomoću ovog programa.
Afina šifra
Kriptoanaliza afine šifre
Kriptiranje teksta afinom šifrom u Pythonu
Program za napad frekvencijskom analizom za afinu šifru
Ovdje je zip arhiva u kojoj se nalaze:
nova verzija kriptografija.py s novim funkcijama za Vigenereovu šifru
vigenere.py jednostavni program koji služi za šifriranje Vigenereovom šifrom
vigenereFA.py djelomično dovršeni program za kriptoanalizu teksta šifriranog nepoznatim ključem. Program je u stanju dešifrirati tekst ali traži pomoć osobe.
Kriptirajte tekst VIGENEREOVA ŠIFRA JE POLIALFABETSKA. sa sljedećim ključevima:
CBA
MIRKO
ŠTEKER
2. Dekriptirajte sljedeće tekstove uz poznate ključeve koji su navedeni uz tekst:
AILŽPISŽMDPĆLFPJTŽOZLDER , ključ: PREOBRAŽAJ
PSJULNCMLCŽTĐVRPROZSMKTJOJTUVUCRCĐZCKPVL, ključ: PET
GUEOJPFKĐĆCEDECEČKHMPBNJPGNBĐU, ključ: PUNO
3. Koliko različitih ključeva se može napraviti s Vigenereovom šifrom duljine 8 znakova ako je tekst pisan engleskom abecedom?
4. Koliko različitih ključeva treba isprobati u napadu grubom silom ako znamo da je maksimalna duljina ključa kojim se tekst šifrira dugačak 6 znakova i tekst je pisan engleskom abecedom.
Napravite program koji će dešifrirati poruku koja je šifrirana Vigenerovom šifrom, ako je ključ poznat. Program poruku čita iz datoteke, korisnik unosi ključ i rezultat dešifriranja se upisuje u novu datoteku
Doradite program vigenere.py kako bi provjerio je li korisnik kod šifriranja upisao šifru koja zadovoljava kriterij da su svi znakovi iz abecede kojom šifriramo. Ako nisu korisnik bi trebao dobiti opciju da unese ključ ponovno.
Napravite program koji računa koliko potencijalnih ključeva ima kad bi smo htjeli napraviti napad grubom silom na tekst šifriran Vigenereovom šifrom. Program prihvaća duljinu ključa i duljinu abecede, a vraća ukupni broj potencijalnih ključeva. NAPOMENA: program ne mora napraviti dešifriranje kroz napad grubom silom.
Doradite program vigenereFA.py kako bi se određivanje duljine ključa odvilo automatski, bez potrebe za time da osoba prepoznaje duljinu ključa iz ispisa svih koincidencija. Također neka program na kraju ispiše na ekranu originalni ključ koji je korišten za šifriranje poruke.
Vigenereova šifra
Kriptoanaliza Vigenereove šifre
Kriptiranje teksta Vigenereovom šifrom
Program za napad frekvencijskom analizom za Vigenereovu šifru
Ispod možete naći video lekcije o nekim modernim sustavima šifriranja i izazovima s kojima se oni nose. Ne radi se analiza toliko u dubinu kao za starije oblike šifriranja - to bi više spadalo u nešto što se radi na sveučilištu.
Ovo su primjeri pitanja, ne cjelokupni popis toga što će se pojaviti na testu, no ako i bude pitanja koja su drugačija od ovih ispitivat će slične stvari. Također može se pojaviti i neko pitanje o klasičnim sustavima šifriranja (npr. Što su to supstitucijske šifre?).
Kolika je duljina ključa u običnoj verziji DES kriptografskog sustava?
Što je prvi korak u algoritmu šifriranja za DES?
Koristi li se DES sustav u modernim sustavima za enkripciju podataka?
Koliko koraka se primjenjuje za međusobno kombiniranje "polublokova" u DES sustavu enkripcije?
AES je primjer sistema koji koristi __________________________ mrežu.
Kolike su duljine ključeva koji se koriste u AES kriptografskom sustavu?
Kada se koristi kriptiranje s tajnim ključem, a kada s javnim ključem?
Kolike su tipične duljine ključeva u RSA sustavu kriptiranja?
Zašto je teško dešifrirati poruku kriptiranu RSA sustavom makar je sam algoritam dosta jednostavan?
Opiši što je rezultat kriptografske hash funkcije.
Napiši program koji će šifrirati tekst transpozicijskom šifrom opisanom u video lekciji (miješa stupce po ključu). Korisnik upisuje brojčani ključ, a program originalni tekst čita iz ulazne datoteke i šifrirani piše u izlaznu datoteku.
Napiši program koji će dešifrirati tekst kriptiran pomoću programa iz prethodnog zadatka. Korisnik upisuje ključ, a program u izlaznu datoteku ispisuje dešifriranu poruku.
Napiši program koji će napraviti pojednostavljenu RSA enkripciju predstavljenu u video lekciji (s kratkim prostim brojevima). Program treba generirati par tajnih i javnih ključeva te zapisati kriptirani tekst u izlaznu datoteku.
Napiši program koji će dešifrirati tekst šifriran pojednostavljenom RSA enkripcijom iz video lekcije. Program šifriranu poruku učitava iz datoteke, a korisnik daje tajni ključ.
Transpozicijske šifre
Šifriranje tajnim ključem - DES i AES
Šifriranje s javnim ključem - RSA
Enkripcija podataka na webu