aes
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
aes [2023/09/25 08:42] – katarina | aes [2023/11/27 09:19] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====AES==== | ====AES==== | ||
- | **AES (Advanced Encryption Standard)**, | + | **AES (Advanced Encryption Standard)**, |
{{ : | {{ : | ||
- | AES koristi | + | AES koristi |
{{ : | {{ : | ||
Line 10: | Line 10: | ||
znak = Sbox[znak] | znak = Sbox[znak] | ||
</ | </ | ||
- | **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 prvog, za 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 | + | 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 |
Č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 | + | * Korištenje ovog načina |
{{ :: | {{ :: | ||
**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 |
{{ :: | {{ :: | ||
**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 |
* može se paralelizirati | * može se paralelizirati | ||
- | * ne zahtijeva nadopunjavanje poruke (padding) | + | * ne zahtijeva nadopunjavanje poruke (eng. //padding//) |
{{ :: | {{ :: | ||
+ | **5) GCM (Galois/ | ||
+ | *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) | ||
+ | {{ :: | ||
+ | |||
+ | |||
+ | 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** | ||
+ | < | ||
+ | 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] | ||
+ | |||
+ | </ | ||
+ | |||
+ | 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, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 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: | ||
+ | |||
+ | < | ||
+ | data = " | ||
+ | import subprocess | ||
+ | def get_enc(i): | ||
+ | return str(subprocess.check_output(f" | ||
+ | | ||
+ | |||
+ | cipher = open(" | ||
+ | |||
+ | while data[-1] != " | ||
+ | # | ||
+ | for x in " | ||
+ | #print(data + x) | ||
+ | r = get_enc(data + x) | ||
+ | if cipher.startswith(r): | ||
+ | data += x | ||
+ | break | ||
+ | print(data) | ||
+ | </ | ||
+ | |||
+ | 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 " | ||
+ | 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.1695631343.txt.gz · Last modified: 2025/06/03 10:22 (external edit)