1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
6.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## 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 attackers hands, it is extremely difficult for that
attacker to recover the users 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 users 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].