🧰 UtlKit

Cifrado/Descifrado AES: Como Cifrar 12 Bytes en 28 con AES-GCM — la Etiqueta de 16 Bytes, el IV de 12 Bytes y la Advertencia de Reuso

Cifra y descifra texto con AES-GCM en el navegador: un texto plano de 12 bytes se vuelve un cifrado de 28 bytes con una etiqueta de autenticación de 16 bytes, las claves de 32, 48 o 64 caracteres hexadecimales eligen AES-128, 192 o 256, el IV de 24 caracteres son 12 bytes, reutilizar el mismo par clave-IV dispara una advertencia, y la salida en base64 son 40 caracteres para 12 bytes y 156 para 100, todo en local.

Cifrar texto en el navegador es un viaje de ida y vuelta con guardia: el texto plano se transforma en cifrado con una clave, y se adjunta una etiqueta de autenticación de 16 bytes, de modo que cualquiera que cambie aunque sea un bit del cifrado en el camino es detectado. Cifrado/Descifrado AES ejecuta ese viaje por completo en el navegador con AES-GCM: un texto plano de 12 bytes se vuelve un cifrado de 28 bytes, una clave hexadecimal de 32, 48 o 64 caracteres elige AES-128, 192 o 256, y el IV de 24 caracteres son 12 bytes. La salida es base64 —40 caracteres para ese ejemplo de 12 bytes— y el lado de descifrado rechaza lo que haya sido manipulado. Nada sale de la máquina.

Lo que GCM añade al cifrador de bloque

AES por sí solo es un cifrador de bloque: toma 16 bytes a la vez y los mezcla a través de un número fijo de rondas —10 para una clave de 128 bits, 12 para 192, 14 para 256. Un cifrador de bloque solo no oculta la longitud del mensaje, no acepta un mensaje que no sea múltiplo de 16 bytes, y no te dice si el cifrado fue cambiado en el camino. GCM añade tres cosas: corre el cifrador en modo contador, de modo que un mensaje de cualquier longitud fluye; deriva una corriente de claves que se XORa con el texto plano, que es lo que oculta el contenido; y calcula una etiqueta de autenticación de 16 bytes sobre el cifrado con un hash con clave. La etiqueta es el guardia: invierte un bit del cifrado y el lado de descifrado lanza un error en vez de devolver basura. Un generador de hash calcula digestas de la misma familia pero sin clave, para integridad y deduplicación, y una digesta no se puede invertir, así que el hash por sí solo nunca puede ser cifrado —la etiqueta de GCM toma la idea del hash y la pone con clave, que es lo que hace seguro adjuntarla.

La clave, el IV y el par que no debe repetirse

La clave es el material: 32 caracteres hexadecimales son 16 bytes, 48 son 24, 64 son 32, así que las tres longitudes legales eligen AES-128, AES-192 y AES-256, y la clave queda en un manejador no extraíble dentro de Web Crypto tras el importKey, sin almacenarse ni enviarse. El IV (vector de inicialización) son 24 caracteres hexadecimales, 12 bytes, y debe diferir de cualquier otro IV usado con la misma clave. Ese es el par que no debe repetirse: la misma clave con el mismo IV dos veces es el fallo que rompe GCM, porque la corriente de claves del contador sería idéntica en ambas ejecuciones y el segundo mensaje daría al atacante la capacidad de pelar el primero. La herramienta recuerda los pares clave-IV ya usados en la sesión y muestra una advertencia en el momento en que intentas cifrar de nuevo con uno de ellos. Para comparar, un generador HMAC usa el mismo tipo de hash con clave para el trabajo opuesto: autentica un mensaje sin ocultarlo, de modo que HMAC responde si el contenido está íntegro y es tuyo, mientras GCM responde eso y si además es secreto.

De dónde viene la aleatoriedad

Cuando la página carga, la herramienta rellena los dos campos por ti: una clave hexadecimal aleatoria de 64 caracteres, 32 bytes, y un IV hexadecimal aleatorio de 24 caracteres, 12 bytes, generados con la misma ruta getRandomValues de Web Crypto que sostiene el cifrado. La aleatoriedad es lo que mantiene el IV único: un IV aleatorio de 12 bytes tiene una probabilidad de colisión despreciable entre un número pequeño de mensajes, y una clave nueva elimina hasta eso. Si generas identificadores en el mismo navegador, el generador UUID toma de la misma fuente de aleatoriedad para los UUID de versión 4, y aplica la misma cautela: la aleatoriedad es un suministro, no un ajuste, y el navegador es quien lo reparte. Trata los dos campos generados como tratarías un pasaporte — se llevan contigo y no se comparten.

Cómo leer la salida en base64

El cifrado es binario, así que la herramienta lo pinta en base64, que es la codificación que mapea cada grupo de tres bytes a cuatro caracteres. Por eso el texto plano de 12 bytes no vuelve como 12 caracteres: los 28 bytes de cifrado, los 12 más la etiqueta de 16, se codifican en 40 caracteres base64, con el grupo final absorbiendo el resto en relleno. El crecimiento es estable: 100 bytes de texto plano dan 116 bytes de cifrado, que son 156 caracteres base64, y 1000 bytes dan 1016, que son 1356 caracteres. Los 16 bytes extra son la misma etiqueta cada vez, así que en mensajes largos el sobrecoste es despreciable y en los cortos se ve. Cuando necesitas pasar los bytes a un sitio que espera la codificación cruda, el codificador/decodificador Base64 convierte entre la forma de texto y las demás representaciones sin tocar el contenido.

La clave es todo el sistema

AES-GCM es tan fuerte como la clave detrás, y una clave es un secreto en el mismo sentido en que una contraseña lo es: su fortaleza es función de la longitud y la imprevisibilidad, y su gestión es no repetirla y no escribirla donde cualquiera pueda leerla. La herramienta no juzga tu clave —acepta cualquier cadena hexadecimal de longitud par entre 32 y 64—, pero la comprobación honesta es la que un verificador de fortaleza de contraseña aplica a las contraseñas, traducida a hexadecimal: una cadena de 64 caracteres que es un patrón repetido es 32 bytes de material y mucho menos de 256 bits de entropía. Si necesitas material de clave de verdad en lugar de uno tecleado, la guía del generador de contraseñas cubre la misma disciplina de generación y almacenamiento, y una clave hexadecimal aleatoria se genera por la misma ruta de un clic.

Dónde aparece AES fuera de la caja

El mismo primitivo AES-GCM no es un juguete de navegador: TLS usa AES-GCM como uno de sus cifradores de registro principales, la cifración de disco completo en los sistemas operativos modernos usa AES, normalmente en modo XTS, y la API Web Crypto que la herramienta llama es la misma que llaman los entornos de pago, los flujos de inicio de sesión y las apps offline-first para el almacenamiento local cifrado. El punto de esta herramienta es hacer el primitivo inspeccionable: puedes ver el cifrado exacto, el sobrecoste exacto de la etiqueta y el modo exacto de fallo de la detección de manipulación, todo en una caja de texto. Los tokens son la otra cara visible del mismo stack —un decodificador JWT abre la cabecera y la carga del token para mostrar qué está firmado y qué no, que es el gemelo de solo lectura de lo que el cifrado hace en la dirección de escritura.

Herramientas Relacionadas

Preguntas Frecuentes

¿Qué tamaño de clave usa la herramienta?

El que tu longitud de clave indique. 32 caracteres hexadecimales son 16 bytes, 48 son 24, 64 son 32, así que las tres longitudes legales eligen AES-128, AES-192 y AES-256, y el número de rondas sigue en 10, 12 y 14. La herramienta acepta cualquier cadena hexadecimal de longitud par en ese rango y deja que la longitud haga la selección.

¿Por qué mi entrada de 12 bytes se vuelve 28 bytes cifrada?

GCM adjunta una etiqueta de autenticación de 16 bytes al cifrado, así que 12 bytes de texto plano se vuelven 28 bytes de cifrado a cualquier tamaño de clave, y esos 28 bytes se pintan como 40 caracteres base64. La etiqueta no es un sobrecoste que puedas desechar — es lo que hace posible la detección de manipulación, y descifrar sin ella falla.

¿Qué pasa si reutilizo el mismo IV con la misma clave?

La herramienta muestra una advertencia, porque es el fallo que rompe GCM. Reutilizar la misma clave y el mismo IV significa la misma corriente de claves del contador en ambas ejecuciones, y el segundo mensaje entonces da al atacante lo que hace falta para pelar el primero. La herramienta recuerda cada par clave-IV que ya usó en la sesión y lo marca en el momento en que intentas cifrar de nuevo con uno de ellos. Genera un IV nuevo — y de preferencia una clave nueva — para cada mensaje.

¿Cómo sé que el cifrado no ha sido manipulado?

El lado de descifrado comprueba la etiqueta de 16 bytes antes de devolver nada, y un bit invertido en cualquier lugar del cifrado hace fallar la comprobación, así que la herramienta muestra un error de descifrado en vez de devolver texto incorrecto en silencio. Ese es todo el punto de GCM frente al modo contador puro: o la salida verifica, o no vuelve en absoluto.

¿Mi dato se envía a un servidor?

No. La cifración, la comprobación de la etiqueta y la codificación base64 corren todas en el navegador a través de Web Crypto y APIs web en la máquina local. La clave, el IV y el texto nunca la abandonan, que es lo que hace la herramienta utilizable para texto que no pegarías en un formulario.

Artículos Relacionados