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
aes [2023/09/27 08:23] – GCM dodan 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}} {{ :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}} {{ :aes.png?nolink&500 | AES enkripcijski postupak}}
  
Line 10: Line 10:
 znak = Sbox[znak]  znak = Sbox[znak] 
 </file> </file>
-**2) Dodaj podključ** +**2) Dodaj potključ** 
- blok = blok ⊕ podključ[i]+ 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**\\
Line 24: Line 24:
  
  
-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 31: 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}} {{ ::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 
Line 45: Line 45:
   * 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}} {{ ::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}} {{ ::aes_ctr.png?nolink&500 | CTR shema}}
  
 **5) GCM (Galois/Counter Mode)** **5) GCM (Galois/Counter Mode)**
-  *način autentifikacijskog kriptiranja koji je primjenjiv samo za simetrične blok algoritme s veličninom bloka 128 bita+  *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]]   * samo za autentifikaciju – koristi [[mac|MAC]]
   * ulaz: jasni tekst, IV, povezani autentifikacijski podaci (Associated Data, AD ), duljina povezanih podataka i duljina kriptiranog teksta   * ulaz: jasni tekst, IV, povezani autentifikacijski podaci (Associated Data, AD ), duljina povezanih podataka i duljina kriptiranog teksta
Line 63: Line 63:
    
  
-Generalno se ne preporuč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č.+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. 
  
 ===Izvori=== ===Izvori===
aes.1695802995.txt.gz · Last modified: 2025/06/03 10:22 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki