What is a "synthetic password" and how is it used by Android?
First. You need to understand, two gatekeeper enroll processes are involved in synthetic passowrd.

Here is  the process:


generate synthetic password, it's just a random number
use real password to enroll a fake id. and get sid(secure_id)
use keystore to generate an AES key, and bound it to sid. and use it to encrypt synthetic password
use synthetic password to enroll the real user_id.


So you will see, in order to unlock real user, you need to know synthetic passowrd. However it's encrypted by keystore, so you need real password to unlock the keystore first.

To understand it , you need to first understand how gatekeeper works (eg. what is secure_id? how it works?). That's another topic

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: keystore key. used for encrypting synthetic password.