This is an old revision of the document!
AES
AES (Advanced Encryption Standard), poznat i pod svojim originalnim nazivom Rijndael, sustav je simetrične kriptografije temeljen na supstitucijsko-permutacijskim poljima.
AES koristi fiksnu veličinu bloka od 128 bitova te veličinu ključa od 128, 192 ili 256 bitova. Provodi se nad matricom 4×4, odnosno nad pravokutnim nizom bajtova u 4 retka i 4 stupca. Na sličan način tretira se i ključ koji je pohranjen u 4 retka i N stupaca, gdje je N ovisan o veličini ključa i može biti 4,6 ili 8. AES se pri enkripciji koristi operacijama zamjene znakova, posmicanja redova, miješanja stupaca te dodavanja potključa.
Funkcije koje AES koristi matematički su opisane u nastavku:
1) Zamjena znakova
znak = Sbox[znak]
2) Dodaj potključ
blok = blok ⊕ potključ[i]
3) Posmakni redove
Rotira (kružno posmiče) znakove ulijevo u svim retcima osim prvog za unaprijed poznati broj mjesta koji je ovisan o N.
4) Pomiješaj stupac bloka
Množi se stupac po stupac bloka s fiksnim polinomom:
a(x) = 03Hx3 + 01Hx2 + 01Hx + 02H mod x4+1
Odnosno, za svaki stupac bloka računa se stupac novog stanja:
Postoje razni načini AES kriptiranja koji određuju kako se ulazni podatci dijele u blokove, kako se blokovi kriptiraju i kombiniraju, kako enkripcija upravlja problemima kao što su integritet podataka ili inicijalizacijski vektori (IV) i slično.
Često korišteni AES načini kriptiranja su:
1) ECB (Electronic Codebook)
- Svaki blok teksta kriptira se odvojeno s istim ključem
- Identični blokovi jasnog teksta rezultiraju identičnim blokovima skrivenog teksta
- Nije siguran za enkripciju većih količina ulaznih podataka zbog mogućnosti ponavljanja uzoraka
- Korištenje ovog načina kriptiranja se ne preporučuje
2) CBC (Cipher Block Chaining)
- Svaki blok jasnog teksta se XOR-a sa skrivenim tekstom prošlo kruga enkripcije
- Potreban je inicijalizacijski vektor IV koji se mora izabrati nasumično
- IV se šalje zajedno sa skrivenim tekstom
- Potrebno nadopuniti poruku tako da je duljina višekratnik veličine bloka
- Sigurna enkripcija pod razumnim pretpostavkama
3) CFB (Cipher Feedback) i OFB (Output Feedback)
- Slični protočnoj enkripciji, tj. jednokratnoj bilježnici
- Dekripcija jednaka enkripciji
- Trebalo bi svaki put koristiti različit inicijalizacijski vektor
4) CTR (Counter Mode)
- sličan protočnoj enkripciji, tj. jednokratnoj bilježnici
- na temelju ključa i IV izračuna se niz bitova koji se XOR-a s jasnim tekstom
- može se paralelizirati
- ne zahtijeva nadopunjavanje poruke (eng. padding)
5) GCM (Galois/Counter Mode)
- način autentifikacijskog kriptiranja koji je primjenjiv samo za simetrične blok algoritme s veličinom bloka od 128 bitova
- samo za autentifikaciju – koristi MAC
- ulaz: jasni tekst, IV, povezani autentifikacijski podaci (Associated Data, AD ), duljina povezanih podataka i duljina kriptiranog teksta
- izlaz: autentifikacijska značka (Auth Tag)
Generalno se ne preporučuje koristiti način kriptiranja ECB. Inicijalizacijski se vektor ne smije ponavljati i mora biti generiran slučajno, a ne smije se ponavljati ni simetrični ključ.
PRIMJER -Zadatak s Hacknite platforme - Encryption service
Markov san bio je napraviti program koji će šifrirati nizove znakova. Spajanjem na chal.platforma.hacknite.hr:10001 možeš isprobati njegov program. Dan ti je kod njegovog programa te šifrirani tekst. Možeš li pogoditi što je to Marko zapravo napisao? Tekst za šifriranje je: f44e2a4b2efd98c8b3d1b97c6da4649749ebb799d3c4a7c24bdfe3b36e0a35c6da15b0479f9912c0 Flag je u formatu CTF2021[brojevi]
U prilogu se još nalazi i program koji se smije koristiti za dešifriranje.
Možemo pokušati XOR-ati cijeli tekst za šifriranje s null-byteovima i tako dobiti prvih 40 bajtova ključa (jer je to duljina teksta za šifriranje - svaki znak zauzima pola bajta). U Python programu bismo to postigli sljedećom naredbom u terminalu:
python3 -c "print('\x00'*40)" | nc 172.17.0.2 4444
Nakon što smo dobili ključ, XOR-amo ga s tekstom za šifriranje. XOR-anje se može raditi koristeći neki online alat ili tako što stvorimo binarne datoteke ključa i teksta za šifriranje pa pokrenemo skriptu koju smo dobili.
Izvori
[1] Christof Paar, Jan Pelzl, Understanding Cryptography, Springer-Verlag Berlin Heidelberg, 2009.
[2] https://platforma.hacknite.hr/challenges
[3] Kriptografija i kriptoanaliza, predavanja, FER
[4] Budin, L.; Golub, M; Jakobović, D., Jelenković, L (2010.) (2013.), Operacijski sustavi, Element, Zagreb
[5] https://csrc.nist.gov/csrc/media/projects/cryptographic-standards-and-guidelines/documents/aes-development/rijndael-ammended.pdf