la crittografia frattale in perl

67
Crypt::FNA e Crypt::FNA::Async La crittografia frattale in Perl 988.44587991 864.00639226 912.57423224 810.6751627 1004.9465835 856.86126075 1138.2745474 728.29664537 1079.07469229 695.76234167 930.351318 826.07044723 900.19866958 855.11766404 835.59726026 631.79907235 845.59106749 607.51514839 826.07053756 730.67818328 719.40812543 712.90110561 878.12528707 606.87693617 844.95287635 529.89996398 800.51021841 627.67375558 859.71016379 739.56662699 932.56196132

Upload: mario-rossano

Post on 11-Jun-2015

580 views

Category:

Technology


4 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: La crittografia frattale in Perl

Crypt::FNA e Crypt::FNA::Async

La crittografia frattale in Perl

988.44587991864.00639226912.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.56662699932.56196132

Page 2: La crittografia frattale in Perl

La crittografia frattale in Perl

SEZIONE 1

Definizione dell’insieme {F}

988.44587991864.00639226912.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.56662699932.56196132

Page 3: La crittografia frattale in Perl

• Acronimo di Fractal Numerical Algorithm• Ma cos’è Crypt::FNA

– È 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

IT’S FANTASTIC! FRACTAL CURVE AND SYMMETRIC ENCRYPTION

Definizione dell’insieme {F}

La crittografia frattale in Perl

Page 4: La crittografia frattale in Perl

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

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

Partiamo da frattali lineari come la Koch curve

Definizione dell’insieme {F}

La crittografia frattale in Perl

Page 5: La crittografia frattale in Perl

• 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.

Definizione dell’insieme {F}

La crittografia frattale in Perl

Page 6: La crittografia frattale in Perl

Scrivendo la successione delle direzioni come gli elementi di un vettore leggiamo la proprietà principale della costruzione: il primo addendo è il gruppo, o ramo su cui si itera il procedimento di costruzione. Il secondo addendo è la posizione dell’angolo che stiamo calcolando, nell’ambito di 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)

uhmmm

Definizione dell’insieme {F}

La crittografia frattale in Perl

Page 7: La crittografia frattale in Perl

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ì.

Definizione dell’insieme {F}

La crittografia frattale in Perl

Page 8: La crittografia frattale in Perl

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}

Definizione dell’insieme {F}

La crittografia frattale in Perl

Page 9: La crittografia frattale in Perl

(56,-187, 215, 64) (0,90,-60,-90,60)

Grafici di {F} mediante il metodo make_fract

La crittografia frattale in Perl

Page 10: La crittografia frattale in Perl

(56,-177,225,-164) (56,-77,215,-64,60)

Grafici di {F} mediante il metodo make_fract

La crittografia frattale in Perl

Page 11: La crittografia frattale in Perl

(0,90,0,-90) (0,90,60,-90,120)

Grafici di {F} mediante il metodo make_fract

La crittografia frattale in Perl

Page 12: La crittografia frattale in Perl

(56,-177,225,164) (21,-31,100,-79)

Grafici di {F} mediante il metodo make_fract

La crittografia frattale in Perl

Page 13: La crittografia frattale in Perl

(56,-67,215,-64,60,45) (56,-67,210,-64,60,70)

Grafici di {F} mediante il metodo make_fract

La crittografia frattale in Perl

Page 14: La crittografia frattale in Perl

SEZIONE 2

Crypt::FNA

metodi & attributi

988.44587991864.00639226912.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.56662699932.56196132

La crittografia frattale in Perl

Page 15: La crittografia frattale in Perl

Teoria

1 dati sono memorizzati in byte: qualunque tipo di file vada ad aprire, il suo contenuto è certamente una sequenza ben precisa di byte.

Un byte è costituito da 8 bit, per cui il suo valore deve appartenere all’insieme degli interi compresi tra 0 e 255 (256 elementi complessivamente). Seguo quindi la curva frattale scelta, dell’insieme {F}, per un numero di vertici uguale a quella del valore del byte da criptare. Le coordinate cartesiane di quel vertice rappresentano il crittogramma di quel ben preciso byte.

L’algoritmo crittografico

La crittografia frattale in Perl

Page 16: La crittografia frattale in Perl

Teoria

2 Le curve {F} hanno quindi un andamento che, in generale, si conosce solo calcolandolo ma lo si può calcolare solo se sono noti i parametri 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 ed AES, FNA ha chiave segreta ma a differenza dei predetti Data Encryption Standard (che ha una chiave di 56 bit) ed AdvancedEncryption Standard (che ha una chiave compresa tra i 128 ed i 256 bit), Fractal Numerical Algorithm ha una chiave in bit lunga

quanto si vuole: non ci sono restrizioni sul numero e valore delle direzioni della base Ro.

L’algoritmo crittografico

La crittografia frattale in Perl

Page 17: La crittografia frattale in Perl

Teoria

3 criptare

Ogni byte viene crittografato mediante le coordinate del vertice della

curva frattale, ottenuto partendo dal successivo a quello

precedentemente valutato, saltando di un numero ulteriore di vertici

uguale al magic number più il valore del byte da crittografare.

4 decriptare

Si segue la curva frattale verificando, di vertice in vertice, che le

coordinate corrispondano a quelle del crittogramma. Il valore del

byte originale viene ricostruito avendo contato quanti vertici si sono

succeduti per arrivare all’uguaglianza dei due valori, dall’ultima

uguaglianza incontrata. Il numero di vertici, ridotto del magic number

sommato all’unità, rappresenta il valore del byte n-esimo.

L’algoritmo crittografico

La crittografia frattale in Perl

Page 18: La crittografia frattale in Perl

Crypt::FNA methodi & attributi

And now, technologyapplication

Crypt::FNA methods

Crypt::FNA->new

Crypt::FNA->make_fract

Crypt::FNA->mac

Crypt::FNA->encrypt_fileCrypt::FNA->decrypt_file

Crypt::FNA->encrypt_scalarCrypt::FNA->decrypt_scalar

La crittografia frattale in Perl

Page 19: La crittografia frattale in Perl

Questo 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’

})

Crypt::FNA metodi & attributi: METODO NEW

La crittografia frattale in Perl

Page 20: La crittografia frattale in Perl

L’attributo “r”: ordine della curva di {F}

Indica il livello di approfondimento nel calcolo della curva. E’ un numero maggiore di zero, non necessariamente intero. Indicato con Ro il numero di angoli base della struttura autosimile, il numero di segmenti costituenti la curva è dato da Ro**r.

Valore di default: 7

L’attributo “angle”: direzioni dei segmenti base della curva di {F}

Sono gli angoli cui si applica l’algoritmo di ricorsione: su questi angoli si determina la struttura base autosimile della curva di {F}. Gli angoli sono espressi nel sistema sessadecimale, con valori compresi tra -360 e 360 (ovvero da 0 a 360).

Valore di default: (56,-187, 215,-64)

Crypt::FNA metodi & attributi: METODO NEW

La crittografia frattale in Perl

Page 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) vertici possano sovrapporsi, rendendo impossibile la decodifica del file criptato. Ad esempio, con una base Ro={-30,60,45,110} abbiamo:

Definizione 1

Si definisce base di una curva Є {F} l’insieme delle inclinazioni {Ro}

Definizione 2

Si definisce ramo di una curva Є {F}, la spezzata relativa al calcolo eseguito secondo l’algoritmo di costruzione sulla base o sua combinazione

Teorema (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) < π/4

Tesi: l’ipotesi è sufficiente affinché l’insieme dei punti della curva {F} sia in corrispondenza biunivoca con un sottoinsieme di punti del piano

La crittografia frattale in Perl

Page 22: La crittografia frattale in Perl

L’attributo “square”: lato del quadrato dove verrà disegnata/calcolata la

curva di {F}

E’ la lunghezza del lato del quadrato contenitore della curva. Square non solo ha importanza per la (eventuale) rappresentazione grafica, ma anche per la crittografia, poiché viene utilizzato per calcolare la lunghezza del lato di della curva (di è proporzionale a square/Ro**r)

Valore di default: 4096

L’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. La notazione è decimale, quindi con valori che vanno da 0 a 255.

Valore di default: (255,255,255)

Crypt::FNA metodi & attributi: METODO NEW

La crittografia frattale in Perl

Page 23: La crittografia frattale in Perl

L’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. La notazione è decimale, quindi con valori che vanno da 0 a 255.

Valore di default: (0,0,0)

L’attributo “magic number”: per la crittografia discreta

Indica il numero di vertici della curva da saltare in fase di cifratura e decifratura: essendo l'algoritmo, una funzione continua sui vertici, saltandone alcuni questa resta continua su punti isolati dell’insieme dei vertici (da cui “discreta”).

Valore di default: 3

Crypt::FNA metodi & attributi: METODO NEW

La crittografia frattale in Perl

Page 24: La crittografia frattale in Perl

L’attributo “salted”: sale crittografico

Il ‘salt’ è una sequenza casuale, che ha lo scopo ultimo di influenzare direttamente il crittogramma, in modo che cifrature dello stesso dato, danno luogo a crittogrammi differenti.

Il valore di default è ‘false’ per retrocompatibilità con le versioni di Crypt::FNA antecedenti alla 0.24 – prima versione che lo implementa

Valore di default: false

Crypt::FNA metodi & attributi: METODO NEW

La crittografia frattale in Perl

Page 25: La crittografia frattale in Perl

L’attributo “salted”: sale crittografico

Teoria

Ebbene, anteponendo il sale al dato da criptare, si influenza, per le caratteristiche intrinseche di FNA, tutta la sequenza successiva, per cui cifrature dello 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 nello specifico), l’algoritmo è in grado di valutare quali vertici iniziali del crittogramma scartare, partendo poi dall’ultimo di questi per la valutazione dei bytes successivi e la ricostruzione del dato in chiaro.

Crypt::FNA metodi & attributi: METODO NEW

La crittografia frattale in Perl

Page 26: La crittografia frattale in Perl

L’attributo “salted”: sale crittografico

Teoria

L’utilità del “sale” è legata strettamente all’aderenza statistica ad una sequenza casuale ovvero una sequenza che, statisticamente, può essere interpretata come tale (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 dei fattori di input mentre il “magic number” è l’altro.

Come indicato, le curve {F} hanno un andamento coerente alla definizione di caos deterministico: una piccola oscillazione iniziale dei valori, produce grandi variazioni nei dati finali (leggi le coordinate dei vertici della curva).

Crypt::FNA metodi & attributi: METODO NEW

La crittografia frattale in Perl

Page 27: La crittografia frattale in Perl

L’attributo “salted”: sale crittografico

Teoria: descrizione algoritmo

Al momento dell’invocazione del calcolo, si legge il numero di secondi trascorsi dalla mezzanotte del 1 gennaio 1970 (epoch date). Si calcola poi, tramite la funzione “rand” (pseudo casuale), un numero compreso tra 0 ed 1.

Si calcola poi il rapporto tra il numero dei secondi (casuale) ed il numero restituito dalla funzione random. Da questo si preleva un numero di cifre pari al quadrato del magic number. Se il quadrato del magic number è superiore al numero di cifre del quoziente prima calcolato, si itera il procedimento, ricalcolando “time”, “rand” e l’intero del rapporto e concatenando la nuova stringa alla precedente.

Dall’iterazione si esce quando la lunghezza del salt è pari al quadrato del magicnumber. Questa sequenza numerica, casuale, è il nostro sale crittografico.

Crypt::FNA metodi & attributi: METODO NEW

La crittografia frattale in Perl

Page 28: La crittografia frattale in Perl

Questo metodo è senz'altro il più suggestivo e permette di "toccare" le curve che verranno poi applicate negli algoritmi crittografici.

Il file grafico di output è in formato PNG (Portable Network Graphic), fruibile da un 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 inserita automaticamente.

$zoom è la scala del disegno - maggiore di zero. Valore di default: 1L'immagine prodotta è contenuta nel quadrato di lato square.

Crypt::FNA metodi & attributi: METODO MAKE_FRACT

La crittografia frattale in Perl

Page 29: La crittografia frattale in Perl

I metodi encrypt_file e decrypt_file, sono la summa: rendono utile mediante applicazione, la matematica delle curve di {F}. Questo metodo realizza un’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}.

Crypt::FNA metodi & attributi: METODO ENCRYPT_FILE

La crittografia frattale in Perl

Page 30: La crittografia frattale in Perl

Ecco l’aspetto di un file criptato mediante FNA

-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

AH AH AH

Crypt::FNA metodi & attributi: METODO ENCRYPT_FILE

La crittografia frattale in Perl

Page 31: La crittografia frattale in Perl

Ed ecco dove viene frullato il file

Crypt::FNA metodi & attributi: METODO ENCRYPT_FILE

La crittografia frattale in Perl

Page 32: La crittografia frattale in Perl

I metodi decrypt_file ed encrypt_file, sono la summa: rendono utile mediante applicazione, la matematica delle curve di {F}. Questo metodo realizza un’operazione ben precisa: decripta il file di input (che è quello di output del metodo encrypt_file) in quello 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.

La crittografia frattale in Perl

Crypt::FNA metodi & attributi: METODO DECRYPT_FILE

Page 33: La crittografia frattale in Perl

Il 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 ad impostare salted => ‘true’.

Ricordo che un sale è una stringa, solitamente random, aggiunta al dato da criptare, in modo che un brute force a dizionario non produca risultati.

La crittografia frattale in Perl

Crypt::FNA metodi & attributi: METODO ENCRYPT_SCALAR

Page 34: La crittografia frattale in Perl

Il metodo decrypt_scalar ricostruisce il dato in chiaro dal risultato dell’operazione di cifratura scalari.

La sintassi è:

@decrypted_scalar=$krypto->decrypt_scalar(@encrypted_scalar)

La crittografia frattale in Perl

Crypt::FNA metodi & attributi: METODO DECRYPT_SCALAR

Page 35: La crittografia frattale in Perl

MAC -> Message Authentication Code

L’autenticazione dei messaggi garantisce l’integrità dell’informazione anche in presenza di un avversario attivo che invia dati sensati

sender receiver

attacker

La crittografia frattale in Perl

Crypt::FNA metodi & attributi: METODO MAC

Page 36: La crittografia frattale in Perl

MAC -> Message Authentication Code

Detti:K la chiave FNA scelta per l’autenticazioneA l’applicazione dell’algoritmo FNA di SenderV l’applicazione dell’algoritmo FNA di Receiverm il dato da autenticare

CalcoliamoAk(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)

La crittografia frattale in Perl

Crypt::FNA metodi & attributi: METODO MAC

Page 37: La crittografia frattale in Perl

Sender -> (m, Ak(m))

Receiver -> (m, Vk(m))

Vk(m) =Ak(m)

true false

ACCEPT MESSAGE IGNORE MESSAGE

END

MAC -> Message Authentication Code

Se Attacker modifica il messaggio, ignorando la chiave K, non potrà inviare a Receiver il MAC corretto che quindi ignorerà il messaggio edulcorato.

La crittografia frattale in Perl

Crypt::FNA metodi & attributi: METODO MAC

Page 38: La crittografia frattale in Perl

Il metodo “mac” fa questo lavoro per noi:I n questo caso, Crypt::FNA lavora come un 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)

La crittografia frattale in Perl

Crypt::FNA metodi & attributi: METODO MAC

Page 39: La crittografia frattale in Perl

Tramite questo metodo, Crypt::FNA assolve alle specifiche degli algoritmi digest e precisamente:

1. ha lunghezza fissa che lo rende facile da manipolare e da trasmettere (128bit);

2. è estremamente improbabile che due messaggi diversi abbiano lo stesso digest;

3. non è invertibile, cioè non esiste un algoritmo noto che, dato un digest, sia in grado di generare un messaggio che gli corrisponde; in altri termini, è estremamente difficile produrre un messaggio che abbia un digest predeterminato.

La crittografia frattale in Perl

Crypt::FNA metodi & attributi: METODO MAC

Page 40: La crittografia frattale in Perl

0 Order of the curve is not correct. Must necessarily be numeric. 1 Order of the curve must be a number greater than 02 Length Square container is incorrect. Must necessarily be numeric3 Side of a square container fractal must be a number greater than 05 Value of is not correct. Must necessarily be numeric.Default loaded6 The angle must be expressed in the system sessadecimal (ex. 126.35)

Default loaded7 Error reading sub encrypt, package Crypt::FNA8 error writing file, package Crypt::FNA sub encrypt9 read error on sub decrypt myInput package Crypt::FNA10 write error on sub decrypt MYOUTPUT package Crypt::FNA

La crittografia frattale in Perl

Crypt::FNA metodi & attributi: METODO MESSAGE

Restituisce un array che contiene i codici errore restituiti da Crypt::FNAmy @error_code=@{$krypto->message}

Page 41: La crittografia frattale in Perl

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"

La crittografia frattale in Perl

Restituisce un array che contiene i codici errore restituiti da Crypt::FNAmy @error_code=@{$krypto->message}

Crypt::FNA metodi & attributi: METODO MESSAGE

Page 42: La crittografia frattale in Perl

Crypt::FNA::Asyncmethodi & attributi

And now, technologyapplication

Crypt::FNA::Async methods

Crypt::FNA::Async->new

Crypt::FNA::Async->encrypt_filesCrypt::FNA::Async->decrypt_files

La crittografia frattale in Perl

Page 43: La crittografia frattale in Perl

Sincrono contro Asincrono

Crypt::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 core

disponibili.

Se il sistema non supporta I threads, Crypt::FNA::Async effettuerà comunquel’elaborazione in serie (in modalità sincrona anziché asincrona)

La crittografia frattale in Perl

Crypt::FNA::Asyncmethodi & attributi

Page 44: La crittografia frattale in Perl

Il 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’

})

Crypt::FNA::Asyncmetodi & attributi: METODO NEW

La crittografia frattale in Perl

Page 45: La crittografia frattale in Perl

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}.

Crypt::FNA::Asyncmetodi & attributi: METODO ENCRYPT_FILES

La crittografia frattale in Perl

Page 46: La crittografia frattale in Perl

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}.

Crypt::FNA::Asyncmetodi & attributi: METODO DECRYPT_FILES

La crittografia frattale in Perl

Page 47: La crittografia frattale in Perl

SEZIONE 3

Attacco ad FNA

988.44587991864.00639226912.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.56662699932.56196132

La crittografia frattale in Perl

Page 48: La crittografia frattale in Perl

Attacco a FNA

FNA è un sistema particolare di cifratura, basato sulla sostituzione di bytes/caratteri con numeri complessi (n-pla ordinata di numeri, in questo caso la coppia di coordinate) attraverso l’algoritmo generatore dei frattali {F}. La trasformazione in generale avviene sostituendo il valore ordinale, nel suo alfabeto quindi, di ciò che si trasforma con le coordinate di un vertice della curva.

FNA può considerarsi un particolare polialfabetico, la cui particolarità risiede nel fatto di avere un numero di alfabeti virtualmente illimitato, questo perché ogni codifica dipende direttamente da tutte le precedenti e segue “l’effetto farfalla”. Riferendomi esplicitamente al caos deterministico, una piccola variazione nel dato in chiaro, produce grandi differenze nel risultante cifrato.

In sostanza, ciò che accade è che ogni codifica influenza la sequenza successiva di possibili crittogrammi poiché si riparte da zero (il numero di crittogrammi dipende dalla cardinalità dell’alfabeto cui appartiene cosa si cifra); ciò che è interessante ai fini crittografici è 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 ed il valore del byte da cifrare influenza i successivi alfabeti.

La crittografia frattale in Perl

Page 49: La crittografia frattale in Perl

Attacco a FNA

Premesso che la chiave di FNA è, in senso stretto, data dalle direzioni di inizializzazione Ro, di, magic e square, osservandolo come polialfabetico e considerando l’algoritmo frattale come un generatore di alfabeti, possiamo dire che ha in sé i vantaggi di una chiave lunga come il messaggio ed apparentemente casuale (nel senso che è notevolmente irregolare) similmente al caso della cifratura a blocco monouso

inoltre presenta un numero di alfabeti cifranti virtualmente illimitato e quindi, possiamo dire, pari al numero di caratteri del messaggio in chiaro.

La crittografia frattale in Perl

Page 50: La crittografia frattale in Perl

Attacco a FNA

Parimenti non soffre della difficoltà di applicazione insita nel sistema a blocco monouso (dispendiosa) e si presta molto semplicemente ad operazioni di ipercrittografia(cifrare un dato già cifrato).Vediamo perché, a mio avviso, è lecita questa osservazione:

La crittografia frattale in Perl

Page 51: La crittografia frattale in Perl

Attacco a FNA

Alfabeto

L’alfabeto utilizzato è lungo al più quanto la cardinalità dell’alfabeto con cui è espresso il dato in chiaro che si cifra. Nel caso di bytes è costituito al più da 256 coppie di coordinate di vertici. Gli alfabeti sono inoltre apparentemente casuali, poiché la successione degli angoli, di derivazione frattale, è notevolmente irregolare e questa successione influenza direttamente le coordinate.

La crittografia frattale in Perl

Page 52: La crittografia frattale in Perl

Attacco a FNA

Alfabeto

Una volta cifrato un byte, si procede alla cifratura del successivo: l’alfabeto “riparte”, poiché una volta cifrato un byte, si considerano le coordinate del successivo vertice di {F} come il simbolo di ordinalità 1 nel nuovo alfabeto di cardinalità, al più, pari alla cardinalità dell’alfabeto con cui è espresso il dato da cifrare. I successivi alfabeti sono sempre differenti e dipendenti da tutti i dati in chiaro precedentemente cifrati.

La crittografia frattale in Perl

Page 53: La crittografia frattale in Perl

Attacco a FNA

Chiave

La chiave, vista come ordinale della successione di alfabeti da utilizzare, è lunga come il messaggio:chiave 1, primo dato da cifrare: primo alfabeto -> influenza l’alfabeto successivochiave 2, secondo dato da cifrare: secondo alfabeto -> influenza l’alfabeto successivo...chiave n-1, n-1 esimo dato da cifrare: n-1 esimo alfabeto -> influenza l’alfabeto n-esimo

In quest’ottica abbiamo dunque una chiave lunga come il dato da cifrare ed un numero di alfabeti pari al numero di elementi costituenti il dato in chiaro.

La crittografia frattale in Perl

Page 54: La crittografia frattale in Perl

Attacco a FNA

Da notare che un eventuale attacco di forza brutarichiederebbe più tempo di quello necessario alla morte termica del nostro Universo.

La crittografia frattale in Perl

Page 55: La crittografia frattale in Perl

Attacco a FNA

Da notare che un eventuale attacco di forza brutarichiederebbe più tempo di quello necessario alla morte termica 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 decimali siano stati utilizzati. Se avessimo 8 decimali il numero di direzioni da testare sarebbe:(99'999'999 * 360)**3 = 46655998600320013996799953344000 possibili combinazioni

La crittografia frattale in Perl

Page 56: La crittografia frattale in Perl

Attacco a FNA

Da notare che un eventuale attacco di forza brutarichiederebbe più tempo di quello necessario alla morte termica 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 decimali siano stati utilizzati. Se avessimo 8 decimali il numero di direzioni da testare sarebbe:(99'999'999 * 360)**3 = 46655998600320013996799953344000 possibili combinazioni

Se potessimo verificare una combinazione al secondo (ipotesi estremamente ottimistica), occorrerebbero un numero di anni pari a: 1 479 452 010 410 959 347 945 204

E se le direzioni fossero 4? Tralascio il calcolo…

La crittografia frattale in Perl

Page 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.

La crittografia frattale in Perl

Page 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…

La crittografia frattale in Perl

Page 59: La crittografia frattale in Perl

SEZIONE 4

www.Crypter.eu

Online crypter engine

988.44587991864.00639226912.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.56662699932.56196132

La crittografia frattale in Perl

Page 60: La crittografia frattale in Perl

• 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.

La crittografia frattale in Perl

www.crypter.eu – online crypter engine

Page 61: La crittografia frattale in Perl

• 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

La crittografia frattale in Perl

www.crypter.eu – online crypter engine

Page 62: La crittografia frattale in Perl

SEZIONE 5

conclusioni

988.44587991864.00639226912.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.56662699932.56196132

La crittografia frattale in Perl

Page 63: La crittografia frattale in Perl

• 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à

La crittografia frattale in Perl

CONCLUSIONI

Page 64: La crittografia frattale in Perl

• 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 ☺

La crittografia frattale in Perl

CONCLUSIONI

Page 65: La crittografia frattale in Perl

• 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.

CONCLUSIONI

La crittografia frattale in Perl

Page 66: La crittografia frattale in Perl

• 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:

[email protected]; [email protected]; www.netlogica.it

La crittografia frattale in Perl

RIFERIMENTI

Page 67: La crittografia frattale in Perl

THE END?

988.44587991864.00639226912.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.56662699932.56196132

La crittografia frattale in Perl