2. Facciamo una CA
OpenSSL supporta la creazione di CA tramite openssl.cnf
max@spirit6 ~/Desktop/Corso PIN $ mkdir demoCA
max@spirit6 ~/Desktop/Corso PIN/demoCA $ mkdir newcerts
max@spirit6 ~/Desktop/Corso PIN/demoCA $ touch index.txt
max@spirit6 ~/Desktop/Corso PIN/demoCA $ echo 01 > serial
demoCA conterr tutte le informazioni, newcerts i nuovi certificati,
index la loro lista e il loro stato e serial il numero seriale
7. CA Certificate
X509v3 Basic Constraints:
CA:TRUE
X509v3 Key Usage:
Certificate Sign, CRL Sign
Netscape Cert Type:
SSL CA, S/MIME CA
X509v3 Subject Alternative Name:
email:max@mascanc.net
X509v3 Issuer Alternative Name:
email:max@mascanc.net
Signature Algorithm: sha256WithRSAEncryption
8. Generiamo un certificato normale
max@spirit6 ~/Desktop/Corso PIN $ openssl genrsa -out key.pem 2048
Generiamo una RICHIESTA DI CERTIFICATO
max@spirit6 ~/Desktop/Corso PIN $ openssl req -new -key key.pem -
out req.pem
Con la richiesta di certificato ci si va a registrare presso la RA
9. Firma di una CSR
max@spirit6 ~/Desktop/Corso PIN $ openssl req -in req.pem -noout
text
max@spirit6 ~/Desktop/Corso PIN $ openssl ca -in req.pem -out
req.cert -config /usr/local/etc/openssl/openssl.cnf
Ora vediamo serial e index.txt
10. Creiamo un altro certificato
E revochiamolo
max@spirit6 ~/Desktop/Corso PIN $ openssl ca -config
/usr/local/etc/openssl/openssl.cnf -revoke cert2.pem
Generiamo la CRL
max@spirit6 ~/Desktop/Corso PIN $ emacs demoCA/crlnumber
14. Transport Layer Security (TLS)
TLS specificato nellrfc8446
Attualmente version 1.3
Fornisce sicurezza a livello di trasporto
Base per ogni servizio superiore (larchitettura della sicurezza,
ricordate?)
HTTPS, SMTPS, IMAPS
17. TLS Modo di funzionamento
TLS utilizza PKI per stabilire il TRUST
Il certificato presentato durante il ServerHello 竪 considerato fidato dal
client basandosi su delle policy aziendali
Ma come fidarsi che il server 竪 chi dice di essere?
Bisogna fidarsi della RA
Ma come fa il server a fidarsi del client?
Mutua autenticazione TLS
18. CipherSpec
TLS Funziona usando PKI per scambiarsi delle chiavi simmetriche
Si configura con delle stringhe chiamate Ciphersuite
Hanno la seguente forma
TLS_RSA_WITH_AES_128_CBC_SHA256
<protocollo>_<algoritmo>_<cifrariosimmetrico>_<parametri>_<modo
perativo>_<onewayhash>
19. Vediamolo dal vivo
Facciamo partire tomcat o wildfly e configuriamolo
Java KeyStore
Si esporta il file in formato p12 max@spirit6 ~/Desktop/Corso PIN $
openssl pkcs12 -export -out corso.p12 -inkey key2.pem -in cert2.pem
Se la chiave 竪 cifrata si decifra come
max@spirit6 ~/Desktop/Corso PIN $ openssl rsa -in enckey.pem (dopo
averla incollata in un file chiamato enckey.pem)
Java keystore ha 2 diversi formati: JKS e P12
20. Keystore e Truststore
max@spirit6 ~/Desktop/Corso PIN $ keytool -importkeystore -
srckeystore corso.p12 -srcstoretype pkcs12 -deststoretype jks -
destkeystore corso.jks
In $JAVA_HOME/jre/lib/security c竪 il file cacerts con la lista delle
certification authority fidate (tipo eIDAS)
21. Debug di un handshake
Si mette java in debug: -Djavax.net.debug=ssl
Openssl TLS client
openssl s_client -connect localhost:6514 -cert
/Users/max/Documents/Tiani/Test
Certificates/certificates_arnulf/s1_cert.pem -key
/Users/max/Documents/Tiani/Test
Certificates/certificates_arnulf/s1_key.pem -CAfile
/Users/max/Documents/Tiani/Test
Certificates/certificates_arnulf/demoCA/cacert.pem
23. One Way Hash Function
Dato un messaggio M di lunghezza variabile, la funzione che produce
un output di lunghezza fissa si chiama funzione di hash
h=H(M)
La funzione di HASH non 竪 segreta, ci vuole un modo per proteggere il
suo valore
Fornisce limpronta digitale di un file.
24. Requisiti
H pu嘆 essere applicata ad un blocco di dati di qualsiasi dimensione
H produce un output di lunghezza fissa
H(x) 竪 facile da calcolare
Dato h 竪 computazionalmente impossibile trovare x tale che H(x) = h.
E quindi one-way (monodirezionale)
Per un blocco x, 竪 computazionalmente impossibile trovare un
: =
Lhash deve essere lungo: attacchi di compleanno, lo spazio si riduce
in alcuni casi a 2 /2
25. Le funzioni hash
Hash sono usate in congiunzione message authentication code (MAC)
Esempi: Md5, SHA1, SHA256
26. Scambio di Chiavi Diffie Hellman
Schema di Merkle: qual 竪 il problema?
27. Diffie Hellman
Merkle ha un problema di tipo MITM (vedremo nellattacco di
Armando)
DH si basa sui logaritmi discreti (stessa difficolt di calcolare la
fattorizzazione dei primi di RSA)
Esempio: =
. Se si conosce g,x,p, 竪 immediato calcolare y.
Ma, dati, y, g, p, 竪 computazionalmente complesso calcolare x.
Si definisce una radice primitiva di un numero primo p com un
numero le cui potenze modulo p generano tutti gli interi compresi fra
1 e p-1
28. DH
Per cui se a 竪 radice primitiva di p (primo) allora i numeri
, 2 , , 1 sono distinti e sono costituiti dagli
interi compresi fra 1 e p-1 in una certa permutazione
Per un qualsiasi intero b e una radici primitava a di un numero primo
p, si pu嘆 trovare un esponente univoco i tale che
, 0 ( 1)
Lesponente i 竪 chiamato logaritmo discreto di b per la base a modulo
p, e si denota con ,
29. Sistema di scambio DH
Siano noti , , con q primo e < q, radice primitiva di q
A genera la chiave selezionando un numero privato tale che <
e calcola pubblico, tale che YA =
B genera la chiave selezionando un numero privato tale che <
e calcola pubblico, tale che YB =
A genera la chiave come =
B genera la chiave come =
Per le propriet dellaritmetica modulare.
31. Diffie-Hellman
DH soffre di MITM
Se Mallory si mette nel mezzo (come?) pu嘆 sfruttare una vulnerabilit
QUALE?
32. Vulnerabilit DH
I messaggi non sono autenticati!
Non sappiamo se un messaggio viene da alice o da mallory!
Si risolve con un sistema di certificati e firme (ciA)
33. Aritmetica a curva ellittica
Il problema di RSA 竪 che le chiavi devono essere molto grandi: piccolo
problema computazionale (Hardware Security Modules)
Elliptic Curve Criptography (ECC) usa uno schema per avere chiavi pi湛
piccole
Dimensioni delle chiavi a parit di sforzo computazionale
Simmetrico ECC RSA
56 112 512
128 256 3072
256 512 15360
34. ECC
Ci si basa sulla somma su curva ellittica, ovvero risolvere il problema
= + + + k volte
Una curva ellittica su 竪 definita da equazioni cubiche, della
seguente forma
2 + ヰ + = 3 + 2 + + , che si possono semplificare
come 2 = 3 + +
Quindi: y = 3 + + . La curva 竪 costituita da valori positivi o
negativi.
36. ECC
Avendo un punto di origine, O, la somma sulle curve ellittiche pu嘆
essere definita da algebre
Si somma nellinsieme definito E(a,b) per i valori specific di a,b di
2 = 3 + +
Ma questo era sui numeri reali. ECC usa curve su , e i coefficienti
hanno valori interi da 0, p-1.
2
= 3
+ +
37. Quale 竪 il 損problema difficile損?
Si consideri = , dove , , , < .
Facile calcolare Q, dati k, P, complesso calcolare k, dati Q e P.
Crittografia
Elementi globali pubblici: , curva ellittica, punto sulla curva
A sceglie < , e calcola = . 潅 la chiave privata
B sceglie < , e calcola = . 誼 la chiave privata
= = = =
38. OpenSSL: lista curve
root@massimo ~ $ openssl ecparam -list_curves
secp384r1 : NIST/SECG curve over a 384 bit prime field
secp521r1 : NIST/SECG curve over a 521 bit prime field
prime256v1: X9.62/SECG curve over a 256 bit prime field
Vediamo i parametri
root@massimo ~ $ openssl ecparam -name secp521r1 -out
secp521r1.pem
39. Generiamo chiavi
root@massimo ~ $ openssl ecparam -in secp521r1.pem -genkey -
noout -out massiec.key
Pubblica: root@massimo ~ $ openssl ec -in massiec.key -pubout -out
massiecpub.key
Vediamo: root@massimo ~ $ openssl ec -in massiec.key -noout -text -
param_enc explicit
Poi si derivano chiavi e si possono usare con e.g., AES.