123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873 |
- .\" Automatically generated by Pandoc 1.19.2.4
- .\"
- .TH "tpm2_duplicate" "1" "" "tpm2\-tools" "General Commands Manual"
- .hy
- .SH NAME
- .PP
- tpm2_duplicate(1) \- Duplicates a loaded object so that it may be used
- in a different hierarchy.
- .SH SYNOPSIS
- .PP
- \f[B]tpm2_duplicate\f[] [\f[I]OPTIONS\f[]]
- .SH DESCRIPTION
- .PP
- \f[B]tpm2_duplicate\f[](1) \- This tool duplicates a loaded object so
- that it may be used in a different hierarchy.
- The new parent key for the duplicate may be on the same or different TPM
- or TPM_RH_NULL.
- .SH OPTIONS
- .PP
- These options control the key importation process:
- .IP \[bu] 2
- \f[B]\-G\f[], \f[B]\-\-wrapper\-algorithm\f[]=\f[I]ALGORITHM\f[]:
- .RS 2
- The symmetric algorithm to be used for the inner wrapper.
- Supports:
- .IP \[bu] 2
- aes \- AES 128 in CFB mode.
- .IP \[bu] 2
- null \- none
- .RE
- .IP \[bu] 2
- \f[B]\-i\f[], \f[B]\-\-encryptionkey\-in\f[]=\f[I]FILE\f[]:
- .RS 2
- .PP
- Specifies the filename of the symmetric key (128 bit data) to be used
- for the inner wrapper.
- Valid only when specified symmetric algorithm is not null
- .RE
- .IP \[bu] 2
- \f[B]\-o\f[], \f[B]\-\-encryptionkey\-out\f[]=\f[I]FILE\f[]:
- .RS 2
- .PP
- Specifies the filename to store the symmetric key (128 bit data) that
- was used for the inner wrapper.
- Valid only when specified symmetric algorithm is not null and
- \-\-input\-key\-file is not specified.
- The TPM generates the key in this case.
- .RE
- .IP \[bu] 2
- \f[B]\-C\f[], \f[B]\-\-parent\-context\f[]=\f[I]OBJECT\f[]:
- .RS 2
- .PP
- The parent key object.
- .RE
- .IP \[bu] 2
- \f[B]\-U\f[], \f[B]\-\-parent\-public\f[]=\f[I]FILE\f[]:
- .RS 2
- .PP
- Specifies the file path to the public key of the parent object on the
- destination TPM.
- This should be a \f[C]TPM2B_PUBLIC\f[] formatted file.
- .RE
- .IP \[bu] 2
- \f[B]\-k\f[], \f[B]\-\-private\-key\f[]=\f[I]FILE\f[]:
- .RS 2
- .PP
- Specifies the file path to the external private key be encrypted for the
- remote TPM.
- This should be a PEM format private key.
- .RE
- .IP \[bu] 2
- \f[B]\-r\f[], \f[B]\-\-private\f[]=\f[I]FILE\f[]:
- .RS 2
- .PP
- Specifies the file path to save the private portion of the duplicated
- object.
- # Protection Details
- .RE
- .PP
- Objects that can move outside of TPM need to be protected
- (confidentiality and integrity).
- For instance, transient objects require that TPM protected data (key or
- seal material) be stored outside of the TPM.
- This is seen in tools like tpm2_create(1), where the \f[B]\-r\f[] option
- outputs this protected data.
- This blob contains the sensitive portions of the object.
- The sensitive portions of the object are protected by the parent object,
- using the parent\[aq]s symmetric encryption details to encrypt the
- sensitive data and HMAC it.
- .PP
- In\-depth details can be found in sections 23 of:
- .IP \[bu] 2
- https://trustedcomputinggroup.org/wp\-content/uploads/TPM\-Rev\-2.0\-Part\-1\-Architecture\-01.38.pdf
- .PP
- Notably Figure 20, is relevant, even though it\[aq]s specifically
- referring to duplication blobs, the process is identical.
- .PP
- If the output is from tpm2_duplicate(1), the output will be slightly
- different, as described fully in section 23.
- .IP \[bu] 2
- \f[B]\-u\f[], \f[B]\-\-public\f[]=\f[I]FILE\f[]:
- .RS 2
- .PP
- Specifies the file path to save the public portion of the duplicated
- object, if an external key is being duplicated.
- .RE
- .IP \[bu] 2
- \f[B]\-s\f[], \f[B]\-\-encrypted\-seed\f[]=\f[I]FILE\f[]:
- .RS 2
- .PP
- The file to save the encrypted seed of the duplicated object.
- .RE
- .IP \[bu] 2
- \f[B]\-p\f[], \f[B]\-\-auth\f[]=\f[I]AUTH\f[]:
- .RS 2
- .PP
- The authorization value for the key, optional.
- .RE
- .IP \[bu] 2
- \f[B]\-c\f[], \f[B]\-\-key\-context\f[]=\f[I]OBJECT\f[]:
- .RS 2
- .PP
- The object to be duplicated.
- .RE
- .IP \[bu] 2
- \f[B]\-\-cphash\f[]=\f[I]FILE\f[]
- .RS 2
- .PP
- File path to record the hash of the command parameters.
- This is commonly termed as cpHash.
- NOTE: When this option is selected, The tool will not actually execute
- the command, it simply returns a cpHash.
- .RE
- .SS References
- .SH Context Object Format
- .PP
- The type of a context object, whether it is a handle or file name, is
- determined according to the following logic \f[I]in\-order\f[]:
- .IP \[bu] 2
- If the argument is a file path, then the file is loaded as a restored
- TPM transient object.
- .IP \[bu] 2
- If the argument is a \f[I]prefix\f[] match on one of:
- .RS 2
- .IP \[bu] 2
- owner: the owner hierarchy
- .IP \[bu] 2
- platform: the platform hierarchy
- .IP \[bu] 2
- endorsement: the endorsement hierarchy
- .IP \[bu] 2
- lockout: the lockout control persistent object
- .RE
- .IP \[bu] 2
- If the argument argument can be loaded as a number it will be treat as a
- handle, e.g.
- 0x81010013 and used directly.\f[I]OBJECT\f[].
- .SH Authorization Formatting
- .PP
- Authorization for use of an object in TPM2.0 can come in 3 different
- forms: 1.
- Password 2.
- HMAC 3.
- Sessions
- .PP
- \f[B]NOTE:\f[] "Authorizations default to the \f[B]EMPTY PASSWORD\f[]
- when not specified".
- .SS Passwords
- .PP
- Passwords are interpreted in the following forms below using prefix
- identifiers.
- .PP
- \f[B]Note\f[]: By default passwords are assumed to be in the string form
- when they do not have a prefix.
- .SS String
- .PP
- A string password, specified by prefix "str:" or it\[aq]s absence (raw
- string without prefix) is not interpreted, and is directly used for
- authorization.
- .SS Examples
- .IP
- .nf
- \f[C]
- foobar
- str:foobar
- \f[]
- .fi
- .SS Hex\-string
- .PP
- A hex\-string password, specified by prefix "hex:" is converted from a
- hexidecimal form into a byte array form, thus allowing passwords with
- non\-printable and/or terminal un\-friendly characters.
- .SS Example
- .IP
- .nf
- \f[C]
- hex:0x1122334455667788
- \f[]
- .fi
- .SS File
- .PP
- A file based password, specified be prefix "file:" should be the path of
- a file containing the password to be read by the tool or a "\-" to use
- stdin.
- Storing passwords in files prevents information leakage, passwords
- passed as options can be read from the process list or common shell
- history features.
- .SS Examples
- .IP
- .nf
- \f[C]
- #\ to\ use\ stdin\ and\ be\ prompted
- file:\-
- #\ to\ use\ a\ file\ from\ a\ path
- file:path/to/password/file
- #\ to\ echo\ a\ password\ via\ stdin:
- echo\ foobar\ |\ tpm2_tool\ \-p\ file:\-
- #\ to\ use\ a\ bash\ here\-string\ via\ stdin:
- tpm2_tool\ \-p\ file:\-\ <<<\ foobar
- \f[]
- .fi
- .SS Sessions
- .PP
- When using a policy session to authorize the use of an object, prefix
- the option argument with the \f[I]session\f[] keyword.
- Then indicate a path to a session file that was created with
- tpm2_startauthsession(1).
- Optionally, if the session requires an auth value to be sent with the
- session handle (eg policy password), then append a + and a string as
- described in the \f[B]Passwords\f[] section.
- .SS Examples
- .PP
- To use a session context file called \f[I]session.ctx\f[].
- .IP
- .nf
- \f[C]
- session:session.ctx
- \f[]
- .fi
- .PP
- To use a session context file called \f[I]session.ctx\f[] \f[B]AND\f[]
- send the authvalue mypassword.
- .IP
- .nf
- \f[C]
- session:session.ctx+mypassword
- \f[]
- .fi
- .PP
- To use a session context file called \f[I]session.ctx\f[] \f[B]AND\f[]
- send the \f[I]HEX\f[] authvalue 0x11223344.
- .IP
- .nf
- \f[C]
- session:session.ctx+hex:11223344
- \f[]
- .fi
- .SS PCR Authorizations
- .PP
- You can satisfy a PCR policy using the "pcr:" prefix and the PCR
- minilanguage.
- The PCR minilanguage is as follows:
- \f[C]<pcr\-spec>=<raw\-pcr\-file>\f[]
- .PP
- The PCR spec is documented in in the section "PCR bank specifiers".
- .PP
- The \f[C]raw\-pcr\-file\f[] is an \f[B]optional\f[] the output of the
- raw PCR contents as returned by \f[I]tpm2_pcrread(1)\f[].
- .PP
- PCR bank specifiers (common/pcr.md)
- .SS Examples
- .PP
- To satisfy a PCR policy of sha256 on banks 0, 1, 2 and 3 use a specifier
- of:
- .IP
- .nf
- \f[C]
- pcr:sha256:0,1,2,3
- \f[]
- .fi
- .PP
- specifying \f[I]AUTH\f[].
- .SH Algorithm Specifiers
- .PP
- Options that take algorithms support "nice\-names".
- .PP
- There are two major algorithm specification string classes, simple and
- complex.
- Only certain algorithms will be accepted by the TPM, based on usage and
- conditions.
- .SS Simple specifiers
- .PP
- These are strings with no additional specification data.
- When creating objects, non\-specified portions of an object are assumed
- to defaults.
- You can find the list of known "Simple Specifiers Below".
- .SS Asymmetric
- .IP \[bu] 2
- rsa
- .IP \[bu] 2
- ecc
- .SS Symmetric
- .IP \[bu] 2
- aes
- .IP \[bu] 2
- camellia
- .SS Hashing Algorithms
- .IP \[bu] 2
- sha1
- .IP \[bu] 2
- sha256
- .IP \[bu] 2
- sha384
- .IP \[bu] 2
- sha512
- .IP \[bu] 2
- sm3_256
- .IP \[bu] 2
- sha3_256
- .IP \[bu] 2
- sha3_384
- .IP \[bu] 2
- sha3_512
- .SS Keyed Hash
- .IP \[bu] 2
- hmac
- .IP \[bu] 2
- xor
- .SS Signing Schemes
- .IP \[bu] 2
- rsassa
- .IP \[bu] 2
- rsapss
- .IP \[bu] 2
- ecdsa
- .IP \[bu] 2
- ecdaa
- .IP \[bu] 2
- ecschnorr
- .SS Asymmetric Encryption Schemes
- .IP \[bu] 2
- oaep
- .IP \[bu] 2
- rsaes
- .IP \[bu] 2
- ecdh
- .SS Modes
- .IP \[bu] 2
- ctr
- .IP \[bu] 2
- ofb
- .IP \[bu] 2
- cbc
- .IP \[bu] 2
- cfb
- .IP \[bu] 2
- ecb
- .SS Misc
- .IP \[bu] 2
- null
- .SS Complex Specifiers
- .PP
- Objects, when specified for creation by the TPM, have numerous
- algorithms to populate in the public data.
- Things like type, scheme and asymmetric details, key size, etc.
- Below is the general format for specifying this data:
- \f[C]<type>:<scheme>:<symmetric\-details>\f[]
- .SS Type Specifiers
- .PP
- This portion of the complex algorithm specifier is required.
- The remaining scheme and symmetric details will default based on the
- type specified and the type of the object being created.
- .IP \[bu] 2
- aes \- Default AES: aes128
- .IP \[bu] 2
- aes128\f[C]<mode>\f[] \- 128 bit AES with optional mode
- (\f[I]ctr\f[]|\f[I]ofb\f[]|\f[I]cbc\f[]|\f[I]cfb\f[]|\f[I]ecb\f[]).
- If mode is not specified, defaults to \f[I]null\f[].
- .IP \[bu] 2
- aes192\f[C]<mode>\f[] \- Same as aes128\f[C]<mode>\f[], except for a 192
- bit key size.
- .IP \[bu] 2
- aes256\f[C]<mode>\f[] \- Same as aes128\f[C]<mode>\f[], except for a 256
- bit key size.
- .IP \[bu] 2
- ecc \- Elliptical Curve, defaults to ecc256.
- .IP \[bu] 2
- ecc192 \- 192 bit ECC
- .IP \[bu] 2
- ecc224 \- 224 bit ECC
- .IP \[bu] 2
- ecc256 \- 256 bit ECC
- .IP \[bu] 2
- ecc384 \- 384 bit ECC
- .IP \[bu] 2
- ecc521 \- 521 bit ECC
- .IP \[bu] 2
- rsa \- Default RSA: rsa2048
- .IP \[bu] 2
- rsa1024 \- RSA with 1024 bit keysize.
- .IP \[bu] 2
- rsa2048 \- RSA with 2048 bit keysize.
- .IP \[bu] 2
- rsa4096 \- RSA with 4096 bit keysize.
- .SS Scheme Specifiers
- .PP
- Next, is an optional field, it can be skipped.
- .PP
- Schemes are usually \f[B]Signing Schemes\f[] or \f[B]Asymmetric
- Encryption Schemes\f[].
- Most signing schemes take a hash algorithm directly following the
- signing scheme.
- If the hash algorithm is missing, it defaults to \f[I]sha256\f[].
- Some take no arguments, and some take multiple arguments.
- .SS Hash Optional Scheme Specifiers
- .PP
- These scheme specifiers are followed by a dash and a valid hash
- algorithm, For example: \f[C]oaep\-sha256\f[].
- .IP \[bu] 2
- oaep
- .IP \[bu] 2
- ecdh
- .IP \[bu] 2
- rsassa
- .IP \[bu] 2
- rsapss
- .IP \[bu] 2
- ecdsa
- .IP \[bu] 2
- ecschnorr
- .SS Multiple Option Scheme Specifiers
- .PP
- This scheme specifier is followed by a count (max size UINT16) then
- followed by a dash(\-) and a valid hash algorithm.
- * ecdaa For example, ecdaa4\-sha256.
- If no count is specified, it defaults to 4.
- .SS No Option Scheme Specifiers
- .PP
- This scheme specifier takes NO arguments.
- * rsaes
- .SS Symmetric Details Specifiers
- .PP
- This field is optional, and defaults based on the \f[I]type\f[] of
- object being created and it\[aq]s attributes.
- Generally, any valid \f[B]Symmetric\f[] specifier from the \f[B]Type
- Specifiers\f[] list should work.
- If not specified, an asymmetric objects symmetric details defaults to
- \f[I]aes128cfb\f[].
- .SS Examples
- .SS Create an rsa2048 key with an rsaes asymmetric encryption scheme
- .PP
- \f[C]tpm2_create\ \-C\ parent.ctx\ \-G\ rsa2048:rsaes\ \-u\ key.pub\ \-r\ key.priv\f[]
- .SS Create an ecc256 key with an ecdaa signing scheme with a count of 4
- and sha384 hash
- .PP
- \f[C]/tpm2_create\ \-C\ parent.ctx\ \-G\ ecc256:ecdaa4\-sha384\ \-u\ key.pub\ \-r\ key.priv\f[]
- cryptographic algorithms \f[I]ALGORITHM\f[].
- .SH COMMON OPTIONS
- .PP
- This collection of options are common to many programs and provide
- information that many users may expect.
- .IP \[bu] 2
- \f[B]\-h\f[], \f[B]\-\-help=[man|no\-man]\f[]: Display the tools
- manpage.
- By default, it attempts to invoke the manpager for the tool, however, on
- failure will output a short tool summary.
- This is the same behavior if the "man" option argument is specified,
- however if explicit "man" is requested, the tool will provide errors
- from man on stderr.
- If the "no\-man" option if specified, or the manpager fails, the short
- options will be output to stdout.
- .RS 2
- .PP
- To successfully use the manpages feature requires the manpages to be
- installed or on \f[I]MANPATH\f[], See man(1) for more details.
- .RE
- .IP \[bu] 2
- \f[B]\-v\f[], \f[B]\-\-version\f[]: Display version information for this
- tool, supported tctis and exit.
- .IP \[bu] 2
- \f[B]\-V\f[], \f[B]\-\-verbose\f[]: Increase the information that the
- tool prints to the console during its execution.
- When using this option the file and line number are printed.
- .IP \[bu] 2
- \f[B]\-Q\f[], \f[B]\-\-quiet\f[]: Silence normal tool output to stdout.
- .IP \[bu] 2
- \f[B]\-Z\f[], \f[B]\-\-enable\-errata\f[]: Enable the application of
- errata fixups.
- Useful if an errata fixup needs to be applied to commands sent to the
- TPM.
- Defining the environment TPM2TOOLS_ENABLE_ERRATA is equivalent.
- information many users may expect.
- .SH TCTI Configuration
- .PP
- The TCTI or "Transmission Interface" is the communication mechanism with
- the TPM.
- TCTIs can be changed for communication with TPMs across different
- mediums.
- .PP
- To control the TCTI, the tools respect:
- .IP "1." 3
- The command line option \f[B]\-T\f[] or \f[B]\-\-tcti\f[]
- .IP "2." 3
- The environment variable: \f[I]TPM2TOOLS_TCTI\f[].
- .PP
- \f[B]Note:\f[] The command line option always overrides the environment
- variable.
- .PP
- The current known TCTIs are:
- .IP \[bu] 2
- tabrmd \- The resource manager, called
- tabrmd (https://github.com/tpm2-software/tpm2-abrmd).
- Note that tabrmd and abrmd as a tcti name are synonymous.
- .IP \[bu] 2
- mssim \- Typically used for communicating to the TPM software simulator.
- .IP \[bu] 2
- device \- Used when talking directly to a TPM device file.
- .IP \[bu] 2
- none \- Do not initalize a connection with the TPM.
- Some tools allow for off\-tpm options and thus support not using a TCTI.
- Tools that do not support it will error when attempted to be used
- without a TCTI connection.
- Does not support \f[I]ANY\f[] options and \f[I]MUST BE\f[] presented as
- the exact text of "none".
- .PP
- The arguments to either the command line option or the environment
- variable are in the form:
- .PP
- \f[C]<tcti\-name>:<tcti\-option\-config>\f[]
- .PP
- Specifying an empty string for either the \f[C]<tcti\-name>\f[] or
- \f[C]<tcti\-option\-config>\f[] results in the default being used for
- that portion respectively.
- .SS TCTI Defaults
- .PP
- When a TCTI is not specified, the default TCTI is searched for using
- \f[I]dlopen(3)\f[] semantics.
- The tools will search for \f[I]tabrmd\f[], \f[I]device\f[] and
- \f[I]mssim\f[] TCTIs \f[B]IN THAT ORDER\f[] and \f[B]USE THE FIRST ONE
- FOUND\f[].
- You can query what TCTI will be chosen as the default by using the
- \f[B]\-v\f[] option to print the version information.
- The "default\-tcti" key\-value pair will indicate which of the
- aforementioned TCTIs is the default.
- .SS Custom TCTIs
- .PP
- Any TCTI that implements the dynamic TCTI interface can be loaded.
- The tools internally use \f[I]dlopen(3)\f[], and the raw
- \f[I]tcti\-name\f[] value is used for the lookup.
- Thus, this could be a path to the shared library, or a library name as
- understood by \f[I]dlopen(3)\f[] semantics.
- .SH TCTI OPTIONS
- .PP
- This collection of options are used to configure the various known TCTI
- modules available:
- .IP \[bu] 2
- \f[B]device\f[]: For the device TCTI, the TPM character device file for
- use by the device TCTI can be specified.
- The default is \f[I]/dev/tpm0\f[].
- .RS 2
- .PP
- Example: \f[B]\-T device:/dev/tpm0\f[] or \f[B]export
- \f[I]TPM2TOOLS_TCTI\f[]="device:/dev/tpm0"\f[]
- .RE
- .IP \[bu] 2
- \f[B]mssim\f[]: For the mssim TCTI, the domain name or IP address and
- port number used by the simulator can be specified.
- The default are 127.0.0.1 and 2321.
- .RS 2
- .PP
- Example: \f[B]\-T mssim:host=localhost,port=2321\f[] or \f[B]export
- \f[I]TPM2TOOLS_TCTI\f[]="mssim:host=localhost,port=2321"\f[]
- .RE
- .IP \[bu] 2
- \f[B]abrmd\f[]: For the abrmd TCTI, the configuration string format is a
- series of simple key value pairs separated by a \[aq],\[aq] character.
- Each key and value string are separated by a \[aq]=\[aq] character.
- .RS 2
- .IP \[bu] 2
- TCTI abrmd supports two keys:
- .RS 2
- .IP "1." 3
- \[aq]bus_name\[aq] : The name of the tabrmd service on the bus (a
- string).
- .IP "2." 3
- \[aq]bus_type\[aq] : The type of the dbus instance (a string) limited to
- \[aq]session\[aq] and \[aq]system\[aq].
- .RE
- .PP
- Specify the tabrmd tcti name and a config string of
- \f[C]bus_name=com.example.FooBar\f[]:
- .PP
- \f[C]\\\-\-tcti=tabrmd:bus_name=com.example.FooBar\f[]
- .PP
- Specify the default (abrmd) tcti and a config string of
- \f[C]bus_type=session\f[]:
- .PP
- \f[C]\\\-\-tcti:bus_type=session\f[]
- .PP
- \f[B]NOTE\f[]: abrmd and tabrmd are synonymous.
- the various known TCTI modules.
- .RE
- .SH EXAMPLES
- .PP
- To duplicate a key, one needs the key to duplicate, created with a
- policy that
- .PD 0
- .P
- .PD
- allows duplication and a new parent:
- .IP
- .nf
- \f[C]
- tpm2_startauthsession\ \-S\ session.dat
- tpm2_policycommandcode\ \-S\ session.dat\ \-L\ policy.dat\ TPM2_CC_Duplicate
- tpm2_flushcontext\ session.dat
- tpm2_createprimary\ \-C\ o\ \-g\ sha256\ \-G\ rsa\ \-c\ primary.ctxt
- tpm2_create\ \-C\ primary.ctxt\ \-g\ sha256\ \-G\ rsa\ \-r\ key.prv\ \-u\ key.pub\ \\
- \-L\ policy.dat\ \-a\ "sensitivedataorigin"
- tpm2_loadexternal\ \-C\ o\ \-u\ new_parent.pub\ \-c\ new_parent.ctxt
- tpm2_startauthsession\ \\\-\-policy\-session\ \-S\ session.dat
- tpm2_policycommandcode\ \-S\ session.dat\ \-L\ policy.dat\ TPM2_CC_Duplicate
- tpm2_duplicate\ \-C\ new_parent.ctxt\ \-c\ key.ctxt\ \-G\ null\ \-p\ "session:session.dat"\ \\
- \-r\ duprv.bin\ \-s\ seed.dat
- tpm2_flushcontext\ session.dat
- \f[]
- .fi
- .PP
- As an end\-to\-end example, the following will transfer an RSA key
- generated on \f[C]TPM\-A\f[] to \f[C]TPM\-B\f[]
- .SS On TPM\-B
- .PP
- Create a parent object that will be used to wrap/transfer the key.
- .IP
- .nf
- \f[C]
- tpm2_createprimary\ \-C\ o\ \-g\ sha256\ \-G\ rsa\ \-c\ primary.ctx
- tpm2_create\ \ \-C\ primary.ctx\ \-g\ sha256\ \-G\ rsa\ \\
- \-r\ new_parent.prv\ \ \-u\ new_parent.pub\ \\
- \-a\ "restricted|sensitivedataorigin|decrypt|userwithauth"
- \f[]
- .fi
- .PP
- Copy \f[C]new_parent.pub\f[] to \f[C]TPM\-A\f[].
- .SS On TPM\-A
- .PP
- Create root object and auth policy allows duplication only
- .IP
- .nf
- \f[C]
- tpm2_createprimary\ \-C\ o\ \-g\ sha256\ \-G\ rsa\ \-c\ primary.ctx
- tpm2_startauthsession\ \-S\ session.dat
- tpm2_policycommandcode\ \-S\ session.dat\ \-L\ dpolicy.dat\ TPM2_CC_Duplicate
- tpm2_flushcontext\ session.dat
- rm\ session.dat
- \f[]
- .fi
- .PP
- Generate an RSA keypair on TPM\-A that will be duplicated (note the
- passphrase is \[aq]foo\[aq])
- .IP
- .nf
- \f[C]
- tpm2_create\ \-C\ primary.ctx\ \-g\ sha256\ \-G\ rsa\ \-p\ foo\ \-r\ key.prv\ \\
- \-u\ key.pub\ \ \-L\ dpolicy.dat\ \-a\ "sensitivedataorigin|userwithauth|decrypt|sign"
- tpm2_load\ \-C\ primary.ctx\ \-r\ key.prv\ \-u\ key.pub\ \-c\ key.ctx
- tpm2_readpublic\ \-c\ key.ctx\ \-o\ dup.pub
- \f[]
- .fi
- .PP
- Test sign and encryption locally (so we can compare later that the same
- key was transferred).
- .IP
- .nf
- \f[C]
- echo\ "meet\ me\ at.."\ >file.txt
- tpm2_rsaencrypt\ \-c\ key.ctx\ \ \-o\ data.encrypted\ file.txt
- tpm2_sign\ \-c\ key.ctx\ \-g\ sha256\ \-f\ plain\ \-p\ foo\ \-o\ sign.raw\ file.txt
- \f[]
- .fi
- .PP
- Compare the signature hash (we will use this later to confirm the key
- was transferred to TPM\-B):
- .IP
- .nf
- \f[C]
- sha256sum\ sign.raw
- a1b4e3fbaa29e6e46d95cff498150b6b8e7d9fd21182622e8f5a3ddde257879e
- \f[]
- .fi
- .PP
- Start an auth session and policy command to allow duplication
- .IP
- .nf
- \f[C]
- tpm2_startauthsession\ \-\-policy\-session\ \-S\ session.dat
- tpm2_policycommandcode\ \-S\ session.dat\ \-L\ dpolicy.dat\ TPM2_CC_Duplicate
- \f[]
- .fi
- .PP
- Load the new_parent.pub file transferred from \f[C]TPM\-B\f[]
- .IP
- .nf
- \f[C]
- tpm2_loadexternal\ \-C\ o\ \-u\ new_parent.pub\ \-c\ new_parent.ctx
- \f[]
- .fi
- .PP
- Start the duplication
- .IP
- .nf
- \f[C]
- tpm2_duplicate\ \-C\ new_parent.ctx\ \-c\ key.ctx\ \-G\ null\ \ \\
- \-p\ "session:session.dat"\ \-r\ dup.dpriv\ \-s\ dup.seed
- \f[]
- .fi
- .PP
- Copy the following files to TPM\-B: * dup.pub * dup.dpriv * dup.seed *
- (optionally data.encrypted just to test decryption)
- .SS On TPM\-B
- .PP
- Start an auth,policy session
- .IP
- .nf
- \f[C]
- tpm2_startauthsession\ \-\-policy\-session\ \-S\ session.dat
- tpm2_policycommandcode\ \-S\ session.dat\ \-L\ dpolicy.dat\ TPM2_CC_Duplicate
- \f[]
- .fi
- .PP
- Load the context we used to transfer
- .IP
- .nf
- \f[C]
- tpm2_flushcontext\ \-\-transient\-object
- tpm2_load\ \-C\ primary.ctx\ \-u\ new_parent.pub\ \-r\ new_parent.prv\ \-c\ new_parent.ctx
- \f[]
- .fi
- .PP
- Import the duplicated context against the parent we used
- .IP
- .nf
- \f[C]
- tpm2_import\ \-C\ new_parent.ctx\ \-u\ dup.pub\ \-i\ dup.dpriv\ \\
- \-r\ dup.prv\ \-s\ dup.seed\ \-L\ dpolicy.dat
- \f[]
- .fi
- .PP
- Load the duplicated key context
- .IP
- .nf
- \f[C]
- tpm2_flushcontext\ \-\-transient\-object
- tpm2_load\ \-C\ new_parent.ctx\ \-u\ dup.pub\ \-r\ dup.prv\ \-c\ dup.ctx
- \f[]
- .fi
- .PP
- Test the imported key matches
- .IP \[bu] 2
- Sign
- .IP
- .nf
- \f[C]
- echo\ "meet\ me\ at.."\ >file.txt
- tpm2_sign\ \-c\ dup.ctx\ \-g\ sha256\ \-o\ sig.rss\ \-p\ foo\ file.txt
- dd\ if=sig.rss\ of=sign.raw\ bs=1\ skip=6\ count=256
- \f[]
- .fi
- .PP
- Compare the signature file hash:
- .IP
- .nf
- \f[C]
- $\ sha256sum\ sign.raw
- a1b4e3fbaa29e6e46d95cff498150b6b8e7d9fd21182622e8f5a3ddde257879e
- \f[]
- .fi
- .IP \[bu] 2
- Decryption
- .IP
- .nf
- \f[C]
- tpm2_flushcontext\ \-\-transient\-object
- tpm2_rsadecrypt\ \-p\ foo\ \-c\ dup.ctx\ \-o\ data.ptext\ data.encrypted
- #\ cat\ data.ptext\
- meet\ me\ at..
- \f[]
- .fi
- .SS Exporting an OpenSSL RSA key for a remote TPM
- .PP
- To securely send an OpenSSL generated RSA key to a remote TPM such that
- only that remote TPM will be able to load it, and without exposing the
- private key to the host operating system on the remote machine:
- .IP \[bu] 2
- On the destination TPM\-B, create a primary context and read its public
- key, then send \f[C]primary.pub\f[] to the source machine:
- .IP
- .nf
- \f[C]
- tpm2_createprimary\ \-c\ primary.ctx
- tpm2_readpublic\ \-c\ primary.ctx\ \-o\ primary.pub
- \f[]
- .fi
- .IP \[bu] 2
- On the source machine create the RSA private key and wrap it for the
- destination TPM\[aq]s public key.
- Similar to \f[C]tpm2_makecredential\f[], this step should not require a
- TPM.
- .IP
- .nf
- \f[C]
- openssl\ genrsa\ \-out\ rsa.pem
- tpm2_duplicate\ \-U\ primary.pub\ \-G\ rsa\ \-k\ rsa.pem\ \-u\ rsa.pub\ \-r\ rsa.dpriv\ \-s\ rsa.seed
- \f[]
- .fi
- .IP \[bu] 2
- Send the \f[C]rsa.pub\f[], \f[C]rsa.dpriv\f[] and \f[C]rsa.seed\f[] to
- the destination TPM\-B and import the files, which will decrypt them
- using the \f[C]primary.ctx\f[] to produce \f[C]rsa.priv\f[], which can
- then be loaded and used as a TPM key:
- .IP
- .nf
- \f[C]
- tpm2_import\ \-C\ primary.ctx\ \-G\ rsa\ \-i\ rsa.dpriv\ \-s\ rsa.seed\ \-u\ rsa.pub\ \-r\ rsa.priv
- tpm2_load\ \-C\ primary.ctx\ \-c\ rsa.ctx\ \-u\ rsa.pub\ \-r\ rsa.priv
- \f[]
- .fi
- .SH Returns
- .PP
- Tools can return any of the following codes:
- .IP \[bu] 2
- 0 \- Success.
- .IP \[bu] 2
- 1 \- General non\-specific error.
- .IP \[bu] 2
- 2 \- Options handling error.
- .IP \[bu] 2
- 3 \- Authentication error.
- .IP \[bu] 2
- 4 \- TCTI related error.
- .IP \[bu] 2
- 5 \- Non supported scheme.
- Applicable to tpm2_testparams.
- .SH BUGS
- .PP
- Github Issues (https://github.com/tpm2-software/tpm2-tools/issues)
- .SH HELP
- .PP
- See the Mailing List (https://lists.01.org/mailman/listinfo/tpm2)
|