encrypted.c 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (C) 2010 IBM Corporation
  4. * Copyright (C) 2010 Politecnico di Torino, Italy
  5. * TORSEC group -- https://security.polito.it
  6. *
  7. * Authors:
  8. * Mimi Zohar <zohar@us.ibm.com>
  9. * Roberto Sassu <roberto.sassu@polito.it>
  10. *
  11. * See Documentation/security/keys/trusted-encrypted.rst
  12. */
  13. #include <linux/uaccess.h>
  14. #include <linux/module.h>
  15. #include <linux/hex.h>
  16. #include <linux/init.h>
  17. #include <linux/slab.h>
  18. #include <linux/parser.h>
  19. #include <linux/string.h>
  20. #include <linux/err.h>
  21. #include <keys/user-type.h>
  22. #include <keys/trusted-type.h>
  23. #include <keys/encrypted-type.h>
  24. #include <linux/key-type.h>
  25. #include <linux/random.h>
  26. #include <linux/rcupdate.h>
  27. #include <linux/scatterlist.h>
  28. #include <linux/ctype.h>
  29. #include <crypto/aes.h>
  30. #include <crypto/sha2.h>
  31. #include <crypto/skcipher.h>
  32. #include <crypto/utils.h>
  33. #include "encrypted.h"
  34. #include "ecryptfs_format.h"
  35. static const char KEY_TRUSTED_PREFIX[] = "trusted:";
  36. static const char KEY_USER_PREFIX[] = "user:";
  37. static const char blkcipher_alg[] = "cbc(aes)";
  38. static const char key_format_default[] = "default";
  39. static const char key_format_ecryptfs[] = "ecryptfs";
  40. static const char key_format_enc32[] = "enc32";
  41. static unsigned int ivsize;
  42. static int blksize;
  43. #define KEY_TRUSTED_PREFIX_LEN (sizeof (KEY_TRUSTED_PREFIX) - 1)
  44. #define KEY_USER_PREFIX_LEN (sizeof (KEY_USER_PREFIX) - 1)
  45. #define KEY_ECRYPTFS_DESC_LEN 16
  46. #define HASH_SIZE SHA256_DIGEST_SIZE
  47. #define MAX_DATA_SIZE 4096
  48. #define MIN_DATA_SIZE 20
  49. #define KEY_ENC32_PAYLOAD_LEN 32
  50. enum {
  51. Opt_new, Opt_load, Opt_update, Opt_err
  52. };
  53. enum {
  54. Opt_default, Opt_ecryptfs, Opt_enc32, Opt_error
  55. };
  56. static const match_table_t key_format_tokens = {
  57. {Opt_default, "default"},
  58. {Opt_ecryptfs, "ecryptfs"},
  59. {Opt_enc32, "enc32"},
  60. {Opt_error, NULL}
  61. };
  62. static const match_table_t key_tokens = {
  63. {Opt_new, "new"},
  64. {Opt_load, "load"},
  65. {Opt_update, "update"},
  66. {Opt_err, NULL}
  67. };
  68. static bool user_decrypted_data = IS_ENABLED(CONFIG_USER_DECRYPTED_DATA);
  69. module_param(user_decrypted_data, bool, 0);
  70. MODULE_PARM_DESC(user_decrypted_data,
  71. "Allow instantiation of encrypted keys using provided decrypted data");
  72. static int aes_get_sizes(void)
  73. {
  74. struct crypto_skcipher *tfm;
  75. tfm = crypto_alloc_skcipher(blkcipher_alg, 0, CRYPTO_ALG_ASYNC);
  76. if (IS_ERR(tfm)) {
  77. pr_err("encrypted_key: failed to alloc_cipher (%ld)\n",
  78. PTR_ERR(tfm));
  79. return PTR_ERR(tfm);
  80. }
  81. ivsize = crypto_skcipher_ivsize(tfm);
  82. blksize = crypto_skcipher_blocksize(tfm);
  83. crypto_free_skcipher(tfm);
  84. return 0;
  85. }
  86. /*
  87. * valid_ecryptfs_desc - verify the description of a new/loaded encrypted key
  88. *
  89. * The description of a encrypted key with format 'ecryptfs' must contain
  90. * exactly 16 hexadecimal characters.
  91. *
  92. */
  93. static int valid_ecryptfs_desc(const char *ecryptfs_desc)
  94. {
  95. int i;
  96. if (strlen(ecryptfs_desc) != KEY_ECRYPTFS_DESC_LEN) {
  97. pr_err("encrypted_key: key description must be %d hexadecimal "
  98. "characters long\n", KEY_ECRYPTFS_DESC_LEN);
  99. return -EINVAL;
  100. }
  101. for (i = 0; i < KEY_ECRYPTFS_DESC_LEN; i++) {
  102. if (!isxdigit(ecryptfs_desc[i])) {
  103. pr_err("encrypted_key: key description must contain "
  104. "only hexadecimal characters\n");
  105. return -EINVAL;
  106. }
  107. }
  108. return 0;
  109. }
  110. /*
  111. * valid_master_desc - verify the 'key-type:desc' of a new/updated master-key
  112. *
  113. * key-type:= "trusted:" | "user:"
  114. * desc:= master-key description
  115. *
  116. * Verify that 'key-type' is valid and that 'desc' exists. On key update,
  117. * only the master key description is permitted to change, not the key-type.
  118. * The key-type remains constant.
  119. *
  120. * On success returns 0, otherwise -EINVAL.
  121. */
  122. static int valid_master_desc(const char *new_desc, const char *orig_desc)
  123. {
  124. int prefix_len;
  125. if (!strncmp(new_desc, KEY_TRUSTED_PREFIX, KEY_TRUSTED_PREFIX_LEN))
  126. prefix_len = KEY_TRUSTED_PREFIX_LEN;
  127. else if (!strncmp(new_desc, KEY_USER_PREFIX, KEY_USER_PREFIX_LEN))
  128. prefix_len = KEY_USER_PREFIX_LEN;
  129. else
  130. return -EINVAL;
  131. if (!new_desc[prefix_len])
  132. return -EINVAL;
  133. if (orig_desc && strncmp(new_desc, orig_desc, prefix_len))
  134. return -EINVAL;
  135. return 0;
  136. }
  137. /*
  138. * datablob_parse - parse the keyctl data
  139. *
  140. * datablob format:
  141. * new [<format>] <master-key name> <decrypted data length> [<decrypted data>]
  142. * load [<format>] <master-key name> <decrypted data length>
  143. * <encrypted iv + data>
  144. * update <new-master-key name>
  145. *
  146. * Tokenizes a copy of the keyctl data, returning a pointer to each token,
  147. * which is null terminated.
  148. *
  149. * On success returns 0, otherwise -EINVAL.
  150. */
  151. static int datablob_parse(char *datablob, const char **format,
  152. char **master_desc, char **decrypted_datalen,
  153. char **hex_encoded_iv, char **decrypted_data)
  154. {
  155. substring_t args[MAX_OPT_ARGS];
  156. int ret = -EINVAL;
  157. int key_cmd;
  158. int key_format;
  159. char *p, *keyword;
  160. keyword = strsep(&datablob, " \t");
  161. if (!keyword) {
  162. pr_info("encrypted_key: insufficient parameters specified\n");
  163. return ret;
  164. }
  165. key_cmd = match_token(keyword, key_tokens, args);
  166. /* Get optional format: default | ecryptfs */
  167. p = strsep(&datablob, " \t");
  168. if (!p) {
  169. pr_err("encrypted_key: insufficient parameters specified\n");
  170. return ret;
  171. }
  172. key_format = match_token(p, key_format_tokens, args);
  173. switch (key_format) {
  174. case Opt_ecryptfs:
  175. case Opt_enc32:
  176. case Opt_default:
  177. *format = p;
  178. *master_desc = strsep(&datablob, " \t");
  179. break;
  180. case Opt_error:
  181. *master_desc = p;
  182. break;
  183. }
  184. if (!*master_desc) {
  185. pr_info("encrypted_key: master key parameter is missing\n");
  186. goto out;
  187. }
  188. if (valid_master_desc(*master_desc, NULL) < 0) {
  189. pr_info("encrypted_key: master key parameter \'%s\' "
  190. "is invalid\n", *master_desc);
  191. goto out;
  192. }
  193. if (decrypted_datalen) {
  194. *decrypted_datalen = strsep(&datablob, " \t");
  195. if (!*decrypted_datalen) {
  196. pr_info("encrypted_key: keylen parameter is missing\n");
  197. goto out;
  198. }
  199. }
  200. switch (key_cmd) {
  201. case Opt_new:
  202. if (!decrypted_datalen) {
  203. pr_info("encrypted_key: keyword \'%s\' not allowed "
  204. "when called from .update method\n", keyword);
  205. break;
  206. }
  207. *decrypted_data = strsep(&datablob, " \t");
  208. ret = 0;
  209. break;
  210. case Opt_load:
  211. if (!decrypted_datalen) {
  212. pr_info("encrypted_key: keyword \'%s\' not allowed "
  213. "when called from .update method\n", keyword);
  214. break;
  215. }
  216. *hex_encoded_iv = strsep(&datablob, " \t");
  217. if (!*hex_encoded_iv) {
  218. pr_info("encrypted_key: hex blob is missing\n");
  219. break;
  220. }
  221. ret = 0;
  222. break;
  223. case Opt_update:
  224. if (decrypted_datalen) {
  225. pr_info("encrypted_key: keyword \'%s\' not allowed "
  226. "when called from .instantiate method\n",
  227. keyword);
  228. break;
  229. }
  230. ret = 0;
  231. break;
  232. case Opt_err:
  233. pr_info("encrypted_key: keyword \'%s\' not recognized\n",
  234. keyword);
  235. break;
  236. }
  237. out:
  238. return ret;
  239. }
  240. /*
  241. * datablob_format - format as an ascii string, before copying to userspace
  242. */
  243. static char *datablob_format(struct encrypted_key_payload *epayload,
  244. size_t asciiblob_len)
  245. {
  246. char *ascii_buf, *bufp;
  247. u8 *iv = epayload->iv;
  248. int len;
  249. int i;
  250. ascii_buf = kmalloc(asciiblob_len + 1, GFP_KERNEL);
  251. if (!ascii_buf)
  252. goto out;
  253. ascii_buf[asciiblob_len] = '\0';
  254. /* copy datablob master_desc and datalen strings */
  255. len = sprintf(ascii_buf, "%s %s %s ", epayload->format,
  256. epayload->master_desc, epayload->datalen);
  257. /* convert the hex encoded iv, encrypted-data and HMAC to ascii */
  258. bufp = &ascii_buf[len];
  259. for (i = 0; i < (asciiblob_len - len) / 2; i++)
  260. bufp = hex_byte_pack(bufp, iv[i]);
  261. out:
  262. return ascii_buf;
  263. }
  264. /*
  265. * request_user_key - request the user key
  266. *
  267. * Use a user provided key to encrypt/decrypt an encrypted-key.
  268. */
  269. static struct key *request_user_key(const char *master_desc, const u8 **master_key,
  270. size_t *master_keylen)
  271. {
  272. const struct user_key_payload *upayload;
  273. struct key *ukey;
  274. ukey = request_key(&key_type_user, master_desc, NULL);
  275. if (IS_ERR(ukey))
  276. goto error;
  277. down_read(&ukey->sem);
  278. upayload = user_key_payload_locked(ukey);
  279. if (!upayload) {
  280. /* key was revoked before we acquired its semaphore */
  281. up_read(&ukey->sem);
  282. key_put(ukey);
  283. ukey = ERR_PTR(-EKEYREVOKED);
  284. goto error;
  285. }
  286. *master_key = upayload->data;
  287. *master_keylen = upayload->datalen;
  288. error:
  289. return ukey;
  290. }
  291. enum derived_key_type { ENC_KEY, AUTH_KEY };
  292. /* Derive authentication/encryption key from trusted key */
  293. static int get_derived_key(u8 *derived_key, enum derived_key_type key_type,
  294. const u8 *master_key, size_t master_keylen)
  295. {
  296. u8 *derived_buf;
  297. unsigned int derived_buf_len;
  298. derived_buf_len = strlen("AUTH_KEY") + 1 + master_keylen;
  299. if (derived_buf_len < HASH_SIZE)
  300. derived_buf_len = HASH_SIZE;
  301. derived_buf = kzalloc(derived_buf_len, GFP_KERNEL);
  302. if (!derived_buf)
  303. return -ENOMEM;
  304. if (key_type)
  305. strcpy(derived_buf, "AUTH_KEY");
  306. else
  307. strcpy(derived_buf, "ENC_KEY");
  308. memcpy(derived_buf + strlen(derived_buf) + 1, master_key,
  309. master_keylen);
  310. sha256(derived_buf, derived_buf_len, derived_key);
  311. kfree_sensitive(derived_buf);
  312. return 0;
  313. }
  314. static struct skcipher_request *init_skcipher_req(const u8 *key,
  315. unsigned int key_len)
  316. {
  317. struct skcipher_request *req;
  318. struct crypto_skcipher *tfm;
  319. int ret;
  320. tfm = crypto_alloc_skcipher(blkcipher_alg, 0, CRYPTO_ALG_ASYNC);
  321. if (IS_ERR(tfm)) {
  322. pr_err("encrypted_key: failed to load %s transform (%ld)\n",
  323. blkcipher_alg, PTR_ERR(tfm));
  324. return ERR_CAST(tfm);
  325. }
  326. ret = crypto_skcipher_setkey(tfm, key, key_len);
  327. if (ret < 0) {
  328. pr_err("encrypted_key: failed to setkey (%d)\n", ret);
  329. crypto_free_skcipher(tfm);
  330. return ERR_PTR(ret);
  331. }
  332. req = skcipher_request_alloc(tfm, GFP_KERNEL);
  333. if (!req) {
  334. pr_err("encrypted_key: failed to allocate request for %s\n",
  335. blkcipher_alg);
  336. crypto_free_skcipher(tfm);
  337. return ERR_PTR(-ENOMEM);
  338. }
  339. skcipher_request_set_callback(req, 0, NULL, NULL);
  340. return req;
  341. }
  342. static struct key *request_master_key(struct encrypted_key_payload *epayload,
  343. const u8 **master_key, size_t *master_keylen)
  344. {
  345. struct key *mkey = ERR_PTR(-EINVAL);
  346. if (!strncmp(epayload->master_desc, KEY_TRUSTED_PREFIX,
  347. KEY_TRUSTED_PREFIX_LEN)) {
  348. mkey = request_trusted_key(epayload->master_desc +
  349. KEY_TRUSTED_PREFIX_LEN,
  350. master_key, master_keylen);
  351. } else if (!strncmp(epayload->master_desc, KEY_USER_PREFIX,
  352. KEY_USER_PREFIX_LEN)) {
  353. mkey = request_user_key(epayload->master_desc +
  354. KEY_USER_PREFIX_LEN,
  355. master_key, master_keylen);
  356. } else
  357. goto out;
  358. if (IS_ERR(mkey)) {
  359. int ret = PTR_ERR(mkey);
  360. if (ret == -ENOTSUPP)
  361. pr_info("encrypted_key: key %s not supported",
  362. epayload->master_desc);
  363. else
  364. pr_info("encrypted_key: key %s not found",
  365. epayload->master_desc);
  366. goto out;
  367. }
  368. dump_master_key(*master_key, *master_keylen);
  369. out:
  370. return mkey;
  371. }
  372. /* Before returning data to userspace, encrypt decrypted data. */
  373. static int derived_key_encrypt(struct encrypted_key_payload *epayload,
  374. const u8 *derived_key,
  375. unsigned int derived_keylen)
  376. {
  377. struct scatterlist sg_in[2];
  378. struct scatterlist sg_out[1];
  379. struct crypto_skcipher *tfm;
  380. struct skcipher_request *req;
  381. unsigned int encrypted_datalen;
  382. u8 iv[AES_BLOCK_SIZE];
  383. int ret;
  384. encrypted_datalen = roundup(epayload->decrypted_datalen, blksize);
  385. req = init_skcipher_req(derived_key, derived_keylen);
  386. ret = PTR_ERR(req);
  387. if (IS_ERR(req))
  388. goto out;
  389. dump_decrypted_data(epayload);
  390. sg_init_table(sg_in, 2);
  391. sg_set_buf(&sg_in[0], epayload->decrypted_data,
  392. epayload->decrypted_datalen);
  393. sg_set_page(&sg_in[1], ZERO_PAGE(0), AES_BLOCK_SIZE, 0);
  394. sg_init_table(sg_out, 1);
  395. sg_set_buf(sg_out, epayload->encrypted_data, encrypted_datalen);
  396. memcpy(iv, epayload->iv, sizeof(iv));
  397. skcipher_request_set_crypt(req, sg_in, sg_out, encrypted_datalen, iv);
  398. ret = crypto_skcipher_encrypt(req);
  399. tfm = crypto_skcipher_reqtfm(req);
  400. skcipher_request_free(req);
  401. crypto_free_skcipher(tfm);
  402. if (ret < 0)
  403. pr_err("encrypted_key: failed to encrypt (%d)\n", ret);
  404. else
  405. dump_encrypted_data(epayload, encrypted_datalen);
  406. out:
  407. return ret;
  408. }
  409. static int datablob_hmac_append(struct encrypted_key_payload *epayload,
  410. const u8 *master_key, size_t master_keylen)
  411. {
  412. u8 derived_key[HASH_SIZE];
  413. u8 *digest;
  414. int ret;
  415. ret = get_derived_key(derived_key, AUTH_KEY, master_key, master_keylen);
  416. if (ret < 0)
  417. goto out;
  418. digest = epayload->format + epayload->datablob_len;
  419. hmac_sha256_usingrawkey(derived_key, sizeof(derived_key),
  420. epayload->format, epayload->datablob_len,
  421. digest);
  422. dump_hmac(NULL, digest, HASH_SIZE);
  423. out:
  424. memzero_explicit(derived_key, sizeof(derived_key));
  425. return ret;
  426. }
  427. /* verify HMAC before decrypting encrypted key */
  428. static int datablob_hmac_verify(struct encrypted_key_payload *epayload,
  429. const u8 *format, const u8 *master_key,
  430. size_t master_keylen)
  431. {
  432. u8 derived_key[HASH_SIZE];
  433. u8 digest[HASH_SIZE];
  434. int ret;
  435. char *p;
  436. unsigned short len;
  437. ret = get_derived_key(derived_key, AUTH_KEY, master_key, master_keylen);
  438. if (ret < 0)
  439. goto out;
  440. len = epayload->datablob_len;
  441. if (!format) {
  442. p = epayload->master_desc;
  443. len -= strlen(epayload->format) + 1;
  444. } else
  445. p = epayload->format;
  446. hmac_sha256_usingrawkey(derived_key, sizeof(derived_key), p, len,
  447. digest);
  448. ret = crypto_memneq(digest, epayload->format + epayload->datablob_len,
  449. sizeof(digest));
  450. if (ret) {
  451. ret = -EINVAL;
  452. dump_hmac("datablob",
  453. epayload->format + epayload->datablob_len,
  454. HASH_SIZE);
  455. dump_hmac("calc", digest, HASH_SIZE);
  456. }
  457. out:
  458. memzero_explicit(derived_key, sizeof(derived_key));
  459. return ret;
  460. }
  461. static int derived_key_decrypt(struct encrypted_key_payload *epayload,
  462. const u8 *derived_key,
  463. unsigned int derived_keylen)
  464. {
  465. struct scatterlist sg_in[1];
  466. struct scatterlist sg_out[2];
  467. struct crypto_skcipher *tfm;
  468. struct skcipher_request *req;
  469. unsigned int encrypted_datalen;
  470. u8 iv[AES_BLOCK_SIZE];
  471. u8 *pad;
  472. int ret;
  473. /* Throwaway buffer to hold the unused zero padding at the end */
  474. pad = kmalloc(AES_BLOCK_SIZE, GFP_KERNEL);
  475. if (!pad)
  476. return -ENOMEM;
  477. encrypted_datalen = roundup(epayload->decrypted_datalen, blksize);
  478. req = init_skcipher_req(derived_key, derived_keylen);
  479. ret = PTR_ERR(req);
  480. if (IS_ERR(req))
  481. goto out;
  482. dump_encrypted_data(epayload, encrypted_datalen);
  483. sg_init_table(sg_in, 1);
  484. sg_init_table(sg_out, 2);
  485. sg_set_buf(sg_in, epayload->encrypted_data, encrypted_datalen);
  486. sg_set_buf(&sg_out[0], epayload->decrypted_data,
  487. epayload->decrypted_datalen);
  488. sg_set_buf(&sg_out[1], pad, AES_BLOCK_SIZE);
  489. memcpy(iv, epayload->iv, sizeof(iv));
  490. skcipher_request_set_crypt(req, sg_in, sg_out, encrypted_datalen, iv);
  491. ret = crypto_skcipher_decrypt(req);
  492. tfm = crypto_skcipher_reqtfm(req);
  493. skcipher_request_free(req);
  494. crypto_free_skcipher(tfm);
  495. if (ret < 0)
  496. goto out;
  497. dump_decrypted_data(epayload);
  498. out:
  499. kfree(pad);
  500. return ret;
  501. }
  502. /* Allocate memory for decrypted key and datablob. */
  503. static struct encrypted_key_payload *encrypted_key_alloc(struct key *key,
  504. const char *format,
  505. const char *master_desc,
  506. const char *datalen,
  507. const char *decrypted_data)
  508. {
  509. struct encrypted_key_payload *epayload = NULL;
  510. unsigned short datablob_len;
  511. unsigned short decrypted_datalen;
  512. unsigned short payload_datalen;
  513. unsigned int encrypted_datalen;
  514. unsigned int format_len;
  515. long dlen;
  516. int i;
  517. int ret;
  518. ret = kstrtol(datalen, 10, &dlen);
  519. if (ret < 0 || dlen < MIN_DATA_SIZE || dlen > MAX_DATA_SIZE)
  520. return ERR_PTR(-EINVAL);
  521. format_len = (!format) ? strlen(key_format_default) : strlen(format);
  522. decrypted_datalen = dlen;
  523. payload_datalen = decrypted_datalen;
  524. if (decrypted_data) {
  525. if (!user_decrypted_data) {
  526. pr_err("encrypted key: instantiation of keys using provided decrypted data is disabled since CONFIG_USER_DECRYPTED_DATA is set to false\n");
  527. return ERR_PTR(-EINVAL);
  528. }
  529. if (strlen(decrypted_data) != decrypted_datalen * 2) {
  530. pr_err("encrypted key: decrypted data provided does not match decrypted data length provided\n");
  531. return ERR_PTR(-EINVAL);
  532. }
  533. for (i = 0; i < strlen(decrypted_data); i++) {
  534. if (!isxdigit(decrypted_data[i])) {
  535. pr_err("encrypted key: decrypted data provided must contain only hexadecimal characters\n");
  536. return ERR_PTR(-EINVAL);
  537. }
  538. }
  539. }
  540. if (format) {
  541. if (!strcmp(format, key_format_ecryptfs)) {
  542. if (dlen != ECRYPTFS_MAX_KEY_BYTES) {
  543. pr_err("encrypted_key: keylen for the ecryptfs format must be equal to %d bytes\n",
  544. ECRYPTFS_MAX_KEY_BYTES);
  545. return ERR_PTR(-EINVAL);
  546. }
  547. decrypted_datalen = ECRYPTFS_MAX_KEY_BYTES;
  548. payload_datalen = sizeof(struct ecryptfs_auth_tok);
  549. } else if (!strcmp(format, key_format_enc32)) {
  550. if (decrypted_datalen != KEY_ENC32_PAYLOAD_LEN) {
  551. pr_err("encrypted_key: enc32 key payload incorrect length: %d\n",
  552. decrypted_datalen);
  553. return ERR_PTR(-EINVAL);
  554. }
  555. }
  556. }
  557. encrypted_datalen = roundup(decrypted_datalen, blksize);
  558. datablob_len = format_len + 1 + strlen(master_desc) + 1
  559. + strlen(datalen) + 1 + ivsize + 1 + encrypted_datalen;
  560. ret = key_payload_reserve(key, payload_datalen + datablob_len
  561. + HASH_SIZE + 1);
  562. if (ret < 0)
  563. return ERR_PTR(ret);
  564. epayload = kzalloc(sizeof(*epayload) + payload_datalen +
  565. datablob_len + HASH_SIZE + 1, GFP_KERNEL);
  566. if (!epayload)
  567. return ERR_PTR(-ENOMEM);
  568. epayload->payload_datalen = payload_datalen;
  569. epayload->decrypted_datalen = decrypted_datalen;
  570. epayload->datablob_len = datablob_len;
  571. return epayload;
  572. }
  573. static int encrypted_key_decrypt(struct encrypted_key_payload *epayload,
  574. const char *format, const char *hex_encoded_iv)
  575. {
  576. struct key *mkey;
  577. u8 derived_key[HASH_SIZE];
  578. const u8 *master_key;
  579. u8 *hmac;
  580. const char *hex_encoded_data;
  581. unsigned int encrypted_datalen;
  582. size_t master_keylen;
  583. size_t asciilen;
  584. int ret;
  585. encrypted_datalen = roundup(epayload->decrypted_datalen, blksize);
  586. asciilen = (ivsize + 1 + encrypted_datalen + HASH_SIZE) * 2;
  587. if (strlen(hex_encoded_iv) != asciilen)
  588. return -EINVAL;
  589. hex_encoded_data = hex_encoded_iv + (2 * ivsize) + 2;
  590. ret = hex2bin(epayload->iv, hex_encoded_iv, ivsize);
  591. if (ret < 0)
  592. return -EINVAL;
  593. ret = hex2bin(epayload->encrypted_data, hex_encoded_data,
  594. encrypted_datalen);
  595. if (ret < 0)
  596. return -EINVAL;
  597. hmac = epayload->format + epayload->datablob_len;
  598. ret = hex2bin(hmac, hex_encoded_data + (encrypted_datalen * 2),
  599. HASH_SIZE);
  600. if (ret < 0)
  601. return -EINVAL;
  602. mkey = request_master_key(epayload, &master_key, &master_keylen);
  603. if (IS_ERR(mkey))
  604. return PTR_ERR(mkey);
  605. ret = datablob_hmac_verify(epayload, format, master_key, master_keylen);
  606. if (ret < 0) {
  607. pr_err("encrypted_key: bad hmac (%d)\n", ret);
  608. goto out;
  609. }
  610. ret = get_derived_key(derived_key, ENC_KEY, master_key, master_keylen);
  611. if (ret < 0)
  612. goto out;
  613. ret = derived_key_decrypt(epayload, derived_key, sizeof derived_key);
  614. if (ret < 0)
  615. pr_err("encrypted_key: failed to decrypt key (%d)\n", ret);
  616. out:
  617. up_read(&mkey->sem);
  618. key_put(mkey);
  619. memzero_explicit(derived_key, sizeof(derived_key));
  620. return ret;
  621. }
  622. static void __ekey_init(struct encrypted_key_payload *epayload,
  623. const char *format, const char *master_desc,
  624. const char *datalen)
  625. {
  626. unsigned int format_len;
  627. format_len = (!format) ? strlen(key_format_default) : strlen(format);
  628. epayload->format = epayload->payload_data + epayload->payload_datalen;
  629. epayload->master_desc = epayload->format + format_len + 1;
  630. epayload->datalen = epayload->master_desc + strlen(master_desc) + 1;
  631. epayload->iv = epayload->datalen + strlen(datalen) + 1;
  632. epayload->encrypted_data = epayload->iv + ivsize + 1;
  633. epayload->decrypted_data = epayload->payload_data;
  634. if (!format)
  635. memcpy(epayload->format, key_format_default, format_len);
  636. else {
  637. if (!strcmp(format, key_format_ecryptfs))
  638. epayload->decrypted_data =
  639. ecryptfs_get_auth_tok_key((struct ecryptfs_auth_tok *)epayload->payload_data);
  640. memcpy(epayload->format, format, format_len);
  641. }
  642. memcpy(epayload->master_desc, master_desc, strlen(master_desc));
  643. memcpy(epayload->datalen, datalen, strlen(datalen));
  644. }
  645. /*
  646. * encrypted_init - initialize an encrypted key
  647. *
  648. * For a new key, use either a random number or user-provided decrypted data in
  649. * case it is provided. A random number is used for the iv in both cases. For
  650. * an old key, decrypt the hex encoded data.
  651. */
  652. static int encrypted_init(struct encrypted_key_payload *epayload,
  653. const char *key_desc, const char *format,
  654. const char *master_desc, const char *datalen,
  655. const char *hex_encoded_iv, const char *decrypted_data)
  656. {
  657. int ret = 0;
  658. if (format && !strcmp(format, key_format_ecryptfs)) {
  659. ret = valid_ecryptfs_desc(key_desc);
  660. if (ret < 0)
  661. return ret;
  662. ecryptfs_fill_auth_tok((struct ecryptfs_auth_tok *)epayload->payload_data,
  663. key_desc);
  664. }
  665. __ekey_init(epayload, format, master_desc, datalen);
  666. if (hex_encoded_iv) {
  667. ret = encrypted_key_decrypt(epayload, format, hex_encoded_iv);
  668. } else if (decrypted_data) {
  669. get_random_bytes(epayload->iv, ivsize);
  670. ret = hex2bin(epayload->decrypted_data, decrypted_data,
  671. epayload->decrypted_datalen);
  672. } else {
  673. get_random_bytes(epayload->iv, ivsize);
  674. get_random_bytes(epayload->decrypted_data, epayload->decrypted_datalen);
  675. }
  676. return ret;
  677. }
  678. /*
  679. * encrypted_instantiate - instantiate an encrypted key
  680. *
  681. * Instantiates the key:
  682. * - by decrypting an existing encrypted datablob, or
  683. * - by creating a new encrypted key based on a kernel random number, or
  684. * - using provided decrypted data.
  685. *
  686. * On success, return 0. Otherwise return errno.
  687. */
  688. static int encrypted_instantiate(struct key *key,
  689. struct key_preparsed_payload *prep)
  690. {
  691. struct encrypted_key_payload *epayload = NULL;
  692. char *datablob = NULL;
  693. const char *format = NULL;
  694. char *master_desc = NULL;
  695. char *decrypted_datalen = NULL;
  696. char *hex_encoded_iv = NULL;
  697. char *decrypted_data = NULL;
  698. size_t datalen = prep->datalen;
  699. int ret;
  700. if (datalen == 0 || datalen > 32767 || !prep->data)
  701. return -EINVAL;
  702. datablob = kmalloc(datalen + 1, GFP_KERNEL);
  703. if (!datablob)
  704. return -ENOMEM;
  705. datablob[datalen] = 0;
  706. memcpy(datablob, prep->data, datalen);
  707. ret = datablob_parse(datablob, &format, &master_desc,
  708. &decrypted_datalen, &hex_encoded_iv, &decrypted_data);
  709. if (ret < 0)
  710. goto out;
  711. epayload = encrypted_key_alloc(key, format, master_desc,
  712. decrypted_datalen, decrypted_data);
  713. if (IS_ERR(epayload)) {
  714. ret = PTR_ERR(epayload);
  715. goto out;
  716. }
  717. ret = encrypted_init(epayload, key->description, format, master_desc,
  718. decrypted_datalen, hex_encoded_iv, decrypted_data);
  719. if (ret < 0) {
  720. kfree_sensitive(epayload);
  721. goto out;
  722. }
  723. rcu_assign_keypointer(key, epayload);
  724. out:
  725. kfree_sensitive(datablob);
  726. return ret;
  727. }
  728. static void encrypted_rcu_free(struct rcu_head *rcu)
  729. {
  730. struct encrypted_key_payload *epayload;
  731. epayload = container_of(rcu, struct encrypted_key_payload, rcu);
  732. kfree_sensitive(epayload);
  733. }
  734. /*
  735. * encrypted_update - update the master key description
  736. *
  737. * Change the master key description for an existing encrypted key.
  738. * The next read will return an encrypted datablob using the new
  739. * master key description.
  740. *
  741. * On success, return 0. Otherwise return errno.
  742. */
  743. static int encrypted_update(struct key *key, struct key_preparsed_payload *prep)
  744. {
  745. struct encrypted_key_payload *epayload = key->payload.data[0];
  746. struct encrypted_key_payload *new_epayload;
  747. char *buf;
  748. char *new_master_desc = NULL;
  749. const char *format = NULL;
  750. size_t datalen = prep->datalen;
  751. int ret = 0;
  752. if (key_is_negative(key))
  753. return -ENOKEY;
  754. if (datalen == 0 || datalen > 32767 || !prep->data)
  755. return -EINVAL;
  756. buf = kmalloc(datalen + 1, GFP_KERNEL);
  757. if (!buf)
  758. return -ENOMEM;
  759. buf[datalen] = 0;
  760. memcpy(buf, prep->data, datalen);
  761. ret = datablob_parse(buf, &format, &new_master_desc, NULL, NULL, NULL);
  762. if (ret < 0)
  763. goto out;
  764. ret = valid_master_desc(new_master_desc, epayload->master_desc);
  765. if (ret < 0)
  766. goto out;
  767. new_epayload = encrypted_key_alloc(key, epayload->format,
  768. new_master_desc, epayload->datalen, NULL);
  769. if (IS_ERR(new_epayload)) {
  770. ret = PTR_ERR(new_epayload);
  771. goto out;
  772. }
  773. __ekey_init(new_epayload, epayload->format, new_master_desc,
  774. epayload->datalen);
  775. memcpy(new_epayload->iv, epayload->iv, ivsize);
  776. memcpy(new_epayload->payload_data, epayload->payload_data,
  777. epayload->payload_datalen);
  778. rcu_assign_keypointer(key, new_epayload);
  779. call_rcu(&epayload->rcu, encrypted_rcu_free);
  780. out:
  781. kfree_sensitive(buf);
  782. return ret;
  783. }
  784. /*
  785. * encrypted_read - format and copy out the encrypted data
  786. *
  787. * The resulting datablob format is:
  788. * <master-key name> <decrypted data length> <encrypted iv> <encrypted data>
  789. *
  790. * On success, return to userspace the encrypted key datablob size.
  791. */
  792. static long encrypted_read(const struct key *key, char *buffer,
  793. size_t buflen)
  794. {
  795. struct encrypted_key_payload *epayload;
  796. struct key *mkey;
  797. const u8 *master_key;
  798. size_t master_keylen;
  799. char derived_key[HASH_SIZE];
  800. char *ascii_buf;
  801. size_t asciiblob_len;
  802. int ret;
  803. epayload = dereference_key_locked(key);
  804. /* returns the hex encoded iv, encrypted-data, and hmac as ascii */
  805. asciiblob_len = epayload->datablob_len + ivsize + 1
  806. + roundup(epayload->decrypted_datalen, blksize)
  807. + (HASH_SIZE * 2);
  808. if (!buffer || buflen < asciiblob_len)
  809. return asciiblob_len;
  810. mkey = request_master_key(epayload, &master_key, &master_keylen);
  811. if (IS_ERR(mkey))
  812. return PTR_ERR(mkey);
  813. ret = get_derived_key(derived_key, ENC_KEY, master_key, master_keylen);
  814. if (ret < 0)
  815. goto out;
  816. ret = derived_key_encrypt(epayload, derived_key, sizeof derived_key);
  817. if (ret < 0)
  818. goto out;
  819. ret = datablob_hmac_append(epayload, master_key, master_keylen);
  820. if (ret < 0)
  821. goto out;
  822. ascii_buf = datablob_format(epayload, asciiblob_len);
  823. if (!ascii_buf) {
  824. ret = -ENOMEM;
  825. goto out;
  826. }
  827. up_read(&mkey->sem);
  828. key_put(mkey);
  829. memzero_explicit(derived_key, sizeof(derived_key));
  830. memcpy(buffer, ascii_buf, asciiblob_len);
  831. kfree_sensitive(ascii_buf);
  832. return asciiblob_len;
  833. out:
  834. up_read(&mkey->sem);
  835. key_put(mkey);
  836. memzero_explicit(derived_key, sizeof(derived_key));
  837. return ret;
  838. }
  839. /*
  840. * encrypted_destroy - clear and free the key's payload
  841. */
  842. static void encrypted_destroy(struct key *key)
  843. {
  844. kfree_sensitive(key->payload.data[0]);
  845. }
  846. struct key_type key_type_encrypted = {
  847. .name = "encrypted",
  848. .instantiate = encrypted_instantiate,
  849. .update = encrypted_update,
  850. .destroy = encrypted_destroy,
  851. .describe = user_describe,
  852. .read = encrypted_read,
  853. };
  854. EXPORT_SYMBOL_GPL(key_type_encrypted);
  855. static int __init init_encrypted(void)
  856. {
  857. int ret;
  858. ret = aes_get_sizes();
  859. if (ret < 0)
  860. return ret;
  861. return register_key_type(&key_type_encrypted);
  862. }
  863. static void __exit cleanup_encrypted(void)
  864. {
  865. unregister_key_type(&key_type_encrypted);
  866. }
  867. late_initcall(init_encrypted);
  868. module_exit(cleanup_encrypted);
  869. MODULE_DESCRIPTION("Encrypted key type");
  870. MODULE_LICENSE("GPL");