block: Keyslot Manager for Inline Encryption
authorSatya Tangirala <satyat@google.com>
Thu, 14 May 2020 00:37:17 +0000 (00:37 +0000)
committerJens Axboe <axboe@kernel.dk>
Thu, 14 May 2020 15:46:54 +0000 (09:46 -0600)
commit1b2628397058ebce7277480960b29c788138de90
treec758aeb1f7e2331803968a6bafd4ab7a987d3e53
parent54b259f68de59920714588cb52c4a262cb712f98
block: Keyslot Manager for Inline Encryption

Inline Encryption hardware allows software to specify an encryption context
(an encryption key, crypto algorithm, data unit num, data unit size) along
with a data transfer request to a storage device, and the inline encryption
hardware will use that context to en/decrypt the data. The inline
encryption hardware is part of the storage device, and it conceptually sits
on the data path between system memory and the storage device.

Inline Encryption hardware implementations often function around the
concept of "keyslots". These implementations often have a limited number
of "keyslots", each of which can hold a key (we say that a key can be
"programmed" into a keyslot). Requests made to the storage device may have
a keyslot and a data unit number associated with them, and the inline
encryption hardware will en/decrypt the data in the requests using the key
programmed into that associated keyslot and the data unit number specified
with the request.

As keyslots are limited, and programming keys may be expensive in many
implementations, and multiple requests may use exactly the same encryption
contexts, we introduce a Keyslot Manager to efficiently manage keyslots.

We also introduce a blk_crypto_key, which will represent the key that's
programmed into keyslots managed by keyslot managers. The keyslot manager
also functions as the interface that upper layers will use to program keys
into inline encryption hardware. For more information on the Keyslot
Manager, refer to documentation found in block/keyslot-manager.c and
linux/keyslot-manager.h.

Co-developed-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Satya Tangirala <satyat@google.com>
Reviewed-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/Kconfig
block/Makefile
block/keyslot-manager.c [new file with mode: 0644]
include/linux/blk-crypto.h [new file with mode: 0644]
include/linux/blkdev.h
include/linux/keyslot-manager.h [new file with mode: 0644]