lunedì 26 marzo 2012

NdH 2k11 crypto100 writeup

La crittoanalisi mi ha sempre affascinato, fin dai primi codici creati che erano semplici sostituzioni di lettere(tipo ROT13) oppure sostituendo lettere secondo chiavi di cifratura... Comunque per ogni persona che creava un codice, ce n'era sempre un altro pronto a violarne il codice... Famoso fu Enigma, una macchina usata per cifrare i messaggi durante la seconda guerra mondiale...

Visto che si è appena svolto il CTF versione 2k12, ho deciso di cimentarmi prima con il 2k11 per avere un po' un'idea di come il CTF è organizzato... E sono partito proprio dalla sezione crittografia proprio perchè mi piace molto...

Prendendo da qui il file relativo al crypto100 si ottiene un file di testo cifrato... Lo scopo è decifrarlo trovando la chiave di cifratura relativa... Il testo è abbastanza lungo, composto da parole di diversa lunghezza, e questo è forse il punto dolente della cifratura Vigenere... Infatti, avendo un testo lungo, analizzandolo si possono trovare delle ricorrenze a determinate distanze... Da queste ricorrenze si può risalire alla lunghezza della chiave di cifratura... Notizia importante perchè è utile durante la ricerca tramite bruteforce della chiave di cifratura...

Di tools che svolgono in modo automatico questa operazione io non ne ho trovati... JCryptool è un tool che non ho ben capito perchè non trovavo la chiave corretta... La lunghezza viene trovata correttamente, cioè 18 o 36(probabilmente perchè si tratta di una ripetizione)... Quindi ho cercato su google(lo strumento più potente per i CTF) ed ho trovato un codice già scritto in python per i cifrari di Cesare e Vigenere...

Si chiama pygenere ma in questa pagina viene posto veramente male... Ringraziando ovviamente chi ha creato tutte le classi facilmente utilizzabili, io l'ho ripreso ed adattato per ottenere ciò che cercavo... Questo codice python è fatto veramente bene, ha tutti le percentuali per le diverse lingue, che è spesso importante nella cifratura con alfabeto modificato:


Beh il codice è molto lungo, ma le ultime 3 righe specificano bene come si procede... Si usano le classi già pronte per operare tutto il processo di crittoanalisi rapidissimamente... Ed otteniamo chiave di cifratura e testo(credo sia latino, non so, inglese non lo è)... Da qui si nota anche la potenza di python... E' impensabile scrivere questo codice in C, almeno per me... Se su python sono 350 righe, in C sarebbero almeno 1000...

ps:credo di aver rispettato le condizioni di licenza del codice python pygenere reindirizzando al sito in questione...

ps2:per la soluzione di questa prima fase trovate tante guide con google, guardate quella che più vi piace e seguitela per imparare nuove cose... Secondo me si impara più da un tutorial che da un libro di testo di cifrari... Almeno per scopi ludici...

Nessun commento: