La crittografia frattale in Perl

1,083 views

Published on

Slide presentate all'IPW2011, riguardanti le classi Crypt::FNA e Crypt::FNA::Async pubblicate su CPAN.
Oltre ai metodi per cifrare e decifrare files e scalari, sono descritte anche le novità intercorse da YAPC::EU::2010 ovvero:

1. attributo 'salted': sale crittografico in Crypt::FNA (e quindi su Crypt::FNA::Async)

2. metodo 'mac': implementazione di un algoritmo digest in FNA

3. classe: Crypt::FNA::Async per il calcolo parallelo mediante i threads.

Published in: Technology
1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total views
1,083
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
13
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

La crittografia frattale in Perl

  1. 1. 988.44587991864.00639226912.57423224810.67516271004.9465835856.861260751138.2745474728.296645371079.07469229695.76234167930.351318826.07044723900.19866958855.11766404835.59726026631.79907235845.59106749607.51514839826.07053756730.67818328719.40812543712.90110561878.12528707 La crittografia frattale in Perl606.87693617844.95287635 Crypt::FNA e Crypt::FNA::Async529.89996398800.51021841627.67375558859.71016379739.56662699932.56196132
  2. 2. 988.44587991864.00639226 La crittografia frattale in Perl912.57423224810.67516271004.9465835856.861260751138.2745474728.296645371079.07469229695.76234167930.351318826.07044723900.19866958855.11766404835.59726026631.79907235845.59106749 SEZIONE 1607.51514839826.07053756730.67818328 Definizione dell’insieme {F}719.40812543712.90110561878.12528707606.87693617844.95287635529.89996398800.51021841627.67375558859.71016379739.56662699932.56196132
  3. 3. La crittografia frattale in Perl Definizione dell’insieme {F}IT’S FANTASTIC! • Acronimo di Fractal Numerical AlgorithmFRACTAL CURVE • Ma cos’è Crypt::FNAAND SYMMETRICENCRYPTION – È l’implementazione in Perl di due algoritmi per 1. formalizzare l’insieme di curve frattali {F} 2. Applicare le curve {F} ad un sistema crittografico simmetrico
  4. 4. La crittografia frattale in Perl Definizione dell’insieme {F}Partiamo da frattali lineari come la Koch curve Riportiamo le direzioni dei vari ordini in una costruzione a triangolo: 0 0, 60, -60, 0 0, 60, -60, 0, 60, 120, 0, 60, -60, 0, -120, -60, 0, 60, -60, 0
  5. 5. La crittografia frattale in Perl Definizione dell’insieme {F}• La cosa che a noi interessa è che ogni numero del triangolo è ottenuto come combinazione delle quantità al rigo superiore• osserviamo che possiamo esprimere la proprietà di auto-similitudine della curva di Koch grazie ad una costruzione simile, combinando tra loro i valori della base e poi con quelli derivati dalla combinazione e così via iterando il procedimento.
  6. 6. La crittografia frattale in Perl Definizione dell’insieme {F}Scrivendo la successione delle direzioni come gli elementi di un vettoreleggiamo la proprietà principale della costruzione: il primo addendo è il uhmmmgruppo, o ramo su cui si itera il procedimento di costruzione. Il secondoaddendo è la posizione dell’angolo che stiamo calcolando, nell’ambitodi quel ramo.a(0) = a(0) + a(0)a(1) = a(0) + a(1) I GRUPPOa(2) = a(0) + a(2)a(3) = a(0) + a(3)------------------------------------------------a(4) = a(1) + a(0)a(5) = a(1) + a(1) II GRUPPOa(6) = a(1) + a(2)a(7) = a(1) + a(3)------------------------------------------------a(8) = a(2) + a(0)a(9) = a(2) + a(1) III GRUPPOa(10)= a(2) + a(2)a(11)= a(2) + a(3)------------------------------------------------a(12)= a(3) + a(0)a(13)= a(3) + a(1) IV GRUPPOa(14)= a(3) + a(2)a(15)= a(3) + a(3)
  7. 7. La crittografia frattale in Perl Definizione dell’insieme {F}Il gruppo cui appartiene l’angolo k-esimo è: G(k) = int(k/Ro)La posizione dell’angolo k-esimo nel gruppo è invece: P(k) = k-int(k/Ro) = k-G(k)In definitiva, il valore dell’angolo k-esimo sarà: a(k)=a(G(k)) + a(P(k)) (1)Notiamo che questa relazione è generale e indipendente dal numero di parametri base della curva. In quella di Koch abbiamo una base di cardinalità pari a 4 ma non è necessariamente così.
  8. 8. La crittografia frattale in Perl Definizione dell’insieme {F}Con questa relazione diventa semplice ricavare il grafico della curva, potendone calcolare la direzione dei segmenti approssimanti successivi ed implementando poi un sistema di turtle graphics per il grafico:while ($k<$Ro**$r) { $a [$k]=$a[int($k/$Ro)]+$a[$k-int($k/$Ro)]; $k++}Di seguito alcune curve appartenenti ad {F}
  9. 9. La crittografia frattale in Perl Grafici di {F} mediante il metodo make_fract(56,-187, 215, 64) (0,90,-60,-90,60)
  10. 10. La crittografia frattale in Perl Grafici di {F} mediante il metodo make_fract(56,-177,225,-164) (56,-77,215,-64,60)
  11. 11. La crittografia frattale in Perl Grafici di {F} mediante il metodo make_fract(0,90,0,-90) (0,90,60,-90,120)
  12. 12. La crittografia frattale in Perl Grafici di {F} mediante il metodo make_fract(56,-177,225,164) (21,-31,100,-79)
  13. 13. La crittografia frattale in Perl Grafici di {F} mediante il metodo make_fract(56,-67,215,-64,60,45) (56,-67,210,-64,60,70)
  14. 14. 988.44587991864.00639226 La crittografia frattale in Perl912.57423224810.67516271004.9465835856.861260751138.2745474728.296645371079.07469229695.76234167930.351318826.07044723900.19866958855.11766404835.59726026631.79907235845.59106749 SEZIONE 2607.51514839826.07053756730.67818328719.40812543712.90110561878.12528707 Crypt::FNA606.87693617844.95287635 metodi & attributi529.89996398800.51021841627.67375558859.71016379739.56662699932.56196132
  15. 15. La crittografia frattale in Perl L’algoritmo crittograficoTeoria1 dati sono memorizzati in byte: qualunque tipo di file vada adaprire, il suo contenuto è certamente una sequenza ben precisadi byte.Un byte è costituito da 8 bit, per cui il suo valore deveappartenere all’insieme degli interi compresi tra 0 e 255 (256elementi complessivamente). Seguo quindi la curva frattalescelta, dell’insieme {F}, per un numero di vertici uguale a quelladel valore del byte da criptare. Le coordinate cartesiane di quelvertice rappresentano il crittogramma di quel ben preciso byte.
  16. 16. La crittografia frattale in Perl L’algoritmo crittograficoTeoria2 Le curve {F} hanno quindi un andamento che, in generale, siconosce solo calcolandolo ma lo si può calcolare solo se sono noti iparametri Ro genitori che sono parti fondamentali della chiave: èproprio in questo il cuore del sistema crittografico.Come altri sistemi di cifratura simmetrici, ad esempio il DES edAES, FNA ha chiave segreta ma a differenza dei predetti DataEncryption Standard (che ha una chiave di 56 bit) ed AdvancedEncryption Standard (che ha una chiave compresa tra i 128 ed i 256bit), Fractal Numerical Algorithm ha una chiave in bit lungaquanto si vuole: non ci sono restrizioni sul numero e valore delledirezioni della base Ro.
  17. 17. La crittografia frattale in Perl L’algoritmo crittograficoTeoria3 criptareOgni byte viene crittografato mediante le coordinate del vertice dellacurva frattale, ottenuto partendo dal successivo a quelloprecedentemente valutato, saltando di un numero ulteriore di verticiuguale al magic number più il valore del byte da crittografare.4 decriptareSi segue la curva frattale verificando, di vertice in vertice, che lecoordinate corrispondano a quelle del crittogramma. Il valore delbyte originale viene ricostruito avendo contato quanti vertici si sonosucceduti per arrivare all’uguaglianza dei due valori, dall’ultimauguaglianza incontrata. Il numero di vertici, ridotto del magic numbersommato all’unità, rappresenta il valore del byte n-esimo.
  18. 18. La crittografia frattale in Perl Crypt::FNA methodi & attributiAnd now, technology Crypt::FNA methodsapplication Crypt::FNA->new Crypt::FNA->make_fract Crypt::FNA->mac Crypt::FNA->encrypt_file Crypt::FNA->decrypt_file Crypt::FNA->encrypt_scalar Crypt::FNA->decrypt_scalar
  19. 19. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEWQuesto metodo ha due diverse modalità per l’istanziazione dell’oggetto:my $krypto=Crypt::FNA->new()my $krypto=Crypt::FNA->new( { r=> 7, angle => [56,-187, 215,-64], square => 4096, background => [255,255,255], foreground => [0,0,0], magic => 3, salted => ‘true’ })
  20. 20. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEWL’attributo “r”: ordine della curva di {F}Indica il livello di approfondimento nel calcolo della curva. E’ un numeromaggiore di zero, non necessariamente intero. Indicato con Ro il numero diangoli base della struttura autosimile, il numero di segmenti costituenti la curvaè dato da Ro**r. Valore di default: 7L’attributo “angle”: direzioni dei segmenti base della curva di {F}Sono gli angoli cui si applica l’algoritmo di ricorsione: su questi angoli sidetermina la struttura base autosimile della curva di {F}. Gli angoli sono espressinel sistema sessadecimale, con valori compresi tra -360 e 360 (ovvero da 0 a360). Valore di default: (56,-187, 215,-64)
  21. 21. La crittografia frattale in Perl Crypt::FNA methodi & attributi: ATTRIBUTO ANGLE : lacci di {F}In questa eventualità c’è una probabilità non nulla che due (e quindi infiniti) verticipossano sovrapporsi, rendendo impossibile la decodifica del file criptato. Adesempio, con una base Ro={-30,60,45,110} abbiamo:Definizione 1Si definisce base di una curva Є {F} l’insieme delle inclinazioni {Ro}Definizione 2Si definisce ramo di una curva Є {F}, la spezzata relativa al calcolo eseguito secondol’algoritmo di costruzione sulla base o sua combinazioneTeorema (v. http://www.perl.it/documenti/articoli/2010/04/anakryptfna.html)Ipotesi: sia data la base di {F}={x1, x2,…, xn} : max(x)-min(x) < π/4Tesi: l’ipotesi è sufficiente affinché l’insieme dei punti della curva {F} sia in corrispondenzabiunivoca con un sottoinsieme di punti del piano
  22. 22. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEWL’attributo “square”: lato del quadrato dove verrà disegnata/calcolata lacurva di {F}E’ la lunghezza del lato del quadrato contenitore della curva. Square non solo haimportanza per la (eventuale) rappresentazione grafica, ma anche per lacrittografia, poiché viene utilizzato per calcolare la lunghezza del lato di dellacurva (di è proporzionale a square/Ro**r) Valore di default: 4096L’attributo “background”: colore di fondo per il disegno della curva di {F}E’ il colore RGB di fondo del file PNG contenente il disegno della curva. Lanotazione è decimale, quindi con valori che vanno da 0 a 255. Valore di default: (255,255,255)
  23. 23. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEWL’attributo “foreground”: colore di primo piano per il disegno della curva di {F}E’ il colore RGB del tratto nel file PNG contenente il disegno della curva. Lanotazione è decimale, quindi con valori che vanno da 0 a 255. Valore di default: (0,0,0)L’attributo “magic number”: per la crittografia discretaIndica il numero di vertici della curva da saltare in fase di cifratura e decifratura:essendo lalgoritmo, una funzione continua sui vertici, saltandone alcuni questaresta continua su punti isolati dell’insieme dei vertici (da cui “discreta”). Valore di default: 3
  24. 24. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEWL’attributo “salted”: sale crittograficoIl ‘salt’ è una sequenza casuale, che ha lo scopo ultimo di influenzaredirettamente il crittogramma, in modo che cifrature dello stesso dato, dannoluogo a crittogrammi differenti.Il valore di default è ‘false’ per retrocompatibilità con le versioni di Crypt::FNAantecedenti alla 0.24 – prima versione che lo implementa Valore di default: false
  25. 25. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEWL’attributo “salted”: sale crittograficoTeoriaEbbene, anteponendo il sale al dato da criptare, si influenza, per lecaratteristiche intrinseche di FNA, tutta la sequenza successiva, per cui cifraturedello stesso dato, in momenti differenti e con la stessa chiave di cifratra,produrranno comunque crittogrammi completamente diversi.In fase di decriptazione, grazie alla chiave (l’attributo magic number nellospecifico), l’algoritmo è in grado di valutare quali vertici iniziali del crittogrammascartare, partendo poi dall’ultimo di questi per la valutazione dei bytes successivie la ricostruzione del dato in chiaro.
  26. 26. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEWL’attributo “salted”: sale crittograficoTeoriaL’utilità del “sale” è legata strettamente all’aderenza statistica ad una sequenzacasuale ovvero una sequenza che, statisticamente, può essere interpretata cometale (con una distribuzione simile ad altre sequenze casuali). Si è dunque scelto“l’istante” in cui viene invocato il calcolo del sale, evento casuale, come uno deifattori di input mentre il “magic number” è l’altro.Come indicato, le curve {F} hanno un andamento coerente alla definizione di caosdeterministico: una piccola oscillazione iniziale dei valori, produce grandivariazioni nei dati finali (leggi le coordinate dei vertici della curva).
  27. 27. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEWL’attributo “salted”: sale crittograficoTeoria: descrizione algoritmoAl momento dell’invocazione del calcolo, si legge il numero di secondi trascorsidalla mezzanotte del 1 gennaio 1970 (epoch date). Si calcola poi, tramite lafunzione “rand” (pseudo casuale), un numero compreso tra 0 ed 1.Si calcola poi il rapporto tra il numero dei secondi (casuale) ed il numerorestituito dalla funzione random. Da questo si preleva un numero di cifre pari alquadrato del magic number. Se il quadrato del magic number è superiore alnumero di cifre del quoziente prima calcolato, si itera il procedimento,ricalcolando “time”, “rand” e l’intero del rapporto e concatenando la nuovastringa alla precedente.Dall’iterazione si esce quando la lunghezza del salt è pari al quadrato del magicnumber. Questa sequenza numerica, casuale, è il nostro sale crittografico.
  28. 28. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MAKE_FRACTQuesto metodo è senzaltro il più suggestivo e permette di "toccare" le curve cheverranno poi applicate negli algoritmi crittografici.Il file grafico di output è in formato PNG (Portable Network Graphic), fruibile daun qualunque browser come dai più diversi software di grafica.La sintassi è: $krypto->make_fract($pngfile,$zoom)$pngfile è il nome del file png - senza estensione "png" che viene inseritaautomaticamente.$zoom è la scala del disegno - maggiore di zero. Valore di default: 1Limmagine prodotta è contenuta nel quadrato di lato square.
  29. 29. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO ENCRYPT_FILEI metodi encrypt_file e decrypt_file, sono la summa: rendono utile medianteapplicazione, la matematica delle curve di {F}. Questo metodo realizzaun’operazione ben precisa: cripta il file di input in quello di output.La sintassi è:$krypto->encrypt_file($name_plain_file,$name_encrypted_file)Il file di input di qualsivoglia formato sarà letto e cifrato, tramite la curva {F}.
  30. 30. La crittografia frattale in PerlCrypt::FNA metodi & attributi: METODO ENCRYPT_FILE Ecco l’aspetto di un file criptato mediante FNA AH AH AH -806.16701617 4296.950584 -1163.3897453 4378.30613408 -1253.81513894 4361.33265404 -1502.80711437 4636.89514523 -1371.10557976 4745.56050632 -1230.07749379 4968.48069209 -1338.39851924 5248.88785964 -917.21821497 5429.36645491 -773.44592091 5696.62911696 -692.72801005 5885.46154004 -988.27897105 5885.418198 -1248.99379997 6171.71101067 -830.48330143 6377.55135044 - 768.07453852 6493.40995382 -290.38619797 6703.79926248 -101.38261857 6641.39653224 329.01095794 6547.35282987 491.23460593 6672.15350589 682.15153937 6767.07332641 951.17643798 7125.45527124 844.47157379 7301.13742586 616.45930112 7293.99200882 844.26353513 7262.78340711 1211.3200562 7315.25004987 1474.41515451 7121.21394711 1951.75973992 7224.47233263 2176.20365976 6962.04147204 2547.88708591 6998.13655185 2781.82594976 6972.85084038 3056.52905252 7371.28466715 3037.53030053 7569.06437014 3048.49593738 7320.32093005 3389.66342779 7357.81470144 3676.23526579 7708.87987244 3755.43863759 7814.8354795 3435.5290489 8296.58426972 3441.10117125 8627.97877198 3412.2773365 8623.6058585 3362.87465115 8767.32280898 3260.65143202 8583.97947961 2890.71868372 8474.68032897 2726.83436885 8650.05588533 2718.8481018 9045.95222039 2669.00976899 9254.66114943 2644.06562016 9103.68182141 3127.66020707 9113.43039278 3191.47856428 9188.88465234 3207.82184971 9202.57034881 3478.33454467 8945.6121183 3832.00806714 8945.62804071 4080.86384299 9320.62189286 4289.2595779 9439.78195562 4021.13116501 9644.36385638 4311.34336432 9554.3477728 4679.21568268 9563.22563256 4833.53132591 9641.37582295 4740.32174942 9910.49435765 4448.89751812 10157.37473936 4273.26989922 10265.73224722 4218.00573474 10553.33210292 4076.79496626 10732.34891747 3830.35537312 10613.81591903 3785.18217462 10386.70855427 3666.99726881 10332.12423113 3476.25444621 10694.76481321 3296.35920314 10804.77625983 3060.88089069 11346.01346391 3007.91070428 11444.10666595 2765.46825422 11911.74931522 2771.84792598 12217.75488876 2730.08778903 12432.33422506 2649.22698242 12307.67655488 2179.40416992 12145.89439835 2279.94226546 12105.79701773 2047.78623478 12604.70024151 2134.4739565 12762.57334939 1895.30449332 12619.14996241 1526.25794611 12313.79872918 1561.04359063 12060.9258984 1204.52077789 11904.48474151 1011.49806809 11625.32850092 896.84643331 11430.88088124 1209.72754463 11427.67243264 1445.63793588 11243.03320502 1007.30448881
  31. 31. La crittografia frattale in PerlCrypt::FNA metodi & attributi: METODO ENCRYPT_FILE Ed ecco dove viene frullato il file
  32. 32. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO DECRYPT_FILEI metodi decrypt_file ed encrypt_file, sono la summa: rendono utile medianteapplicazione, la matematica delle curve di {F}. Questo metodo realizza un’operazioneben precisa: decripta il file di input (che è quello di output del metodo encrypt_file) inquello di output (che è quello di input del metodo encrypt_file).La sintassi è: $krypto->decrypt_file($name_encrypted_file,$name_decrypted_file)Il file di input sarà letto e decodificato, tramite la curva {F}, nel file di output.
  33. 33. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO ENCRYPT_SCALARIl metodo encrypt_scalar cifra stringhe: il risultato dell’operazione di cifratura èun vettore contenente il crittogramma.La sintassi è: @encrypted_scalar=$krypto->encrypt_scalar($this_string)Il programmatore che preveda un salvataggio password con FNA, farà bene adimpostare salted => ‘true’.Ricordo che un sale è una stringa, solitamente random, aggiunta al dato dacriptare, in modo che un brute force a dizionario non produca risultati.
  34. 34. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO DECRYPT_SCALARIl metodo decrypt_scalar ricostruisce il dato in chiaro dal risultato dell’operazionedi cifratura scalari.La sintassi è:@decrypted_scalar=$krypto->decrypt_scalar(@encrypted_scalar)
  35. 35. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MACMAC -> Message Authentication CodeL’autenticazione dei messaggi garantisce l’integrità dell’informazione anchein presenza di un avversario attivo che invia dati sensatisender receiver attacker
  36. 36. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MACMAC -> Message Authentication Code Detti: K la chiave FNA scelta per l’autenticazione A l’applicazione dell’algoritmo FNA di Sender V l’applicazione dell’algoritmo FNA di Receiver m il dato da autenticare Calcoliamo Ak(m) – coordinate ultimo vertice FNA 1. Sender invia a Receiver la coppia (m, Ak(m)) 2. Receiver – che conosce K ed ha ricevuto m – calcola Vk(m)
  37. 37. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MACMAC -> Message Authentication Code Sender -> (m, Ak(m)) Receiver -> (m, Vk(m)) true falseACCEPT MESSAGE Vk(m) =Ak(m) IGNORE MESSAGE END Se Attacker modifica il messaggio, ignorando la chiave K, non potrà inviare a Receiver il MAC corretto che quindi ignorerà il messaggio edulcorato.
  38. 38. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MACIl metodo “mac” fa questo lavoro per noi:I n questo caso, Crypt::FNA lavora comeun algoritmo digest (ad. Es. MD5).L’ “hash” è rappresentato dalle coordinate dell’ultimo vertice della curva {F}definita tramite il metodo “new”La sintassi è: my $mac=$krypto->mac($name_plain_file)
  39. 39. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MACTramite questo metodo, Crypt::FNA assolve alle specifiche deglialgoritmi digest e precisamente:1. ha lunghezza fissa che lo rende facile da manipolare e datrasmettere (128bit);2. è estremamente improbabile che due messaggi diversi abbianolo stesso digest;3. non è invertibile, cioè non esiste un algoritmo noto che, dato undigest, sia in grado di generare un messaggio che gli corrisponde; inaltri termini, è estremamente difficile produrre un messaggio cheabbia un digest predeterminato.
  40. 40. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MESSAGERestituisce un array che contiene i codici errore restituiti da Crypt::FNA my @error_code=@{$krypto->message} 0 Order of the curve is not correct. Must necessarily be numeric. 1 Order of the curve must be a number greater than 0 2 Length Square container is incorrect. Must necessarily be numeric 3 Side of a square container fractal must be a number greater than 0 5 Value of is not correct. Must necessarily be numeric.Default loaded 6 The angle must be expressed in the system sessadecimal (ex. 126.35)Default loaded 7 Error reading sub encrypt, package Crypt::FNA 8 error writing file, package Crypt::FNA sub encrypt 9 read error on sub decrypt myInput package Crypt::FNA 10 write error on sub decrypt MYOUTPUT package Crypt::FNA
  41. 41. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MESSAGERestituisce un array che contiene i codici errore restituiti da Crypt::FNA my @error_code=@{$krypto->message}11 error writing PNG sub draw_fract package Crypt::FNA12 error background: only numeric character (RGB)13 error background: only three number (RGB) from 0 to 25514 error foreground: only numeric character (RGB)15 error foreground: only three number (RGB) from 0 to 25516 error loading GD::Simple, drawing aborted18 error zoom: the value must be a number greater than zero19 errors during object instantiation20 error magic setting21 error salted value (true or false only)22 error loading Tie::File23 Error reading sub mac, package Crypt::FNA"
  42. 42. La crittografia frattale in Perl Crypt::FNA::Async methodi & attributiAnd now, technologyapplication Crypt::FNA::Async methods Crypt::FNA::Async->new Crypt::FNA::Async->encrypt_files Crypt::FNA::Async->decrypt_files
  43. 43. La crittografia frattale in Perl Crypt::FNA::Async methodi & attributiSincrono contro AsincronoCrypt::FNA::Async consente di elaborare in parallelo cifratura e decifratura difiles, avvantaggiandosi delle CPU multicore e/o quelle che supportanohypertrading.Verranno elaborati, in parallelo, un numero di files pari al numero di coredisponibili.Se il sistema non supporta I threads, Crypt::FNA::Async effettuerà comunquel’elaborazione in serie (in modalità sincrona anziché asincrona)
  44. 44. La crittografia frattale in Perl Crypt::FNA::Async metodi & attributi: METODO NEWIl metodo new di Crypt::FNA::Async è analogo all’omonimo di Crypt::FNA.my $krypto=Crypt::FNA::Async->new()my $krypto=Crypt::FNA::Async->new( { r=> 7, angle => [56,-187, 215,-64], square => 4096, magic => 3, salted => ‘true’ })
  45. 45. La crittografia frattale in PerlCrypt::FNA::Async metodi & attributi: METODO ENCRYPT_FILES Il metodo accetta in ingresso un array contenente i nomi dei files, in chiaro, da criptare, quindi opera su questi e restituisce i files criptati con nuova estensione ‘.fna’ La sintassi è: $krypto->encrypt_files(@files_to_encrypt) I files di input, di qualsivoglia formato, saranno letti e cifrati, tramite la curva {F}.
  46. 46. La crittografia frattale in PerlCrypt::FNA::Async metodi & attributi: METODO DECRYPT_FILES Il metodo accetta in ingresso un array contenente i nomi dei files criptati, quindi opera su questi e restituisce i files in chiaro. La sintassi è: $krypto->decrypt_files(@files_to_decrypt) I files di input, di qualsivoglia formato, saranno letti e decifrati, tramite la curva {F}.
  47. 47. 988.44587991864.00639226 La crittografia frattale in Perl912.57423224810.67516271004.9465835856.861260751138.2745474728.296645371079.07469229695.76234167930.351318826.07044723900.19866958855.11766404835.59726026631.79907235845.59106749 SEZIONE 3607.51514839826.07053756730.67818328719.40812543712.90110561878.12528707 Attacco ad FNA606.87693617844.95287635529.89996398800.51021841627.67375558859.71016379739.56662699932.56196132
  48. 48. La crittografia frattale in Perl Attacco a FNAFNA è un sistema particolare di cifratura, basato sulla sostituzione di bytes/caratteri connumeri complessi (n-pla ordinata di numeri, in questo caso la coppia di coordinate)attraverso l’algoritmo generatore dei frattali {F}. La trasformazione in generale avvienesostituendo il valore ordinale, nel suo alfabeto quindi, di ciò che si trasforma con lecoordinate di un vertice della curva.FNA può considerarsi un particolare polialfabetico, la cui particolarità risiede nel fatto diavere un numero di alfabeti virtualmente illimitato, questo perché ogni codifica dipendedirettamente da tutte le precedenti e segue “l’effetto farfalla”. Riferendomiesplicitamente al caos deterministico, una piccola variazione nel dato in chiaro, producegrandi differenze nel risultante cifrato.In sostanza, ciò che accade è che ogni codifica influenza la sequenza successiva dipossibili crittogrammi poiché si riparte da zero (il numero di crittogrammi dipende dallacardinalità dell’alfabeto cui appartiene cosa si cifra); ciò che è interessante ai finicrittografici è che ogni sequenza di 256 vertici della curva di {F} (nel caso si cifrino bytes),quindi l’alfabeto usato per cifrare quel determinato byte, è differente dal precedente edil valore del byte da cifrare influenza i successivi alfabeti.
  49. 49. La crittografia frattale in Perl Attacco a FNAPremesso che la chiave di FNA è, in sensostretto, data dalle direzioni di inizializzazioneRo, di, magic e square, osservandolo comepolialfabetico e considerando l’algoritmofrattale come un generatore di alfabeti,possiamo dire che ha in sé i vantaggi di unachiave lunga come il messaggio edapparentemente casuale (nel senso che ènotevolmente irregolare) similmente al casodella cifratura a blocco monousoinoltre presenta un numero di alfabeti cifrantivirtualmente illimitato e quindi, possiamo dire,pari al numero di caratteri del messaggio inchiaro.
  50. 50. La crittografia frattale in Perl Attacco a FNAParimenti non soffre della difficoltà diapplicazione insita nel sistema a bloccomonouso (dispendiosa) e si presta moltosemplicemente ad operazioni di ipercrittografia(cifrare un dato già cifrato).Vediamo perché, a mio avviso, è lecita questaosservazione:
  51. 51. La crittografia frattale in Perl Attacco a FNAAlfabetoL’alfabeto utilizzato è lungo al più quanto la cardinalitàdell’alfabeto con cui è espresso il dato in chiaro che si cifra. Nelcaso di bytes è costituito al più da 256 coppie di coordinate divertici. Gli alfabeti sono inoltre apparentemente casuali,poiché la successione degli angoli, di derivazione frattale, ènotevolmente irregolare e questa successione influenzadirettamente le coordinate.
  52. 52. La crittografia frattale in Perl Attacco a FNAAlfabetoUna volta cifrato un byte, si procede alla cifratura delsuccessivo: l’alfabeto “riparte”, poiché una volta cifrato unbyte, si considerano le coordinate del successivo vertice di {F}come il simbolo di ordinalità 1 nel nuovo alfabeto dicardinalità, al più, pari alla cardinalità dell’alfabeto con cui èespresso il dato da cifrare. I successivi alfabeti sono sempredifferenti e dipendenti da tutti i dati in chiaroprecedentemente cifrati.
  53. 53. La crittografia frattale in Perl Attacco a FNAChiaveLa chiave, vista come ordinale della successione di alfabeti dautilizzare, è lunga come il messaggio:chiave 1, primo dato da cifrare: primo alfabeto -> influenzal’alfabeto successivochiave 2, secondo dato da cifrare: secondo alfabeto -> influenzal’alfabeto successivo...chiave n-1, n-1 esimo dato da cifrare: n-1 esimo alfabeto ->influenza l’alfabeto n-esimoIn quest’ottica abbiamo dunque una chiave lunga come il dato dacifrare ed un numero di alfabeti pari al numero di elementicostituenti il dato in chiaro.
  54. 54. La crittografia frattale in Perl Attacco a FNADa notare che un eventuale attacco di forza brutarichiederebbe più tempo di quello necessario alla mortetermica del nostro Universo.
  55. 55. La crittografia frattale in Perl Attacco a FNADa notare che un eventuale attacco di forza brutarichiederebbe più tempo di quello necessario alla mortetermica del nostro Universo.Se partissimo dall’ipotesi di un numero di direzioni base Ro=3,non avremmo comunque idea del valore di queste direzioni.Consideriamo che il valore è un numero compreso tra 0 e 360,consideriamo inoltre che non abbiamo idea di quanti decimalisiano stati utilizzati. Se avessimo 8 decimali il numero didirezioni da testare sarebbe:(99999999 * 360)**3 = 46655998600320013996799953344000possibili combinazioni
  56. 56. La crittografia frattale in Perl Attacco a FNADa notare che un eventuale attacco di forza brutarichiederebbe più tempo di quello necessario alla mortetermica del nostro Universo.Se partissimo dall’ipotesi di un numero di direzioni base Ro=3,non avremmo comunque idea del valore di queste direzioni.Consideriamo che il valore è un numero compreso tra 0 e 360,consideriamo inoltre che non abbiamo idea di quanti decimalisiano stati utilizzati. Se avessimo 8 decimali il numero didirezioni da testare sarebbe:(99999999 * 360)**3 = 46655998600320013996799953344000possibili combinazioniSe potessimo verificare una combinazione al secondo (ipotesiestremamente ottimistica), occorrerebbero un numero di annipari a: 1 479 452 010 410 959 347 945 204E se le direzioni fossero 4? Tralascio il calcolo…
  57. 57. La crittografia frattale in Perl Attacco a FNA Inoltre ci sono altre variabili, come il magic number, che rendono oltremodo arduo individuare gli angoli successivi (nel tentativo di scoprire la base) oltre all’ordine della curva su cui si va a crittografare.
  58. 58. La crittografia frattale in Perl Attacco a FNA Inoltre ci sono altre variabili, come il magic number, che rendono oltremodo arduo individuare gli angoli successivi (nel tentativo di scoprire la base) oltre all’ordine della curva su cui si va a crittografare. Consideriamo inoltre le possibilità di ipercrittografia, che ampliano esponenzialmente le combinazioni da dover identificare, come visto, anche con poche direzioni base…
  59. 59. 988.44587991864.00639226 La crittografia frattale in Perl912.57423224810.67516271004.9465835856.861260751138.2745474728.296645371079.07469229695.76234167930.351318826.07044723900.19866958855.11766404835.59726026631.79907235845.59106749 SEZIONE 4607.51514839826.07053756730.67818328719.40812543712.90110561878.12528707 www.Crypter.eu606.87693617844.95287635 Online crypter engine529.89996398800.51021841627.67375558859.71016379739.56662699932.56196132
  60. 60. La crittografia frattale in Perl www.crypter.eu – online crypter engine• Crypter.eu, tuttora in fase di sviluppo, è un progetto che, potremmo definire, di cloud encryption:• Gli utenti del servizio potranno criptare e decriptare i propri files, scegliendo poi di farseli inviare per email o salvare il risultato in locale.
  61. 61. La crittografia frattale in Perl www.crypter.eu – online crypter engine• Consta di un document (e user manager), realizzato con Omnia, presentato a IPW2009, in cui gli utenti caricheranno i files e specificheranno la propria chiave FNA e su cui poi effettueranno le operazioni di crittografia scelte.• Questo è il motivo principale per cui è nata la classe Crypt::FNA::Async (in modo da schedulare più operazioni in parallelo) ed il motivo della ricerca nell’ottimizzazione dell’algoritmo di Crypt::FNA
  62. 62. 988.44587991864.00639226 La crittografia frattale in Perl912.57423224810.67516271004.9465835856.861260751138.2745474728.296645371079.07469229695.76234167930.351318826.07044723900.19866958855.11766404835.59726026631.79907235845.59106749 SEZIONE 5607.51514839826.07053756730.67818328719.40812543712.90110561878.12528707 conclusioni606.87693617844.95287635529.89996398800.51021841627.67375558859.71016379739.56662699932.56196132
  63. 63. La crittografia frattale in Perl CONCLUSIONI• Crypt::FNA è in costante aggiornamento, soprattutto per quanto riguarda l’ottimizzazione nell’uso della memoria e la velocità di elaborazione, con uno sguardo volto alla retrocompatibilità
  64. 64. La crittografia frattale in Perl CONCLUSIONI• Crypt::FNA è in costante aggiornamento, soprattutto per quanto riguarda l’ottimizzazione nell’uso della memoria e la velocità di elaborazione, con uno sguardo volto alla retrocompatibilità• In ogni caso voglio ricordare che FNA è un algoritmo molto giovane ed ancora non adeguatamente testato, per cui eviterei di salvare i dati di accesso ad un server contenente carte di credito o la ricetta della pizza se non dopo attenta fase di testing e ricordando che Anak vi aveva avvertiti ☺
  65. 65. La crittografia frattale in Perl CONCLUSIONI• Crypt::FNA è in costante aggiornamento, soprattutto per quanto riguarda l’ottimizzazione nell’uso della memoria e la velocità di elaborazione, con uno sguardo volto alla retrocompatibilità• In ogni caso voglio ricordare che FNA è un algoritmo molto giovane ed ancora non adeguatamente testato, per cui eviterei di salvare i dati di accesso ad un server contenente carte di credito o la ricetta della pizza se non dopo attenta fase di testing e ricordando che Anak vi aveva avvertiti ☺• Tra gli sviluppi futuri, è in cantiere l’implementazione di un sistema di cifratura asimmetrico aFNA sui cui tempi non posso però essere preciso.
  66. 66. La crittografia frattale in Perl RIFERIMENTI• CPAN : Crypt::FNA http://search.cpan.org/~anak/Crypt-FNA-0.54/• CPAN : Crypt::FNA::Async http://search.cpan.org/~anak/Crypt-FNA-Async-0.10/• Articolo su Perl.it (ver. 0.01 della classe): http://www.perl.it/documenti/articoli/2010/04/anakryptfna.htm• Omnia (utilizzato per crypter.eu): http://conferences.yapceurope.org/ipw2009/talk/2385• Online crypter engine: http://www.crypter.eu• Queste slide: http://www.netlogica.it/ipw2011• Anak: anak@cpan.org; software@netlogica.it; www.netlogica.it
  67. 67. 988.44587991864.00639226 La crittografia frattale in Perl912.57423224810.67516271004.9465835856.861260751138.2745474728.296645371079.07469229695.76234167930.351318826.07044723900.19866958855.11766404835.59726026631.79907235845.59106749607.51514839826.07053756730.67818328719.40812543712.90110561878.12528707606.87693617844.95287635529.89996398800.51021841627.67375558859.71016379739.56662699 THE END?932.56196132

×