AES-256-GCM y 600.000 rondas de PBKDF2, explicados
Qué significan de verdad las cifras de la lista de funciones de una bóveda de fotos, y una explicación honesta de lo que no cubren.
AES-256-GCM es el método de cifrado AES con una clave de 256 bits, usado de una forma llamada GCM. Merece la pena fijarse en la parte GCM: comprueba los datos además de codificarlos, así que un archivo que se ha manipulado no se abre, en lugar de devolverse erróneo sin avisar. PBKDF2 con 600.000 rondas convierte tu contraseña en una clave lentamente a propósito, de modo que cada intento de un atacante cuesta 600.000 rondas de trabajo. Esa cifra es una recomendación pública de OWASP, no nuestra.
Nada de esto protege frente a un teléfono comprometido mientras la bóveda está abierta, ni frente a una contraseña que otra persona conoce. Los detalles, y los límites, están más abajo.
Las listas de funciones de las bóvedas de fotos están llenas de cifras: AES-256, GCM, 600.000 rondas, PBKDF2. Se presentan como si zanjaran la cuestión, y la mayoría de los lectores, con buen criterio, se las saltan. Merecen diez minutos. Saber qué hace cada una te permite distinguir una afirmación concreta de una que solo suena impresionante. Esta página explica cada término en palabras sencillas. Después, en la sección 8, expone frente a qué no protege el cifrado. Esa segunda parte es la que cambia las decisiones.
1. La versión corta
| Término | Qué hace |
|---|---|
| AES | El método de cifrado. Un estándar publicado para codificar datos con una clave. |
| 256 | El tamaño de la clave, en bits. Lo bastante grande para que probar todas las claves no sea práctico. |
| GCM | Una forma de usar AES que además comprueba si ha habido manipulación. Los datos alterados se detectan en lugar de aceptarse sin avisar. |
| Nonce | Un número que se usa una sola vez en cada cifrado. Nunca debe repetirse con la misma clave. |
| PBKDF2 | El proceso que convierte una contraseña en una clave, lentamente a propósito. |
| 600.000 rondas | Lo lento que es. Cada intento de un atacante cuesta 600.000 rondas de trabajo. |
| Sal | Datos aleatorios que se mezclan, para que los atacantes no puedan preparar respuestas por adelantado y reutilizarlas con distintos usuarios. |
2. Qué es AES-256
AES son las siglas en inglés de Estándar de Cifrado Avanzado (Advanced Encryption Standard). Es un método de cifrado publicado por el Instituto Nacional de Estándares y Tecnología de EE. UU. (NIST) en 2001, tras un concurso público que duró varios años. No es secreto y no tiene dueño. El diseño es público. Expertos de universidades y de la industria lo han estudiado durante más de veinte años y no han encontrado ninguna forma práctica de romper el método completo.
El 256 es el tamaño de la clave en bits. Probar todas las claves posibles de ese tamaño supone buscar entre 2 elevado a 256 posibilidades. No es cuestión de esperar a que haya computadoras más rápidas. Está muy por encima de cualquier cosa que las computadoras normales pudieran alcanzar jamás. En la práctica, por eso el propio método casi nunca es la parte que falla.
Precisamente por eso «usamos AES-256» dice menos de lo que parece. Es casi el mínimo. Las preguntas interesantes son qué se cifra, cómo se usa y cómo se genera la clave.
3. Qué añade GCM
El cifrado por sí solo mantiene los datos en secreto: sin la clave, no se pueden leer. Por sí solo no promete que los datos estén intactos. No puede decirte que lo que abres es lo que se guardó.
Ese hueco es real. Con un método que no comprueba nada, alguien que pueda cambiar el archivo guardado puede alterar los datos codificados. Al abrirlos saldrían datos distintos y erróneos, sin ningún error. Recuperas datos. Solo que no son los datos que se guardaron, y nada te lo dice.
GCM añade la comprobación. Junto con los datos codificados genera un valor de comprobación, y ese valor se verifica cada vez que se abren los datos. De nuestro propio documento de seguridad:
«Un byte modificado en el disco hace que el descifrado falle de forma visible en lugar de devolver un texto ligeramente erróneo. Esto es lo que hace que “descifrado” equivalga a “sin modificar desde el cifrado”».
Es lo más útil que puedes buscar en una lista de funciones, porque es donde se nota la precisión. «AES-256» nombra un método. «AES-256-GCM» nombra un método y una forma de usarlo, y ahí es donde la comprobación contra manipulaciones existe o no.
4. Los nonces, y el error clásico
Cada cifrado en un sistema GCM usa un nonce, que significa un número que se usa una sola vez. No necesita ser secreto. Necesita ser único para una clave determinada.
Si se repite un nonce con la misma clave, la protección de GCM se viene abajo. No es un caso raro. Es la forma más habitual en que se han roto sistemas reales que usan GCM, y se debe a atajos en cómo se construyeron, no a ninguna debilidad de AES.
Hay dos formas sólidas de asegurarse de que nunca se repita. Una es un número aleatorio nuevo para cada cifrado. Es lo que hace Obscura Photo Vault con los archivos individuales: un número aleatorio nuevo de 96 bits cada vez, con un valor de comprobación de 128 bits. La otra es un contador que, de forma demostrable, nunca se repite. Es lo que usa nuestro formato para videos grandes. Combina un número aleatorio elegido para cada archivo con el número de fragmento, de modo que no hay dos fragmentos de ningún archivo que compartan nonce.
Ninguno de los dos enfoques es más correcto que el otro. Lo que importa es que la app eligiera uno a propósito. Ese es el tipo de cosa que muestra un documento de diseño publicado y que una lista de funciones no puede mostrar.
5. Tu contraseña es el eslabón débil
Una clave de 256 bits tiene 256 bits de aleatoriedad. Tu contraseña no. Incluso una buena frase de contraseña tiene quizá entre 60 y 80 bits, y una contraseña típica muchos menos. Si la contraseña se usara directamente como clave, el enorme tamaño de la clave no importaría. Un atacante adivinaría contraseñas, no claves.
El proceso que convierte una contraseña en una clave es el puente. PBKDF2 toma la contraseña y una sal y las pasa una y otra vez por una función de codificación, un número fijo de veces, para generar una clave. El objetivo de la repetición es el coste. Tú generas la clave una vez por desbloqueo y apenas notas el segundo que tarda. Un atacante que prueba millones de intentos paga ese coste en cada uno de ellos.
Esta es la cifra que hay que buscar, y la que más a menudo se omite. Una app puede decir con verdad que usa AES-256 y aun así convertir tu contraseña en una clave en un solo paso. Eso la dejaría expuesta justo al ataque de adivinación sin conexión que este proceso existe para impedir.
6. Por qué 600.000
La cifra no es aleatoria, y no es nuestra. La OWASP Password Storage Cheat Sheet es la referencia pública más usada para esto. Recomienda PBKDF2 con HMAC-SHA-256 con 600.000 rondas o más. Es la cifra que usa Obscura Photo Vault para las contraseñas de las bóvedas.
Hay dos matices honestos que la acompañan.
Es un objetivo que se mueve. El número de rondas recomendado sube a medida que el hardware se hace más rápido. La cifra actual sale de pruebas con los chips gráficos de hoy. Un número que estaba bien hace unos años ya no lo está, y el de hoy no lo estará para siempre. Trata un número de rondas publicado como una afirmación con fecha.
Multiplica tu contraseña. No la sustituye. Las rondas hacen que cada intento cueste mucho más. No cambian cuántos intentos hacen falta. Una contraseña elegida entre un conjunto pequeño de opciones sigue siendo débil tras 600.000 rondas, porque a un atacante le basta con recorrer ese conjunto pequeño. El proceso gana tiempo en proporción a lo difícil que ya era adivinar tu contraseña.
Así que el consejo práctico para cualquier bóveda cifrada es aburrido y correcto: usa una frase de contraseña larga de palabras sin relación entre sí, y apúntala en un lugar seguro. En una app en la que la clave sale de verdad de tu contraseña, esa copia escrita es la única que existe. De eso trata nuestra guía sobre qué pasa si olvidas la contraseña de tu bóveda.
7. Las sales
Una sal son datos aleatorios que se mezclan con la contraseña antes de que se convierta en una clave. Se guarda junto a los datos cifrados. No es secreta, ni necesita serlo.
Su función es impedir que los atacantes se preparen por adelantado. Sin sales, un atacante podría calcular las claves de una lista de contraseñas comunes una sola vez y luego reutilizar esa lista contra todos los usuarios de una app. Con una sal aleatoria única por bóveda, ese trabajo hay que repetirlo desde cero para cada objetivo. Compartir el esfuerzo entre usuarios deja de ser posible.
Obscura Photo Vault usa una sal aleatoria de 32 bytes por bóveda, guardada en la cabecera del propio archivo de la bóveda.
8. Frente a qué no protege nada de esto
Todo lo anterior trata de los datos en reposo: archivos guardados en el almacenamiento, que no se están usando. Es una protección real y útil. También es limitada. La sección 11 de nuestro documento de seguridad enumera lo que queda fuera. En palabras sencillas:
- Un teléfono comprometido mientras la bóveda está abierta. Para mostrarte una foto, la app tiene que descifrarla. Así que la clave y la foto legible están en memoria. Cualquier cosa que se ejecute dentro de la app en ese momento puede llegar a las dos. Ningún cifrado a nivel de app arregla un teléfono comprometido.
- Cualquiera que tenga tu contraseña. El cifrado no puede distinguir a quien la creó de alguien que vio cómo la escribía, o a quien se la dijeron.
- Capturas de pantalla, grabación de pantalla y miradas por encima del hombro. Lo que está en pantalla ya se ha descifrado. Esto queda fuera de lo que cubre el cifrado.
- Copias que hiciste en otros sitios. El original que sigue en tu carrete, la versión que enviaste en un mensaje, la copia de seguridad en la nube hecha antes de moverla. Cifrar una copia no afecta a las demás.
- El hecho de que la app existe. El cifrado oculta el contenido. No oculta que hay algo que ocultar.
El motivo de decir todo esto en una página que, por lo demás, trata de lo buenas que son las piezas: en un fallo real, el método de cifrado casi nunca es lo que falló. Suele ser una de las cinco cosas anteriores.
9. Sobre el «grado militar»
La expresión no tiene ningún significado técnico. Suele referirse a AES, que es un estándar público que cualquiera puede usar y no está reservado al ejército. Lo usan todos los grandes sistemas operativos, navegadores y apps de mensajería.
El problema no es que la expresión sea falsa. Es que no promete nada. No nombra ningún método, ninguna forma de usarlo, ningún tamaño de clave ni ningún proceso para convertir una contraseña en una clave. Así que una app que cifra todos los archivos puede usarla con verdad, y también una que solo cifra su configuración.
Esto no es una queja sobre la expresión en sí. Una ficha puede usarla y aun así decirte algo. Lo que hace útil una afirmación para alguien que intenta comprobarla es lo que viene después: el método, el modo, el proceso de la clave, el número de rondas y qué se cubre. Una ficha que se queda en la expresión no ha prometido nada. Una que continúa y nombra esas cosas se puede comprobar, empiece como empiece.
10. Preguntas frecuentes
¿Qué significa AES-256-GCM?
AES es un método de cifrado publicado. AES-256 es la versión con una clave de 256 bits. GCM es una forma de usarlo que además comprueba que los datos no se han manipulado. Esa comprobación es la parte que más importa en el día a día. Un archivo que se ha alterado no se abre, en lugar de abrirse como datos erróneos sin avisar.
¿Qué diferencia hay entre AES-256 y AES-256-GCM?
El segundo nombra cómo se usa el método, no solo el método. GCM añade una comprobación contra manipulaciones, de modo que los datos alterados se detectan al abrirlos, en lugar de devolverse erróneos sin avisar.
¿Por qué las apps de bóveda de fotos usan 600.000 rondas de PBKDF2?
Una contraseña es corta y se puede adivinar. Una clave de cifrado no. Así que la contraseña tiene que convertirse en una clave mediante un proceso lento a propósito. Cada ronda añade trabajo a cada intento de un atacante. 600.000 rondas es la cifra que recomienda la OWASP Password Storage Cheat Sheet para este método, PBKDF2 con HMAC-SHA-256.
¿Es seguro el cifrado AES-256?
AES-256 es un estándar público. Los expertos lo han estudiado durante más de veinte años y no han encontrado ninguna forma práctica de romper el método completo. En las apps reales, el método rara vez es el punto débil. Un error en cómo se usa, una contraseña fácil de adivinar o que alguien acceda al teléfono mientras está desbloqueado son problemas más probables.
¿Es mejor AES-256 que AES-128?
La clave más grande da más margen. Los dos se consideran seguros frente a probar todas las claves con los métodos y el hardware actuales. En la práctica, es muy poco probable que elegir uno u otro decida si una app resiste.
¿Qué significa «cifrado de grado militar»?
No tiene ningún significado técnico. Suele referirse a AES, que es un estándar público que cualquiera puede usar y no está reservado al ejército. Como la expresión no nombra ningún método, ningún modo ni ningún tamaño de clave, puede usarla una app que lo cifra todo y también una que no cifra casi nada.
¿Pueden las computadoras cuánticas romper AES-256?
El atajo cuántico conocido, el algoritmo de Grover, reduce aproximadamente a la mitad la fuerza de una clave como esta. Para una clave de 256 bits eso sigue dejando un margen muy grande. Es uno de los motivos por los que las claves de 256 bits se consideran una opción sensata a largo plazo. El tipo de cifrado que se usa para intercambiar claves por internet tiene un problema cuántico mucho mayor que AES.
¿Con 600.000 rondas el desbloqueo es lento?
Tarda alrededor de un segundo en un iPhone moderno, una vez por desbloqueo. Esa asimetría es la idea: apenas se nota hecho una vez, y es demoledor hecho millones de veces.
¿Más iteraciones significan que puedo usar una contraseña más débil?
No, y es el malentendido más habitual. Más rondas hacen que cada intento cueste más. No reducen cuántos intentos necesita una contraseña débil. Una contraseña corta sigue siendo débil.
Fuentes
- OWASP Password Storage Cheat Sheet, sobre los factores de trabajo de PBKDF2
- NIST FIPS 197, el estándar de cifrado avanzado (Advanced Encryption Standard)
- Documento de seguridad de Obscura Photo Vault, secciones 2 a 4, sobre primitivas y jerarquía de claves
- Documento de seguridad, sección 11, sobre lo que queda fuera del modelo de amenazas
Obscura Photo Vault
Una bóveda de fotos cifrada para iPhone. Las fotos y los videos se cifran en tu dispositivo con AES-256-GCM. No hay cuentas, ni servidores, ni analíticas, y la app no necesita conexión a la red. Si olvidas tu contraseña, nadie puede recuperar el contenido, ni siquiera nosotros.
Ver en el App Store →