lunedì 6 febbraio 2017

Io ed il guardiano : chiavi RSA

Ad un certo punto, mentre stavo rientrando nella mia citta' medievale, mi sono ritrovato chiuso fuori dalle mura. Per farmi aprire le porte dal guardiano dovevo convincere il guardiano,all'interno e che non mi poteva osservare, della mia identita'.....il tutto cio' senza consegnare le chiavi della citta' al nemico accampato li' vicino e pronto all'assalto

Ovviamente non potevo parlare perche' sarei stato ascoltato.

Il guardiano mi ha passato da sotto alla porta un foglietto con la sua chiave pubblica generata con la sequenza (la chiave privata e' rimasta custodita all'interno delle mura)
openssl genrsa -out private_key.pem 1024 (generazione chiave privata)

openssl rsa -in private_key.pem -out public_key.pem -outform PEM -pubout (la chiave privata scritta sul foglietto e' un public_key.pem)

a questo punto ero in grado di comunicare con il guardiano in modo segreto ma cio' non e' che aiuta molto perche' se avessi criptato il messaggio con il mio nome, il nemico avrebbe potuto rubare il foglio con la mia risposta e si sarebbe impossessato della mia identita'..necessita quindi un messaggio variabile che puo' essere utilizzato solo per pochissimo tempo (tipo un secondo)

Sia io che il guardiano riusciamo a vedere l'orologio della torre e ci eravamo messi d'accordo che il mio messaggio era composto dal mio codice personale e dall'ora in un determinato formato (in questo modo il messaggio sarebbe stato valido solo per un minuto)

ho proceduto quindi a creare il mio messaggio nel seguente modo
---------------------------------
#!/bin/bash
rm encrypt.dat
rm new_encrypt.txt
rm messaggio.txt
SEED=4096 #questa e' il codice identificativo persona
NOW=$(date +"%Y%H%M")
MESSAGGIO=$(($SEED * $NOW)) # il messaggio ricalcola
echo $MESSAGGIO > messaggio.txt
openssl rsautl -encrypt -inkey public_key.pem -pubin -in messaggio.txt -out encrypt.dat
---------------------------------
il guardiano ha letto il messaggio ed ha decodificato il mio codice. Ha controllato con la sua tabella e mi ha fatto entrare
---------------------------------
#!/bin/bash
openssl rsautl -decrypt -inkey private_key.pem -in encrypt.dat -out new_encrypt.txt #descritta il messaggio con la chiave privata del server
NOW=$(date +"%Y%H%M") 
TEXT=$(<new_encrypt.txt)
CHIAVE=$(($TEXT / $NOW))
echo $CHIAVE #controlla se la chiave e' presente nella lista del guardiano delle persone che possono passare
----------------------------------

con sapendo le informazioni di come formare il messaggio (con la chiave pubblica ed il metodo di combinazione del codice privato con l'orario) l'unica soluzione rimasta ai nemici chiusi fuori era quella di continuare a bussare al guardiano cercando di indovinare il codice ...peccato che il guardiano non e' uno sprovveduto ed accetta solo un foglietto sotto la porta al minuto..con codici identificativi sufficientemente lunghi si fa prima a buttare giu' la porta con la forza che a cercare di farsi aprire la serratura