trusted-encrypted.rst 18 KB

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