SlideShare ist ein Scribd-Unternehmen logo
1 von 67
Downloaden Sie, um offline zu lesen
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    La crittografia frattale in Perl
606.87693617
844.95287635              Crypt::FNA e Crypt::FNA::Async
529.89996398
800.51021841
627.67375558
859.71016379
739.56662699
932.56196132
988.44587991
864.00639226        La crittografia frattale in Perl
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
                  SEZIONE 1
607.51514839
826.07053756
730.67818328

           Definizione dell’insieme {F}
719.40812543
712.90110561
878.12528707
606.87693617
844.95287635
529.89996398
800.51021841
627.67375558
859.71016379
739.56662699
932.56196132
La crittografia frattale in Perl
                                             Definizione dell’insieme {F}




IT’S FANTASTIC!
                  • Acronimo di Fractal Numerical Algorithm
FRACTAL CURVE     • Ma cos’è Crypt::FNA
AND SYMMETRIC
ENCRYPTION
                    – È 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
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
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.
La crittografia frattale in Perl
                                                                         Definizione dell’insieme {F}

Scrivendo la successione delle direzioni come gli elementi di un vettore
leggiamo la proprietà principale della costruzione: il primo addendo è il                uhmmm
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 GRUPPO
a(2) =          a(0)           +               a(2)
a(3) =          a(0)           +               a(3)
------------------------------------------------
a(4) =          a(1)           +               a(0)
a(5) =          a(1)           +               a(1)         II GRUPPO
a(6) =          a(1)           +               a(2)
a(7) =          a(1)           +               a(3)
------------------------------------------------
a(8) =          a(2)           +               a(0)
a(9) =          a(2)           +               a(1)         III GRUPPO
a(10)=          a(2)           +               a(2)
a(11)=          a(2)           +               a(3)
------------------------------------------------
a(12)=          a(3)           +               a(0)
a(13)=          a(3)           +               a(1)         IV GRUPPO
a(14)=          a(3)           +               a(2)
a(15)=          a(3)           +               a(3)
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ì.
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}
La crittografia frattale in Perl
              Grafici di {F} mediante il metodo make_fract




(56,-187, 215, 64)          (0,90,-60,-90,60)
La crittografia frattale in Perl
              Grafici di {F} mediante il metodo make_fract




(56,-177,225,-164)         (56,-77,215,-64,60)
La crittografia frattale in Perl
               Grafici di {F} mediante il metodo make_fract




(0,90,0,-90)                  (0,90,60,-90,120)
La crittografia frattale in Perl
              Grafici di {F} mediante il metodo make_fract




(56,-177,225,164)            (21,-31,100,-79)
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)
988.44587991
864.00639226      La crittografia frattale in Perl
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    SEZIONE 2
607.51514839
826.07053756
730.67818328
719.40812543
712.90110561
878.12528707
                     Crypt::FNA
606.87693617
844.95287635    metodi & attributi
529.89996398
800.51021841
627.67375558
859.71016379
739.56662699
932.56196132
La crittografia frattale in Perl
                                            L’algoritmo crittografico


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.
La crittografia frattale in Perl
                                           L’algoritmo crittografico


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 Advanced
Encryption 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.
La crittografia frattale in Perl
                                            L’algoritmo crittografico

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.
La crittografia frattale in Perl
                      Crypt::FNA methodi & attributi



And now, technology   Crypt::FNA methods
application

                      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
La crittografia frattale in Perl
                  Crypt::FNA metodi & attributi: METODO NEW



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’
            })
La crittografia frattale in Perl
                       Crypt::FNA metodi & attributi: METODO NEW


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)
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
                       Crypt::FNA metodi & attributi: METODO NEW


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)
La crittografia frattale in Perl
                         Crypt::FNA metodi & attributi: METODO NEW




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
La crittografia frattale in Perl
                       Crypt::FNA metodi & attributi: METODO NEW

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
La crittografia frattale in Perl
                       Crypt::FNA metodi & attributi: METODO NEW

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.
La crittografia frattale in Perl
                       Crypt::FNA metodi & attributi: METODO NEW

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).
La crittografia frattale in Perl
                       Crypt::FNA metodi & attributi: METODO NEW

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 magic
number. Questa sequenza numerica, casuale, è il nostro sale crittografico.
La crittografia frattale in Perl
          Crypt::FNA metodi & attributi: METODO MAKE_FRACT




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: 1
L'immagine prodotta è contenuta nel quadrato di lato square.
La crittografia frattale in Perl
         Crypt::FNA metodi & attributi: METODO ENCRYPT_FILE




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}.
La crittografia frattale in Perl
Crypt::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
La crittografia frattale in Perl
Crypt::FNA metodi & attributi: METODO ENCRYPT_FILE


                            Ed ecco dove viene frullato il file
La crittografia frattale in Perl
            Crypt::FNA metodi & attributi: METODO DECRYPT_FILE




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 ENCRYPT_SCALAR




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 DECRYPT_SCALAR




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 MAC



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



MAC -> 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)
La crittografia frattale in Perl
                 Crypt::FNA metodi & attributi: METODO MAC



MAC -> Message Authentication Code

                             Sender -> (m, Ak(m))



                           Receiver -> (m, Vk(m))



                    true                  false
ACCEPT 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.
La crittografia frattale in Perl
                        Crypt::FNA metodi & attributi: METODO MAC




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


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 MESSAGE


Restituisce 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
La crittografia frattale in Perl
               Crypt::FNA metodi & attributi: METODO MESSAGE


Restituisce 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::FNA
12 error background: only numeric character (RGB)
13 error background: only three number (RGB) from 0 to 255
14 error foreground: only numeric character (RGB)
15 error foreground: only three number (RGB) from 0 to 255
16 error loading GD::Simple, drawing aborted
18 error zoom: the value must be a number greater than zero
19 errors during object instantiation
20 error magic setting
21 error salted value (true or false only)
22 error loading Tie::File
23 Error reading sub mac, package Crypt::FNA"
La crittografia frattale in Perl
             Crypt::FNA::Async methodi & attributi



And now, technology
application


                      Crypt::FNA::Async methods

                      Crypt::FNA::Async->new

                      Crypt::FNA::Async->encrypt_files
                      Crypt::FNA::Async->decrypt_files
La crittografia frattale in Perl
                                  Crypt::FNA::Async methodi & attributi




Sincrono contro Asincrono


Crypt::FNA::Async consente di elaborare in parallelo cifratura e decifratura di
files, avvantaggiandosi delle CPU multicore e/o quelle che supportano
hypertrading.

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à comunque
l’elaborazione in serie (in modalità sincrona anziché asincrona)
La crittografia frattale in Perl
            Crypt::FNA::Async metodi & attributi: METODO NEW




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’
            })
La crittografia frattale in Perl
Crypt::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}.
La crittografia frattale in Perl
Crypt::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}.
988.44587991
864.00639226       La crittografia frattale in Perl
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     SEZIONE 3
607.51514839
826.07053756
730.67818328
719.40812543
712.90110561
878.12528707
                Attacco ad FNA
606.87693617
844.95287635
529.89996398
800.51021841
627.67375558
859.71016379
739.56662699
932.56196132
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
                                                    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
                                                  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
                                                       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
                                                       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
                                                    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 successivo
chiave 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
                                                          Attacco a FNA


Da notare che un eventuale attacco di forza bruta
richiederebbe più tempo di quello necessario alla morte
termica del nostro Universo.
La crittografia frattale in Perl
                                                                  Attacco a FNA


Da notare che un eventuale attacco di forza bruta
richiederebbe 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
                                                                  Attacco a FNA


Da notare che un eventuale attacco di forza bruta
richiederebbe 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
                                   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
                                   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…
988.44587991
864.00639226          La crittografia frattale in Perl
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        SEZIONE 4
607.51514839
826.07053756
730.67818328
719.40812543
712.90110561
878.12528707
                  www.Crypter.eu
606.87693617
844.95287635    Online crypter engine
529.89996398
800.51021841
627.67375558
859.71016379
739.56662699
932.56196132
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.
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
988.44587991
864.00639226       La crittografia frattale in Perl
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    SEZIONE 5
607.51514839
826.07053756
730.67818328
719.40812543
712.90110561
878.12528707
                conclusioni
606.87693617
844.95287635
529.89996398
800.51021841
627.67375558
859.71016379
739.56662699
932.56196132
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à
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 ☺
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.
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
988.44587991
864.00639226    La crittografia frattale in Perl
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      THE END?
932.56196132

Weitere ähnliche Inhalte

Was ist angesagt? (10)

Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Algoritmi E Strutture Dati Alberi N Ari
Algoritmi E Strutture Dati   Alberi N AriAlgoritmi E Strutture Dati   Alberi N Ari
Algoritmi E Strutture Dati Alberi N Ari
 
Codici di Reed-Solomon
Codici di Reed-SolomonCodici di Reed-Solomon
Codici di Reed-Solomon
 
Minimiemassimi
MinimiemassimiMinimiemassimi
Minimiemassimi
 
Complessità e ordinamento di Ezio Sperduto
Complessità e ordinamento di Ezio SperdutoComplessità e ordinamento di Ezio Sperduto
Complessità e ordinamento di Ezio Sperduto
 
Algoritmi E Strutture Dati Pile
Algoritmi E Strutture Dati   PileAlgoritmi E Strutture Dati   Pile
Algoritmi E Strutture Dati Pile
 
Esercizi in linguaggio Assembly 8086
Esercizi in linguaggio Assembly 8086Esercizi in linguaggio Assembly 8086
Esercizi in linguaggio Assembly 8086
 
Assembly
AssemblyAssembly
Assembly
 
Assembly1
Assembly1Assembly1
Assembly1
 
Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)Lezione 13 (2 aprile 2012)
Lezione 13 (2 aprile 2012)
 

Andere mochten auch

Andere mochten auch (7)

Department of Chemical Sciences Federico II Naples - 09.01.2014
Department of Chemical Sciences Federico II Naples - 09.01.2014Department of Chemical Sciences Federico II Naples - 09.01.2014
Department of Chemical Sciences Federico II Naples - 09.01.2014
 
Pit2012 modern perl
Pit2012 modern perlPit2012 modern perl
Pit2012 modern perl
 
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceLinux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
 
Codemotion 2012: una nuova crittografia frattale - classe Crypt::FNA
Codemotion 2012: una nuova crittografia frattale - classe Crypt::FNACodemotion 2012: una nuova crittografia frattale - classe Crypt::FNA
Codemotion 2012: una nuova crittografia frattale - classe Crypt::FNA
 
Da Cesare ai quanti - Workshop@UNINA - NaLUG - Crittografia - polialfabetici ...
Da Cesare ai quanti - Workshop@UNINA - NaLUG - Crittografia - polialfabetici ...Da Cesare ai quanti - Workshop@UNINA - NaLUG - Crittografia - polialfabetici ...
Da Cesare ai quanti - Workshop@UNINA - NaLUG - Crittografia - polialfabetici ...
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 

Ähnlich wie La crittografia frattale in Perl

Ecdl modulo 1 -Fondamenti
Ecdl modulo 1 -FondamentiEcdl modulo 1 -Fondamenti
Ecdl modulo 1 -Fondamenti
Angela Cristina
 
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Cristian Randieri PhD
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
UltraUploader
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2
Majong DevJfu
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
STELITANO
 

Ähnlich wie La crittografia frattale in Perl (17)

R Graphics
R GraphicsR Graphics
R Graphics
 
Relazione Modellazione e Simulazioni Numeriche: Percolazione
Relazione Modellazione e Simulazioni Numeriche: PercolazioneRelazione Modellazione e Simulazioni Numeriche: Percolazione
Relazione Modellazione e Simulazioni Numeriche: Percolazione
 
Stringhe java
Stringhe javaStringhe java
Stringhe java
 
R sim rank
R sim rank  R sim rank
R sim rank
 
Ecdl modulo 1 -Fondamenti
Ecdl modulo 1 -FondamentiEcdl modulo 1 -Fondamenti
Ecdl modulo 1 -Fondamenti
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
 
Reti Logic
Reti LogicReti Logic
Reti Logic
 
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
 
RC4 e RC5
RC4 e RC5RC4 e RC5
RC4 e RC5
 
Invarianza di un politopo
Invarianza di un politopoInvarianza di un politopo
Invarianza di un politopo
 
A Framework for Deadlock Detection in Java
A Framework for Deadlock Detection in JavaA Framework for Deadlock Detection in Java
A Framework for Deadlock Detection in Java
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
 
R Vectors
R VectorsR Vectors
R Vectors
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2
 
Umano vs Computer: un esempio pratico
Umano vs Computer: un esempio praticoUmano vs Computer: un esempio pratico
Umano vs Computer: un esempio pratico
 
Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)Esercitazione 3 (14 marzo 2012)
Esercitazione 3 (14 marzo 2012)
 

La crittografia frattale in Perl

  • 2. 988.44587991 864.00639226 La crittografia frattale in Perl 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 SEZIONE 1 607.51514839 826.07053756 730.67818328 Definizione dell’insieme {F} 719.40812543 712.90110561 878.12528707 606.87693617 844.95287635 529.89996398 800.51021841 627.67375558 859.71016379 739.56662699 932.56196132
  • 3. La crittografia frattale in Perl Definizione dell’insieme {F} IT’S FANTASTIC! • Acronimo di Fractal Numerical Algorithm FRACTAL CURVE • Ma cos’è Crypt::FNA AND SYMMETRIC ENCRYPTION – È 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. 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. 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. La crittografia frattale in Perl Definizione dell’insieme {F} Scrivendo la successione delle direzioni come gli elementi di un vettore leggiamo la proprietà principale della costruzione: il primo addendo è il uhmmm 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 GRUPPO a(2) = a(0) + a(2) a(3) = a(0) + a(3) ------------------------------------------------ a(4) = a(1) + a(0) a(5) = a(1) + a(1) II GRUPPO a(6) = a(1) + a(2) a(7) = a(1) + a(3) ------------------------------------------------ a(8) = a(2) + a(0) a(9) = a(2) + a(1) III GRUPPO a(10)= a(2) + a(2) a(11)= a(2) + a(3) ------------------------------------------------ a(12)= a(3) + a(0) a(13)= a(3) + a(1) IV GRUPPO a(14)= a(3) + a(2) a(15)= a(3) + a(3)
  • 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. 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. La crittografia frattale in Perl Grafici di {F} mediante il metodo make_fract (56,-187, 215, 64) (0,90,-60,-90,60)
  • 10. La crittografia frattale in Perl Grafici di {F} mediante il metodo make_fract (56,-177,225,-164) (56,-77,215,-64,60)
  • 11. La crittografia frattale in Perl Grafici di {F} mediante il metodo make_fract (0,90,0,-90) (0,90,60,-90,120)
  • 12. La crittografia frattale in Perl Grafici di {F} mediante il metodo make_fract (56,-177,225,164) (21,-31,100,-79)
  • 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. 988.44587991 864.00639226 La crittografia frattale in Perl 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 SEZIONE 2 607.51514839 826.07053756 730.67818328 719.40812543 712.90110561 878.12528707 Crypt::FNA 606.87693617 844.95287635 metodi & attributi 529.89996398 800.51021841 627.67375558 859.71016379 739.56662699 932.56196132
  • 15. La crittografia frattale in Perl L’algoritmo crittografico 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.
  • 16. La crittografia frattale in Perl L’algoritmo crittografico 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 Advanced Encryption 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.
  • 17. La crittografia frattale in Perl L’algoritmo crittografico 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.
  • 18. La crittografia frattale in Perl Crypt::FNA methodi & attributi And now, technology Crypt::FNA methods application 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. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEW 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’ })
  • 20. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEW 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)
  • 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
  • 22. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEW 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)
  • 23. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEW 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
  • 24. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEW 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
  • 25. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEW 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.
  • 26. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEW 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).
  • 27. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO NEW 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 magic number. Questa sequenza numerica, casuale, è il nostro sale crittografico.
  • 28. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MAKE_FRACT 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: 1 L'immagine prodotta è contenuta nel quadrato di lato square.
  • 29. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO ENCRYPT_FILE 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}.
  • 30. La crittografia frattale in Perl Crypt::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. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO ENCRYPT_FILE Ed ecco dove viene frullato il file
  • 32. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO DECRYPT_FILE 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.
  • 33. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO ENCRYPT_SCALAR 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.
  • 34. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO DECRYPT_SCALAR 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)
  • 35. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MAC 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
  • 36. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MAC MAC -> 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. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MAC MAC -> Message Authentication Code Sender -> (m, Ak(m)) Receiver -> (m, Vk(m)) true false ACCEPT 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. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MAC 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)
  • 39. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MAC 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.
  • 40. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MESSAGE Restituisce 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. La crittografia frattale in Perl Crypt::FNA metodi & attributi: METODO MESSAGE Restituisce 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::FNA 12 error background: only numeric character (RGB) 13 error background: only three number (RGB) from 0 to 255 14 error foreground: only numeric character (RGB) 15 error foreground: only three number (RGB) from 0 to 255 16 error loading GD::Simple, drawing aborted 18 error zoom: the value must be a number greater than zero 19 errors during object instantiation 20 error magic setting 21 error salted value (true or false only) 22 error loading Tie::File 23 Error reading sub mac, package Crypt::FNA"
  • 42. La crittografia frattale in Perl Crypt::FNA::Async methodi & attributi And now, technology application Crypt::FNA::Async methods Crypt::FNA::Async->new Crypt::FNA::Async->encrypt_files Crypt::FNA::Async->decrypt_files
  • 43. La crittografia frattale in Perl Crypt::FNA::Async methodi & attributi Sincrono contro Asincrono Crypt::FNA::Async consente di elaborare in parallelo cifratura e decifratura di files, avvantaggiandosi delle CPU multicore e/o quelle che supportano hypertrading. 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à comunque l’elaborazione in serie (in modalità sincrona anziché asincrona)
  • 44. La crittografia frattale in Perl Crypt::FNA::Async metodi & attributi: METODO NEW 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’ })
  • 45. La crittografia frattale in Perl Crypt::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. La crittografia frattale in Perl Crypt::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. 988.44587991 864.00639226 La crittografia frattale in Perl 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 SEZIONE 3 607.51514839 826.07053756 730.67818328 719.40812543 712.90110561 878.12528707 Attacco ad FNA 606.87693617 844.95287635 529.89996398 800.51021841 627.67375558 859.71016379 739.56662699 932.56196132
  • 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.
  • 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.
  • 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:
  • 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.
  • 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.
  • 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 successivo chiave 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.
  • 54. La crittografia frattale in Perl Attacco a FNA Da notare che un eventuale attacco di forza bruta richiederebbe più tempo di quello necessario alla morte termica del nostro Universo.
  • 55. La crittografia frattale in Perl Attacco a FNA Da notare che un eventuale attacco di forza bruta richiederebbe 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
  • 56. La crittografia frattale in Perl Attacco a FNA Da notare che un eventuale attacco di forza bruta richiederebbe 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…
  • 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. 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. 988.44587991 864.00639226 La crittografia frattale in Perl 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 SEZIONE 4 607.51514839 826.07053756 730.67818328 719.40812543 712.90110561 878.12528707 www.Crypter.eu 606.87693617 844.95287635 Online crypter engine 529.89996398 800.51021841 627.67375558 859.71016379 739.56662699 932.56196132
  • 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. 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. 988.44587991 864.00639226 La crittografia frattale in Perl 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 SEZIONE 5 607.51514839 826.07053756 730.67818328 719.40812543 712.90110561 878.12528707 conclusioni 606.87693617 844.95287635 529.89996398 800.51021841 627.67375558 859.71016379 739.56662699 932.56196132
  • 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. 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. 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. 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. 988.44587991 864.00639226 La crittografia frattale in Perl 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 THE END? 932.56196132