Download - Full Stack Cryptography
![Page 1: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/1.jpg)
“È fatta. Resta da cifrare un campo in una tabella, che sarà mai?”
Paolo Montrasio Giorgio [email protected] [email protected]
![Page 2: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/2.jpg)
Il problema
Applicazione web conclusa
Bisogna cifrare un campo di testo nel DB
Il campo deve essere decifrabile nel client inserendo la chiave
Facile? Anche Ulisse deve aver detto così partendo da Troia
![Page 3: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/3.jpg)
Alternative
Cifratura simmetrica con chiave sul server → inutile
Cifratura asimmetrica, solo chiave pubblica sul server → OK!
![Page 4: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/4.jpg)
Alternative
Cifratura simmetrica con chiave sul server → inutile
Cifratura asimmetrica, solo chiave pubblica sul server → OK!
Ma…Si cifrano solo blocchi lunghi quanto la chiave
Meno il padding
![Page 5: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/5.jpg)
I nostri dati sono brevi
Sarà una passeggiata!
![Page 6: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/6.jpg)
I nostri dati sono brevi
Sarà una passeggiata!
Come mai le SELECT non funzionano!?
![Page 7: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/7.jpg)
$ openssl genpkey -algorithm RSA -out private_key.pem \
-pkeyopt rsa_keygen_bits:2048
$ openssl rsa -pubout -in private_key.pem -out public_key.pem
$ nvm install 5.7.0
$ nvm use 5.7.0
https://github.com/pmontrasio/full-stack-cryptography
![Page 8: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/8.jpg)
![Page 9: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/9.jpg)
La crittografia non è
deterministica!
![Page 10: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/10.jpg)
Ma possiamo far finta che lo sia
Padding deterministico in base ai dati Math.random() crypto.randomBytes()
JavaScript si è scordato di un Math.seed() → modulo esterno require(“seedrandom”)
![Page 11: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/11.jpg)
![Page 12: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/12.jpg)
La crittografia deterministica indebolisce la sicurezza
Usarla con cautela solo se necessario
![Page 13: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/13.jpg)
Mandiamo i dati al browser
Base64!
Sembra fatta
![Page 14: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/14.jpg)
Anche le cose più semplicinascondono sorprese
Interoperabilità con il backendBase64 Node → Base64 JS, OKBase64 Ruby → Base64 JS, un \n di troppo
![Page 15: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/15.jpg)
Inserire la chiave privata nel browser, ogni volta: NO!
La seppelliamo in LocalStorage: NI
La sicurezza della crittografia JS nel frontend è dibattuta
![Page 16: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/16.jpg)
![Page 17: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/17.jpg)
È fatta o è un altro inganno?
![Page 18: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/18.jpg)
Jsencrypt non decifra senza padding!
Cercare un altro modulo → non se ne trovano
Aggiungere la propria funzionedi decifratura → non una passeggiata
Dare la brutta notizia al cliente → qui è dove Ulisse ha perso tutti i compagni supestiti
![Page 19: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/19.jpg)
Il codice da modificare è
di facile comprensione �
Scriviamo la funzione
![Page 20: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/20.jpg)
Fork della libreria
https://github.com/pmontrasio/jsencrypt
![Page 21: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/21.jpg)
E finalmente...
![Page 22: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/22.jpg)
È ora di farla pagare!
![Page 23: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/23.jpg)
È ora di farla pagare!
…la feature :)
![Page 24: Full Stack Cryptography](https://reader030.vdocuments.net/reader030/viewer/2022021503/587adcf91a28ab542b8b59b9/html5/thumbnails/24.jpg)
Paolo Montrasio Giorgio [email protected] [email protected]@pmontrasio @ideaferace
https://github.com/pmontrasio/full-stack-cryptographySlide a https://connettiva.eu/full-stack-cryptography