On a first-generation Pixel that is running Pie, in locksettings.db
there is a field named sp-handle
that contains a 64-bit value. sp
is an abbreviation for "synthetic password". Under /data/system_de/0/spblob
there are three files:
0000000000000000.handle
XXXXXXXXXXXXXXXX.pwd
XXXXXXXXXXXXXXXX.secdis
XXXXXXXXXXXXXXXX.spblob
XXXXXXXXXXXXXXXX
is the lowercase hexadecimal representation of the aforementioned 64-bit value. (I actually have several sets of pwd
/secdis
/spblob
(some missing the spblob
or the secdis
file—I cannot remember which) presumably due to my attempts to get TWRP to decrypt my Pixel.) There are also files under /data/misc/keystore/user_0
named 1000_USRSKEY_synthetic_password_XXXXXXXXXXXXXXXX
and .1000_chr_USRSKEY_synthetic_password_XXXXXXXXXXXXXXXX
.
These "synthetic passwords" are mentioned and used in TWRP and SyntheticPasswordManager.java
. They are used in decryption, but I can't tell how they are used in it or if they are also used in password authentication. Are they used to decrypt /data/misc/vold/user_keys/ce/0/current/encrypted_key
(which I'm told is used in file-based encryption)? What are the purpose of the .pwd
, .secdis
, and .spblob
files? Are the files gatekeeper.*.key
used in deriving synthetic passwords?
Update
This paper from Qualcomm goes into greater detail on "synthetic passwords" than the source code, but it doesn't answer the more important questions like:
- What is the purpose of and what is inside of
XXXXXXXXXXXXXXXX.spblob
? - What is the purpose of and what is inside of
XXXXXXXXXXXXXXXX.pwd
? What is the purpose of and what is inside ofXXXXXXXXXXXXXXXX.secdis
? - Is the authentication token used in decrypting the CE key?