|
|
## 9.9\. Data Storage Encryption
|
|
|
|
|
|
All devices MUST meet the requirements of section 9.9.1.
|
|
|
Devices which launched on an API level earlier than that of this document are
|
|
|
exempted from the requirements of sections 9.9.2 and 9.9.3; instead they
|
|
|
MUST meet the requirements in section 9.9 of the Android Compatibility
|
|
|
Definition document corresponding to the API level on which the device launched.
|
|
|
|
|
|
### 9.9.1\. Direct Boot
|
|
|
|
|
|
Device implementations:
|
|
|
|
|
|
* [C-0-1] MUST implement the [Direct Boot mode](
|
|
|
http://developer.android.com/preview/features/direct-boot.html) APIs even if
|
|
|
they do not support Storage Encryption.
|
|
|
|
|
|
* [C-0-2] The [`ACTION_LOCKED_BOOT_COMPLETED`](
|
|
|
https://developer.android.com/reference/android/content/Intent.html#ACTION_LOCKED_BOOT_COMPLETED)
|
|
|
and [`ACTION_USER_UNLOCKED`](https://developer.android.com/reference/android/content/Intent.html#ACTION_USER_UNLOCKED)
|
|
|
Intents MUST still be broadcast to signal Direct Boot aware applications that
|
|
|
Device Encrypted (DE) and Credential Encrypted (CE) storage locations are
|
|
|
available for user.
|
|
|
|
|
|
### 9.9.2\. Encryption requirements
|
|
|
|
|
|
Device implementations:
|
|
|
|
|
|
* [C-0-1] MUST encrypt the application private
|
|
|
data (`/data` partition), as well as the application shared storage partition
|
|
|
(`/sdcard` partition) if it is a permanent, non-removable part of the device.
|
|
|
* [C-0-2] MUST enable the data storage encryption by default at the time
|
|
|
the user has completed the out-of-box setup experience.
|
|
|
* [C-0-3] MUST meet the above data storage encryption
|
|
|
requirement via implementing [File Based Encryption](
|
|
|
https://source.android.com/security/encryption/file-based.html) (FBE) and
|
|
|
[Metadata Encryption](https://source.android.com/security/encryption/metadata).
|
|
|
|
|
|
### 9.9.3\. Encryption Methods
|
|
|
|
|
|
If device implementations are encrypted, they:
|
|
|
|
|
|
* [C-1-1] MUST boot up without challenging the user for credentials and
|
|
|
allow Direct Boot aware apps to access to the Device Encrypted (DE) storage
|
|
|
after the `ACTION_LOCKED_BOOT_COMPLETED` message is broadcasted.
|
|
|
* [C-1-2] MUST only allow access to Credential Encrypted (CE) storage after
|
|
|
the user has unlocked the device by supplying their credentials
|
|
|
(eg. passcode, pin, pattern or fingerprint) and the `ACTION_USER_UNLOCKED`
|
|
|
message is broadcasted.
|
|
|
* [C-1-13] MUST NOT offer any method to unlock the CE protected storage
|
|
|
without either the user-supplied credentials, a registered escrow key or a
|
|
|
resume on reboot implementation meeting the requirements in
|
|
|
[section 9.9.4](#9_9_4_resume_on_reboot).
|
|
|
* [C-1-4] MUST use Verified Boot.
|
|
|
* [C-1-5] MUST encrypt file contents and filesystem metadata using
|
|
|
AES-256-XTS or Adiantum. AES-256-XTS refers to the Advanced Encryption Standard
|
|
|
with a 256-bit cipher key length, operated in XTS mode; the full length of the
|
|
|
key is 512 bits. Adiantum refers to Adiantum-XChaCha12-AES, as specified at
|
|
|
https://github.com/google/adiantum. Filesystem metadata is data such as file
|
|
|
sizes, ownership, modes, and extended attributes (xattrs).
|
|
|
* [C-1-6] MUST encrypt file names using AES-256-CBC-CTS
|
|
|
or Adiantum.
|
|
|
* [C-1-12] If the device has Advanced Encryption Standard (AES)
|
|
|
instructions (such as ARMv8 Cryptography Extensions on ARM-based devices, or
|
|
|
AES-NI on x86-based devices) then the AES-based options above for file name,
|
|
|
file contents, and filesystem metadata encryption MUST be used, not Adiantum.
|
|
|
* [C-1-13] MUST use a cryptographically strong and non-reversible key
|
|
|
derivation function (e.g. HKDF-SHA512) to derive any needed subkeys (e.g.
|
|
|
per-file keys) from the CE and DE keys. "Cryptographically strong and
|
|
|
non-reversible" means that the key derivation function has a security strength
|
|
|
of at least 256 bits and behaves as a [pseudorandom function
|
|
|
family](https://en.wikipedia.org/w/index.php?title=Pseudorandom_function_family&oldid=928163524)
|
|
|
over its inputs.
|
|
|
* [C-1-14] MUST NOT use the same File Based Encryption (FBE) keys or subkeys
|
|
|
for different cryptographic purposes (e.g. for both encryption and key
|
|
|
derivation, or for two different encryption algorithms).
|
|
|
|
|
|
* The keys protecting CE and DE storage areas and filesystem metadata:
|
|
|
|
|
|
* [C-1-7] MUST be cryptographically bound to a hardware-backed Keystore.
|
|
|
This keystore MUST be bound to Verified Boot and the device's hardware
|
|
|
root of trust.
|
|
|
* [C-1-8] CE keys MUST be bound to a user's lock screen credentials.
|
|
|
* [C-1-9] CE keys MUST be bound to a default passcode when the user has
|
|
|
not specified lock screen credentials.
|
|
|
* [C-1-10] MUST be unique and distinct, in other words no user's CE or DE
|
|
|
key matches any other user's CE or DE keys.
|
|
|
* [C-1-11] MUST use the mandatorily supported ciphers, key lengths and
|
|
|
modes.
|
|
|
|
|
|
* SHOULD make preinstalled essential apps (e.g. Alarm, Phone, Messenger)
|
|
|
Direct Boot aware.
|
|
|
|
|
|
The upstream Android Open Source project provides a preferred implementation of
|
|
|
File Based Encryption based on the Linux kernel "fscrypt" encryption feature,
|
|
|
and of Metadata Encryption based on the Linux kernel "dm-default-key" feature.
|
|
|
|
|
|
### 9.9.4\. Resume on Reboot
|
|
|
|
|
|
Resume on Reboot allows unlocking the CE storage of all apps, including those
|
|
|
that do not yet support Direct Boot, after a reboot initiated by an OTA. This
|
|
|
feature enables users to receive notifications from installed apps after the
|
|
|
reboot.
|
|
|
|
|
|
An implementation of Resume-on-Reboot must continue to ensure that when a
|
|
|
device falls into an attacker’s hands, it is extremely difficult for that
|
|
|
attacker to recover the user’s CE-encrypted data, even if the device is powered
|
|
|
on, CE storage is unlocked, and the user has unlocked the device after receiving
|
|
|
an OTA. For insider attack resistance, we also assume the attacker gains access
|
|
|
to broadcast cryptographic signing keys.
|
|
|
|
|
|
Specifically:
|
|
|
|
|
|
* [C-0-1] CE storage MUST NOT be readable even for the attacker who physically has
|
|
|
the device and then has these capabilities and limitations:
|
|
|
|
|
|
* Can use the signing key of any vendor or company to sign arbitrary
|
|
|
messages.
|
|
|
* Can cause an OTA to be received by the device.
|
|
|
* Can modify the operation of any hardware (AP, flash etc) except as
|
|
|
detailed below, but such modification involves a delay of at least an
|
|
|
hour and a power cycle that destroys RAM contents.
|
|
|
* Cannot modify the operation of tamper-resistant hardware (eg Titan M).
|
|
|
* Cannot read the RAM of the live device.
|
|
|
* Cannot obtain the user’s credential (PIN, pattern, password) or
|
|
|
otherwise cause it to be entered.
|
|
|
|
|
|
By way of example, a device implementation that implements and complies with all
|
|
|
of the descriptions found [here](https://source.android.com/devices/tech/ota/resume-on-reboot)
|
|
|
will be compliant with [C-0-1].
|