Tiny Encryption Algorithm (TEA) je jednostavan simetrični enkripcijski algoritam izumljen 1994. Iako je otporan na brojne vrste kriptoanaliza, zbog nekih svojih svojstava se ne smije koristiti u hash funkcijama. __PRIMJER__ -**Zadatak s Hacknite platforme - Ultrasecure Hash** Mirjana je osmislila novi hash algoritam koji se brzo izvodi i zauzima jako malo prostora. Zna koliko je bitno testirati algoritme prije nego što ih se stavi u proizvod, pa te moli da testiraš postoje li praktični napadi protiv njega. Konkretno jako joj je bitno da algoritam nije ranjiv na "second preimage" napad (https://en.wikipedia.org/wiki/Preimage_attack) . Dostupna ti je implementacija algoritma u pythonu, a na njezin se servis se možeš spojiti naredbom: nc chal.platforma.hacknite.hr 13012 ako koristite Linux odnosno telnet chal.platforma.hacknite.hr 13012 ako koristite Windows Cilj zadatka je izvesti second preimage napad nad algoritmom. Second preimage napadom se pronalazi par inputa koji rezultiraju istim outputom: - hash(x1) = y - hash(x2) = y Konkretno potrebno je pronaći unos koji nije jednak vrijednosti "flagflagflagflag", a koji daje istu hash vrijednost. Pronalazak rješenja jest zapravo vrlo jednostavan jednom kada se sazna da je riječ o TEA algoritmu (Tiny Encryption Algorithm). Do te informacije se može doći pomoću dijela koda: DELTA = 0x9E3779B9 Pretragom te DELTA vrijednosti, moguće je pronaći brojne primjere koda koji implementiraju TEA. U kodu se koristi TEA kao hash algoritam tako da se konstantne vrijednosti "0x123456789" i "0x9ABCDEF0" šifriraju s našim unosom koji se koristi kao ključ (sličan "hash" algoritam se koristio i u Xbox igraćoj konzoli). Istraživanjem javno poznatih napada na TEA algoritam, moguće je pronaći [[https://www.schneier.com/wp-content/uploads/2016/02/paper-key-schedule.pdf|članak]] koji kaže kako TEA ima ranjivost povezanih ključeva (za bolje razumijevanje ranjivosti, preporučuje se pročitati članak). To znači da mogu postojati različiti enkripcijski ključevi koji za isti plaintext daju isti ciphertext. U članku je objašnjeno da se takav par povezanih ključeva (ključ je uvijek iste dužine, 128 bitova, odnosno 4 32-bitne riječi) može konstruirati na tri načina, tako da se napravi "bit-flip" na najvišem bitu prve i druge 32-bitne riječi ključa, najvišem bitu treće i i četvrte 32-bitne riječi ključa ili bit flip najviših bitova svih četiriju 32-bitnih riječi ključa. Ova ranjivost se može iskoristiti kako bi se zavarao hash algoritam implementiran u zadatku, budući da se naš unos zapravo koristi kao ključ u TEA algoritmu. Tekst "flagflagflagflag" u binarnom zapisu glasi: 01100110 01101100 01100001 01100111 01100110 01101100 01100001 01100111 01100110 01101100 01100001 01100111 01100110 01101100 01100001 01100111 Bit-flipom najviših bitova svih 32-bitnih riječi dobivamo: 11100110 01101100 01100001 01100111 11100110 01101100 01100001 01100111 11100110 01101100 01100001 01100111 11100110 01101100 01100001 01100111 Zadatak prihvaća tekst u base64 kodiranom formatu, pa možemo koristiti [[https://gchq.github.io/CyberChef/#recipe=From_Binary('Space',8)To_Base64('A-Za-z0-9%2B/%3D')&input=MTExMDAxMTAgMDExMDExMDAgMDExMDAwMDEgMDExMDAxMTEgMTExMDAxMTAgMDExMDExMDAgMDExMDAwMDEgMDExMDAxMTEgMTExMDAxMTAgMDExMDExMDAgMDExMDAwMDEgMDExMDAxMTEgMTExMDAxMTAgMDExMDExMDAgMDExMDAwMDEgMDExMDAxMTE|CyberChef recept]] da dobijemo vrijednost potrebnu za rješavanje zadatka. Zadatak pokazuje kako je bitno istražiti javno poznate napade na kriptografske algoritme, budući da je često moguće uspješno izvesti napad i bez matematičkog razumijevanja ranjivosti.