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