tpm2_duplicate(1) General Commands Manual tpm2_duplicate(1) (NAME) tpm2_duplicate - TPM2 (SYNOPSIS) tpm2_duplicate [] (DESCRIPTION) tpm2_duplicate(1) (hierarchy) . TPM TPM TPM_RH_NULL . (OPTIONS) : o -G, --wrapper-algorithm=ALGORITHM: -U (inner wrapper) . : o aes - AES 128 CFB. o null - . -U. o -G, --key-algorithm=ALGORITHM: -U. o -i, --encryptionkey-in=FILE: ( ) . null . o -o, --encryptionkey-out=FILE: ( ) . null --input-key-file . TPM . o -C, --parent-context=OBJECT: . o -U, --parent-public=FILE: TPM . TPM2B_PUBLIC . PEM DER TPM . o -k, --private-key=FILE: TPM . PEM . o -r, --private=FILE: . # (Protection Details) TPM ( ). (transient) TPM ( ) TPM . tpm2_create(1) -r . (blob) . HMAC . : o https://trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-1-Architecture-01.38.pdf . tpm2_duplicate(1) . o -u, --public=FILE: . o -s, --encrypted-seed=FILE: (seed) . o -p, --auth=AUTH: . o -L, --policy=FILE: . o -c, --key-context=OBJECT: . o -a, --attributes=ATTRIBUTES: . : TPMA_OBJECT_SIGN_ENCRYPT|TPMA_OBJECT_DECRYPT|TPMA_OBJECT_USERWITHAUTH : auth TPMA_OBJECT_USERWITHAUTH . o --cphash=FILE . cpHash . : cpHash . (References) (Context Object Format) : o (transient) TPM . o : o owner: (owner hierarchy) o platform: (platform hierarchy) o endorsement: (endorsement hierarchy) o lockout: (lockout control persistent object) o ( 0x81010013) ._OBJECT_. (Authorization Formatting) TPM2.0 : 1. (Password) 2. HMAC 3. (Sessions) : " (EMPTY PASSWORD) ". (auth values) HMAC . . . HMAC ( tpm2_startauthsession(1) ). (Passwords) . : . (String) "str:" ( ) . (Examples) foobar str:foobar (Hex-string) "hex:" . (Example) hex:1122334455667788 (File) "file:" "-" (stdin) . . (Examples) # file:- # file:path/to/password/file # stdin echo: echo foobar | tpm2_tool -p file:- # here-string stdin: tpm2_tool -p file:- <<< foobar (Sessions) (policy session) session . tpm2_startauthsession(1) . (auth value) ( ) + (Passwords) . (Examples) session.ctx: session:session.ctx session.ctx mypassword: session:session.ctx+mypassword session.ctx 0x11223344: session:session.ctx+hex:11223344 PCR (PCR Authorizations) "pcr:" PCR PCR . PCR : = PCR " PCR" . raw-pcr-file PCR tpm2_pcrread(1) . PCR (Examples) PCR sha256 0 1 2 3 : pcr:sha256:0,1,2,3 AUTH. (Algorithm Specifiers) << >> (nice-names) . : . TPM . (Simple specifiers) . . << >> . (Asymmetric) o rsa o ecc (Symmetric) o aes o camellia o sm4 (Hashing Algorithms) o sha1 o sha256 o sha384 o sha512 o sm3_256 o sha3_256 o sha3_384 o sha3_512 (Keyed Hash) o hmac o xor (Signing Schemes) o rsassa o rsapss o ecdsa o ecdaa o ecschnorr o sm2 (Asymmetric Encryption Schemes) o oaep o rsaes o ecdh (Modes) o ctr o ofb o cbc o cfb o ecb (Misc) o null (Complex Specifiers) TPM . : :: (Type Specifiers) . . o aes - AES: aes128 o aes128 - AES (ctr|ofb|cbc|cfb|ecb). null . o aes192 - aes128 . o aes256 - aes128 . o sm4 - SM4: sm4128 o sm4128 or sm4_128 - SM4 (ctr|ofb|cbc|cfb|ecb). null . o ecc - ecc256. o ecc192 or ecc_nist_p192 - ECC NIST o ecc224 or ecc_nist_p224 - ECC NIST o ecc256 or ecc_nist_p256 - ECC NIST o ecc384 or ecc_nist_p384 - ECC NIST o ecc521 or ecc_nist_p521 - ECC NIST o ecc_sm2 or ecc_sm2_p256 - SM2 o rsa - RSA: rsa2048 o rsa1024 - RSA . o rsa2048 - RSA . o rsa3072 - RSA . o rsa4096 - RSA . (Scheme Specifiers) . . . sha256 . . (Hash Optional Scheme Specifiers) : oaep-sha256. o oaep o ecdh o rsassa o rsapss o ecdsa o ecschnorr o sm2 (Multiple Option Scheme Specifiers) ( UINT16) (-) . * ecdaa : ecdaa4-sha256. . (No Option Scheme Specifiers) . * rsaes (Symmetric Details Specifiers) . . aes128cfb . (Examples) rsa2048 rsaes tpm2_create -C parent.ctx -G rsa2048:rsaes -u key.pub -r key.priv ecc256 ecdaa sha384 /tpm2_create -C parent.ctx -G ecc256:ecdaa4-sha384 -u key.pub -r key.priv ALGORITHM. (COMMON OPTIONS) . o -h, --help=[man|no-man]: . (manpager) . "man" "man" man (stderr) . "no-man" man (stdout) . manpages MANPATH man(1) . o -v, --version: TCTI . o -V, --verbose: . . o -Q, --quiet: (stdout). o -Z, --enable-errata: (errata fixups). errata TPM . TPM2TOOLS_ENABLE_ERRATA . o -z, --pwd-session: HMAC . (clear text) TPM . (unsalted) OpenSSL FIPS . (auth values) (salted) . o -R, --autoflush: (autoflush) . . TPM2TOOLS_AUTOFLUSH yes true . . TCTI (TCTI Configuration) TCTI (Transmission Interface) TPM . TCTI TPM . TCTI : 1. -T --tcti 2. : TPM2TOOLS_TCTI. : . TCTI : o tabrmd - tabrmd . tabrmd abrmd tcti . o mssim - TPM . o device - TPM . o none - TPM . TPM (off-tpm) TCTI . TCTI . "none" . : : . TCTI (TCTI Defaults) TCTI TCTI dlopen(3) . TCTI tabrmd device mssim . -v TCTI . - "default-tcti" TCTI . TCTI (Custom TCTIs) TCTI TCTI . dlopen(3) tcti-name . dlopen(3) . TCTI (TCTI OPTIONS) TCTI : o device: TCTI (device) (character device) TPM TCTI . /dev/tpm0 . : -T device:/dev/tpm0 export TPM2TOOLS_TCTI="device:/dev/tpm0" o mssim: TCTI mssim IP (port) . 127.0.0.1 2321 . : -T mssim:host=localhost,port=2321 export TPM2TOOLS_TCTI="mssim:host=localhost,port=2321" o abrmd: TCTI abrmd - `,' . `=' . o TCTI abrmd : 1. `bus_name' : tabrmd ( ). 2. `bus_type' : dbus ( ) `session' `system' . tcti tabrmd bus_name=com.example.FooBar: \--tcti=tabrmd:bus_name=com.example.FooBar tcti (abrmd) bus_type=session: \--tcti:bus_type=session : abrmd tabrmd . TCTI . (EXAMPLES) : : 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 -c key.ctxt \ -L policy.dat -a "sensitivedataorigin|userwithauth|decrypt|sign" tpm2_createprimary -C o -g sha256 -G ecc -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 : RSA TPM-A TPM-B TPM-B / . 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" new_parent.pub TPM-A. TPM-A 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 RSA TPM-A ( `foo' ) 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 ( ). 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 ( TPM-B ): sha256sum sign.raw a1b4e3fbaa29e6e46d95cff498150b6b8e7d9fd21182622e8f5a3ddde257879e tpm2_startauthsession --policy-session -S session.dat tpm2_policycommandcode -S session.dat -L dpolicy.dat TPM2_CC_Duplicate new_parent.pub TPM-B tpm2_loadexternal -C o -u new_parent.pub -c new_parent.ctx tpm2_duplicate -C new_parent.ctx -c key.ctx -G null \ -p "session:session.dat" -r dup.dpriv -s dup.seed TPM-B: * dup.pub * dup.dpriv * dup.seed * ( data.encrypted ) TPM-B tpm2_startauthsession --policy-session -S session.dat tpm2_policycommandcode -S session.dat -L dpolicy.dat TPM2_CC_Duplicate tpm2_flushcontext --transient-object tpm2_load -C primary.ctx -u new_parent.pub -r new_parent.prv -c new_parent.ctx tpm2_import -C new_parent.ctx -u dup.pub -i dup.dpriv \ -r dup.prv -s dup.seed -L dpolicy.dat tpm2_flushcontext --transient-object tpm2_load -C new_parent.ctx -u dup.pub -r dup.prv -c dup.ctx o 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 : $ sha256sum sign.raw a1b4e3fbaa29e6e46d95cff498150b6b8e7d9fd21182622e8f5a3ddde257879e o tpm2_flushcontext --transient-object tpm2_rsadecrypt -p foo -c dup.ctx -o data.ptext data.encrypted # cat data.ptext meet me at.. : RSA TPM RSA OpenSSL TPM TPM : o TPM-B primary.pub : tpm2_createprimary -c primary.ctx tpm2_readpublic -c primary.ctx -o primary.pub o RSA TPM (wrap ). tpm2_makecredential TPM . openssl genrsa -out rsa.pem tpm2_duplicate -U primary.pub -G rsa -k rsa.pem -u rsa.pub -r rsa.dpriv -s rsa.seed o rsa.pub rsa.dpriv rsa.seed TPM-B (import) primary.ctx rsa.priv TPM : 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 : HMAC TPM HMAC TPM-A TPM-B TPM-B . o TPM-B : 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 "fixedtpm|fixedparent|restricted|sensitivedataorigin|decrypt|userwithauth" new_parent.pub TPM-A. o TPM-A <<>> (name) tpm2_loadexternal -C o -u new_parent.pub -c new_parent.ctx -n new_parent.name TPM-B tpm2_createprimary -C o -g sha256 -G rsa -c primary.ctx tpm2_startauthsession -S session.dat tpm2_policyduplicationselect -S session.dat -N new_parent.name -L dpolicy.dat tpm2_flushcontext session.dat HMAC tpm2_create -C primary.ctx -g sha256 -G hmac -r key.prv -u key.pub \ -L dpolicy.dat -a "sensitivedataorigin|userwithauth|sign" <<>> . HMAC tpm2_load -C primary.ctx -r key.prv -u key.pub -c key.ctx tpm2_readpublic -c key.ctx -n dupkey.name export plain="foo" echo -n $plain | tpm2_hmac -g sha256 -c key.ctx | xxd -p -c 256 42a1fad918fa0e4cbea94d759da89ccdfac5a640672d0170f4930cafe14d179c tpm2_policyduplicationselect tpm2_startauthsession --policy-session -S session.dat tpm2_policyduplicationselect -S session.dat -N new_parent.name \ -L dpolicy.dat -n dupkey.name tpm2_duplicate -C new_parent.ctx -c key.ctx -G null \ -p "session:session.dat" -r dup.dup -s dup.seed dup.dup dup.seed key.pub TPM-B o TPM-B tpm2_load -C primary.ctx -u new_parent.pub -r new_parent.prv -c new_parent.ctx tpm2_import -C new_parent.ctx -u key.pub -i dup.dup -r dup.prv -s dup.seed tpm2_load -C new_parent.ctx -u key.pub -r dup.prv -c dup.ctx HMAC export plain="foo" echo -n $plain | tpm2_hmac -g sha256 -c dup.ctx | xxd -p -c 256 42a1fad918fa0e4cbea94d759da89ccdfac5a640672d0170f4930cafe14d179c (RETURNS) : o 0 - . o 1 - . o 2 - . o 3 - . o 4 - TCTI. o 5 - . tpm2_testparams. (BUGS) (Github Issues) (HELP) (Mailing List) (LICENSE) (CC BY 4.0) . tpm2-tools tpm2_duplicate(1)