Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Web Cryptography

Web Cryptography

Web Cryptography

7c4b1ae16723b56facc7a8a8f95aa6ce?s=128

jmortegac

May 10, 2015
Tweet

More Decks by jmortegac

Other Decks in Programming

Transcript

  1. Web Cryptography José Manuel Ortega Candel | @jmortegac

  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. 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. Introducción •Autenticación / Integridad •Autorización / Identificación •Encryption / Confidencialidad

  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. 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. 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. Demo localStorage https://github.com/jmortega/jsday.git

  9. Demo localStorage https://github.com/jmortega/jsday.git

  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. 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. AES •Algoritmo de clave secreta compartida •Simétrica •Misma clave para

    cifrar y desencriptar •Tamaños de clave 128,192,256 bits
  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. 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. Crypto JS http://cryptojs.altervista.org

  16. AES en JavaScript http://cryptojs.altervista.org/secretkey.html

  17. RSA • Algoritmo de clave publica / privada •Asimétrica •

    Se encripta con la clave publica y se desencripta con la clave privada
  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. RSA en JavaScript http://cryptojs.altervista.org/publickey/rsa_st_stanford.html

  20. Cryptico https://github.com/wwwtyro/cryptico

  21. SHA-256 Cryptographic Hash Algorithm http://www.movable-type.co.uk/scripts/sha256.html

  22. AES Advanced Encryption Standard http://www.movable-type.co.uk/scripts/aes.html

  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. 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. Soporte en navegadores http://caniuse.com/#feat=cryptography

  26. Soporte en navegadores https://sites.google.com/a/chromium.org/dev/blink/webcrypto

  27. Web Cryptography API Live Table https://diafygi.github.io/webcrypto-examples

  28. WebCrypto API https://developer.mozilla.org/en-US/docs/tag/Web%20Crypto%20API window.crypto.subtle Async calls + Promises

  29. Chrome support WebCrypto API https://sites.google.com/a/chromium.org/dev/blink/webcrypto

  30. WebCrypto API / RandomValues https://developer.mozilla.org/en-US/docs/DOM/window.crypto.getRandomValues

  31. Examples WebCrypto API RSA Public/Private Key

  32. Examples WebCrypto API Sign/Verify

  33. Examples WebCrypto API Sign/Verify

  34. Examples WebCrypto API Encrypt / Decrypt

  35. Examples WebCrypto API Encrypt / Decrypt

  36. Examples WebCrypto API Encrypt / Decrypt

  37. Examples WebCrypto API

  38. Examples WebCrypto API • https://github.com/diafygi/webcrypto-examples • https://github.com/nvdbleek/web-crypto-samples

  39. PoliCrypt http://polycrypt.net https://github.com/polycrypt/polycrypt Implementación de WebCrypto API

  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. 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. 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. SJCL demo http://bitwiseshiftleft.github.io/sjcl/demo

  44. Crypto-JS https://code.google.com/p/crypto-js Ultima versión 3.1.2

  45. Crypto-JS

  46. Performance http://cryptojs.altervista.org/test/simulate-threading-speed_test.html

  47. Crypto-js demo http://jsfiddle.net/Z583W

  48. NodeJs Crypto http://nodejs.org/api/crypto.html •require('crypto') •Requiere instalar OPENSSL en el servidor

  49. NodeJs Crypto http://nodejs.org/api/crypto.html

  50. JavaScript and Web Cryptography https://jswebcrypto.azurewebsites.net/demo.html

  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. Mymail-Crypt for Gmail / Plugin para chrome https://github.com/seancolyer/gmail-crypt

  53. OpenPGP.js http://openpgpjs.org

  54. JavaScript Cryptography tools Plugin para chrome

  55. Crypto Tools http://iblogbox.com/devtools/crypto

  56. DuckDugGo Cryptography hacks

  57. DuckDugGo Cryptography hacks

  58. Telegram https://telegram.org Open Source https://telegram.org/apps#source-code

  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. Telegram JavaScript https://github.com/zhukov/webogram/tree/master/app/js/lib/crypto_worker.js

  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. 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. Telegram Security http://security.stackexchange.com/qu estions/49782/is-telegram-secure

  64. Telegram JavaScript https://github.com/zhukov/webogram/tree/master/app/js/lib/mtproto.js

  65. Telegram https://telegram.org/blog/cryptocontest

  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. 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. 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. 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. 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. Anti-XSS https://noscript.net •Extensión para firefox para evitar ataques XSS

  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. 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. Coursera https://www.coursera.org/course/crypto

  75. Thank you! José Manuel Ortega Candel | @jmortegac