8 votes

Qu'est-ce qu'un "mot de passe synthétique" et comment est-il utilisé par Android ?

Sur un Pixel de première génération qui exécute Pie, en locksettings.db il y a un champ nommé sp-handle qui contient une valeur de 64 bits. sp est l'abréviation de "mot de passe synthétique". Sous /data/system_de/0/spblob il y a trois fichiers :

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

XXXXXXXXXXXXXXXX est la représentation hexadécimale minuscule de la valeur 64 bits susmentionnée. (En fait, j'ai plusieurs jeux de pwd / secdis / spblob (certains manquent le spblob ou le secdis je ne me souviens plus lequel) vraisemblablement dû à mes tentatives pour que TWRP décrypte mon Pixel). Il y a aussi des fichiers sous /data/misc/keystore/user_0 nommé 1000_USRSKEY_synthetic_password_XXXXXXXXXXXXXXXX y .1000_chr_USRSKEY_synthetic_password_XXXXXXXXXXXXXXXX .

Ces "mots de passe synthétiques" sont mentionnés et utilisés dans les documents suivants TWRP y SyntheticPasswordManager.java . Ils sont utilisés dans le décryptage, mais je ne peux pas dire comment ils y sont utilisés ou s'ils sont également utilisés dans l'authentification par mot de passe. Sont-ils utilisés pour décrypter /data/misc/vold/user_keys/ce/0/current/encrypted_key (qui, m'a-t-on dit, est utilisé pour le cryptage des fichiers) ? Quel est l'objectif de la .pwd , .secdis y .spblob fichiers ? Les fichiers sont-ils gatekeeper.*.key utilisé pour dériver des mots de passe synthétiques ?

Mise à jour

Este Le document de Qualcomm donne plus de détails sur les "mots de passe synthétiques" que le code source, mais il ne répond pas aux questions les plus importantes, comme par exemple

  • Quel est le but de et ce qui se trouve à l'intérieur de XXXXXXXXXXXXXXXX.spblob ?
  • Quel est le but de et ce qui se trouve à l'intérieur de XXXXXXXXXXXXXXXX.pwd ? Quel est le but de et ce qui se trouve à l'intérieur de XXXXXXXXXXXXXXXX.pwd ?
  • Le jeton d'authentification est-il utilisé pour décrypter la clé CE ?

0 votes

@Robert C'est le cas, mais il n'est pas assez clair si les jetons d'authentification sont utilisés pour décrypter quoi que ce soit.

6voto

demonguy Points 121

Premier. Vous devez comprendre que deux processus d'inscription sont impliqués dans le processus de synthèse.

Voici le processus :

  1. générer un mot de passe synthétique, c'est juste un nombre aléatoire
  2. utiliser le vrai mot de passe pour enregistrer un faux identifiant et obtenir sid(secure_id)
  3. utiliser keystore pour générer une clé AES, et la lier à sid. et l'utiliser pour crypter le mot de passe synthétique
  4. utiliser un mot de passe synthétique pour inscrire le vrai user_id.

Vous voyez donc que pour débloquer l'utilisateur réel, vous devez connaître le mot de passe synthétique. Cependant, il est crypté par le keystore, donc vous avez besoin du mot de passe réel pour déverrouiller le keystore d'abord.

Pour le comprendre, vous devez d'abord comprendre le fonctionnement de gatekeeper (par exemple, qu'est-ce que secure_id ? comment fonctionne-t-il ?). C'est un autre sujet

00000000000.handle: return value of gatekeeper first enroll by synthetic password derived password.

handle.pwd: second gatekeeper enroll by real password with a fake userid (eg. user_id+10000)

handle.secdis: Actually a random number. used to encrypt synthetic password

handle.spblob: encrypted synthetic password

/data/misc/keystore/user_0/XXX : clé du keystore. utilisée pour crypter le mot de passe synthétique.

1 votes

Où puis-je en apprendre davantage à ce sujet ? La documentation source Android sur FBE manque d'explications techniques.

1 votes

Eh bien, je l'ai appris totalement à partir de la lecture du code source et du processus de débogage dynamique du framework. Cela a pris beaucoup de temps :)

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X