mirror of
https://github.com/torvalds/linux.git
synced 2024-12-18 00:53:40 +00:00
cd3bc044af
For availability and performance reasons master keys often need to be released outside of a Key Management Service (KMS) to clients. It would be beneficial to provide a mechanism where the wrapping/unwrapping of data encryption keys (DEKs) is not dependent on a remote call at runtime yet security is not (or only minimally) compromised. Master keys could be securely stored in the Kernel and be used to wrap/unwrap keys from Userspace. The encrypted.c class supports instantiation of encrypted keys with either an already-encrypted key material, or by generating new key material based on random numbers. This patch defines a new datablob format: [<format>] <master-key name> <decrypted data length> <decrypted data> that allows to inject and encrypt user-provided decrypted data. The decrypted data must be hex-ascii encoded. Signed-off-by: Yael Tzur <yaelt@google.com> Reviewed-by: Mimi Zohar <zohar@linux.ibm.com> Reviewed-by: Sumit Garg <sumit.garg@linaro.org> Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
140 lines
4.9 KiB
Plaintext
140 lines
4.9 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
# Key management configuration
|
|
#
|
|
|
|
config KEYS
|
|
bool "Enable access key retention support"
|
|
select ASSOCIATIVE_ARRAY
|
|
help
|
|
This option provides support for retaining authentication tokens and
|
|
access keys in the kernel.
|
|
|
|
It also includes provision of methods by which such keys might be
|
|
associated with a process so that network filesystems, encryption
|
|
support and the like can find them.
|
|
|
|
Furthermore, a special type of key is available that acts as keyring:
|
|
a searchable sequence of keys. Each process is equipped with access
|
|
to five standard keyrings: UID-specific, GID-specific, session,
|
|
process and thread.
|
|
|
|
If you are unsure as to whether this is required, answer N.
|
|
|
|
config KEYS_REQUEST_CACHE
|
|
bool "Enable temporary caching of the last request_key() result"
|
|
depends on KEYS
|
|
help
|
|
This option causes the result of the last successful request_key()
|
|
call that didn't upcall to the kernel to be cached temporarily in the
|
|
task_struct. The cache is cleared by exit and just prior to the
|
|
resumption of userspace.
|
|
|
|
This allows the key used for multiple step processes where each step
|
|
wants to request a key that is likely the same as the one requested
|
|
by the last step to save on the searching.
|
|
|
|
An example of such a process is a pathwalk through a network
|
|
filesystem in which each method needs to request an authentication
|
|
key. Pathwalk will call multiple methods for each dentry traversed
|
|
(permission, d_revalidate, lookup, getxattr, getacl, ...).
|
|
|
|
config PERSISTENT_KEYRINGS
|
|
bool "Enable register of persistent per-UID keyrings"
|
|
depends on KEYS
|
|
help
|
|
This option provides a register of persistent per-UID keyrings,
|
|
primarily aimed at Kerberos key storage. The keyrings are persistent
|
|
in the sense that they stay around after all processes of that UID
|
|
have exited, not that they survive the machine being rebooted.
|
|
|
|
A particular keyring may be accessed by either the user whose keyring
|
|
it is or by a process with administrative privileges. The active
|
|
LSMs gets to rule on which admin-level processes get to access the
|
|
cache.
|
|
|
|
Keyrings are created and added into the register upon demand and get
|
|
removed if they expire (a default timeout is set upon creation).
|
|
|
|
config BIG_KEYS
|
|
bool "Large payload keys"
|
|
depends on KEYS
|
|
depends on TMPFS
|
|
depends on CRYPTO_LIB_CHACHA20POLY1305 = y
|
|
help
|
|
This option provides support for holding large keys within the kernel
|
|
(for example Kerberos ticket caches). The data may be stored out to
|
|
swapspace by tmpfs.
|
|
|
|
If you are unsure as to whether this is required, answer N.
|
|
|
|
config TRUSTED_KEYS
|
|
tristate "TRUSTED KEYS"
|
|
depends on KEYS && TCG_TPM
|
|
select CRYPTO
|
|
select CRYPTO_HMAC
|
|
select CRYPTO_SHA1
|
|
select CRYPTO_HASH_INFO
|
|
select ASN1_ENCODER
|
|
select OID_REGISTRY
|
|
select ASN1
|
|
help
|
|
This option provides support for creating, sealing, and unsealing
|
|
keys in the kernel. Trusted keys are random number symmetric keys,
|
|
generated and RSA-sealed by the TPM. The TPM only unseals the keys,
|
|
if the boot PCRs and other criteria match. Userspace will only ever
|
|
see encrypted blobs.
|
|
|
|
If you are unsure as to whether this is required, answer N.
|
|
|
|
config ENCRYPTED_KEYS
|
|
tristate "ENCRYPTED KEYS"
|
|
depends on KEYS
|
|
select CRYPTO
|
|
select CRYPTO_HMAC
|
|
select CRYPTO_AES
|
|
select CRYPTO_CBC
|
|
select CRYPTO_SHA256
|
|
select CRYPTO_RNG
|
|
help
|
|
This option provides support for create/encrypting/decrypting keys
|
|
in the kernel. Encrypted keys are instantiated using kernel
|
|
generated random numbers or provided decrypted data, and are
|
|
encrypted/decrypted with a 'master' symmetric key. The 'master'
|
|
key can be either a trusted-key or user-key type. Only encrypted
|
|
blobs are ever output to Userspace.
|
|
|
|
If you are unsure as to whether this is required, answer N.
|
|
|
|
config USER_DECRYPTED_DATA
|
|
bool "Allow encrypted keys with user decrypted data"
|
|
depends on ENCRYPTED_KEYS
|
|
help
|
|
This option provides support for instantiating encrypted keys using
|
|
user-provided decrypted data. The decrypted data must be hex-ascii
|
|
encoded.
|
|
|
|
If you are unsure as to whether this is required, answer N.
|
|
|
|
config KEY_DH_OPERATIONS
|
|
bool "Diffie-Hellman operations on retained keys"
|
|
depends on KEYS
|
|
select CRYPTO
|
|
select CRYPTO_KDF800108_CTR
|
|
select CRYPTO_DH
|
|
help
|
|
This option provides support for calculating Diffie-Hellman
|
|
public keys and shared secrets using values stored as keys
|
|
in the kernel.
|
|
|
|
If you are unsure as to whether this is required, answer N.
|
|
|
|
config KEY_NOTIFICATIONS
|
|
bool "Provide key/keyring change notifications"
|
|
depends on KEYS && WATCH_QUEUE
|
|
help
|
|
This option provides support for getting change notifications
|
|
on keys and keyrings on which the caller has View permission.
|
|
This makes use of pipes to handle the notification buffer and
|
|
provides KEYCTL_WATCH_KEY to enable/disable watches.
|