diff options
author | Mimi Zohar <zohar@linux.vnet.ibm.com> | 2011-08-27 22:21:26 -0400 |
---|---|---|
committer | Mimi Zohar <zohar@linux.vnet.ibm.com> | 2011-09-14 15:23:49 -0400 |
commit | 982e617a313b57abee3bcfa53381c356d00fd64a (patch) | |
tree | ba23ab206aaff2331bca116cebd11ad4ef580c32 /security | |
parent | 61cf45d0199041df1a8ba334b6bf4a3a13b7f904 (diff) |
encrypted-keys: remove trusted-keys dependency
Encrypted keys are decrypted/encrypted using either a trusted-key or,
for those systems without a TPM, a user-defined key. This patch
removes the trusted-keys and TCG_TPM dependencies.
Signed-off-by: Mimi Zohar <zohar@us.ibm.com>
Diffstat (limited to 'security')
-rw-r--r-- | security/Kconfig | 4 | ||||
-rw-r--r-- | security/keys/encrypted-keys/Makefile | 1 | ||||
-rw-r--r-- | security/keys/encrypted-keys/encrypted.c | 35 | ||||
-rw-r--r-- | security/keys/encrypted-keys/encrypted.h | 11 | ||||
-rw-r--r-- | security/keys/encrypted-keys/masterkey_trusted.c | 44 |
5 files changed, 67 insertions, 28 deletions
diff --git a/security/Kconfig b/security/Kconfig index 22847a889081..51bd5a0b69ae 100644 --- a/security/Kconfig +++ b/security/Kconfig | |||
@@ -38,7 +38,9 @@ config TRUSTED_KEYS | |||
38 | 38 | ||
39 | config ENCRYPTED_KEYS | 39 | config ENCRYPTED_KEYS |
40 | tristate "ENCRYPTED KEYS" | 40 | tristate "ENCRYPTED KEYS" |
41 | depends on KEYS && TRUSTED_KEYS | 41 | depends on KEYS |
42 | select CRYPTO | ||
43 | select CRYPTO_HMAC | ||
42 | select CRYPTO_AES | 44 | select CRYPTO_AES |
43 | select CRYPTO_CBC | 45 | select CRYPTO_CBC |
44 | select CRYPTO_SHA256 | 46 | select CRYPTO_SHA256 |
diff --git a/security/keys/encrypted-keys/Makefile b/security/keys/encrypted-keys/Makefile index cbd3f8de37bb..6bc7a86d1027 100644 --- a/security/keys/encrypted-keys/Makefile +++ b/security/keys/encrypted-keys/Makefile | |||
@@ -3,3 +3,4 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | obj-$(CONFIG_ENCRYPTED_KEYS) += encrypted.o ecryptfs_format.o | 5 | obj-$(CONFIG_ENCRYPTED_KEYS) += encrypted.o ecryptfs_format.o |
6 | obj-$(CONFIG_TRUSTED_KEYS) += masterkey_trusted.o | ||
diff --git a/security/keys/encrypted-keys/encrypted.c b/security/keys/encrypted-keys/encrypted.c index e7eca9ec4c65..3f577954b85a 100644 --- a/security/keys/encrypted-keys/encrypted.c +++ b/security/keys/encrypted-keys/encrypted.c | |||
@@ -299,31 +299,6 @@ out: | |||
299 | } | 299 | } |
300 | 300 | ||
301 | /* | 301 | /* |
302 | * request_trusted_key - request the trusted key | ||
303 | * | ||
304 | * Trusted keys are sealed to PCRs and other metadata. Although userspace | ||
305 | * manages both trusted/encrypted key-types, like the encrypted key type | ||
306 | * data, trusted key type data is not visible decrypted from userspace. | ||
307 | */ | ||
308 | static struct key *request_trusted_key(const char *trusted_desc, | ||
309 | u8 **master_key, size_t *master_keylen) | ||
310 | { | ||
311 | struct trusted_key_payload *tpayload; | ||
312 | struct key *tkey; | ||
313 | |||
314 | tkey = request_key(&key_type_trusted, trusted_desc, NULL); | ||
315 | if (IS_ERR(tkey)) | ||
316 | goto error; | ||
317 | |||
318 | down_read(&tkey->sem); | ||
319 | tpayload = rcu_dereference(tkey->payload.data); | ||
320 | *master_key = tpayload->key; | ||
321 | *master_keylen = tpayload->key_len; | ||
322 | error: | ||
323 | return tkey; | ||
324 | } | ||
325 | |||
326 | /* | ||
327 | * request_user_key - request the user key | 302 | * request_user_key - request the user key |
328 | * | 303 | * |
329 | * Use a user provided key to encrypt/decrypt an encrypted-key. | 304 | * Use a user provided key to encrypt/decrypt an encrypted-key. |
@@ -469,8 +444,14 @@ static struct key *request_master_key(struct encrypted_key_payload *epayload, | |||
469 | goto out; | 444 | goto out; |
470 | 445 | ||
471 | if (IS_ERR(mkey)) { | 446 | if (IS_ERR(mkey)) { |
472 | pr_info("encrypted_key: key %s not found", | 447 | int ret = PTR_ERR(epayload); |
473 | epayload->master_desc); | 448 | |
449 | if (ret == -ENOTSUPP) | ||
450 | pr_info("encrypted_key: key %s not supported", | ||
451 | epayload->master_desc); | ||
452 | else | ||
453 | pr_info("encrypted_key: key %s not found", | ||
454 | epayload->master_desc); | ||
474 | goto out; | 455 | goto out; |
475 | } | 456 | } |
476 | 457 | ||
diff --git a/security/keys/encrypted-keys/encrypted.h b/security/keys/encrypted-keys/encrypted.h index cef5e2f2b7d1..b6ade8945250 100644 --- a/security/keys/encrypted-keys/encrypted.h +++ b/security/keys/encrypted-keys/encrypted.h | |||
@@ -2,6 +2,17 @@ | |||
2 | #define __ENCRYPTED_KEY_H | 2 | #define __ENCRYPTED_KEY_H |
3 | 3 | ||
4 | #define ENCRYPTED_DEBUG 0 | 4 | #define ENCRYPTED_DEBUG 0 |
5 | #ifdef CONFIG_TRUSTED_KEYS | ||
6 | extern struct key *request_trusted_key(const char *trusted_desc, | ||
7 | u8 **master_key, size_t *master_keylen); | ||
8 | #else | ||
9 | static inline struct key *request_trusted_key(const char *trusted_desc, | ||
10 | u8 **master_key, | ||
11 | size_t *master_keylen) | ||
12 | { | ||
13 | return ERR_PTR(-EOPNOTSUPP); | ||
14 | } | ||
15 | #endif | ||
5 | 16 | ||
6 | #if ENCRYPTED_DEBUG | 17 | #if ENCRYPTED_DEBUG |
7 | static inline void dump_master_key(const u8 *master_key, size_t master_keylen) | 18 | static inline void dump_master_key(const u8 *master_key, size_t master_keylen) |
diff --git a/security/keys/encrypted-keys/masterkey_trusted.c b/security/keys/encrypted-keys/masterkey_trusted.c new file mode 100644 index 000000000000..a5da5128891b --- /dev/null +++ b/security/keys/encrypted-keys/masterkey_trusted.c | |||
@@ -0,0 +1,44 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2010 IBM Corporation | ||
3 | * Copyright (C) 2010 Politecnico di Torino, Italy | ||
4 | * TORSEC group -- http://security.polito.it | ||
5 | * | ||
6 | * Authors: | ||
7 | * Mimi Zohar <zohar@us.ibm.com> | ||
8 | * Roberto Sassu <roberto.sassu@polito.it> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License as published by | ||
12 | * the Free Software Foundation, version 2 of the License. | ||
13 | * | ||
14 | * See Documentation/security/keys-trusted-encrypted.txt | ||
15 | */ | ||
16 | |||
17 | #include <linux/uaccess.h> | ||
18 | #include <linux/module.h> | ||
19 | #include <keys/trusted-type.h> | ||
20 | |||
21 | /* | ||
22 | * request_trusted_key - request the trusted key | ||
23 | * | ||
24 | * Trusted keys are sealed to PCRs and other metadata. Although userspace | ||
25 | * manages both trusted/encrypted key-types, like the encrypted key type | ||
26 | * data, trusted key type data is not visible decrypted from userspace. | ||
27 | */ | ||
28 | struct key *request_trusted_key(const char *trusted_desc, | ||
29 | u8 **master_key, size_t *master_keylen) | ||
30 | { | ||
31 | struct trusted_key_payload *tpayload; | ||
32 | struct key *tkey; | ||
33 | |||
34 | tkey = request_key(&key_type_trusted, trusted_desc, NULL); | ||
35 | if (IS_ERR(tkey)) | ||
36 | goto error; | ||
37 | |||
38 | down_read(&tkey->sem); | ||
39 | tpayload = rcu_dereference(tkey->payload.data); | ||
40 | *master_key = tpayload->key; | ||
41 | *master_keylen = tpayload->key_len; | ||
42 | error: | ||
43 | return tkey; | ||
44 | } | ||