Empieza por la conclusión: lo que puedes comprobar al momento es si esta petición HTTP envió texto en claro, una contraseña o una clave de fragmento como dato de negocio. No prueba que una extensión no haya leído el portapapeles, ni que la siguiente versión se comporte igual. Los pasos de abajo son repetibles, no un nuevo juego de adjetivos.
Responde a la intención de búsqueda en una frase
Cifrado local en el navegador significa que el cifrado y el descifrado ocurren en la pestaña que estás viendo: el script llama a la Web Crypto API del navegador, termina algoritmos de tipo AES-GCM en este dispositivo, y el texto en claro y las claves no salen del navegador como cuerpo HTTP, por defecto. La comprobación no es una frase de marketing: abre DevTools Network, busca un canario y, si hace falta, vuelve a probar sin conexión.
Este artículo es para desarrolladores, operaciones y quien quiera mirar antes de entregar un archivo o una contraseña a una «herramienta en línea». No sustituye las instrucciones de la caja de cifrado ni repite la definición de producto de Inicio. Lo que te llevas es una comprobación que puedes reutilizar en cualquier sitio.
Los eslóganes no se demuestran solos; el tráfico sí se puede observar
Muchas páginas escriben cálculo local, cero subidas y extremo a extremo. Esas palabras pueden ir en una herramienta que de verdad termina en este dispositivo, o en una página que hace POST del texto original para que un servidor lo cifre. La frase no lleva ninguna suma de comprobación.
Lo que puedes ver en el momento es el método, la URL, la cadena de consulta y el cuerpo que envió esta pestaña. El panel Network de Chrome los lista. Si el nombre del archivo que acabas de elegir, la contraseña que acabas de escribir o un texto de prueba que solo tú conoces aparecen ahí, el «cifrado local» no se sostuvo en esta operación.
Al revés también es estrecho: que el panel no muestre texto en claro solo significa que las peticiones que observaste no se llevaron esos campos. No significa que la memoria no tuviera texto en claro, ni que una extensión no leyera el cuadro de entrada. Convertir el marketing en una observación repetible ya vale: puedes decirle a un compañero «busqué el canario; la línea de petición y el body están limpios», en vez de reenviar una frase de la web.
No experimentes con una clave real, un número de documento o una hoja sin enmascarar. Prepara un archivo pequeño que puedas tirar y usa una frase de contraseña larga de un solo uso. Estás comprobando tráfico, no volviendo a exponer privacidad.
Qué capa es realmente «local»
«Local en el navegador» no es «este dominio parece seguro». Significa que el trabajo criptográfico ocurre en el entorno de scripts del documento actual. Para AES-256-GCM, el camino correcto habitual es crypto.subtle.encrypt: la derivación de clave, el cifrado y la etiqueta de autenticación pasan por la API del propio navegador. MDN indica que SubtleCrypto.encrypt solo está disponible en un contexto seguro: HTTPS en producción. En una página HTTP normal, crypto.subtle suele ser undefined.
AES-GCM no se elige por el nombre. Es cifrado autenticado con integridad: si el texto cifrado se altera o se usa la clave equivocada, el descifrado falla; no suelta un «texto en claro erróneo que parece basura». El IV suele ser de 12 bytes (96 bits), alineado con la recomendación de NIST SP 800-38D para GCM. Cada cifrado debe usar un IV aleatorio nuevo para que el mismo texto en claro produzca un texto cifrado distinto.
Un flujo de archivo se puede escribir como acciones concretas: eliges un archivo del dispositivo, el script lo lee por bloques, cifra cada bloque y dispara la descarga del texto cifrado. El .lock o .enc descargado lo generó este dispositivo, no es un recibo del servidor. Un tope de 5 GB por archivo describe la capacidad de procesar en streaming en el navegador; no significa que un host remoto recibiera 5 GB de texto en claro.
También hay que separar la «subida de negocio» de las «peticiones que la página hace de todos modos». Un sitio de herramientas listo para usar sigue cargando estilos, scripts y fuentes, y puede enviar analítica de visitas sin el cuerpo del texto. Esas peticiones no prueban que «se subió el archivo». Pero si la query o el body de la analítica contiene la contraseña que acabas de escribir, una contraseña que auditaste o el texto antes del enmascarado, eso ya es otra cosa.
FastPwd formula este límite en una frase que puedes comprobar: el texto en claro y las claves de la generación de contraseñas, la auditoría de contraseñas, la limpieza de privacidad y el cifrado/descifrado de archivos no salen del navegador por defecto; Burn-Link solo deja salir texto cifrado, y la clave de descifrado va en el fragmento # de la URL. La caja de cifrado parte en bloques de 1 MB y deriva una clave AES-256 de la contraseña con PBKDF2 (100000 iteraciones, SHA-256), luego escribe .lock / .enc. Todas las herramientas están listas para usar: no hay cuenta ni almacén de contraseñas. Una promesa sigue siendo solo una promesa. Más abajo, Network la convierte en una lista de comprobación.
Haz una comprobación con canario en Network
Primero prepara una marca que no aparezca en el trabajo real. El archivo puede llamarse canary-fp-20260825.bin, la contraseña una frase larga aleatoria, y el cuerpo una línea que solo existe en este experimento. El canario sirve para buscar: pégalo en el filtro de Network; si hay coincidencia, es un fallo.
Abre las herramientas para desarrolladores, ve a Network, marca Preserve log y empieza el filtro en All: no dejes solo XHR. Una petición cancelada o un 4xx ya puede haber llevado texto en claro. Luego completa una operación entera: elige un archivo, introduce la contraseña, pulsa cifrar o generar. No cierres el panel al terminar.
- Pega el canario en el filtro. Si hay un acierto en rojo, para y lee esa petición: no vuelvas a «parece local».
- Si no hay coincidencia, abre Fetch / XHR uno a uno y revisa la línea de petición, la cadena de consulta y el cuerpo. CSS, fuentes y scripts se pueden ignorar.
- Filtra las rutas de analítica por separado y abre la query y el body. Pueden aparecer títulos de página y rutas; no deberían aparecer la contraseña que acabas de escribir, una contraseña que auditaste, el texto antes del enmascarado ni el contenido del archivo.
Lee la línea de petición
Lee el path y la query detrás del signo de interrogación, carácter a carácter. Campos de localización como id pueden aparecer; un nombre de archivo, una contraseña, una contraseña que auditaste o la clave después de #, no. Compara la cadena completa de la barra de direcciones con la línea de petición: si lo que va detrás de # entró en la línea de petición, la implementación trató el fragmento como query, o un script lo leyó y lo escribió en una petición.
Lee el cuerpo de la petición
El payload de POST / PUT es el segundo sitio. Si el cifrado de archivos afirma terminar en local, el cuerpo no debería llevar los bytes del archivo original ni la contraseña. Burn-Link puede incluir un campo de texto cifrado: eso es dato de salida esperado; confirma que no se parece al texto en claro que acabas de escribir. Si una página de auditoría de contraseñas hace POST de la contraseña, da igual que el propósito se escriba como «buscar filtraciones» o «calcular fuerza»: ya salió de este dispositivo.
Revisa la analítica por separado
La analítica de visitas se suele saltar. Una API principal limpia con un informe que lleva el texto completo de entrada sigue significando que esta operación no dejó «el texto en claro en el navegador». Al filtrar rutas de analítica, no asumas que «el script de analítica es inofensivo»: es otra petición de salida, y se comprueba igual que una API de negocio. La analítica de FastPwd usa el tracker del propio sitio y, por defecto, no envía desde localhost; aun así, busca el canario y confirma que el informe no tiene contraseña ni contenido de archivo.
Marca Preserve log. Si la página navega o se recarga después del cifrado y la casilla no está marcada, la primera petición que llevaba texto en claro puede haber desaparecido, y obtienes un «el panel está vacío» falso.
Repite la prueba sin red: los recursos estáticos no son una subida de negocio
La segunda comprobación es barata. Deja que la página termine de cargar, activa Offline en Network —o corta la red del sistema— y cifra ese archivo pequeño desechable. Si la descarga del .lock se completa igual, este cifrado/descifrado no necesitó una API en vivo. Es una señal fuerte de «cifrado local en el navegador», pero no la única.
Los falsos fallos también son habituales: que una fuente o un script de analítica se ponga en rojo en Offline no es un fallo de cifrado. Mira si aparece un POST de negocio nuevo después de pulsar cifrar, y si el archivo resultado ya está en descargas. También hay falsos pases: un script puede encolar el texto en claro y enviarlo cuando vuelvas a conectar. Así que supera la prueba sin red y, en línea, sigue buscando el canario.
El signo de interrogación entra en HTTP; la almohadilla, por defecto, no
Una URL tiene dos partes que la gente suele mezclar. La consulta detrás del signo de interrogación entra en la línea de petición HTTP; servidores, proxies inversos y registros de acceso la pueden ver. El fragmento detrás de # se queda en el navegador por defecto, para que lo lea el script de la página actual. El destino de la petición HTTP no incluye el fragmento: lo dice RFC 9110 sobre el request target, y por eso URL.hash solo existe en el lado del navegador.
Por eso, si un enlace de texto cifrado de un solo uso pone la clave en #, cuando el destinatario abre s.html?id={id}#{key} el servidor, por diseño, solo ve el id, no la clave. No es un protocolo criptográfico extra: es el comportamiento por defecto del fragmento en el navegador. Tiene límites: pegas la dirección completa en un ticket, un chat de grupo o una tarjeta de vista previa que recorta el hash, y la clave pasa de «no entra en HTTP» a «aparece en la pantalla y los registros de otra persona».
La comprobación es igual de concreta: crea una nota de prueba inofensiva en Burn-Link y mira si el body de la petición de creación es solo texto cifrado; en la página de lectura, mira si la petición del documento y las APIs posteriores contienen solo id en la URL. Lo que va detrás de # en la barra de direcciones no debería aparecer en esas peticiones. La página de lectura es pública para el destinatario: no hace falta iniciar sesión.
| Dónde mirar | ¿Entra en HTTP? | Qué cuenta como aprobado |
|---|---|---|
| Eslogan de la página | No aplica | No es prueba: solo sirve de contraste |
| Línea de petición / query | Sí | Sin canario, sin contraseña, sin clave del fragmento |
| POST body | Sí | Sin texto en claro; Burn-Link solo puede enviar texto cifrado |
Fragmento # de la URL |
No, por defecto | En la barra de direcciones, no en la línea de petición |
| Analítica de visitas | Depende de la implementación | Sin texto en claro del cuadro de entrada |
| Cifrar con Offline | Sin petición de negocio nueva | El texto cifrado se descarga igual; busca el canario otra vez en línea |
Qué puedes demostrar y qué no
La conclusión que sostiene esta comprobación es estrecha. Escribirlo así la hace más útil.
Puede sostener: en este navegador, esta versión y esta operación, el texto en claro, la contraseña y la clave del fragmento no salieron de la pestaña como dato HTTP de negocio observado ni como texto en claro de analítica.
No puede sostener: que ninguna otra pestaña o extensión lea el portapapeles; que la carpeta de descargas del disco sea segura; que el destinatario no hará una captura del texto cifrado; que la auditoría de contraseñas cubrió un corpus de filtraciones de toda la web. Si la comprobación solo hace entropía local más una lista pública Top de contraseñas débiles, puede responder «¿parece una contraseña débil habitual?», no «nunca apareció en una filtración». Eso no es un cruce Have I Been Pwned de toda la web.
Tampoco lo leas como una prueba de penetración. No inspeccionaste WebSockets, cachés de Service Worker ni desofuscaste un script. El objetivo es poder explicarle a un compañero: abrí Network, busqué un canario y la línea de petición y el body están limpios. Eso está más cerca de una conversación de ingeniería que reenviar «la web dice que no se sube nada».
Preguntas frecuentes
Si cifra sin conexión, ¿eso prueba que no se ha subido nada?
Solo demuestra que este cifrado/descifrado no necesitó una API en vivo. Los scripts ya cacheados en la página aún pueden enviar después, cuando vuelvas a conectar. Así que supera la prueba sin red y, en línea, busca otra vez en Network con el mismo canario. Los dos pasos tienen que pasar para que la conclusión se sostenga.
Si el panel Network está vacío, ¿esa acción fue segura?
No. Un filtro dejado solo en Img, Preserve log sin marcar o una petición borrada al navegar pueden producir un vacío falso. Cambia el filtro a All, busca el canario y abre los informes de analítica por separado. Un panel vacío es una observación fallida, no una prueba de seguridad.
Si Burn-Link deja texto cifrado en el servidor, ¿sigue siendo cifrado local del navegador?
Cuenta como «el texto en claro se calculó en este dispositivo y luego sale el texto cifrado». El servidor solo debería ver el texto cifrado y un id de localización; la clave de descifrado va detrás de la almohadilla en el enlace y, por defecto, no entra en HTTP. Crear y leer no requieren cuenta. Comprueba que el body no es texto en claro y que la línea de petición no contiene la clave que va detrás de #.
¿La auditoría de contraseñas envía la contraseña a una base de filtraciones de toda la web?
La auditoría de contraseñas de FastPwd calcula la fuerza en este dispositivo y contrasta una lista pública de contraseñas débiles incluida. La contraseña no se sube. Puede detectar contraseñas débiles habituales, pero no puede demostrar «nunca se ha visto en la web», y no es un cruce al estilo Have I Been Pwned. Busca en Network con la contraseña como canario para comprobar esta afirmación.
Usa los mismos pasos en una herramienta lista para usar
Si quieres practicar en una página que deja por escrito el límite de cálculo, empieza por la caja de cifrado de FastPwd. Ábrela y úsala: no hay registro. Elige un archivo pequeño sin privacidad real, usa un canario como contraseña, cifra y descarga un .lock. Mira Network al mismo tiempo: deberías ver recursos estáticos y, quizá, analítica de visitas, no el archivo original ni la contraseña como campos de negocio. El algoritmo es AES-256-GCM en Web Crypto; un solo archivo, como máximo 5 GB.
Burn-Link es un buen segundo ejercicio: crea una nota de prueba inofensiva y confirma que lo que sale es texto cifrado; la página de lectura es pública para el destinatario y la forma del enlace es s.html?id={id}#{key}. La limpieza de privacidad sirve para practicar «¿entra el texto original en la analítica?»: los enlaces y el texto a enmascarar se quedan en el navegador, como describe el producto; tú sigues decidiendo si el resultado limpio basta.
Estos ejercicios no pretenden demostrar que un sitio es «absolutamente seguro». Pretenden que te familiarices con la misma comprobación. En cualquier página que afirme cifrado local, los pasos no cambian: canario, Preserve log, línea de petición, cuerpo, analítica y, si hace falta, Offline.
La próxima vez que compruebes, recuerda tres cosas. Primera: mira el tráfico, no los eslóganes. Segunda: el texto cifrado de salida es aceptable; las claves y el texto en claro, no. Tercera: si cambias de navegador, de versión o de función, vuelve a buscar el canario. Solo una observación repetible merece entrar en las notas de seguridad de tu equipo.