Web Cryptography
José Manuel Ortega Candel | @jmortegac
INDEX
• Introducción a la seguridad en aplicaciones web
• Almacenamiento en navegador
• Encriptado y desencriptado de la i...
INDEX
• Introducción a la seguridad en aplicaciones web
• Almacenamiento en navegador
• Encriptado y desencriptado de la i...
Introducción
•Autenticación / Integridad
•Autorización / Identificación
•Encryption / Confidencialidad
Browser storage
• Falta de funciones de criptografía que sean
compatibles en todos los navegadores
• Hay mucha tendencia a...
Protocolo HTTPS
• La comunicación va cifrada, pero si sufrimos un ataque MITM
y con las herramientas adecuadas(sniffers ti...
Estado actual SSL
•En realidad si usas SSL no sería necesario cifrar
los datos, pero si sufres un ataque MITM los
datos qu...
Demo localStorage
https://github.com/jmortega/jsday.git
Demo localStorage
https://github.com/jmortega/jsday.git
INDEX
• Introducción a la seguridad en aplicaciones web
• Almacenamiento en navegador
• Encriptado y desencriptado de la i...
Algoritmos
•MD5, SHA-1,SHA-256,SHA-512 (Funciones
hash)
Comprobar la integridad de ficheros
Firma de documentos
•AES [Cr...
AES
•Algoritmo de clave secreta compartida
•Simétrica
•Misma clave para cifrar y desencriptar
•Tamaños de clave 128,192,25...
AES
•message = the unencrypted, readable data we care
about.
•cipherText = the message after encryption, the data
the adve...
AES en JavaScript
<script>
var key = CryptoJS.enc.Hex.parse('01010101'); // clave
var iv = Random();// Vector de inicializ...
Crypto JS
http://cryptojs.altervista.org
AES en JavaScript
http://cryptojs.altervista.org/secretkey.html
RSA
• Algoritmo de clave publica / privada
•Asimétrica
• Se encripta con la clave publica y se desencripta con la clave
pr...
RSA en JavaScript
<script>
var KeySize=512;
var RSAkey = CryptoJS.generateRSAKey(“PassPhrase”, KeySize);
var PublicKey = C...
RSA en JavaScript
http://cryptojs.altervista.org/publickey/rsa_st_stanford.html
Cryptico
https://github.com/wwwtyro/cryptico
SHA-256
Cryptographic
Hash Algorithm
http://www.movable-type.co.uk/scripts/sha256.html
AES Advanced
Encryption
Standard
http://www.movable-type.co.uk/scripts/aes.html
INDEX
• Introducción a la seguridad en aplicaciones web
• Almacenamiento en navegador
• Encriptado y desencriptado de la i...
WebCrypto API
http://www.w3.org/TR/WebCryptoAPI
•Esta especificación describe un API para
realizar operaciones criptográfi...
Soporte en navegadores
http://caniuse.com/#feat=cryptography
Soporte en navegadores
https://sites.google.com/a/chromium.org/dev/blink/webcrypto
Web Cryptography API Live Table
https://diafygi.github.io/webcrypto-examples
WebCrypto API
https://developer.mozilla.org/en-US/docs/tag/Web%20Crypto%20API
window.crypto.subtle
Async calls + Promises
Chrome support WebCrypto API
https://sites.google.com/a/chromium.org/dev/blink/webcrypto
WebCrypto API / RandomValues
https://developer.mozilla.org/en-US/docs/DOM/window.crypto.getRandomValues
Examples WebCrypto API
RSA Public/Private Key
Examples WebCrypto API
Sign/Verify
Examples WebCrypto API
Sign/Verify
Examples WebCrypto API
Encrypt / Decrypt
Examples WebCrypto API
Encrypt / Decrypt
Examples WebCrypto API
Encrypt / Decrypt
Examples WebCrypto API
Examples WebCrypto API
• https://github.com/diafygi/webcrypto-examples
• https://github.com/nvdbleek/web-crypto-samples
PoliCrypt
http://polycrypt.net
https://github.com/polycrypt/polycrypt
Implementación de
WebCrypto API
INDEX
• Introducción a la seguridad en aplicaciones web
• Almacenamiento en navegador
• Encriptado y desencriptado de la i...
Librerías
(independientes del
Web Crypto API)
• crypto-js
• Stanford Javascript Crypto Library
• JavaScript Cryptography T...
SJCL
http://crypto.stanford.edu/sjcl
•http://bitwiseshiftleft.github.io/sjcl/
•http://bitwiseshiftleft.github.io/sjcl/brow...
SJCL demo
http://bitwiseshiftleft.github.io/sjcl/demo
Crypto-JS
https://code.google.com/p/crypto-js
Ultima versión 3.1.2
Crypto-JS
Performance
http://cryptojs.altervista.org/test/simulate-threading-speed_test.html
Crypto-js demo
http://jsfiddle.net/Z583W
NodeJs Crypto
http://nodejs.org/api/crypto.html
•require('crypto')
•Requiere instalar
OPENSSL en el servidor
NodeJs Crypto
http://nodejs.org/api/crypto.html
JavaScript and Web Cryptography
https://jswebcrypto.azurewebsites.net/demo.html
INDEX
• Introducción a la seguridad en aplicaciones web
• Almacenamiento en navegador
• Encriptado y desencriptado de la i...
Mymail-Crypt for Gmail / Plugin para chrome
https://github.com/seancolyer/gmail-crypt
OpenPGP.js
http://openpgpjs.org
JavaScript Cryptography tools
Plugin para chrome
Crypto Tools
http://iblogbox.com/devtools/crypto
DuckDugGo
Cryptography hacks
DuckDugGo
Cryptography hacks
Telegram
https://telegram.org
Open Source
https://telegram.org/apps#source-code
Telegram JavaScript
https://github.com/zhukov/webogram/tree/master/app/js/lib
AES, SHA-1 implementation
•https://code.goo...
Telegram JavaScript
https://github.com/zhukov/webogram/tree/master/app/js/lib/crypto_worker.js
Telegram JavaScript
https://github.com/zhukov/webogram/tree/master/app/js/lib/bin_utils.js
function aesEncryptSync (bytes,...
Telegram JavaScript
https://github.com/zhukov/webogram/tree/master/app/js/lib/bin_utils.js
function aesDecryptSync (encryp...
Telegram Security
http://security.stackexchange.com/qu
estions/49782/is-telegram-secure
Telegram JavaScript
https://github.com/zhukov/webogram/tree/master/app/js/lib/mtproto.js
Telegram
https://telegram.org/blog/cryptocontest
INDEX
• Introducción a la seguridad en aplicaciones web
• Almacenamiento en navegador
• Encriptado y desencriptado de la i...
OWASP
•Organización que trata de mejorar la
seguridad de las aplicaciones web
•Incluye una lista de las 10 vulnerabilidade...
OWASP Top 10 Risks
Vulnerabilidades
• 1. SQL Injection
• 2. Broken auth and session management
• 3. Cross-site scripting(X...
SQL injection
• Inyectar parámetros en la cadena que realiza la
consulta.
• Permitir a un atacante ejecutar código de form...
Cross Site Scripting(XSS)
•Inyectar código malicioso mediante javascript
•Solución : Validar entradas mediante expresiones...
Anti-XSS
https://noscript.net
•Extensión para firefox
para evitar ataques XSS
Cross Site Request Forgery(CSRF)
•Recoger credenciales del usuario que se
envían por GET
•Secuestrar cookies para utilizar...
Resources
• https://www.owasp.org/index.php/Guide_to_Cryptography
• http://www.w3.org/TR/WebCryptoAPI
• Symmetric Cryptogr...
Coursera
https://www.coursera.org/course/crypto
Thank you!
José Manuel Ortega Candel | @jmortegac
Próxima SlideShare
Cargando en…5
×

Web cryptography

881 visualizaciones

Publicado el

Web cryptography in JavaScript

Publicado en: Tecnología
1 comentario
1 recomendación
Estadísticas
Notas
Sin descargas
Visualizaciones
Visualizaciones totales
881
En SlideShare
0
De insertados
0
Número de insertados
56
Acciones
Compartido
0
Descargas
15
Comentarios
1
Recomendaciones
1
Insertados 0
No insertados

No hay notas en la diapositiva.

Web cryptography

  1. 1. Web Cryptography José Manuel Ortega Candel | @jmortegac
  2. 2. INDEX • Introducción a la seguridad en aplicaciones web • Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  3. 3. INDEX • Introducción a la seguridad en aplicaciones web • Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  4. 4. Introducción •Autenticación / Integridad •Autorización / Identificación •Encryption / Confidencialidad
  5. 5. Browser storage • Falta de funciones de criptografía que sean compatibles en todos los navegadores • Hay mucha tendencia a utilizar el localStorage del navegador y un posible atacante podría utilizar esta información para extraer el contenido que se va guardando
  6. 6. Protocolo HTTPS • La comunicación va cifrada, pero si sufrimos un ataque MITM y con las herramientas adecuadas(sniffers tipo wireshark),se puede llegar a ver los datos. •SSLStrip • Esta herramienta permite convertir el tráfico HTTPS en HTTP
  7. 7. Estado actual SSL •En realidad si usas SSL no sería necesario cifrar los datos, pero si sufres un ataque MITM los datos quedan expuestos a un posible atacante. •Sería recomendable añadir una capa más de seguridad con alguna librería de crypto en javascript.
  8. 8. Demo localStorage https://github.com/jmortega/jsday.git
  9. 9. Demo localStorage https://github.com/jmortega/jsday.git
  10. 10. INDEX • Introducción a la seguridad en aplicaciones web • Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  11. 11. Algoritmos •MD5, SHA-1,SHA-256,SHA-512 (Funciones hash) Comprobar la integridad de ficheros Firma de documentos •AES [Criptografía de clave privada][WPA2] •RSA-4096 [Criptografía de clave pública] •RC4(Usado en SSL)
  12. 12. AES •Algoritmo de clave secreta compartida •Simétrica •Misma clave para cifrar y desencriptar •Tamaños de clave 128,192,256 bits
  13. 13. AES •message = the unencrypted, readable data we care about. •cipherText = the message after encryption, the data the adversary gets to see. •Key = the secret required to encrypt and decrypt the message •Encryption: ciphertext = f(key, message) •Decryption: cleartext = f(key, cipherText)
  14. 14. AES en JavaScript <script> var key = CryptoJS.enc.Hex.parse('01010101'); // clave var iv = Random();// Vector de inicialización var aesEncryptor = CryptoJS.AES.createEncryptor(key, { iv: iv }); var ciphertext = aesEncryptor.process("Message"); var aesDecryptor = CryptoJS.AES.createDecryptor(key, { iv: iv }); var plaintext = aesDecryptor.process(ciphertext); </script>
  15. 15. Crypto JS http://cryptojs.altervista.org
  16. 16. AES en JavaScript http://cryptojs.altervista.org/secretkey.html
  17. 17. RSA • Algoritmo de clave publica / privada •Asimétrica • Se encripta con la clave publica y se desencripta con la clave privada
  18. 18. RSA en JavaScript <script> var KeySize=512; var RSAkey = CryptoJS.generateRSAKey(“PassPhrase”, KeySize); var PublicKey = CryptoJS.publicKeyString(RSAkey); var PrivateKey = CryptoJS.privateKeyString(RSAkey); var Encryption = CryptoJS.encrypt(“Message”, PublicKey); var Decryption = CryptoJS.decrypt(Encryption.cipherText, PrivateKey); </script>
  19. 19. RSA en JavaScript http://cryptojs.altervista.org/publickey/rsa_st_stanford.html
  20. 20. Cryptico https://github.com/wwwtyro/cryptico
  21. 21. SHA-256 Cryptographic Hash Algorithm http://www.movable-type.co.uk/scripts/sha256.html
  22. 22. AES Advanced Encryption Standard http://www.movable-type.co.uk/scripts/aes.html
  23. 23. INDEX • Introducción a la seguridad en aplicaciones web • Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  24. 24. WebCrypto API http://www.w3.org/TR/WebCryptoAPI •Esta especificación describe un API para realizar operaciones criptográficas. •Funciones hash •Algoritmos de clave pública y privada •Generación de firmas y verificación de datos •Cifrado y descifrado de mensajes
  25. 25. Soporte en navegadores http://caniuse.com/#feat=cryptography
  26. 26. Soporte en navegadores https://sites.google.com/a/chromium.org/dev/blink/webcrypto
  27. 27. Web Cryptography API Live Table https://diafygi.github.io/webcrypto-examples
  28. 28. WebCrypto API https://developer.mozilla.org/en-US/docs/tag/Web%20Crypto%20API window.crypto.subtle Async calls + Promises
  29. 29. Chrome support WebCrypto API https://sites.google.com/a/chromium.org/dev/blink/webcrypto
  30. 30. WebCrypto API / RandomValues https://developer.mozilla.org/en-US/docs/DOM/window.crypto.getRandomValues
  31. 31. Examples WebCrypto API RSA Public/Private Key
  32. 32. Examples WebCrypto API Sign/Verify
  33. 33. Examples WebCrypto API Sign/Verify
  34. 34. Examples WebCrypto API Encrypt / Decrypt
  35. 35. Examples WebCrypto API Encrypt / Decrypt
  36. 36. Examples WebCrypto API Encrypt / Decrypt
  37. 37. Examples WebCrypto API
  38. 38. Examples WebCrypto API • https://github.com/diafygi/webcrypto-examples • https://github.com/nvdbleek/web-crypto-samples
  39. 39. PoliCrypt http://polycrypt.net https://github.com/polycrypt/polycrypt Implementación de WebCrypto API
  40. 40. INDEX • Introducción a la seguridad en aplicaciones web • Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  41. 41. Librerías (independientes del Web Crypto API) • crypto-js • Stanford Javascript Crypto Library • JavaScript Cryptography Toolkit • jsSHA • Gibberish-AES • jsAES • http://openpgpjs.org • pidCrypt
  42. 42. SJCL http://crypto.stanford.edu/sjcl •http://bitwiseshiftleft.github.io/sjcl/ •http://bitwiseshiftleft.github.io/sjcl/browserTest • Soporte AES • Key 128, 192 or 256 bits
  43. 43. SJCL demo http://bitwiseshiftleft.github.io/sjcl/demo
  44. 44. Crypto-JS https://code.google.com/p/crypto-js Ultima versión 3.1.2
  45. 45. Crypto-JS
  46. 46. Performance http://cryptojs.altervista.org/test/simulate-threading-speed_test.html
  47. 47. Crypto-js demo http://jsfiddle.net/Z583W
  48. 48. NodeJs Crypto http://nodejs.org/api/crypto.html •require('crypto') •Requiere instalar OPENSSL en el servidor
  49. 49. NodeJs Crypto http://nodejs.org/api/crypto.html
  50. 50. JavaScript and Web Cryptography https://jswebcrypto.azurewebsites.net/demo.html
  51. 51. INDEX • Introducción a la seguridad en aplicaciones web • Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  52. 52. Mymail-Crypt for Gmail / Plugin para chrome https://github.com/seancolyer/gmail-crypt
  53. 53. OpenPGP.js http://openpgpjs.org
  54. 54. JavaScript Cryptography tools Plugin para chrome
  55. 55. Crypto Tools http://iblogbox.com/devtools/crypto
  56. 56. DuckDugGo Cryptography hacks
  57. 57. DuckDugGo Cryptography hacks
  58. 58. Telegram https://telegram.org Open Source https://telegram.org/apps#source-code
  59. 59. Telegram JavaScript https://github.com/zhukov/webogram/tree/master/app/js/lib AES, SHA-1 implementation •https://code.google.com/p/crypto-js  RSA implementation •http://www-cs-students.stanford.edu/~tjw/jsbn
  60. 60. Telegram JavaScript https://github.com/zhukov/webogram/tree/master/app/js/lib/crypto_worker.js
  61. 61. Telegram JavaScript https://github.com/zhukov/webogram/tree/master/app/js/lib/bin_utils.js function aesEncryptSync (bytes, keyBytes, ivBytes) { var len = bytes.byteLength || bytes.length; bytes = addPadding(bytes); var encryptedWords = CryptoJS.AES.encrypt(bytesToWords(bytes), bytesToWords(keyBytes), { iv: bytesToWords(ivBytes), padding: CryptoJS.pad.NoPadding, mode: CryptoJS.mode.IGE }).ciphertext; var encryptedBytes = bytesFromWords(encryptedWords); // console.log(dT(), 'AES encrypt finish'); return encryptedBytes; }
  62. 62. Telegram JavaScript https://github.com/zhukov/webogram/tree/master/app/js/lib/bin_utils.js function aesDecryptSync (encryptedBytes, keyBytes, ivBytes) { // console.log(dT(), 'AES decrypt start', encryptedBytes.length); var decryptedWords = CryptoJS.AES.decrypt({ciphertext: bytesToWords(encryptedBytes)}, bytesToWords(keyBytes), { iv: bytesToWords(ivBytes), padding: CryptoJS.pad.NoPadding, mode: CryptoJS.mode.IGE }); var bytes = bytesFromWords(decryptedWords); // console.log(dT(), 'AES decrypt finish'); return bytes; }
  63. 63. Telegram Security http://security.stackexchange.com/qu estions/49782/is-telegram-secure
  64. 64. Telegram JavaScript https://github.com/zhukov/webogram/tree/master/app/js/lib/mtproto.js
  65. 65. Telegram https://telegram.org/blog/cryptocontest
  66. 66. INDEX • Introducción a la seguridad en aplicaciones web • Almacenamiento en navegador • Encriptado y desencriptado de la información con JavaScript • Web Cryptography API y soporte para navegadores • Librerías que permiten usar la mayoría de los algoritmos de cifrado(CryptoJS,SJCL) • Tools • OWASP guide
  67. 67. OWASP •Organización que trata de mejorar la seguridad de las aplicaciones web •Incluye una lista de las 10 vulnerabilidades más críticas
  68. 68. OWASP Top 10 Risks Vulnerabilidades • 1. SQL Injection • 2. Broken auth and session management • 3. Cross-site scripting(XSS) • 4. Insecure direct object references • 5. Security misconfiguration • 6. Sensitive data exposure • 7. Missing function level access control • 8. Cross-site request forgery(CSRF) • 9. Using vulnerable components • 10. Unvalidated redirects and forwards
  69. 69. SQL injection • Inyectar parámetros en la cadena que realiza la consulta. • Permitir a un atacante ejecutar código de forma arbitraria en el servidor. •Solución : Prepared statements $stmt = $mysqli->prepare( 'UPDATE users SET email = ? where id = 123'); $stmt->bind_param('s',$email);
  70. 70. Cross Site Scripting(XSS) •Inyectar código malicioso mediante javascript •Solución : Validar entradas mediante expresiones regulares •Validar que no estén modificando las cabeceras de la peticiones •Emplear frameworks que permitan el filtrado y la validación de los datos de entrada
  71. 71. Anti-XSS https://noscript.net •Extensión para firefox para evitar ataques XSS
  72. 72. Cross Site Request Forgery(CSRF) •Recoger credenciales del usuario que se envían por GET •Secuestrar cookies para utilizar una sesión con fines maliciosos •Emplear POST para enviar las peticiones y cifrar los datos más sensibles(login) •Emplear tokens de autenticación
  73. 73. Resources • https://www.owasp.org/index.php/Guide_to_Cryptography • http://www.w3.org/TR/WebCryptoAPI • Symmetric Cryptography in Javascript • http://bitwiseshiftleft.github.io/sjcl/acsac.pdf • http://seclab.stanford.edu • http://www.w3.org/2001/tag/doc/web-https-2015-01-22 • https://docs.google.com/spreadsheets/d/14oTKnccypDRiesz GLV7GbZXcIai0qLYOwgk_ELIj5A0/pubhtml
  74. 74. Coursera https://www.coursera.org/course/crypto
  75. 75. Thank you! José Manuel Ortega Candel | @jmortegac

×