ANDROID: block: add basic hardware-wrapped key support
To prevent keys from being compromised if an attacker acquires read access to kernel memory, some inline encryption hardware can accept keys which are wrapped by a per-boot hardware-internal key. This avoids needing to keep the plaintext keys in kernel memory, without restricting the number of keys that can be used. Such keys can be initially generated either by software (in which case they must be imported to hardware to be wrapped) or directly by the hardware. There is also a mechanism to derive a "software secret" for cryptographic tasks that can't be handled by inline encryption. To support this hardware, allow struct blk_crypto_key to represent a hardware-wrapped key as an alternative to a standard key, and make drivers set flags in struct blk_crypto_profile to indicate which types of keys they support. Also add the derive_sw_secret() low-level operation, which drivers supporting wrapped keys must implement. For more information, see the detailed documentation which this patch adds to Documentation/block/inline-encryption.rst. This is a reworked version of a patch which was temporily reverted by https://android-review.googlesource.com/c/kernel/common/+/1867367, and which originated from several ANDROID patches that were consolidated by https://android-review.googlesource.com/c/kernel/common-patches/+/1350782. This version of the patch matches the patch in the below "Link:" tag that was sent upstream as an RFC. However, due to its history as ANDROID, it remains tagged as ANDROID rather than FROMLIST. Bug: 160883801 Link: https://lore.kernel.org/r/20211021181608.54127-2-ebiggers@kernel.org Change-Id: I4d18c261c279d606457b33374234c0a037e1d45a Signed-off-by:Eric Biggers <ebiggers@google.com>
Loading
Please sign in to comment