1tpm2_loadexternal(1) General Commands Manual tpm2_loadexternal(1)
2
3
4
6 tpm2_loadexternal(1) - Load an external object into the TPM.
7
9 tpm2_loadexternal [OPTIONS]
10
12 tpm2_loadexternal(1) - This command loads an external object into the
13 TPM, forgoing TPM protections. Ie, the key material is not protected
14 by the parent object’s seed. The command allows loading of just the
15 public portion of an object or both the public and private portions of
16 an object.
17
18 The tool outputs the name of the loaded object in a YAML dictionary
19 format with the key name where the value for that key is the name of
20 the object in hex format, for example:
21
22 name: 000bac25cb8743111c8e1f52f2ee7279d05d3902a18dd1af694db5d1afa7adf1c8b3
23
24 It also saves a context file for future interactions with the object.
25
27 • -C, --hierarchy=OBJECT:
28 Hierarchy to use for the ticket, optional. Defaults to n, null.
29 Supported options are:
30
31 • o for the owner hierarchy.
32
33 • p for the platform hierarchy.
34
35 • e for the endorsement hierarchy.
36
37 • n for the null hierarchy.
38
39 • -G, --key-algorithm=ALGORITHM:
40 The algorithm used by the key to be imported. Supports:
41
42 • aes - AES 128,192 or 256 key.
43
44 • rsa - RSA 1024 or 2048 key.
45
46 • ecc - ECC NIST P192, P224, P256, P384 or P521 public and private
47 key.
48
49 • -u, --public=FILE:
50 The public portion of the object, this can be one of the following
51 file formats:
52
53 • TSS - The TSS/TPM format. For example from option -u of command
54 tpm2_create(1).
55
56 • RSA - OSSL PEM formats. For example public.pem from the command
57 openssl rsa -in private.pem -out public.pem -pubout
58
59 • ECC - OSSL PEM formats. For example public.pem from the command
60 openssl ec -in private.ecc.pem -out public.ecc.pem -pubout
61
62 • -r, --private=FILE:
63 The sensitive portion of the object, optional. If one wishes to use
64 the private portion of a key, this must be specified. Like option
65 -u, this command takes files in the following format:
66
67 • RSA - OSSL PEM formats. For example private.pem from the command
68 openssl genrsa -out private.pem 2048 Since an RSA public key can be
69 derived from the private PEM file, their is no need to specify -u
70 for the public portion.
71
72 Note: The private portion does not respect TSS formats as it’s impos‐
73 sible to get a TPM2B_SENSITIVE output from a previous command. They
74 are always protected by the TPM as TPM2B_PRIVATE blobs.
75
76 • -p, --auth=AUTH:
77
78 The authorization value for the key, optional.
79
80 • -L, --policy=POLICY_FILE:
81
82 The input policy file, optional. A file containing the hash of a
83 policy derived from tpm2_createpolicy.
84
85 • -g, --hash-algorithm=ALGORITHM:
86
87 The hash algorithm for generating the objects name. This is optional
88 and defaults to sha256 when not specified. However, load external
89 supports having a null name algorithm. In this case, no cryptograph‐
90 ic binding checks between the public and private portions are per‐
91 formed.
92
93 • -a, --attributes=ATTRIBUTES:
94
95 The object attributes, optional. The default for created objects is:
96 TPMA_OBJECT_SIGN_ENCRYPT|TPMA_OBJECT_DECRYPT. Optionally, if -p is
97 specified or no -p or -L is specified then TPMA_OBJECT_USERWITHAUTH
98 is added to the default attribute set.
99
100 Note: If specifying attributes, the TPM will reject certain at‐
101 tributes like TPMA_OBJECT_FIXEDTPM, as those guarantees cannot be
102 made.
103
104 • -c, --key-context=FILE
105
106 The file name to save the object context, required.
107
108 • -n, --name=FILE:
109
110 An optional file to save the object name, which is in a binary hash
111 format. The size of the hash is based on name algorithm or the -g
112 option.
113
114 • --passin=OSSL_PEM_FILE_PASSWORD
115
116 An optional password for an Open SSL (OSSL) provided input file. It
117 mirrors the -passin option of OSSL and is known to support the pass,
118 file, env, fd and plain password formats of openssl. (see man(1)
119 openssl) for more.
120
121 References
123 The type of a context object, whether it is a handle or file name, is
124 determined according to the following logic in-order:
125
126 • If the argument is a file path, then the file is loaded as a restored
127 TPM transient object.
128
129 • If the argument is a prefix match on one of:
130
131 • owner: the owner hierarchy
132
133 • platform: the platform hierarchy
134
135 • endorsement: the endorsement hierarchy
136
137 • lockout: the lockout control persistent object
138
139 • If the argument argument can be loaded as a number it will be treat
140 as a handle, e.g. 0x81010013 and used directly._OBJECT_.
141
143 Authorization for use of an object in TPM2.0 can come in 3 different
144 forms: 1. Password 2. HMAC 3. Sessions
145
146 NOTE: “Authorizations default to the EMPTY PASSWORD when not speci‐
147 fied”.
148
149 Passwords
150 Passwords are interpreted in the following forms below using prefix
151 identifiers.
152
153 Note: By default passwords are assumed to be in the string form when
154 they do not have a prefix.
155
156 String
157 A string password, specified by prefix “str:” or it’s absence (raw
158 string without prefix) is not interpreted, and is directly used for au‐
159 thorization.
160
161 Examples
162 foobar
163 str:foobar
164
165 Hex-string
166 A hex-string password, specified by prefix “hex:” is converted from a
167 hexidecimal form into a byte array form, thus allowing passwords with
168 non-printable and/or terminal un-friendly characters.
169
170 Example
171 hex:0x1122334455667788
172
173 File
174 A file based password, specified be prefix “file:” should be the path
175 of a file containing the password to be read by the tool or a “-” to
176 use stdin. Storing passwords in files prevents information leakage,
177 passwords passed as options can be read from the process list or common
178 shell history features.
179
180 Examples
181 # to use stdin and be prompted
182 file:-
183
184 # to use a file from a path
185 file:path/to/password/file
186
187 # to echo a password via stdin:
188 echo foobar | tpm2_tool -p file:-
189
190 # to use a bash here-string via stdin:
191
192 tpm2_tool -p file:- <<< foobar
193
194 Sessions
195 When using a policy session to authorize the use of an object, prefix
196 the option argument with the session keyword. Then indicate a path to
197 a session file that was created with tpm2_startauthsession(1). Option‐
198 ally, if the session requires an auth value to be sent with the session
199 handle (eg policy password), then append a + and a string as described
200 in the Passwords section.
201
202 Examples
203 To use a session context file called session.ctx.
204
205 session:session.ctx
206
207 To use a session context file called session.ctx AND send the authvalue
208 mypassword.
209
210 session:session.ctx+mypassword
211
212 To use a session context file called session.ctx AND send the HEX auth‐
213 value 0x11223344.
214
215 session:session.ctx+hex:11223344
216
217 PCR Authorizations
218 You can satisfy a PCR policy using the “pcr:” prefix and the PCR mini‐
219 language. The PCR minilanguage is as follows:
220 <pcr-spec>=<raw-pcr-file>
221
222 The PCR spec is documented in in the section “PCR bank specifiers”.
223
224 The raw-pcr-file is an optional argument that contains the output of
225 the raw PCR contents as returned by tpm2_pcrread(1).
226
227 PCR bank specifiers (pcr.md)
228
229 Examples
230 To satisfy a PCR policy of sha256 on banks 0, 1, 2 and 3 use a specifi‐
231 er of:
232
233 pcr:sha256:0,1,2,3
234
235 specifying AUTH.
236
238 Options that take algorithms support “nice-names”.
239
240 There are two major algorithm specification string classes, simple and
241 complex. Only certain algorithms will be accepted by the TPM, based on
242 usage and conditions.
243
244 Simple specifiers
245 These are strings with no additional specification data. When creating
246 objects, non-specified portions of an object are assumed to defaults.
247 You can find the list of known “Simple Specifiers Below”.
248
249 Asymmetric
250 • rsa
251
252 • ecc
253
254 Symmetric
255 • aes
256
257 • camellia
258
259 Hashing Algorithms
260 • sha1
261
262 • sha256
263
264 • sha384
265
266 • sha512
267
268 • sm3_256
269
270 • sha3_256
271
272 • sha3_384
273
274 • sha3_512
275
276 Keyed Hash
277 • hmac
278
279 • xor
280
281 Signing Schemes
282 • rsassa
283
284 • rsapss
285
286 • ecdsa
287
288 • ecdaa
289
290 • ecschnorr
291
292 Asymmetric Encryption Schemes
293 • oaep
294
295 • rsaes
296
297 • ecdh
298
299 Modes
300 • ctr
301
302 • ofb
303
304 • cbc
305
306 • cfb
307
308 • ecb
309
310 Misc
311 • null
312
313 Complex Specifiers
314 Objects, when specified for creation by the TPM, have numerous algo‐
315 rithms to populate in the public data. Things like type, scheme and
316 asymmetric details, key size, etc. Below is the general format for
317 specifying this data: <type>:<scheme>:<symmetric-details>
318
319 Type Specifiers
320 This portion of the complex algorithm specifier is required. The re‐
321 maining scheme and symmetric details will default based on the type
322 specified and the type of the object being created.
323
324 • aes - Default AES: aes128
325
326 • aes128<mode> - 128 bit AES with optional mode (ctr|ofb|cbc|cfb|ecb).
327 If mode is not specified, defaults to null.
328
329 • aes192<mode> - Same as aes128<mode>, except for a 192 bit key size.
330
331 • aes256<mode> - Same as aes128<mode>, except for a 256 bit key size.
332
333 • ecc - Elliptical Curve, defaults to ecc256.
334
335 • ecc192 - 192 bit ECC
336
337 • ecc224 - 224 bit ECC
338
339 • ecc256 - 256 bit ECC
340
341 • ecc384 - 384 bit ECC
342
343 • ecc521 - 521 bit ECC
344
345 • rsa - Default RSA: rsa2048
346
347 • rsa1024 - RSA with 1024 bit keysize.
348
349 • rsa2048 - RSA with 2048 bit keysize.
350
351 • rsa4096 - RSA with 4096 bit keysize.
352
353 Scheme Specifiers
354 Next, is an optional field, it can be skipped.
355
356 Schemes are usually Signing Schemes or Asymmetric Encryption Schemes.
357 Most signing schemes take a hash algorithm directly following the sign‐
358 ing scheme. If the hash algorithm is missing, it defaults to sha256.
359 Some take no arguments, and some take multiple arguments.
360
361 Hash Optional Scheme Specifiers
362 These scheme specifiers are followed by a dash and a valid hash algo‐
363 rithm, For example: oaep-sha256.
364
365 • oaep
366
367 • ecdh
368
369 • rsassa
370
371 • rsapss
372
373 • ecdsa
374
375 • ecschnorr
376
377 Multiple Option Scheme Specifiers
378 This scheme specifier is followed by a count (max size UINT16) then
379 followed by a dash(-) and a valid hash algorithm. * ecdaa For example,
380 ecdaa4-sha256. If no count is specified, it defaults to 4.
381
382 No Option Scheme Specifiers
383 This scheme specifier takes NO arguments. * rsaes
384
385 Symmetric Details Specifiers
386 This field is optional, and defaults based on the type of object being
387 created and it’s attributes. Generally, any valid Symmetric specifier
388 from the Type Specifiers list should work. If not specified, an asym‐
389 metric objects symmetric details defaults to aes128cfb.
390
391 Examples
392 Create an rsa2048 key with an rsaes asymmetric encryption scheme
393 tpm2_create -C parent.ctx -G rsa2048:rsaes -u key.pub -r key.priv
394
395 Create an ecc256 key with an ecdaa signing scheme with a count of 4 and
396 sha384 hash
397 /tpm2_create -C parent.ctx -G ecc256:ecdaa4-sha384 -u key.pub -r
398 key.priv cryptographic algorithms ALGORITHM.
399
401 Object Attributes are used to control various properties of created ob‐
402 jects. When specified as an option, either the raw bitfield mask or
403 “nice-names” may be used. The values can be found in Table 31 Part 2
404 of the TPM2.0 specification, which can be found here:
405
406 <https://trustedcomputinggroup.org/wp-content/uploads/TPM-
407 Rev-2.0-Part-2-Structures-01.38.pdf>
408
409 Nice names are calculated by taking the name field of table 31 and re‐
410 moving the prefix TPMA_OBJECT_ and lowercasing the result. Thus, TP‐
411 MA_OBJECT_FIXEDTPM becomes fixedtpm. Nice names can be joined using
412 the bitwise or “|” symbol.
413
414 For instance, to set The fields TPMA_OBJECT_FIXEDTPM, TPMA_OBJECT_NODA,
415 and TPMA_OBJECT_SIGN_ENCRYPT, the argument would be:
416
417 fixedtpm|noda|sign specifying the object attributes ATTRIBUTES.
418
420 This collection of options are common to many programs and provide in‐
421 formation that many users may expect.
422
423 • -h, --help=[man|no-man]: Display the tools manpage. By default, it
424 attempts to invoke the manpager for the tool, however, on failure
425 will output a short tool summary. This is the same behavior if the
426 “man” option argument is specified, however if explicit “man” is re‐
427 quested, the tool will provide errors from man on stderr. If the
428 “no-man” option if specified, or the manpager fails, the short op‐
429 tions will be output to stdout.
430
431 To successfully use the manpages feature requires the manpages to be
432 installed or on MANPATH, See man(1) for more details.
433
434 • -v, --version: Display version information for this tool, supported
435 tctis and exit.
436
437 • -V, --verbose: Increase the information that the tool prints to the
438 console during its execution. When using this option the file and
439 line number are printed.
440
441 • -Q, --quiet: Silence normal tool output to stdout.
442
443 • -Z, --enable-errata: Enable the application of errata fixups. Useful
444 if an errata fixup needs to be applied to commands sent to the TPM.
445 Defining the environment TPM2TOOLS_ENABLE_ERRATA is equivalent. in‐
446 formation many users may expect.
447
449 The TCTI or “Transmission Interface” is the communication mechanism
450 with the TPM. TCTIs can be changed for communication with TPMs across
451 different mediums.
452
453 To control the TCTI, the tools respect:
454
455 1. The command line option -T or --tcti
456
457 2. The environment variable: TPM2TOOLS_TCTI.
458
459 Note: The command line option always overrides the environment vari‐
460 able.
461
462 The current known TCTIs are:
463
464 • tabrmd - The resource manager, called tabrmd
465 (https://github.com/tpm2-software/tpm2-abrmd). Note that tabrmd and
466 abrmd as a tcti name are synonymous.
467
468 • mssim - Typically used for communicating to the TPM software simula‐
469 tor.
470
471 • device - Used when talking directly to a TPM device file.
472
473 • none - Do not initalize a connection with the TPM. Some tools allow
474 for off-tpm options and thus support not using a TCTI. Tools that do
475 not support it will error when attempted to be used without a TCTI
476 connection. Does not support ANY options and MUST BE presented as
477 the exact text of “none”.
478
479 The arguments to either the command line option or the environment
480 variable are in the form:
481
482 <tcti-name>:<tcti-option-config>
483
484 Specifying an empty string for either the <tcti-name> or <tcti-op‐
485 tion-config> results in the default being used for that portion respec‐
486 tively.
487
488 TCTI Defaults
489 When a TCTI is not specified, the default TCTI is searched for using
490 dlopen(3) semantics. The tools will search for tabrmd, device and
491 mssim TCTIs IN THAT ORDER and USE THE FIRST ONE FOUND. You can query
492 what TCTI will be chosen as the default by using the -v option to print
493 the version information. The “default-tcti” key-value pair will indi‐
494 cate which of the aforementioned TCTIs is the default.
495
496 Custom TCTIs
497 Any TCTI that implements the dynamic TCTI interface can be loaded. The
498 tools internally use dlopen(3), and the raw tcti-name value is used for
499 the lookup. Thus, this could be a path to the shared library, or a li‐
500 brary name as understood by dlopen(3) semantics.
501
503 This collection of options are used to configure the various known TCTI
504 modules available:
505
506 • device: For the device TCTI, the TPM character device file for use by
507 the device TCTI can be specified. The default is /dev/tpm0.
508
509 Example: -T device:/dev/tpm0 or export TPM2TOOLS_TCTI=“de‐
510 vice:/dev/tpm0”
511
512 • mssim: For the mssim TCTI, the domain name or IP address and port
513 number used by the simulator can be specified. The default are
514 127.0.0.1 and 2321.
515
516 Example: -T mssim:host=localhost,port=2321 or export TPM2TOOLS_TC‐
517 TI=“mssim:host=localhost,port=2321”
518
519 • abrmd: For the abrmd TCTI, the configuration string format is a se‐
520 ries of simple key value pairs separated by a `,' character. Each
521 key and value string are separated by a `=' character.
522
523 • TCTI abrmd supports two keys:
524
525 1. `bus_name' : The name of the tabrmd service on the bus (a
526 string).
527
528 2. `bus_type' : The type of the dbus instance (a string) limited to
529 `session' and `system'.
530
531 Specify the tabrmd tcti name and a config string of bus_name=com.ex‐
532 ample.FooBar:
533
534 \--tcti=tabrmd:bus_name=com.example.FooBar
535
536 Specify the default (abrmd) tcti and a config string of bus_type=ses‐
537 sion:
538
539 \--tcti:bus_type=session
540
541 NOTE: abrmd and tabrmd are synonymous. the various known TCTI mod‐
542 ules.
543
545 • If the hierarchy is null or the name hashing algorithm is null, tick‐
546 ets produced using the object will be NULL.
547
548 • If the private portion of an object is specified, the hierarchy must
549 be null or the TPM will reject loading it.
550
552 Load a TPM generated public key into the owner hierarchy
553 tpm2_createprimary -c primary.ctx
554
555 tpm2_create -C primary.ctx -u pub.dat -r priv.dat
556
557 tpm2_loadexternal -C o -u pub.dat -c pub.ctx
558 name: 000b9be4d7c6193a57e1bfc86a42a6b03856a91d2f9e77c6cbdb796a783d52d4b3b9
559
560 Load an RSA public key into the owner hierarchy
561 openssl genrsa -out private.pem 2048
562
563 openssl rsa -in private.pem -out public.pem -outform PEM -pubout
564
565 tpm2_loadexternal -C o -Grsa -u public.pem -c key.ctx
566 name: 000b7b91d304d16995d42792b57d0fb25df7abe5fdd8afe9950730e00dc5b934ddbc
567
568 Load an RSA key-pair into the null hierarchy
569 openssl genrsa -out private.pem 2048
570
571 tpm2_loadexternal -C n -Grsa -r private.pem -c key.ctx
572 name: 000b635ea220b6c62ec1d02343859dd203c8ac5dad82ebc5b124e407d2502f88691f
573
574 Load an AES key into the null hierarchy
575 dd if=/dev/urandom of=sym.key bs=1 count=16
576
577 tpm2_loadexternal -C n -Gaes -r sym.key -c key.ctx
578 name: 000bfc4d8dd7e4f921bcc9dca4b04f49564243cd9def129a3740002bfd4b9e966d34
579
581 Tools can return any of the following codes:
582
583 • 0 - Success.
584
585 • 1 - General non-specific error.
586
587 • 2 - Options handling error.
588
589 • 3 - Authentication error.
590
591 • 4 - TCTI related error.
592
593 • 5 - Non supported scheme. Applicable to tpm2_testparams.
594
596 Github Issues (https://github.com/tpm2-software/tpm2-tools/issues)
597
599 See the Mailing List (https://lists.01.org/mailman/listinfo/tpm2)
600
601
602
603tpm2-tools tpm2_loadexternal(1)