Vessum › Blog › Contraseñas señuelo, y por qué la mayoría no funciona
Contraseñas señuelo, y por qué la mayoría no funciona
Una segunda contraseña que abre otra galería existe desde hace una década. La mayoría de las implementaciones suspende la única prueba que importa. Aquí está la prueba, y cómo aplicarla.
"Introduce una segunda contraseña y verás otro contenido" no es una idea nueva. Las apps de caja fuerte para fotos lo llevan ofreciendo más de diez años, y hoy hay decenas en el App Store que lo hacen.
La mayoría falla justo en el único momento en que importaría. Merece la pena entender por qué, porque el fallo no tiene que ver con la fuerza del cifrado. Tiene que ver con algo mucho más corriente.
La prueba
Imagina que la persona a la que le das el código ya ha usado esta app. La tiene en su propio teléfono, o ha leído sobre ella, o la ha visto en el dispositivo de otra persona.
Escribe el código que le diste. La app se abre.
¿Hay algo visible que le diga que esto es el señuelo?
Esa es toda la prueba. Todo lo que sigue trata de las distintas maneras en que una app la suspende.
Fallo uno: el señuelo es otra pantalla
La implementación habitual es una bifurcación en la interfaz. La app guarda dos contraseñas, compara lo que escribiste con ambas, y muestra la galería A o la galería B.
Esto tiene dos problemas.
Ambas contraseñas existen en el dispositivo. Están en una base de datos, un archivo de preferencias o el llavero. Recupera el almacenamiento y recuperas las dos, y con ellas el dato de que había dos. Cifrar las fotos no ayuda, porque la app tiene que poder comprobar una contraseña que le dan, y eso significa que guardó algo con lo que compararla.
La base de datos dice que hay dos. Una columna llamada is_decoy, un vault_id con valor 2, un recuento de filas. Quien examina el almacenamiento de la app no necesita romper nada. Lo lee, y ahora sabe que debe seguir preguntando.
Fallo dos: se ve que el señuelo es un señuelo
Este es más sutil y, en la práctica, peor.
Muchas apps convierten el señuelo en una versión reducida de la caja fuerte real. La real tiene ajustes para crear y gestionar la segunda contraseña. El señuelo no, porque ¿para qué iba una caja fuerte falsa a crear cajas fuertes falsas?
El resultado es que al señuelo le falta una función que la real sí tiene. Cualquiera que haya visto la app la abre, echa un vistazo a los ajustes, ve una sección que debería estar y no está, y sabe en un segundo exactamente qué tiene delante.
En ese punto, quien entregó el código está peor que si nunca hubiera instalado la app. No ha protegido nada, y visiblemente lo ha intentado, que es un hecho mucho más interesante que cualquier cosa guardada dentro.
Fallo tres: la app se anuncia sola
Un icono con un candado. Un nombre con "Vault" o "Secret" dentro. Una ficha que promete esconder cosas de la gente.
Nada de esto es una debilidad criptográfica. Es simplemente un cartel en la puerta. La app no necesita ser encontrada y rota si se puede señalar y exigir.
Qué hace falta para aprobar
Tres propiedades, ninguna exótica.
Nada guardado con lo que comparar
El código no debe estar guardado en ningún sitio, de ninguna forma, ni siquiera como hash. Debe escribirse, usarse para derivar una clave, y olvidarse.
La consecuencia es severa y no negociable: un código olvidado no lo puede recuperar nadie, tampoco el desarrollador. Cualquier app que te ofrezca una opción de recuperación te está diciendo que guardó algo, y lo que guardó se le puede quitar.
Nada en el disco que cuente los espacios
Si el almacenamiento contiene tres bloques cifrados, quien examina sabe que hay tres cosas. La solución es que el almacenamiento tenga el mismo aspecto contenga un espacio, cinco, o ninguno.
El enfoque habitual es reservar todas las ranuras en el primer arranque, llenarlas todas con datos aleatorios, y rellenar cada una de las reales hasta exactamente el mismo tamaño. Los datos cifrados y los datos aleatorios de un buen generador vienen de la misma distribución. Sin la clave no hay nada que los separe.
Por eso estas apps no pueden mostrar una cifra de "espacio usado" que varíe. Todo número que se mueve es un número que filtra.
Todos los espacios idénticos
Esta es la que la mayoría de las implementaciones se salta, y es de lo que trata realmente la prueba de arriba.
El señuelo no puede ser una versión menor de la real. Mismos ajustes, mismas secciones en el mismo orden, mismas palabras, misma capacidad de crear espacios propios, mismos mensajes de error. No puede haber ninguna insignia que marque uno como el original, ni ninguna función que solo tenga el original.
El corolario es que no hay "cima". Un espacio debe listar los espacios que creó y nunca el espacio del que vino, para que quien abra uno no pueda saber si está en el primero o tres niveles más abajo.
Cómo comprobar una app tú mismo
No hace falta leer el código fuente de nadie. Cuatro preguntas te llevan casi hasta el final.
| Pregunta | Una mala respuesta suena así |
|---|---|
| ¿Qué pasa si olvido el código? | "Contacta con soporte" o "usa tu correo de recuperación" |
| ¿El señuelo tiene los mismos ajustes que la caja fuerte real? | "El señuelo es una vista simplificada" |
| ¿Dónde se guarda mi contenido? | "Con copia de seguridad segura en la nube" |
| ¿Qué hace borrar en realidad? | "Borra el archivo permanentemente" |
Esta última merece un comentario. El almacenamiento flash no sobrescribe honestamente en el sitio, así que frotar bytes es teatro. La respuesta más sólida es que borrar descarta la clave, lo que deja los bytes restantes permanentemente ilegibles y evita que el recuento de archivos baje de una forma que delate que se quitó algo.
Dónde está Vessum
Vessum se construyó alrededor de esta prueba, y es la razón de varias decisiones de diseño que de otro modo parecen raras.
Todos los espacios tienen los mismos ajustes y pueden crear espacios propios, anidados tan hondo como quieras. No hay espacio principal ni marca que señale uno como el original. El almacenamiento son veinticuatro ranuras de tamaño fijo, todas escritas con datos aleatorios en el primer arranque y todas llenas desde ese instante, de modo que una ranura con un espacio y una ranura sin nada son el mismo número de bytes de datos de alta entropía.
Y no hay recuperación de código, porque no hay nada guardado de lo que recuperarlo.
Hay un límite que decimos sin rodeos: que Vessum esté instalado no queda oculto y no puede quedarlo. Cualquiera que mire el teléfono ve la app y ve que guarda datos cifrados. Lo que queda oculto es cuántos espacios existen y qué hay en ellos.
Si quieres intentar distinguir tú mismo una ranura ocupada de una vacía, la página de inicio ejecuta la criptografía real en tu navegador y te invita a señalar qué ranuras contienen algo. Nadie lo hace mejor que el azar, que es justamente la idea.
Vessum
Fotos, documentos y notas detrás de más de un código. Cada uno abre un espacio distinto, y ninguno puede demostrar que los demás existen.
Descargar en el App Store