1tpm2_create(1)              General Commands Manual             tpm2_create(1)
2
3
4

NAME

6       tpm2_create(1) - Create a child object.
7

SYNOPSIS

9       tpm2_create [OPTIONS]
10

DESCRIPTION

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

OPTIONS

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
95https://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

Context Object Format

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

Authorization Formatting

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

Algorithm Specifiers

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

Object Attributes

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

COMMON OPTIONS

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

TCTI Configuration

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

TCTI OPTIONS

543       This collection of options are used to configure the various known TCTI
544       modules available:
545
546device: 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

EXAMPLES

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

Returns

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

BUGS

635       Github Issues (https://github.com/tpm2-software/tpm2-tools/issues)
636

HELP

638       See the Mailing List (https://lists.01.org/mailman/listinfo/tpm2)
639
640
641
642tpm2-tools                                                      tpm2_create(1)
Impressum