User Tools

Site Tools


aes

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
aes [2023/09/25 08:22] – tekst katarinaaes [2023/11/27 09:19] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====AES==== ====AES====
-**AES (Advanced Encryption Standard)**, također poznat pod svojim originalnim nazivom **Rijndael**, je sustav simetrične kriptografije temeljen na supstitucijsko-permutacijskim poljima. \\ +**AES (Advanced Encryption Standard)**, poznat pod svojim originalnim nazivom **Rijndael**, sustav je simetrične kriptografije temeljen na supstitucijsko-permutacijskim poljima. \\ 
- +{{ :perm.png?nolink&500 | Shema supstitucijsko-permutacijskog polja}} 
-AES koristi fiksiranu veličinu bloka od 128 bitova te veličinu ključa od 128, 192 ili 256 bitova. Provodi se nad matricom 4x4, 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 te može biti u iznosu od 4,6 ili 8. AES pri enkripciji koristi operacije zamjene znakova, posmicanja redova, miješanja stupaca te dodavanja podključa.\\+AES koristi fiksnu veličinu bloka od 128 bitova te veličinu ključa od 128, 192 ili 256 bitova. Provodi se nad matricom 4x4, 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 može biti 4,6 ili 8. AES se pri enkripciji koristi operacijama zamjene znakova, posmicanja redova, miješanja stupaca te dodavanja potključa.\\ 
 +{{ :aes.png?nolink&500 | AES enkripcijski postupak}}
  
 Funkcije koje AES koristi matematički su opisane u nastavku:\\ Funkcije koje AES koristi matematički su opisane u nastavku:\\
 **1) Zamjena znakova**  \\ **1) Zamjena znakova**  \\
-  znak = Sbox[znak] \\ +<file> 
-**2) Dodaj podključ** +znak = Sbox[znak]  
- blok = blok ⊕ podključ[i]+</file> 
 +**2) Dodaj potključ** 
 + blok = blok ⊕ potključ[i]
 **3) Posmakni redove**\\ **3) Posmakni redove**\\
-Rotira (kružno posmiče) znakove ulijevo, i to u svim retcima osim prvogza unaprijed poznati broj mjesta koji je ovisan o N. \\ +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**+ 
 +**4) Pomiješaj stupac bloka**\\
  Množi se stupac po stupac bloka s fiksnim polinomom:\\  Množi se stupac po stupac bloka s fiksnim polinomom:\\
-  a(x) = 03Hx3 + 01Hx2 + 01Hx + 02H mod x4+1\\ +<file> 
-Odnosno, za svaki stupac bloka računa se stupac novog stanja:+a(x) = 03Hx3 + 01Hx2 + 01Hx + 02H mod x4+1  
 +</file> 
 +Odnosno, za svaki stupac bloka računa se stupac novog stanja:\\ 
 +{{ :mixcol.png?nolink&180 |}}
  
  
-AES se koristi u raznim načinima kriptiranja koji određuju način na koji primjenjujemo AES kod kriptiranja poruka proizvoljne duljine, točnije kako se ulazni podatci dijele u blokove, kako se blokovi kriptiraju i kombiniraju te kako enkripcija upravlja problemima kao što su integritet podataka ili inicijalizacijski vektori.+Postoje razni načini AES kriptiranja koji određuju kako se ulazni podatci dijele u blokove, kako se blokovi kriptiraju i kombinirajukako enkripcija upravlja problemima kao što su integritet podataka ili inicijalizacijski vektori (IV) i slično.
  
 Često korišteni AES načini kriptiranja su:\\ Često korišteni AES načini kriptiranja su:\\
Line 24: Line 31:
   * Identični blokovi jasnog teksta rezultiraju identičnim blokovima skrivenog teksta   * 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    * Nije siguran za enkripciju većih količina ulaznih podataka zbog mogućnosti ponavljanja uzoraka 
-  * Korištenje ovog načina kriptaranja se ne preporuča+  * Korištenje ovog načina kriptiranja se ne preporučuje 
 +{{ ::aes_ecb.png?nolink&500 | ECB shema}}
  
 **2) CBC (Cipher Block Chaining)** **2) CBC (Cipher Block Chaining)**
-  * Svaki blok jasnog teksta se XORa sa skrivenim tekstom prošle runde enkripcije+  * 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   * Potreban je inicijalizacijski vektor IV koji se mora izabrati nasumično
   * IV se šalje zajedno sa skrivenim tekstom    * IV se šalje zajedno sa skrivenim tekstom 
   * Potrebno nadopuniti poruku tako da je duljina višekratnik veličine bloka   * Potrebno nadopuniti poruku tako da je duljina višekratnik veličine bloka
   * Sigurna enkripcija pod razumnim pretpostavkama   * Sigurna enkripcija pod razumnim pretpostavkama
 +{{ ::aes_cbc.png?nolink&500 | CBC shema}}
  
 **3) CFB (Cipher Feedback) i OFB (Output Feedback)** **3) CFB (Cipher Feedback) i OFB (Output Feedback)**
   * Slični protočnoj enkripciji, tj. jednokratnoj bilježnici   * Slični protočnoj enkripciji, tj. jednokratnoj bilježnici
   * Dekripcija jednaka enkripciji   * Dekripcija jednaka enkripciji
-  * Valja svaki put koristiti različiti IV+  * Trebalo bi svaki put koristiti različit inicijalizacijski vektor 
 +{{ ::aes_ofb_cfb.png?nolink&500 | CFB/OFB shema}}
    
 **4) CTR (Counter Mode)** **4) CTR (Counter Mode)**
-  * slični protočnoj enkripciji, tj. jednokratnoj bilježnici +  * sličan protočnoj enkripciji, tj. jednokratnoj bilježnici 
-  * na temelju ključa i IV se izračuna niz bitova koji se XOR-a s jasnim tekstom+  * na temelju ključa i IV izračuna se niz bitova koji se XOR-a s jasnim tekstom
   * može se paralelizirati   * može se paralelizirati
-  * ne zahtijeva nadopunjavanje poruke (padding) +  * ne zahtijeva nadopunjavanje poruke (eng. //padding// 
 +{{ ::aes_ctr.png?nolink&500 | CTR shema}} 
 + 
 +**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|MAC]] 
 +  * ulaz: jasni tekst, IV, povezani autentifikacijski podaci (Associated Data, AD ), duljina povezanih podataka i duljina kriptiranog teksta 
 +  * izlaz: autentifikacijska značka (Auth Tag) 
 +{{ ::gcm.png?nolink&500 | GCM shema}} 
 +  
 + 
 +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 - AES kriptirana poruka**  
 +<file> 
 +Ivan je na faksu učio o modernim kriptografskim algoritmima. Toliko je očaran AES algoritmom da je odlučio 
 +samostalno napraviti program za šifriranje svojih najtajnijih informacija. Pokušaj dešifrirati ciphertext 
 +kako bi provjerio je li Ivanov program zaista siguran. 
 + 
 +ciphertext (u zasebnoj datoteci): 
 +991262a3123d702aaa296e36e4054dcb0031479d8affcae34dd12757b19868eee63f79e83e9687e10fc74dbd3c1a61bfdb4ec98a75 
 +38f2c75eed1402d3edfd8dc28531c6d75a3786750afa0f48524d9adb4ec98a7538f2c75eed1402d3edfd8ddb4ec98a7538f2c75eed 
 +1402d3edfd8d64019b35eac50ab04f0239080a879f000b42253688df27967c492e721c9e91407edcf9ebd01fd7a17bc0219784322b 
 +5f0b42253688df27967c492e721c9e91402b5bebae08f2851e97e139390d4d6245925a96bbca45277ebecfd06fa54b510edb4ec98a 
 +7538f2c75eed1402d3edfd8d7edcf9ebd01fd7a17bc0219784322b5f3454fe7467cd0e2b6036f48a3c2246930b42253688df27967c 
 +492e721c9e91403856820345c0e11691b05d22b6005906668020a4b98905a562e051955ea720177edcf9ebd01fd7a17bc021978432 
 +2b5fec0e366b9ea7d725dc81fdec29b57bb3 
 + 
 +Napomena: u ciphertextu nema znakova novog reda, ali su ovdje dodani radi lakše čitljivosti. 
 + 
 +telnet chal.platforma.hacknite.hr 8083 
 +netcat chal.platforma.hacknite.hr 8083 
 + 
 +Flag je u formatu CTF2022[brojevi] 
 + 
 +</file> 
 + 
 +U prilogu se nalazi i datoteka encrypt.py. 
 + 
 +Pokušajmo se spojiti na chal.platforma.hacknite.hr i port 8083. Imamo mogućnost pisanja, a kao rezultat dobijemo ispis kodiranog teksta koji smo unijeli. U encrypt.py datoteci. vidimo da se koristi AES ECB mod (linija 19: cipher = AES.new(key, **AES.MODE_ECB**)) te da se svaki znak jasnog teksta tretira kao zasebni blok. U ECB načinu rada se svaki isti blok jasnog teksta uvijek šifrira u isti ciphertext. Uvjerimo se da je zaista tako. Upišimo jedno slovo, a zatim ponovimo to isto slovo tri puta:  
 + 
 +{{ :nc-a.jpg?600 |}} 
 + 
 +Vidimo da se svaka pojava istog znaka šifrira jednako, što i odgovara AES ECB modu. Sad upišimo dio flaga koji znamo, a zatim i cijeli ciphertext da vidimo gdje u njemu počinje flag: 
 + 
 +{{ :nc-ctf2022.png?600 |}} 
 + 
 +Vidimo da počne odmah na početku. Sad nam preostaje dešifrirati ostatak teksta da bismo dobili flag. Napišimo jednostavnu Python skriptu za to: 
 + 
 + <code python> 
 +data = "CTF2022[" 
 +import subprocess 
 +def get_enc(i): 
 +    return str(subprocess.check_output(f"echo \"{i}\" | nc chal.platforma.hacknite.hr 8083", 
 +     shell=True))[2:-3] 
 + 
 +cipher = open("ciphertext", "r").read() 
 + 
 +while data[-1] != "]": 
 +    #print(data) 
 +    for x in "123456789[]": 
 +        #print(data + x) 
 +        r = get_enc(data + x) 
 +        if cipher.startswith(r): 
 +            data += x 
 +            break 
 +print(data) 
 +</code>
  
 +Objasnimo što skripta radi. Kao podatak (//data//) uzeli smo dio zastavice koji nam je poznat. Nakon toga, dok ne dođemo do kraja flaga (znak "]"), uključujući i njega, //brute force// pogađamo koji je idući znak u skupu svih mogućih znakova koji se mogu pojaviti u flagu (brojevi i uglate zagrade). Svaki taj mogući znak kodiramo (funkcija //get_enc//) i, ako se kod poklapa s onime što slijedi u tekstu, znači da je taj znak idući i dodajemo ga na konačni flag. Funkcija get_enc jednostavno se spaja netcatom na stranicu zadanu u zadatku i ispisuje rezultat koji se dobije kodiranjem trenutnog znaka. Važno je napomenuti da uzima samo od indeksa 2 s početka do trećeg znaka od kraja jer python dodaje stringovima //b'// na početak stringa i //'\n// na kraj pa da se i ti znakovi ne kodiraju. \\
 +Zakomentirani printovi služe za bolje razumijevanje skripte. Poželjno je dodati //sleep()// između svake iteracije petlje kako stranica ne bi primijetila velik broj zahtjeva u kratkom vremenu, ali nije potrebno za ovaj zadatak.
  
-Generalno se ne preporuča koristiti način kriptiranja ECB. IV se ne smije ponavljati i treba biti generiran slučajno, a ne smije se ponavljati stalno niti isti simetrični ključ. 
  
 ===Izvori=== ===Izvori===
aes.1695630153.txt.gz · Last modified: 2025/06/03 10:22 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki