trusted-encrypted.rst 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617
  1. ==========================
  2. Trusted and Encrypted Keys
  3. ==========================
  4. Trusted and Encrypted Keys are two new key types added to the existing kernel
  5. key ring service. Both of these new types are variable length symmetric keys,
  6. and in both cases all keys are created in the kernel, and user space sees,
  7. stores, and loads only encrypted blobs. Trusted Keys require the availability
  8. of a Trust Source for greater security, while Encrypted Keys can be used on any
  9. system. All user level blobs, are displayed and loaded in hex ASCII for
  10. convenience, and are integrity verified.
  11. Trusted Keys as Protected key
  12. =============================
  13. It is the secure way of keeping the keys in the kernel key-ring as Trusted-Key,
  14. such that:
  15. - Key-blob, an encrypted key-data, created to be stored, loaded and seen by
  16. userspace.
  17. - Key-data, the plain-key text in the system memory, to be used by
  18. kernel space only.
  19. Though key-data is not accessible to the user-space in plain-text, but it is in
  20. plain-text in system memory, when used in kernel space. Even though kernel-space
  21. attracts small surface attack, but with compromised kernel or side-channel
  22. attack accessing the system memory can lead to a chance of the key getting
  23. compromised/leaked.
  24. In order to protect the key in kernel space, the concept of "protected-keys" is
  25. introduced which will act as an added layer of protection. The key-data of the
  26. protected keys is encrypted with Key-Encryption-Key(KEK), and decrypted inside
  27. the trust source boundary. The plain-key text never available out-side in the
  28. system memory. Thus, any crypto operation that is to be executed using the
  29. protected key, can only be done by the trust source, which generated the
  30. key blob.
  31. Hence, if the protected-key is leaked or compromised, it is of no use to the
  32. hacker.
  33. Trusted keys as protected keys, with trust source having the capability of
  34. generating:
  35. - Key-Blob, to be loaded, stored and seen by user-space.
  36. Trust Source
  37. ============
  38. A trust source provides the source of security for Trusted Keys. This
  39. section lists currently supported trust sources, along with their security
  40. considerations. Whether or not a trust source is sufficiently safe depends
  41. on the strength and correctness of its implementation, as well as the threat
  42. environment for a specific use case. Since the kernel doesn't know what the
  43. environment is, and there is no metric of trust, it is dependent on the
  44. consumer of the Trusted Keys to determine if the trust source is sufficiently
  45. safe.
  46. * Root of trust for storage
  47. (1) TPM (Trusted Platform Module: hardware device)
  48. Rooted to Storage Root Key (SRK) which never leaves the TPM that
  49. provides crypto operation to establish root of trust for storage.
  50. (2) TEE (Trusted Execution Environment: OP-TEE based on Arm TrustZone)
  51. Rooted to Hardware Unique Key (HUK) which is generally burnt in on-chip
  52. fuses and is accessible to TEE only.
  53. (3) CAAM (Cryptographic Acceleration and Assurance Module: IP on NXP SoCs)
  54. When High Assurance Boot (HAB) is enabled and the CAAM is in secure
  55. mode, trust is rooted to the OTPMK, a never-disclosed 256-bit key
  56. randomly generated and fused into each SoC at manufacturing time.
  57. Otherwise, a common fixed test key is used instead.
  58. (4) DCP (Data Co-Processor: crypto accelerator of various i.MX SoCs)
  59. Rooted to a one-time programmable key (OTP) that is generally burnt
  60. in the on-chip fuses and is accessible to the DCP encryption engine only.
  61. DCP provides two keys that can be used as root of trust: the OTP key
  62. and the UNIQUE key. Default is to use the UNIQUE key, but selecting
  63. the OTP key can be done via a module parameter (dcp_use_otp_key).
  64. (5) PKWM (PowerVM Key Wrapping Module: IBM PowerVM + Platform KeyStore)
  65. Rooted to a unique, per-LPAR key, which is derived from a system-wide,
  66. randomly generated LPAR root key. Both the per-LPAR keys and the LPAR
  67. root key are stored in hypervisor-owned secure memory at runtime,
  68. and the LPAR root key is additionally persisted in secure locations
  69. such as the processor SEEPROMs and encrypted NVRAM.
  70. * Execution isolation
  71. (1) TPM
  72. Fixed set of operations running in isolated execution environment.
  73. (2) TEE
  74. Customizable set of operations running in isolated execution
  75. environment verified via Secure/Trusted boot process.
  76. (3) CAAM
  77. Fixed set of operations running in isolated execution environment.
  78. (4) DCP
  79. Fixed set of cryptographic operations running in isolated execution
  80. environment. Only basic blob key encryption is executed there.
  81. The actual key sealing/unsealing is done on main processor/kernel space.
  82. (5) PKWM (PowerVM Key Wrapping Module: IBM PowerVM + Platform KeyStore)
  83. Fixed set of cryptographic operations done on on-chip hardware
  84. cryptographic acceleration unit NX. Keys for wrapping and unwrapping
  85. are managed by PowerVM Platform KeyStore, which stores keys in an
  86. isolated in-memory copy in secure hypervisor memory, as well as in a
  87. persistent copy in hypervisor-encrypted NVRAM.
  88. * Optional binding to platform integrity state
  89. (1) TPM
  90. Keys can be optionally sealed to specified PCR (integrity measurement)
  91. values, and only unsealed by the TPM, if PCRs and blob integrity
  92. verifications match. A loaded Trusted Key can be updated with new
  93. (future) PCR values, so keys are easily migrated to new PCR values,
  94. such as when the kernel and initramfs are updated. The same key can
  95. have many saved blobs under different PCR values, so multiple boots are
  96. easily supported.
  97. (2) TEE
  98. Relies on Secure/Trusted boot process for platform integrity. It can
  99. be extended with TEE based measured boot process.
  100. (3) CAAM
  101. Relies on the High Assurance Boot (HAB) mechanism of NXP SoCs
  102. for platform integrity.
  103. (4) DCP
  104. Relies on Secure/Trusted boot process (called HAB by vendor) for
  105. platform integrity.
  106. (5) PKWM (PowerVM Key Wrapping Module: IBM PowerVM + Platform KeyStore)
  107. Relies on secure and trusted boot process of IBM Power systems for
  108. platform integrity.
  109. * Interfaces and APIs
  110. (1) TPM
  111. TPMs have well-documented, standardized interfaces and APIs.
  112. (2) TEE
  113. TEEs have well-documented, standardized client interface and APIs. For
  114. more details refer to ``Documentation/driver-api/tee.rst``.
  115. (3) CAAM
  116. Interface is specific to silicon vendor.
  117. (4) DCP
  118. Vendor-specific API that is implemented as part of the DCP crypto driver in
  119. ``drivers/crypto/mxs-dcp.c``.
  120. (5) PKWM (PowerVM Key Wrapping Module: IBM PowerVM + Platform KeyStore)
  121. Platform Keystore has well documented interfaces in PAPR document.
  122. Refer to ``Documentation/arch/powerpc/papr_hcalls.rst``
  123. * Threat model
  124. The strength and appropriateness of a particular trust source for a given
  125. purpose must be assessed when using them to protect security-relevant data.
  126. Key Generation
  127. ==============
  128. Trusted Keys
  129. ------------
  130. New keys are created from random numbers. They are encrypted/decrypted using
  131. a child key in the storage key hierarchy. Encryption and decryption of the
  132. child key must be protected by a strong access control policy within the
  133. trust source. The random number generator in use differs according to the
  134. selected trust source:
  135. * TPM: hardware device based RNG
  136. Keys are generated within the TPM. Strength of random numbers may vary
  137. from one device manufacturer to another.
  138. * TEE: OP-TEE based on Arm TrustZone based RNG
  139. RNG is customizable as per platform needs. It can either be direct output
  140. from platform specific hardware RNG or a software based Fortuna CSPRNG
  141. which can be seeded via multiple entropy sources.
  142. * CAAM: Kernel RNG
  143. The normal kernel random number generator is used. To seed it from the
  144. CAAM HWRNG, enable CRYPTO_DEV_FSL_CAAM_RNG_API and ensure the device
  145. is probed.
  146. * DCP (Data Co-Processor: crypto accelerator of various i.MX SoCs)
  147. The DCP hardware device itself does not provide a dedicated RNG interface,
  148. so the kernel default RNG is used. SoCs with DCP like the i.MX6ULL do have
  149. a dedicated hardware RNG that is independent from DCP which can be enabled
  150. to back the kernel RNG.
  151. * PKWM (PowerVM Key Wrapping Module: IBM PowerVM + Platform KeyStore)
  152. The normal kernel random number generator is used to generate keys.
  153. Users may override this by specifying ``trusted.rng=kernel`` on the kernel
  154. command-line to override the used RNG with the kernel's random number pool.
  155. Encrypted Keys
  156. --------------
  157. Encrypted keys do not depend on a trust source, and are faster, as they use AES
  158. for encryption/decryption. New keys are created either from kernel-generated
  159. random numbers or user-provided decrypted data, and are encrypted/decrypted
  160. using a specified ‘master’ key. The ‘master’ key can either be a trusted-key or
  161. user-key type. The main disadvantage of encrypted keys is that if they are not
  162. rooted in a trusted key, they are only as secure as the user key encrypting
  163. them. The master user key should therefore be loaded in as secure a way as
  164. possible, preferably early in boot.
  165. Usage
  166. =====
  167. Trusted Keys usage: TPM
  168. -----------------------
  169. TPM 1.2: By default, trusted keys are sealed under the SRK, which has the
  170. default authorization value (20 bytes of 0s). This can be set at takeownership
  171. time with the TrouSerS utility: "tpm_takeownership -u -z".
  172. TPM 2.0: The user must first create a storage key and make it persistent, so the
  173. key is available after reboot. This can be done using the following commands.
  174. With the IBM TSS 2 stack::
  175. #> tsscreateprimary -hi o -st
  176. Handle 80000000
  177. #> tssevictcontrol -hi o -ho 80000000 -hp 81000001
  178. Or with the Intel TSS 2 stack::
  179. #> tpm2_createprimary --hierarchy o -G rsa2048 -c key.ctxt
  180. [...]
  181. #> tpm2_evictcontrol -c key.ctxt 0x81000001
  182. persistentHandle: 0x81000001
  183. Usage::
  184. keyctl add trusted name "new keylen [options]" ring
  185. keyctl add trusted name "load hex_blob [pcrlock=pcrnum]" ring
  186. keyctl update key "update [options]"
  187. keyctl print keyid
  188. options:
  189. keyhandle= ascii hex value of sealing key
  190. TPM 1.2: default 0x40000000 (SRK)
  191. TPM 2.0: no default; must be passed every time
  192. keyauth= ascii hex auth for sealing key default 0x00...i
  193. (40 ascii zeros)
  194. blobauth= ascii hex auth for sealed data default 0x00...
  195. (40 ascii zeros)
  196. pcrinfo= ascii hex of PCR_INFO or PCR_INFO_LONG (no default)
  197. pcrlock= pcr number to be extended to "lock" blob
  198. migratable= 0|1 indicating permission to reseal to new PCR values,
  199. default 1 (resealing allowed)
  200. hash= hash algorithm name as a string. For TPM 1.x the only
  201. allowed value is sha1. For TPM 2.x the allowed values
  202. are sha1, sha256, sha384, sha512 and sm3-256.
  203. policydigest= digest for the authorization policy. must be calculated
  204. with the same hash algorithm as specified by the 'hash='
  205. option.
  206. policyhandle= handle to an authorization policy session that defines the
  207. same policy and with the same hash algorithm as was used to
  208. seal the key.
  209. "keyctl print" returns an ascii hex copy of the sealed key, which is in standard
  210. TPM_STORED_DATA format. The key length for new keys are always in bytes.
  211. Trusted Keys can be 32 - 128 bytes (256 - 1024 bits), the upper limit is to fit
  212. within the 2048 bit SRK (RSA) keylength, with all necessary structure/padding.
  213. Trusted Keys usage: TEE
  214. -----------------------
  215. Usage::
  216. keyctl add trusted name "new keylen" ring
  217. keyctl add trusted name "load hex_blob" ring
  218. keyctl print keyid
  219. "keyctl print" returns an ASCII hex copy of the sealed key, which is in format
  220. specific to TEE device implementation. The key length for new keys is always
  221. in bytes. Trusted Keys can be 32 - 128 bytes (256 - 1024 bits).
  222. Trusted Keys usage: CAAM
  223. ------------------------
  224. Trusted Keys Usage::
  225. keyctl add trusted name "new keylen" ring
  226. keyctl add trusted name "load hex_blob" ring
  227. keyctl print keyid
  228. "keyctl print" returns an ASCII hex copy of the sealed key, which is in a
  229. CAAM-specific format. The key length for new keys is always in bytes.
  230. Trusted Keys can be 32 - 128 bytes (256 - 1024 bits).
  231. Trusted Keys as Protected Keys Usage::
  232. keyctl add trusted name "new keylen pk [options]" ring
  233. keyctl add trusted name "load hex_blob [options]" ring
  234. keyctl print keyid
  235. where, 'pk' is used to direct trust source to generate protected key.
  236. options:
  237. key_enc_algo = For CAAM, supported enc algo are ECB(2), CCM(1).
  238. "keyctl print" returns an ASCII hex copy of the sealed key, which is in a
  239. CAAM-specific format. The key length for new keys is always in bytes.
  240. Trusted Keys can be 32 - 128 bytes (256 - 1024 bits).
  241. Trusted Keys usage: DCP
  242. -----------------------
  243. Usage::
  244. keyctl add trusted name "new keylen" ring
  245. keyctl add trusted name "load hex_blob" ring
  246. keyctl print keyid
  247. "keyctl print" returns an ASCII hex copy of the sealed key, which is in format
  248. specific to this DCP key-blob implementation. The key length for new keys is
  249. always in bytes. Trusted Keys can be 32 - 128 bytes (256 - 1024 bits).
  250. Trusted Keys usage: PKWM
  251. ------------------------
  252. Usage::
  253. keyctl add trusted name "new keylen [options]" ring
  254. keyctl add trusted name "load hex_blob" ring
  255. keyctl print keyid
  256. options:
  257. wrap_flags= ascii hex value of security policy requirement
  258. 0x00: no secure boot requirement (default)
  259. 0x01: require secure boot to be in either audit or
  260. enforced mode
  261. 0x02: require secure boot to be in enforced mode
  262. "keyctl print" returns an ASCII hex copy of the sealed key, which is in format
  263. specific to PKWM key-blob implementation. The key length for new keys is
  264. always in bytes. Trusted Keys can be 32 - 128 bytes (256 - 1024 bits).
  265. Encrypted Keys usage
  266. --------------------
  267. The decrypted portion of encrypted keys can contain either a simple symmetric
  268. key or a more complex structure. The format of the more complex structure is
  269. application specific, which is identified by 'format'.
  270. Usage::
  271. keyctl add encrypted name "new [format] key-type:master-key-name keylen"
  272. ring
  273. keyctl add encrypted name "new [format] key-type:master-key-name keylen
  274. decrypted-data" ring
  275. keyctl add encrypted name "load hex_blob" ring
  276. keyctl update keyid "update key-type:master-key-name"
  277. Where::
  278. format:= 'default | ecryptfs | enc32'
  279. key-type:= 'trusted' | 'user'
  280. Examples of trusted and encrypted key usage
  281. -------------------------------------------
  282. Create and save a trusted key named "kmk" of length 32 bytes.
  283. Note: When using a TPM 2.0 with a persistent key with handle 0x81000001,
  284. append 'keyhandle=0x81000001' to statements between quotes, such as
  285. "new 32 keyhandle=0x81000001".
  286. ::
  287. $ keyctl add trusted kmk "new 32" @u
  288. 440502848
  289. $ keyctl show
  290. Session Keyring
  291. -3 --alswrv 500 500 keyring: _ses
  292. 97833714 --alswrv 500 -1 \_ keyring: _uid.500
  293. 440502848 --alswrv 500 500 \_ trusted: kmk
  294. $ keyctl print 440502848
  295. 0101000000000000000001005d01b7e3f4a6be5709930f3b70a743cbb42e0cc95e18e915
  296. 3f60da455bbf1144ad12e4f92b452f966929f6105fd29ca28e4d4d5a031d068478bacb0b
  297. 27351119f822911b0a11ba3d3498ba6a32e50dac7f32894dd890eb9ad578e4e292c83722
  298. a52e56a097e6a68b3f56f7a52ece0cdccba1eb62cad7d817f6dc58898b3ac15f36026fec
  299. d568bd4a706cb60bb37be6d8f1240661199d640b66fb0fe3b079f97f450b9ef9c22c6d5d
  300. dd379f0facd1cd020281dfa3c70ba21a3fa6fc2471dc6d13ecf8298b946f65345faa5ef0
  301. f1f8fff03ad0acb083725535636addb08d73dedb9832da198081e5deae84bfaf0409c22b
  302. e4a8aea2b607ec96931e6f4d4fe563ba
  303. $ keyctl pipe 440502848 > kmk.blob
  304. Load a trusted key from the saved blob::
  305. $ keyctl add trusted kmk "load `cat kmk.blob`" @u
  306. 268728824
  307. $ keyctl print 268728824
  308. 0101000000000000000001005d01b7e3f4a6be5709930f3b70a743cbb42e0cc95e18e915
  309. 3f60da455bbf1144ad12e4f92b452f966929f6105fd29ca28e4d4d5a031d068478bacb0b
  310. 27351119f822911b0a11ba3d3498ba6a32e50dac7f32894dd890eb9ad578e4e292c83722
  311. a52e56a097e6a68b3f56f7a52ece0cdccba1eb62cad7d817f6dc58898b3ac15f36026fec
  312. d568bd4a706cb60bb37be6d8f1240661199d640b66fb0fe3b079f97f450b9ef9c22c6d5d
  313. dd379f0facd1cd020281dfa3c70ba21a3fa6fc2471dc6d13ecf8298b946f65345faa5ef0
  314. f1f8fff03ad0acb083725535636addb08d73dedb9832da198081e5deae84bfaf0409c22b
  315. e4a8aea2b607ec96931e6f4d4fe563ba
  316. Create and save a trusted key as protected key named "kmk" of length 32 bytes.
  317. ::
  318. $ keyctl add trusted kmk "new 32 pk key_enc_algo=1" @u
  319. 440502848
  320. $ keyctl show
  321. Session Keyring
  322. -3 --alswrv 500 500 keyring: _ses
  323. 97833714 --alswrv 500 -1 \_ keyring: _uid.500
  324. 440502848 --alswrv 500 500 \_ trusted: kmk
  325. $ keyctl print 440502848
  326. 0101000000000000000001005d01b7e3f4a6be5709930f3b70a743cbb42e0cc95e18e915
  327. 3f60da455bbf1144ad12e4f92b452f966929f6105fd29ca28e4d4d5a031d068478bacb0b
  328. 27351119f822911b0a11ba3d3498ba6a32e50dac7f32894dd890eb9ad578e4e292c83722
  329. a52e56a097e6a68b3f56f7a52ece0cdccba1eb62cad7d817f6dc58898b3ac15f36026fec
  330. d568bd4a706cb60bb37be6d8f1240661199d640b66fb0fe3b079f97f450b9ef9c22c6d5d
  331. dd379f0facd1cd020281dfa3c70ba21a3fa6fc2471dc6d13ecf8298b946f65345faa5ef0
  332. f1f8fff03ad0acb083725535636addb08d73dedb9832da198081e5deae84bfaf0409c22b
  333. e4a8aea2b607ec96931e6f4d4fe563ba
  334. $ keyctl pipe 440502848 > kmk.blob
  335. Load a trusted key from the saved blob::
  336. $ keyctl add trusted kmk "load `cat kmk.blob` key_enc_algo=1" @u
  337. 268728824
  338. $ keyctl print 268728824
  339. 0101000000000000000001005d01b7e3f4a6be5709930f3b70a743cbb42e0cc95e18e915
  340. 3f60da455bbf1144ad12e4f92b452f966929f6105fd29ca28e4d4d5a031d068478bacb0b
  341. 27351119f822911b0a11ba3d3498ba6a32e50dac7f32894dd890eb9ad578e4e292c83722
  342. a52e56a097e6a68b3f56f7a52ece0cdccba1eb62cad7d817f6dc58898b3ac15f36026fec
  343. d568bd4a706cb60bb37be6d8f1240661199d640b66fb0fe3b079f97f450b9ef9c22c6d5d
  344. dd379f0facd1cd020281dfa3c70ba21a3fa6fc2471dc6d13ecf8298b946f65345faa5ef0
  345. f1f8fff03ad0acb083725535636addb08d73dedb9832da198081e5deae84bfaf0409c22b
  346. e4a8aea2b607ec96931e6f4d4fe563ba
  347. Reseal (TPM specific) a trusted key under new PCR values::
  348. $ keyctl update 268728824 "update pcrinfo=`cat pcr.blob`"
  349. $ keyctl print 268728824
  350. 010100000000002c0002800093c35a09b70fff26e7a98ae786c641e678ec6ffb6b46d805
  351. 77c8a6377aed9d3219c6dfec4b23ffe3000001005d37d472ac8a44023fbb3d18583a4f73
  352. d3a076c0858f6f1dcaa39ea0f119911ff03f5406df4f7f27f41da8d7194f45c9f4e00f2e
  353. df449f266253aa3f52e55c53de147773e00f0f9aca86c64d94c95382265968c354c5eab4
  354. 9638c5ae99c89de1e0997242edfb0b501744e11ff9762dfd951cffd93227cc513384e7e6
  355. e782c29435c7ec2edafaa2f4c1fe6e7a781b59549ff5296371b42133777dcc5b8b971610
  356. 94bc67ede19e43ddb9dc2baacad374a36feaf0314d700af0a65c164b7082401740e489c9
  357. 7ef6a24defe4846104209bf0c3eced7fa1a672ed5b125fc9d8cd88b476a658a4434644ef
  358. df8ae9a178e9f83ba9f08d10fa47e4226b98b0702f06b3b8
  359. The initial consumer of trusted keys is EVM, which at boot time needs a high
  360. quality symmetric key for HMAC protection of file metadata. The use of a
  361. trusted key provides strong guarantees that the EVM key has not been
  362. compromised by a user level problem, and when sealed to a platform integrity
  363. state, protects against boot and offline attacks. Create and save an
  364. encrypted key "evm" using the above trusted key "kmk":
  365. option 1: omitting 'format'::
  366. $ keyctl add encrypted evm "new trusted:kmk 32" @u
  367. 159771175
  368. option 2: explicitly defining 'format' as 'default'::
  369. $ keyctl add encrypted evm "new default trusted:kmk 32" @u
  370. 159771175
  371. $ keyctl print 159771175
  372. default trusted:kmk 32 2375725ad57798846a9bbd240de8906f006e66c03af53b1b3
  373. 82dbbc55be2a44616e4959430436dc4f2a7a9659aa60bb4652aeb2120f149ed197c564e0
  374. 24717c64 5972dcb82ab2dde83376d82b2e3c09ffc
  375. $ keyctl pipe 159771175 > evm.blob
  376. Load an encrypted key "evm" from saved blob::
  377. $ keyctl add encrypted evm "load `cat evm.blob`" @u
  378. 831684262
  379. $ keyctl print 831684262
  380. default trusted:kmk 32 2375725ad57798846a9bbd240de8906f006e66c03af53b1b3
  381. 82dbbc55be2a44616e4959430436dc4f2a7a9659aa60bb4652aeb2120f149ed197c564e0
  382. 24717c64 5972dcb82ab2dde83376d82b2e3c09ffc
  383. Instantiate an encrypted key "evm" using user-provided decrypted data::
  384. $ evmkey=$(dd if=/dev/urandom bs=1 count=32 | xxd -c32 -p)
  385. $ keyctl add encrypted evm "new default user:kmk 32 $evmkey" @u
  386. 794890253
  387. $ keyctl print 794890253
  388. default user:kmk 32 2375725ad57798846a9bbd240de8906f006e66c03af53b1b382d
  389. bbc55be2a44616e4959430436dc4f2a7a9659aa60bb4652aeb2120f149ed197c564e0247
  390. 17c64 5972dcb82ab2dde83376d82b2e3c09ffc
  391. Other uses for trusted and encrypted keys, such as for disk and file encryption
  392. are anticipated. In particular the new format 'ecryptfs' has been defined
  393. in order to use encrypted keys to mount an eCryptfs filesystem. More details
  394. about the usage can be found in the file
  395. ``Documentation/security/keys/ecryptfs.rst``.
  396. Another new format 'enc32' has been defined in order to support encrypted keys
  397. with payload size of 32 bytes. This will initially be used for nvdimm security
  398. but may expand to other usages that require 32 bytes payload.
  399. TPM 2.0 ASN.1 Key Format
  400. ------------------------
  401. The TPM 2.0 ASN.1 key format is designed to be easily recognisable,
  402. even in binary form (fixing a problem we had with the TPM 1.2 ASN.1
  403. format) and to be extensible for additions like importable keys and
  404. policy::
  405. TPMKey ::= SEQUENCE {
  406. type OBJECT IDENTIFIER
  407. emptyAuth [0] EXPLICIT BOOLEAN OPTIONAL
  408. parent INTEGER
  409. pubkey OCTET STRING
  410. privkey OCTET STRING
  411. }
  412. type is what distinguishes the key even in binary form since the OID
  413. is provided by the TCG to be unique and thus forms a recognizable
  414. binary pattern at offset 3 in the key. The OIDs currently made
  415. available are::
  416. 2.23.133.10.1.3 TPM Loadable key. This is an asymmetric key (Usually
  417. RSA2048 or Elliptic Curve) which can be imported by a
  418. TPM2_Load() operation.
  419. 2.23.133.10.1.4 TPM Importable Key. This is an asymmetric key (Usually
  420. RSA2048 or Elliptic Curve) which can be imported by a
  421. TPM2_Import() operation.
  422. 2.23.133.10.1.5 TPM Sealed Data. This is a set of data (up to 128
  423. bytes) which is sealed by the TPM. It usually
  424. represents a symmetric key and must be unsealed before
  425. use.
  426. The trusted key code only uses the TPM Sealed Data OID.
  427. emptyAuth is true if the key has well known authorization "". If it
  428. is false or not present, the key requires an explicit authorization
  429. phrase. This is used by most user space consumers to decide whether
  430. to prompt for a password.
  431. parent represents the parent key handle, either in the 0x81 MSO space,
  432. like 0x81000001 for the RSA primary storage key. Userspace programmes
  433. also support specifying the primary handle in the 0x40 MSO space. If
  434. this happens the Elliptic Curve variant of the primary key using the
  435. TCG defined template will be generated on the fly into a volatile
  436. object and used as the parent. The current kernel code only supports
  437. the 0x81 MSO form.
  438. pubkey is the binary representation of TPM2B_PRIVATE excluding the
  439. initial TPM2B header, which can be reconstructed from the ASN.1 octet
  440. string length.
  441. privkey is the binary representation of TPM2B_PUBLIC excluding the
  442. initial TPM2B header which can be reconstructed from the ASN.1 octed
  443. string length.
  444. DCP Blob Format
  445. ---------------
  446. .. kernel-doc:: security/keys/trusted-keys/trusted_dcp.c
  447. :doc: dcp blob format
  448. .. kernel-doc:: security/keys/trusted-keys/trusted_dcp.c
  449. :identifiers: struct dcp_blob_fmt