From: Jarkko Sakkinen <jarkko@kernel.org>
To: James Bottomley <James.Bottomley@hansenpartnership.com>
Cc: openssl-tpm2-engine@groups.io, linux-integrity@vger.kernel.org,
Mimi Zohar <zohar@linux.ibm.com>,
David Woodhouse <dwmw2@infradead.org>,
keyrings@vger.kernel.org, David Howells <dhowells@redhat.com>
Subject: Re: [PATCH 0/1] draft RFC for TPM key format
Date: Sun, 23 May 2021 01:48:27 +0300 [thread overview]
Message-ID: <YKmKOwKspmp5I/VT@kernel.org> (raw)
In-Reply-To: <20210522181548.8284-1-James.Bottomley@HansenPartnership.com>
On Sat, May 22, 2021 at 11:15:47AM -0700, James Bottomley wrote:
> Note: this is a patch for openssl_tpm2_engine, not the kernel.
>
> This is the text of the draft RFC for comments (although patches to
> the xml would be preferred):
>
> ======
Did not go through with an eyeglass but looks overally great!
> Network Working Group J. Bottomley
> Internet-Draft Linux Kernel
> Intended status: Informational May 2021
> Expires: 23 November 2021
>
>
> ASN.1 Specification for TPM 2.0 Key Files
> draft-bottomley-tpm-keys-00
>
> Abstract
>
> This specification is designed ot be an extension to the ASN.1
> (defined in [X.680]) specification of PKCS #1 [RFC8017] to define the
> file format of private keys that need to be loaded into a TPM 2
> device to operate.
>
> Status of This Memo
>
> This Internet-Draft is submitted in full conformance with the
> provisions of BCP 78 and BCP 79.
>
> Internet-Drafts are working documents of the Internet Engineering
> Task Force (IETF). Note that other groups may also distribute
> working documents as Internet-Drafts. The list of current Internet-
> Drafts is at https://datatracker.ietf.org/drafts/current/.
>
> Internet-Drafts are draft documents valid for a maximum of six months
> and may be updated, replaced, or obsoleted by other documents at any
> time. It is inappropriate to use Internet-Drafts as reference
> material or to cite them other than as "work in progress."
>
> This Internet-Draft will expire on 2 November 2021.
>
> Copyright Notice
>
> Copyright (c) 2021 IETF Trust and the persons identified as the
> document authors. All rights reserved.
>
> This document is subject to BCP 78 and the IETF Trust's Legal
> Provisions Relating to IETF Documents (https://trustee.ietf.org/
> license-info) in effect on the date of publication of this document.
> Please review these documents carefully, as they describe your rights
> and restrictions with respect to this document. Code Components
> extracted from this document must include Simplified BSD License text
> as described in Section 4.e of the Trust Legal Provisions and are
> provided without warranty as described in the Simplified BSD License.
>
>
>
>
>
> Bottomley Expires 23 November 2021 [Page 1]
> \f
> Internet-Draft TPM 2 Key Format May 2021
>
>
> Table of Contents
>
> 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
> 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2
> 2.1. Notation . . . . . . . . . . . . . . . . . . . . . . . . 2
> 3. Key Representation . . . . . . . . . . . . . . . . . . . . . 3
> 3.1. TPMkey Syntax . . . . . . . . . . . . . . . . . . . . . . 3
> 3.1.1. type . . . . . . . . . . . . . . . . . . . . . . . . 4
> 3.1.2. emptyAuth . . . . . . . . . . . . . . . . . . . . . . 4
> 3.1.3. policy . . . . . . . . . . . . . . . . . . . . . . . 4
> 3.1.4. secret . . . . . . . . . . . . . . . . . . . . . . . 4
> 3.1.5. parent . . . . . . . . . . . . . . . . . . . . . . . 5
> 3.1.6. pubkey . . . . . . . . . . . . . . . . . . . . . . . 5
> 3.1.7. privkey . . . . . . . . . . . . . . . . . . . . . . . 5
> 4. Key Policy Specification . . . . . . . . . . . . . . . . . . 5
> 4.1. TPMPolicy Syntax . . . . . . . . . . . . . . . . . . . . 6
> 4.1.1. CommandCode . . . . . . . . . . . . . . . . . . . . . 6
> 4.1.2. CommandPolicy . . . . . . . . . . . . . . . . . . . . 6
> 4.2. Policy Implementation Considerations . . . . . . . . . . 6
> 4.2.1. Authorization Policy . . . . . . . . . . . . . . . . 6
> 5. Normative References . . . . . . . . . . . . . . . . . . . . 7
> Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 7
>
> 1. Introduction
>
> The Security of private keys has long been a concern and the ability
> of ubiquitous devices like TPMs has made it useful to use them for
> secure private key storage. With the advent of TPM 2.0, private key
> storage inside the TPM (acting as a token which could be referred to
> by PKCS #11) has been discouraged, and instead key files which are
> loaded and evicted as necessary is the encouraged format. This
> standard defines an interoperable ASN.1 representation for such key
> files, so that a key created by one tool should be loadable by a
> different one.
>
> 2. Terminology
>
> The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
> "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
> document are to be interpreted as described in [RFC2119].
>
> 2.1. Notation
>
> ASN.1 Abstract Syntax Notatition defined in [X.680]
>
> DER Distinguished Encoding Rules. Basically a defined binary
> representation for ASN.1
>
>
>
>
> Bottomley Expires 23 November 2021 [Page 2]
> \f
> Internet-Draft TPM 2 Key Format May 2021
>
>
> MSO Most Significant Octet (the highest order byte of an integer)
>
> PEM Privacy enhanced Electronic Mail. An ASCII compatible
> representation of DER
>
> TCG Trusted Computing Group
>
> TPM Trusted Platform Module
>
> 3. Key Representation
>
> All TPM 2.0 keys consist of two binary pieces, a public part, which
> can be parsed according to the TPM specification for TPM2B_PUBLIC
> [TPM2.0] and a private part, which is cryptographically sealed in
> such a way as to be only readable on the TPM that created it. The
> purpose of this specification is to specify a format by which the
> public and private pieces of a TPM key can be loaded.
>
> The design of the TPMkey ASN.1 format is that it should have a
> distinguishing OID at the beginning so the DER/BER form of the key
> can be easily recognized. In PEM form, the key MUST have "-----BEGIN
> TSS2 PRIVATE KEY-----" and "-----END TSS2 PRIVATE KEY-----" as the
> PEM guards. All additional information that may be needed to load
> the key is specified as optional explicit elements, which can be
> extended by later specifications, which is why the TPMkey is not
> versioned.
>
> 3.1. TPMkey Syntax
>
> TPMKey ::= SEQUENCE {
> type OBJECT IDENTIFIER
> emptyAuth [0] EXPLICIT BOOLEAN OPTIONAL
> policy [1] EXPLICIT SEQUENCE OF TPMPolicy OPTIONAL
> secret [2] EXPLICIT OCTET STRING OPTIONAL
> parent INTEGER
> pubkey OCTET STRING
> privkey OCTET STRING
> }
>
> The fields of type TPMKey have the following meanings:
>
>
>
>
>
>
>
>
>
>
>
> Bottomley Expires 23 November 2021 [Page 3]
> \f
> Internet-Draft TPM 2 Key Format May 2021
>
>
> 3.1.1. type
>
> A unique OID specifying the key type. This standard currently
> defines three types of keys: a loadable key, specified by id-
> loadablekey, (to be loaded with TPM2_Load), an importable key,
> specified by id-importablekey, (to be loaded with TPM2_Import) and a
> sealed data key, specified by id-sealedkey, (to be extracted with
> TPM2_Unseal). The TCG has reserved the following OID prefix for
> this:
>
> id-tpmkey OBJECT IDENTIFIER ::=
> {joint-iso-itu-t(2) international-organizations(23) 133 10}
>
> And the three key types are:
>
> id-loadablekey OBJECT IDENTIFIER ::=
> {id-tpmkey 3}
>
> id-importablekey OBJECT IDENTIFIER ::=
> {id-tpmkey 4}
>
> id-sealedkey OBJECT IDENTIFIER ::=
> {id-tpmkey 5}
>
> 3.1.2. emptyAuth
>
> An implementation needs to know as it formulates the
> TPM2_Load/Import/Unseal command whether it must also send down an
> authorization, so this parameter gives that indication. emptyAuth
> MUST be true if authorization is NOT required and MUST BE either
> false or absent if authorization is required. Since this element has
> three states (one representing true and two representing false) it is
> RECOMMENDED that implementations emitting TPMkey representations use
> absence of the tag to represent false. However, implementations
> reading TPMKey MUST be able to process all three possible states.
>
> 3.1.3. policy
>
> This MUST be present if the TPM key has a policy hash because it
> describes to the implementation how to construct the policy. The
> forms of the policy statement are described in section Section 4.
>
> 3.1.4. secret
>
> This section describes the additional cryptographic secret used to
> specify the outer wrapping of an importable key. It MUST be present
> for key type id-importablekey and MUST NOT be present for any other
> key type.
>
>
>
> Bottomley Expires 23 November 2021 [Page 4]
> \f
> Internet-Draft TPM 2 Key Format May 2021
>
>
> 3.1.5. parent
>
> This MUST be present for all keys and specifies the parent key. The
> parent key SHOULD be either a persistent handle (MSO 0x81) or a
> permanent handle (MSO 0x40). Since volatile handle numbering can
> change unexpectedly depending on key load order, the parent SHOULD
> NOT be a volatile handle (MSO 0x80). The parent MAY NOT be any other
> MSO.
>
> If a permanent handle (MSO 0x40) is specified then the implementation
> MUST run TPM2_CreatePrimary on the handle using the TCG specified
> Elliptic Curve template for the NIST P-256 curve and use the primary
> key so generated as the parent.
>
> 3.1.6. pubkey
>
> This MUST be present and MUST correspond to the fully marshalled
> TPM2B_PUBLIC structure of the TPM Key with the exception that the
> leading U16 parameter specifying size MUST BE omitted (it is
> redundant, since all ASN.1 structures are length specified).
>
> 3.1.7. privkey
>
> This MUST be present and MUST correspond to the fully marshalled
> TPM2B_PRIVATE structure of the TPM Key with the exception that the
> leading U16 parameter specifying size MUST BE omitted (it is
> redundant, since all ASN.1 structures are length specified).
>
> 4. Key Policy Specification
>
> Policy is constructed on a TPM by executing a sequence of policy
> statements. This specification currently only defines a limited
> subset of the allowed policy statements. The policy is specified by
> a hash, which the execution of the policy statements must reach in
> order for the policy to be validated (See [TPM2.0] Part 1 for a
> detailed description.
>
> The TPMPolicy ASN.1 MUST be a sequence of policy statements which
> correspond exactly to TPM policy instructions in the order they
> should be executed and additionally from which the ultimate policy
> hash can be constructed.
>
> The current policy specification is strictly for AND based policy
> only and may be extended at a later date with OR policy. However,
> the ASN.1 for policy is fomulated as CONS elements, leaving the
> possibility of adding additional but optional elements for policy
> statements which are not supported by this standard (such as
> TPM2_PolicyAuthorize).
>
>
>
> Bottomley Expires 23 November 2021 [Page 5]
> \f
> Internet-Draft TPM 2 Key Format May 2021
>
>
> 4.1. TPMPolicy Syntax
>
> TPMPolicy ::= SEQUENCE {
> CommandCode [0] EXPLICIT INTEGER
> CommandPolicy [1] EXPLICIT OCTET STRING
> }
>
> The Fields of type TPMPolicy have the following meanings:
>
> 4.1.1. CommandCode
>
> This is the integer representation of the TPM command code for the
> policy statement.
>
> 4.1.2. CommandPolicy
>
> This is a binary string representing a fully marshalled, TPM ordered,
> command body for the TPM policy command. Therefore to send the
> command, the implementation simply marshalls the command code and
> appends this octet string as the body.
>
> Commands which have no body, such as TPM2_AuthVal, MUST be specified
> as a zero length OCTET STRING
>
> 4.2. Policy Implementation Considerations
>
> The policy hash for AND based policies is constructed by extension of
> the prior policy hash
>
> newHash = HASH ( oldHash || policyHash )
>
> where policyHash is usually simply the hash of the fully marshalled
> policy command (including the CommandCode). However, this isn't true
> for TPM2_PolicyCounterTimer() so always consult the [TPM2.0]
> specifications for how to construct the policyHash.
>
> 4.2.1. Authorization Policy
>
> When Authorization (Passing in a password) is required, the emptyAuth
> parameter MUST be absent or set to false and additionally the
> TPM_CC_PolicyAuthValue MUST be specified as the command code for one
> entry in the TPMPolicy sequence. However, the implementation MAY
> choose to execute either TPM2_PolicyPassword for TPM_RS_PW or
> TPM2_PolicyAuthValue for HMAC based authorization depending on
> whether the command being authorized is using sessions or not. If
> the policy does not require an authorization then the emptyAuth
> parameter MUST be set to true.
>
>
>
>
> Bottomley Expires 23 November 2021 [Page 6]
> \f
> Internet-Draft TPM 2 Key Format May 2021
>
>
> 5. Normative References
>
> [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
> Requirement Levels", BCP 14, RFC 2119,
> DOI 10.17487/RFC2119, March 1997,
> <https://www.rfc-editor.org/info/rfc2119>.
>
> [RFC8017] Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch,
> "PKCS #1: RSA Cryptography Specifications Version 2.2",
> RFC 8017, DOI 10.17487/RFC8017, November 2016,
> <https://www.rfc-editor.org/info/rfc8017>.
>
> [TPM2.0] TCG, ., "TPM 2.0 Library Specification", 15 March 2013,
> <https://trustedcomputinggroup.org/resource/tpm-library-
> specification/>.
>
> [X.680] ITU, "ITU-T Recommendation X.680, Information technology -
> Abstract Syntax Notation One (ASN.1): Specification of
> basic notation.", August 2015,
> <https://www.itu.int/rec/T-REC-X.680-201508-I/en>.
>
> Author's Address
>
> James E.J. Bottomley
> Linux Kernel
> United States of America
>
> Email: James.Bottomley@HansenPartnership.com
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> Bottomley Expires 23 November 2021 [Page 7]
>
> ======
>
> James
>
> ---
>
> James Bottomley (1):
> doc: add draft RFC for TPM Key format
>
> Makefile.am | 2 +-
> configure.ac | 4 +-
> doc/Makefile.am | 15 ++
> doc/draft-bottomley-tpm2-keys.xml | 329 ++++++++++++++++++++++++++++++
> 4 files changed, 348 insertions(+), 2 deletions(-)
> create mode 100644 doc/Makefile.am
> create mode 100644 doc/draft-bottomley-tpm2-keys.xml
>
> --
> 2.26.2
>
>
/Jarkko
next prev parent reply other threads:[~2021-05-22 22:48 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-22 18:15 [PATCH 0/1] draft RFC for TPM key format James Bottomley
2021-05-22 18:15 ` [PATCH 1/1] doc: add draft RFC for TPM Key format James Bottomley
2021-05-22 22:48 ` Jarkko Sakkinen [this message]
2021-05-24 7:36 ` [PATCH 0/1] draft RFC for TPM key format David Woodhouse
2021-05-24 11:48 ` David Woodhouse
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YKmKOwKspmp5I/VT@kernel.org \
--to=jarkko@kernel.org \
--cc=James.Bottomley@hansenpartnership.com \
--cc=dhowells@redhat.com \
--cc=dwmw2@infradead.org \
--cc=keyrings@vger.kernel.org \
--cc=linux-integrity@vger.kernel.org \
--cc=openssl-tpm2-engine@groups.io \
--cc=zohar@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox