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