7 votos

¿Qué es una "contraseña sintética" y cómo se utiliza en Android?

En un Pixel de primera generación que ejecuta Pie, en locksettings.db hay un campo llamado sp-handle que contiene un valor de 64 bits. sp es una abreviatura de "contraseña sintética". Bajo /data/system_de/0/spblob hay tres archivos:

  • 0000000000000000.handle
  • XXXXXXXXXXXXXXXX.pwd
  • XXXXXXXXXXXXXXXX.secdis
  • XXXXXXXXXXXXXXXX.spblob

XXXXXXXXXXXXXXXX es la representación hexadecimal en minúsculas del valor de 64 bits mencionado. (En realidad tengo varios conjuntos de pwd/secdis/spblob (algunos sin el archivo spblob o el archivo secdis—no puedo recordar cuál) presumiblemente debido a mis intentos de hacer que TWRP desencripte mi Pixel). También hay archivos bajo /data/misc/keystore/user_0 llamados 1000_USRSKEY_synthetic_password_XXXXXXXXXXXXXXXX y .1000_chr_USRSKEY_synthetic_password_XXXXXXXXXXXXXXXX.

Estas "contraseñas sintéticas" se mencionan y se utilizan en TWRP y SyntheticPasswordManager.java. Se utilizan en la desencriptación, pero no puedo decir cómo se utilizan en ella o si también se utilizan en la autenticación de contraseñas. ¿Se utilizan para desencriptar /data/misc/vold/user_keys/ce/0/current/encrypted_key (que me han dicho que se utiliza en el cifrado basado en archivos)? ¿Cuál es el propósito de los archivos .pwd, .secdis y .spblob? ¿Se utilizan los archivos gatekeeper.*.key en la obtención de contraseñas sintéticas?

Actualización

Este documento de Qualcomm detalla más sobre las "contraseñas sintéticas" que el código fuente, pero no responde las preguntas más importantes como:

  • ¿Cuál es el propósito y qué hay dentro de XXXXXXXXXXXXXXXX.spblob?
  • ¿Cuál es el propósito y qué hay dentro de XXXXXXXXXXXXXXXX.pwd?
  • ¿Cuál es el propósito y qué hay dentro de XXXXXXXXXXXXXXXX.secdis?
  • ¿Se utiliza el token de autenticación en la desencriptación de la clave CE?

0 votos

@Robert Es, pero no está claro si se usan tokens de autenticación para descifrar algo.

5voto

Paul Jackson Puntos 6

Primero, necesitas comprender que en las contraseñas sintéticas participan dos procesos de inscripción de guardia de seguridad.

Aquí está el proceso:

  1. Generar una contraseña sintética, que es solo un número aleatorio
  2. Usar una contraseña real para inscribir un ID falso y obtener el SID (secure_id)
  3. Usar el almacén de claves para generar una clave AES, vincularla al SID y usarla para cifrar una contraseña sintética
  4. Usar una contraseña sintética para inscribir al usuario real.

Por lo tanto, verás que, para desbloquear a un usuario real, necesitas conocer una contraseña sintética. Sin embargo, está cifrada por el almacén de claves, por lo que primero necesitas la contraseña real para desbloquear el almacén de claves.

Para entenderlo, primero necesitas comprender cómo trabaja el guardia de seguridad (por ejemplo, ¿Qué es secure_id? ¿Cómo funciona?). Eso es otro tema.

  • 00000000000.handle: valor de retorno del guardia de seguridad al enrolar por primera vez con la contraseña derivada de la contraseña sintética.
  • handle.pwd: segundo guardia de seguridad enrolado por contraseña real con un ID de usuario falso (por ejemplo, user_id + 10000).
  • handle.secdis: En realidad es un número aleatorio. Utilizado para cifrar la contraseña sintética.
  • handle.spblob: contraseña sintética cifrada
  • /data/misc/keystore/user_0/XXX: clave del almacén de claves. Utilizado para cifrar contraseñas sintéticas.

1 votos

¿Dónde puedo aprender más sobre esto? La documentación fuente de Android en FBE carece de mucha explicación técnica.

1 votos

Bueno, lo aprendí completamente leyendo el código fuente y el proceso de depuración dinámica del marco. ¡Tomó mucho tiempo :)

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X