際際滷

際際滷Share a Scribd company logo
Creiamo una CA
max@mascanc.net
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
CA Private key
 Generiamo la chiave
max@spirit6 ~/Desktop/Corso PIN $ openssl genrsa -out cakey.pem
4096
max@spirit6 ~/Desktop/Corso PIN $ mkdir -p demoCA/private
max@spirit6 ~/Desktop/Corso PIN $ mv cakey.pem demoCA/private/
CA Public key
 max@spirit6 ~/Desktop/Corso PIN $ openssl req -new -x509 -key
demoCA/private/cakey.pem -out demoCA/cacert.pem
max@spirit6 ~/Desktop/Corso PIN $ openssl req -new -x509 -key
demoCA/private/cakey.pem -out demoCA/cacert.pem -config
/usr/local/etc/openssl/openssl.cnf
CA Certificate
max@spirit6 ~/Desktop/Corso PIN $ openssl x509 -in demoCA/cacert.pem -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 18067107955812575165 (0xfabb42f650d7a7bd)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=IT, ST=Italy, L=Firenze, O=Internet Widgits Pty Ltd, OU=NA, CN=CA PIN/emailAddress=max@mascanc.net
Validity
Not Before: Mar 24 06:47:36 2019 GMT
Not After : Apr 23 06:47:36 2019 GMT
Subject: C=IT, ST=Italy, L=Firenze, O=Internet Widgits Pty Ltd, OU=NA, CN=CA PIN/emailAddress=max@mascanc.net
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
CA Certificate
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
24:9A:54:A7:3E:15:3E:E6:9C:DB:7D:D4:D8:78:05:38:19:3A:1A:8F
X509v3 Authority Key Identifier:
keyid:24:9A:54:A7:3E:15:3E:E6:9C:DB:7D:D4:D8:78:05:38:19:3A:1A:8F
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
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
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
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
Generiamo la CRL
 max@spirit6 ~/Desktop/Corso PIN $ openssl ca -config
/usr/local/etc/openssl/openssl.cnf -gencrl -crldays 2 -out myca.crl
 max@spirit6 ~/Desktop/Corso PIN $ openssl crl -CAfile
demoCA/cacert.pem -in myca.crl
CRL
max@spirit6 ~/Desktop/Corso PIN $ openssl crl -CAfile demoCA/cacert.pem -in myca.crl -noout -text
Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: /C=IT/ST=Italy/L=Firenze/O=Internet Widgits Pty Ltd/OU=NA/CN=CA
PIN/emailAddress=max@mascanc.net
Last Update: Mar 25 08:06:18 2019 GMT
Next Update: Mar 27 08:06:18 2019 GMT
CRL extensions:
X509v3 CRL Number:
2
Revoked Certificates:
Serial Number: 03
Revocation Date: Mar 25 08:05:12 2019 GMT
CRL
 max@spirit6 ~/Desktop/Corso PIN $ openssl ca -config
/usr/local/etc/openssl/openssl.cnf -status 03
 03=Revoked (R)
 max@spirit6 ~/Desktop/Corso PIN $ openssl ca -config
/usr/local/etc/openssl/openssl.cnf -status 01
 01=Valid (V)
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
TCP Three way handshake
TLS Handshake
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
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>
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
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)
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
Openssl Server
 openssl s_server -accept 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 -www
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.
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
Le funzioni hash
 Hash sono usate in congiunzione message authentication code (MAC)
 Esempi: Md5, SHA1, SHA256
Scambio di Chiavi Diffie Hellman
 Schema di Merkle: qual 竪 il problema?
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
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  ,
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.
Scambio di chiavi diffie hellman
Diffie-Hellman
 DH soffre di MITM
 Se Mallory si mette nel mezzo (come?) pu嘆 sfruttare una vulnerabilit
 QUALE?
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)
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
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.
Esempio (http://fooplot.com)
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
+  +
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
  =     =        =        =
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
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.
Applichiamo le curve ellittiche
 TLS_ECDH_RSA_AES_128_CBC_SHA
 Blockchain!

More Related Content

Corso IFTS CyberSecurity Expert - Creazione di una CA con OpenSSL

  • 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
  • 3. CA Private key Generiamo la chiave max@spirit6 ~/Desktop/Corso PIN $ openssl genrsa -out cakey.pem 4096 max@spirit6 ~/Desktop/Corso PIN $ mkdir -p demoCA/private max@spirit6 ~/Desktop/Corso PIN $ mv cakey.pem demoCA/private/
  • 4. CA Public key max@spirit6 ~/Desktop/Corso PIN $ openssl req -new -x509 -key demoCA/private/cakey.pem -out demoCA/cacert.pem max@spirit6 ~/Desktop/Corso PIN $ openssl req -new -x509 -key demoCA/private/cakey.pem -out demoCA/cacert.pem -config /usr/local/etc/openssl/openssl.cnf
  • 5. CA Certificate max@spirit6 ~/Desktop/Corso PIN $ openssl x509 -in demoCA/cacert.pem -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 18067107955812575165 (0xfabb42f650d7a7bd) Signature Algorithm: sha256WithRSAEncryption Issuer: C=IT, ST=Italy, L=Firenze, O=Internet Widgits Pty Ltd, OU=NA, CN=CA PIN/emailAddress=max@mascanc.net Validity Not Before: Mar 24 06:47:36 2019 GMT Not After : Apr 23 06:47:36 2019 GMT Subject: C=IT, ST=Italy, L=Firenze, O=Internet Widgits Pty Ltd, OU=NA, CN=CA PIN/emailAddress=max@mascanc.net Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus:
  • 6. CA Certificate Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 24:9A:54:A7:3E:15:3E:E6:9C:DB:7D:D4:D8:78:05:38:19:3A:1A:8F X509v3 Authority Key Identifier: keyid:24:9A:54:A7:3E:15:3E:E6:9C:DB:7D:D4:D8:78:05:38:19:3A:1A:8F
  • 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
  • 11. Generiamo la CRL max@spirit6 ~/Desktop/Corso PIN $ openssl ca -config /usr/local/etc/openssl/openssl.cnf -gencrl -crldays 2 -out myca.crl max@spirit6 ~/Desktop/Corso PIN $ openssl crl -CAfile demoCA/cacert.pem -in myca.crl
  • 12. CRL max@spirit6 ~/Desktop/Corso PIN $ openssl crl -CAfile demoCA/cacert.pem -in myca.crl -noout -text Certificate Revocation List (CRL): Version 2 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: /C=IT/ST=Italy/L=Firenze/O=Internet Widgits Pty Ltd/OU=NA/CN=CA PIN/emailAddress=max@mascanc.net Last Update: Mar 25 08:06:18 2019 GMT Next Update: Mar 27 08:06:18 2019 GMT CRL extensions: X509v3 CRL Number: 2 Revoked Certificates: Serial Number: 03 Revocation Date: Mar 25 08:05:12 2019 GMT
  • 13. CRL max@spirit6 ~/Desktop/Corso PIN $ openssl ca -config /usr/local/etc/openssl/openssl.cnf -status 03 03=Revoked (R) max@spirit6 ~/Desktop/Corso PIN $ openssl ca -config /usr/local/etc/openssl/openssl.cnf -status 01 01=Valid (V)
  • 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
  • 15. TCP Three way handshake
  • 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
  • 22. Openssl Server openssl s_server -accept 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 -www
  • 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.
  • 30. Scambio di chiavi diffie hellman
  • 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.
  • 40. Applichiamo le curve ellittiche TLS_ECDH_RSA_AES_128_CBC_SHA Blockchain!