Web Crypto API: diferencias entre navegador, Node.js y Edge
La criptografía en el navegador y en el servidor ha vivido durante años con implementaciones dispares que obligaban a los equipos de desarrollo a mantener dos o más versiones del mismo algoritmo. Con la llegada de la Web Crypto API, el estándar W3C prometió unificar ese terreno: un mismo conjunto de interfaces para operaciones criptográficas, desde generación de claves hasta cifrado simétrico y asimétrico. Sin embargo, cuando se intenta compartir un módulo de cifrado entre el navegador, un servidor Node.js 20+ y el runtime Edge de Next.js, la teoría choca con la práctica. No se trata de diferencias filosóficas, sino de detalles concretos: qué algoritmos están realmente disponibles, cómo se accede al objeto crypto, y qué funciones auxiliares pueden usarse sin romper la portabilidad.
En el navegador, crypto.subtle es un global desde hace años; en Node.js, es global desde la versión 19, y en el Edge runtime de Next.js también está presente, pero con un subconjunto más restrictivo de operaciones. El problema no es acceder al objeto, sino que cada entorno implementa un subconjunto distinto del estándar. Por ejemplo, algoritmos como Ed25519 o X25519 funcionan en Node.js 20 pero no están garantizados en el Edge runtime, y si el código los usa, fallará en tiempo de ejecución con un DOMException. Incluso operaciones habituales como crypto.getRandomValues son seguras en los tres entornos, mientras que randomBytes de node:crypto no lo es, y su simple importación en un módulo compartido hará que el Edge runtime lance un error.
Para las empresas que desarrollan aplicaciones modernas, esta fragmentación supone un coste oculto: depuraciones nocturnas, fallos en producción que los tipos de TypeScript no capturan, y la necesidad de mantener múltiples implementaciones. La solución práctica pasa por adoptar un contrato mínimo común, basado en AES-GCM con claves de 256 bits para cifrado simétrico y SHA-256 para hash, que sí funcionan en los tres entornos. Además, hay que evitar cualquier dependencia de Buffer o node:crypto en módulos que puedan ejecutarse en Edge. Para serializar claves, btoa y atob son seguros, mientras que usar Buffer.from(...).toString('base64') rompe la portabilidad.
En Q2BSTUDIO entendemos que la seguridad no es un añadido, sino un pilar del desarrollo. Por eso, cuando trabajamos en aplicaciones a medida, diseñamos arquitecturas que abstraen estas diferencias desde el principio. Nuestros equipos integran servicios cloud AWS y Azure para orquestar entornos híbridos, y aplicamos rigurosas prácticas de ciberseguridad que incluyen pentesting y auditorías de código criptográfico. Además, cuando un proyecto requiere inteligencia artificial para empresas o agentes IA, la capa de cifrado debe ser portable y auditable; ahí utilizamos la Web Crypto API con las precauciones descritas. También ofrecemos servicios inteligencia de negocio con Power BI, donde la protección de datos en tránsito y reposo es crítica, y sabemos que un error en la implementación criptográfica puede comprometer todo el sistema.
Un checklist práctico antes de escribir cualquier módulo criptográfico compartido: primero, determinar en qué entornos va a ejecutarse (solo navegador, solo Node.js, solo Edge, o varios). Si hay mezcla, la restricción más estricta gana: usar exclusivamente Web Crypto API. Segundo, elegir algoritmos con cobertura documentada en todos los destinos: AES-GCM para cifrado, SHA-256 para hash, ECDSA P-256 para firmas. Tercero, serializar claves con btoa/atob o TextEncoder/TextDecoder, evitando Buffer. Cuarto, revisar la configuración de TypeScript: si falta 'DOM' en lib, los tipos de SubtleCrypto no se resuelven, pero eso no evita errores en tiempo de ejecución. Quinto, en Next.js, prestar atención a las advertencias de compilación cuando un módulo importa node:crypto y se usa en una ruta Edge.
La conclusión es clara: el estándar Web Crypto API define la interfaz, pero cada entorno decide qué implementa. Ignorar esa diferencia es una fuente recurrente de bugs que TypeScript no detecta. En Q2BSTUDIO abordamos estos desafíos con un enfoque pragmático, combinando desarrollo de software a medida, automatización de procesos y las mejores prácticas en seguridad y cloud. Si tu proyecto maneja datos sensibles o necesita agentes IA que operen en múltiples runtimes, contar con una estrategia de cifrado portable no es un lujo, es una necesidad.
Comentarios