Laurea Magistrale in Bioingegneria Corso di Informatica Medica (Prof. Giovanni Sparacino) A.A. 2008-2009 Homework Parte 3: Sicurezza dei dati sanitari Esercizi, e relative soluzioni, a cura dell Ing. Costanza D Avanzo (davanzoc@dei.unipd.it) e dell Ing. Stefania Guerra (stefi.guerra@gmail.com) Esercizi in Matlab 1. Si considerino le function julius e dejulius (di cui agli esercizi 3.1 e 3.2, parte 8). a) Modificarle in modo che gestiscano caratteri maiuscoli e minuscoli. In particolare si garantisca che i caratteri maiuscoli (codici ASCII da 65 a 90) vengano criptati in caratteri maiuscoli, i caratteri minuscoli (codici ASCII da 97 a 122) in minuscoli e gli spazi (codice ASCII 32) in spazi. b) Scrivere un programma main per cifrare e decifrare il testo Roma ebbe sette re Romolo Numa Pompilio Tullio Ostilio Anco Marzio Tarquinio Prisco Servio Tullio Tarquinio il Superbo. 2. La cifratura Atbash (Antico Testamento) sostituisce la prima lettera dell alfabeto con l ultima, la seconda con la penultima,, l ultima con la prima. a) Scrivere una function atbash1.m che permetta di criptare e decriptare un testo secondo la cifratura Atbash gestendo solo lettere maiuscole e spazi. b) Modificare la function del punto precedente in modo che gestisca anche le lettere minuscole, similmente all esercizio 1a). Esempi di possibili soluzioni Esercizio 1
Esercizio 2
Esercizi da compitino da svolgere senza usare Matlab 1. Tizio vuole mandare una password a Caio in modo sicuro e sceglie di cifrare il testo con il metodo RSA. La password da inviare è ROMA e viene cifrata con la chiave pubblica (21,5). Qual è il testo che giunge a Caio? Supponendo di essere venuti a conoscenza del valore di p utilizzato nell algoritmo di generazione della chiave (sia p=3), ricavare la chiave segreta che permette di decifrare il codice. Usare la chiave ricavare per ottenere la password ROMA. 2. Elena riceve da Maria un messaggio cifrato che nasconde la chiave di sessione che le due amiche utilizzeranno per una comunicazione basata su un cifrario a chiave simmetrica. Il messaggio in codice ASCII (decimale) ricevuto è il seguente: 10 36 24 74 8 Ricavare la chiave di sessione ipotizzando che sia una stringa da 32 bit e sapendo che è stata cifrata con il metodo RSA. Le chiavi di Elena e Maria sono le seguenti: chiave pubblica Elena: (22,7) chiave pubblica Maria: (14,5) chiave segreta Elena: (22,3) chiave segreta Maria: (14,5). 3. Sia dato N=65, p=5. Determinare q. Dato e=19, determinare d (si proceda a tentativi partendo da un possibile quoziente di 15). a) Si consideri la stringa fata e la si cripti con la chiave (N,e). b) Si consideri la sequenza (6 bit) 101110 000100 101110 000001 111100 000100 101110 000001 criptata con chiave (N,19). Si riporti in base alle tabelle ASCII il testo criptato. Sapendo che la striscia in binario riportata è stata ricavata dalla sequenza in chiaro Ricavare il testo originale spedito. 01100100 01100001 01110100 01100001 c) Siano p=3, q=5, e=7, k=4. Si determini d. Si cripti la parola PIZZA con la chiave [N,e] e si commenti brevemente il risultato ottenuto. Se la parola fosse stata diversa si sarebbe ottenuto un risultato simile? Cosa succederebbe se la parola pizza venisse scritta in minuscolo? Provare a ricavare una proprietà generica che consenta di stabilire se un carattere sarà mappato in se stesso (si consideri l operazione M e modn e il suo risultato). Cambierebbe qualcosa se si usasse un k diverso?
Esempi di possibili soluzioni Esercizio 1 R O M A codifica ASCII: 82 79 77 65 in binario: 01010010 01001111 01001101 01000001 divisione in blocchi da 4 bit: 0101 0010 0100 1111 0100 1101 0100 0001 valori decimali corrispondenti: 5 2 4 15 4 13 4 1 valori elevati ad e : 5 5 2 5 4 5 15 5 4 5 13 5 4 5 1 calcolo del resto della divisione per 21: 17 11 16 15 16 13 16 1 in binario: 10001 01011 10000 01111 10000 01101 10000 00001 sequenza binaria finale in blocchi da 8 bit: 10001010 11100000 11111000 00110110 00000001 valori decimali associati: 138 224 248 54 1 stringa cifrata: èó 6 A Caio giunge quindi il testo èó 6. Per il calcolo della chiave segreta, si ricava q=n/p=7, z=(p-1)(q-1)=12. Poiché e=5, risulta d=5. La chiave per decifrare il testo è quindi (21,5).
La stringa cifrata risulta èó 6 in codifica ASCII (decimale): 138 224 248 54 1 in binario: 10001010 11100000 11111000 00110110 00000001 divisione in gruppi da 5 bit: 10001 01011 10000 01111 10000 01101 10000 00001 in decimale: 17 11 16 15 16 13 16 1 valori elevati a d : 17 5 11 5 16 5 15 5 16 5 13 5 16 5 1 resto della divisione per 21: 5 2 4 15 4 13 4 1 valori in binario: 0101 0010 0100 1111 0100 1101 0100 0001 codifica ASCII su 8 bit: 82 79 77 65 stringa decriptata: R O M A. Esercizio 2 La chiave per decifrare è la chiave segreta di Elena, colei che riceve il messaggio. In messaggio ricevuto trasformato in bit risulta essere: divisione in blocchi da 5 bit 00001010 00100100 00011000 01001010 00001000 i valori in decimale corrispondenti: 00001 01000 10010 00001 10000 10010 10000 01000
1 8 18 1 16 18 16 8 valori elevati alla d=3: i resti della divisione per N=22: 1 8 3 18 3 1 3 16 3 18 3 16 3 8 3 1 6 2 1 4 2 4 6. I resti, espressi in binario, forniscono la chiave di sessione: Esercizio 3 N=65 p=5 q=13 d=43 e=19. a) Codifica 8 bit Codifica 4 bit (k=4) Mod 65 Codifica a 7 bit (resto max 64) 0001 0110 0010 0001 0100 0010 0100 0110. 01100110 01100001 01110100 01100001 0110 0110 0110 0001 0111 0100 0110 0001 6 6 6 1 7 4 6 1 6 19 6 19 6 19 1 19 7 19 4 19 6 19 1 19 46 46 46 1 58 4 46 1 0101110 0101110 0101110 0000001 0111010 0000100 0101110 0000001 01011100 10111001 01110000 00010111 01000001 00010111 00000001 92 185 112 23 65 23 1 Il testo criptato è \ p A, il primo carattere dipende dal software utilizzato. b) Il testo criptato è Kü- Kü, il testo originale è data. c) d=7, PIZZA, (M e -M=Ny) dove y è un numero naturale, sì.
Funzioni Hash Si consideri la funzione di Hash che opera nel modo seguente: C i =b i1 XOR b i2 XOR b i3 XOR XOR b im dove C i è l i-esimo bit del codice hash, b ij è l i-esimo bit del j-esimo blocco in cui viene divisa la sequenza d ingresso, m è il numero di blocchi di n bit in cui può essere suddivisa la sequenza in ingresso. a) Si scriva una function XOR_hash.m che fornisca il codice hash a n bit per una sequenza di bit in ingresso di lunghezza arbitraria. b) Si scriva un main che codifichi il testo Laboratorio di Informatica Medica utilizzando n=8. Esempio di possibile soluzione
Altri esercizi Viene fornito (vd. sito del corso, cartella Files) un testo crittato con metodo di permutazione (file testoc.mat). Si sa che p stato crittato tramite permutazione. Nell ordine, le 7 lettere meno frequenti sono [JKWXYQH] e le 9 più frequenti sono [LTRNEOIA]. 1. Costruire una function testook=tentativo(vettore_vecchi, vettore_nuovi, testo) che sostituisca nella stringa testo le occorrenze dei caratteri nel vettore vettore_vecchi ordinatamente con i caratteri contenuti nel vettore vettore_nuovi. Ad esempio Vettore_vecchi=[ ABCD ] Vettore_nuovi=[ EFGH ] Sostituire a tutte le A nel testo il carattere E, al posto di B sostituire F 2. Applicare la function al testo, in modo da sostituire intanto almeno i caratteri di cui si conosce la codifica con probabilità alta (i più frequenti ed i meno frequenti.) 3. Scrivere una function alfaredux=permutaredux(vettore) che ricevendo in ingresso un vettore con le codifiche ASCII di n caratteri ne crei una permutazione, restituendo le codifiche ASCII dell alfabeto permutato. 4. Provare con un approccio tipo attacco esaustivo a cercare le permutazioni dei caratteri di cui non si conosce la frequenza nella lingua per completare la decifrazione del messaggio. Applicare ripetutamente la function tentativo per ottenere le varie versioni decifrate. 5. Provare un approccio intelligente, osservando il testo decifrato in parte (suggerimento: nel sostituire le lettere sostituire in minuscolo per rendere evidente il messaggio già a posto e quello ancora da decifrare) e provare una sostituzione mirata di alcune lettere andando a senso. Si consiglia di fare introdurre lettere da sostituire e sostitute da tastiera, interrompendo il processo quando si è soddisfatti del risultato.