Fix handling of user password changes.
A bug introduced in a patch intended to upgrade keystore master keys to use AES-256 and SHA-256 instead of AES-128 and SHA1 causes the newly-updated master key to fail to be retrievable ever again. Making this worse, after five successive failures, keystore decided that all the data is bad and wipes the user's keystore. This problem happens on every password change if the master key is 128 bits. Luckily, since the introduction of synthetic passwords to support escrow tokens, the password presented to keystore is the synthetic password, which never changes. So this problem only crops up in devices that did not have synthetic passwords (launched with Android N or earlier), were not upgraded to O DR1 (when synthetic passwords were enabled by default), were never factory reset or had their password removed and re-added during all of that time and were then upgraded to P or Q, when the master key upgrade code was present. This CL fixes the upgrade process so that updated master keys can be used. It doesn't change the key size, the keys stay 128 bits, but now they're readable and usable. Factory resetting allows an entirely new master key to be generated, which will be AES-256. Note that the keystore master key is not really essential to the security of Keystore keys. They're also encrypted by the secure world (TEE or SE), which is their primary protection. The master key just provides a cryptographic dependency on the user's password, so that in the event of a secure world break the attacker still has to brute force the user's password to recover the key material, or use of the protected keys. Bug: 129970023 Test: Manual Change-Id: I8ce2bb2359cf822039c137bb6bb1fc225da47c29
Loading