blob: 3d55d8587c5900b0511abaa205dd499a2bb83520 [file] [log] [blame] [view]
# Encrypted Storage
Since Android U, AVF (with Microdroid) supports Encrypted Storage which is the storage solution
in a VM. Within a VM, this is mounted at a path that can be retrieved via the [`AVmPayload_getEncryptedStoragePath()`][vm_payload_api].
Any data written in encrypted storage is persisted and is available next time the VM is run.
Encrypted Storage is backed by a para-virtualized block device on the guest which is further
backed by a disk image file in the host. The block device is formatted with an ext4 filesystem.
## Security
Encrypted Storage uses block level encryption layer (Device-Mapper's "crypt" target) using a key
derived from the VM secret and AES256 cipher with HCTR2 mode. The Block level encryption ensures
the filesystem is also encrypted.
### Integrity
Encrypted Storage does not offer the level of integrity offered by primitives such as
authenticated encryption/dm-integrity/RPMB. That level of integrity comes with substantial
disk/performance overhead. Instead, it uses HCTR2 which is a super-pseudorandom
permutation encryption mode, this offers better resilience against malleability attacks (than other
modes such as XTS).
## Encrypted Storage and Updatable VMs
With [Updatable VM feature][updatable_vm] shipping in Android V, Encrypted Storage can be accessed
even after OTA/updates of boot images and apks. This requires chipsets to support [Secretkeeper HAL][sk_hal].
[vm_payload_api]: https://cs.android.com/android/platform/superproject/main/+/main:packages/modules/Virtualization/vm_payload/include/vm_payload.h;l=2?q=vm_payload%2Finclude%2Fvm_payload.h&ss=android%2Fplatform%2Fsuperproject%2Fmain
[updatable_vm]: https://cs.android.com/android/platform/superproject/main/+/main:packages/modules/Virtualization/docs/updatable_vm.md
[sk_hal]: https://cs.android.com/android/platform/superproject/main/+/main:system/secretkeeper/README.md