En una publicación reciente del blog WebKit, Apple presentó un argumento convincente para adoptar algunos nuevos estándares de codificación para el cifrado. La tecnología detrás de esas páginas web que nos encanta usar está en constante evolución, pero a veces el truco consiste en convencer a los desarrolladores de que aprendan nuevas formas de hacer las cosas. Veamos el argumento de Apple para adoptar el cifrado WebCrypto, en un lenguaje más fácil de entender.
¿Qué es WebKit y WebCrypto Encryption?
WebKit, en resumen, es un mecanismo para mostrarle esas páginas web que ama en su navegador. Funciona con el navegador web Safari de Apple, así como con navegadores basados en Chromium como Google Chrome y Opera.
Apple creó la API WebCrypto para llevar la criptografía, la piedra angular de la seguridad de la información, de forma nativa al navegador web. La criptografía es lo que hay detrás de esos sitios web seguros que visita, como las cajas de los sitios de compras y el sitio web de su banco. Anteriormente, los desarrolladores han utilizado varias bibliotecas criptográficas de JavaScript muy exitosas para permitir la criptografía en la web.
¿Por qué deberíamos cambiar si las bibliotecas de JavaScript tienen tanto éxito?
La publicación se sumerge en un poco de galimatías de programación altamente técnica, pero la esencia es esta: el cifrado WebCrypto y el nuevo método SubtleCrypto son más seguros y funcionan más rápido que las bibliotecas JavaScript de terceros de la competencia.
El rendimiento aumenta con WebCrypto
Consulte la tabla a continuación, que demuestra el rendimiento de WebCrypto en el cifrado y descifrado AES-GCM. La tabla también muestra la rapidez con la que SHA–2 puede determinar la integridad general de un archivo si el archivo se cifra o descifra.
Puedes ver que la tabla dice que los números más altos son mejores. Déjame elaborar. El cifrado WebCrypto puede cifrar un archivo a una velocidad de 1,33 GB por segundo. A modo de comparación, la biblioteca de JavaScript más rápida solo puede hacerlo a unos 12 MB por segundo. Eso es un gran aumento de rendimiento, y los resultados son similares tanto para el descifrado como para la verificación de integridad del resumen SHA-2.
El problema con la seguridad de JavaScript
Además, la publicación señala que el cifrado WebCrypto es funcionalmente más seguro. En bibliotecas JavaScript no nativas, las claves secretas o privadas deben almacenarse dentro del “contexto de ejecución” de JavaScript. Esto significa que JavaScript los almacena en los scripts o archivos ejecutables o de recursos utilizados por la biblioteca.
Esto se presta a una vulnerabilidad extrema, porque esos recursos de JavaScript están expuestos en el tiempo de ejecución y podrían ser atacados: los piratas informáticos hábiles pueden robar las claves. A esto lo llamamos XSS, o ataque de secuencias de comandos entre sitios. Tal ataque ocurre cuando los piratas informáticos inyectan scripts maliciosos en sitios web en los que confiamos, generalmente a través de nuestras computadoras.
Esto suele suceder porque un troyano u otro malware en la computadora del usuario inyecta el código malicioso. Creo que podemos haber visto ejemplos de esto con LastPass y LinkedIn, aunque esos sitios no han revelado con precisión cómo fueron violados.
WebCrypto API: un modelo más seguro
WebCrypto almacena las claves fuera del “contexto de ejecución” de JavaScript. Esto limita la posibilidad de que una persona malintencionada robe la clave privada a través de un ataque XSS. En otras palabras, un pirata informático no puede ejecutar JavaScript malicioso en su navegador para robar las claves privadas de un sitio web seguro.
El hecho de que la seguridad y el rendimiento sean mejores en todos los ámbitos con WebCrypto API debería ser suficiente para alentar a los desarrolladores a migrar sus aplicaciones web seguras. Entonces, ¿por qué los sitios web más seguros no han implementado la API WebCrypto?
Estas cosas toman tiempo
Desarrollar una interfaz segura para un medio de transporte (como la web) que es inherentemente inseguro requiere mucho tiempo y recursos. Una vez que han completado el trabajo, las empresas son reacias a dedicar tiempo, energía y dinero para hacerlo de nuevo.
El último argumento de Apple, en la forma de la publicación de blog que hemos estado discutiendo, debería ayudar a acelerar las cosas. Explica en un lenguaje fácilmente comprensible (si es un desarrollador) por qué la API de WebCrypto es superior a las bibliotecas JavaScript no nativas. Estoy completamente convencido de que algunas empresas ya están en el largo proceso de adoptar estos cambios, y otras seguramente harán lo mismo después del convincente argumento de Apple.