Network Working Group R. Housley
Internet-Draft Vigil Security, LLC
Intended status: Standards Track S. Ashmore
Expires: April 9, 2009 National Security Agency
C. Wallace
Cygnacom Solutions
October 6, 2008
Trust Anchor Format
draft-ietf-pkix-ta-format-00
Status of this Memo
By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware
have been or will be disclosed, and any of which he or she becomes
aware will be disclosed, in accordance with Section 6 of BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
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."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
This Internet-Draft will expire on April 9, 2009.
Housley, et al. Expires April 9, 2009 [Page 1]
Internet-Draft TAF October 2008
Abstract
This document describes a structure for representing trust anchor
information. A trust anchor is an authoritative entity represented
via a public key and associated data. The public key is used to
verify digital signatures and the associated data is used to
constrain the types of information or actions for which the trust
anchor is authoritative. The structures defined in this document are
intended to satisfy the format-related requirements defined in Trust
Anchor Management Requirements and for use within the context of the
Trust Anchor Management Protocol (TAMP).
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Trust Anchors . . . . . . . . . . . . . . . . . . . . . . 3
1.2.1. Apex Trust Anchors . . . . . . . . . . . . . . . . . . 3
1.2.2. Management Trust Anchors . . . . . . . . . . . . . . . 4
1.2.3. Identity Trust Anchors . . . . . . . . . . . . . . . . 5
2. Trust Anchor Information Syntax . . . . . . . . . . . . . . . 6
2.1. Version . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2. Public Key . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3. Key Identitifer . . . . . . . . . . . . . . . . . . . . . 6
2.4. Trust Anchor Type . . . . . . . . . . . . . . . . . . . . 7
2.5. Trust Anchor Title . . . . . . . . . . . . . . . . . . . . 10
2.6. Certification Path Controls . . . . . . . . . . . . . . . 11
2.7. Extensions . . . . . . . . . . . . . . . . . . . . . . . . 15
3. Security Considerations . . . . . . . . . . . . . . . . . . . 17
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19
5. References . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.1. Normative References . . . . . . . . . . . . . . . . . . . 20
5.2. Informative References . . . . . . . . . . . . . . . . . . 20
Appendix A. ASN.1 Modules . . . . . . . . . . . . . . . . . . . . 21
A.1. ASN.1 Module . . . . . . . . . . . . . . . . . . . . . . . 21
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 24
Intellectual Property and Copyright Statements . . . . . . . . . . 25
Housley, et al. Expires April 9, 2009 [Page 2]
Internet-Draft TAF October 2008
1. Introduction
Trust anchors are widely used to verify digital signatures and
validate certification paths [RFC5280][X.509]. Though widely used,
there is no standard format for representing trust anchor
information. This document describes the TrustAnchorInfo structure.
This structure is intended to satisfy the format-requirements
expressed in Trust Anchor Management Requirements
[I-D.draft-ietf-pkix-ta-mgmt-reqs]. The structure is intended for
use with the Trust Anchor Management Protocol (TAMP) [TAMP]. It is
primarily intended to offer a more compact alternative to X.509
certificates for exchanging trust anchor information and to provide a
means of associating constraints with certificates without breaking
the signature on the certificate.
1.1. 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 RFC 2119 [RFC2119].
1.2. Trust Anchors
As with TAMP, this specification recognizes three types of trust
anchors: apex trust anchors, management trust anchors, and identity
trust anchors. All trust anchors, regardless of their type, contain
the following components:
o A public key signature algorithm identifier and associated public
key, which MAY include parameters
o A public key identifier
o An OPTIONAL human readable trust anchor title
o OPTIONAL X.509 certification path controls
o OPTIONAL extensions
1.2.1. Apex Trust Anchors
Within the context of a single trust anchor store, one trust anchor
is superior to all others. This trust anchor is referred to as the
apex trust anchor. Typically, this trust anchor is installed during
initialization of a trust anchor store, with its integrity confirmed
using manual means. This trust anchor represents an authority that
is unconstrained within the context of the trust anchor store. An
apex trust anchor may delegate authority to other trust anchors.
Housley, et al. Expires April 9, 2009 [Page 3]
Internet-Draft TAF October 2008
The apex trust anchor private key is expected to be controlled by an
entity with information assurance responsibility for the trust anchor
store. The apex trust anchor is by definition unconstrained and
therefore does not have explicit authorization information associated
with it. In order to make processing of management messages as
uniform as possible, the apex trust anchor has an implicit OID
associated with it that represents the special anyContentType value.
This OID will be used as input to processing algorithms to represent
the apex trust anchor authorization.
The apex trust anchor has a different structure than other trust
anchors; it MAY include two public keys. Whenever the apex trust
anchor is updated, both public keys are replaced. The first public
key, called the operational public key, is used in the same manner as
other trust anchors. The second public key, called the contingency
public key, can only be used to update the apex trust anchor. The
contingency private key SHOULD be used at only one point in time; it
is used only to sign a message which results in its own replacement
(as well as the replacement of the operational public key). The
contingency public key is distributed in encrypted form. When the
contingency public key is used, the symmetric key needed to decrypt
the contingency public key must be provided, ideally as part of the
message that is to be verified with the contingency public key. When
an apex trust anchor that contains a contingency key is replaced with
an apex trust anchor that does not contain a contingency key, the
contingency key of the old apex trust anchor is deleted, or replaced
with an empty object.
1.2.2. Management Trust Anchors
Management trust anchors are used to verify and authorize selected
digitally signed objects. Typically, these objects are protected
using the Cryptographic Message Syntax (CMS) [RFC3852] and contain
payloads used to manage some aspect of the device hosting the trust
anchor store containing the management trust anchor. For example,
TAMP messages are validated to a management trust anchor. Similarly,
a signed firmware package as specified in [RFC4108] is validated to a
management trust anchor.
Authorization checking is required for management messages. These
checks are based on the content type of the management message.
Management trust anchors include a list of object identifiers (OIDs)
that name authorized content types along with OPTIONAL constraints.
The authorization mechanism used within the TrustAnchorInfo structure
for management trust anchors is described in [CCC].
A management trust anchor may be used directly to verify and
authorize a signed object, or may be used to validate a certification
Housley, et al. Expires April 9, 2009 [Page 4]
Internet-Draft TAF October 2008
path terminated by a certificate containing the public key used to
verify a digitally signed object.
1.2.3. Identity Trust Anchors
Identity trust anchors are used to validate certification paths, and
they represent a trust anchor for a public key infrastructure. They
are most often used in the validation of certificates associated with
non-management applications.
Housley, et al. Expires April 9, 2009 [Page 5]
Internet-Draft TAF October 2008
2. Trust Anchor Information Syntax
This section describes the TrustAnchorInfo structure.
TrustAnchorInfo ::= SEQUENCE {
version [0] TrustAnchorInfoVersion DEFAULT v2,
pubKey PublicKeyInfo,
keyId KeyIdentifier,
taType TrustAnchorType,
taTitle TrustAnchorTitle OPTIONAL,
certPath CertPathControls OPTIONAL,
exts [3] Extensions OPTIONAL }
TrustAnchorInfoVersion ::= INTEGER { v1(1), v2(2), v3(3) }
PublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
publicKey BIT STRING }
KeyIdentifier ::= OCTET STRING
2.1. Version
version identifies the version of TrustAnchorInfo. Where the exts
field is present or the TrustAnchorType.apex option is used but the
ApexTrustAnchorInfo.continPubKey is omitted, v3 MUST be used. In all
other cases, v2 MAY be used.
2.2. Public Key
pubKey identifies the public key and algorithm associated with the
trust anchor using the PublicKeyInfo structure. The PublicKeyInfo
structure contains the algorithm identifier followed by the public
key itself. The algorithm field is an AlgorithmIdentifier, which
contains an object identifier and OPTIONAL parameters. The object
identifier names the public key algorithm and indicates the syntax of
the parameters, if present, as well as the format of the public key.
The public key is encoded as a BIT STRING. For the apex trust
anchor, this field contains the operational public key.
2.3. Key Identitifer
keyId contains the public key identifier of the trust anchor public
key. For the apex trust anchor, this field contains the public key
identifier of the operational public key.
Housley, et al. Expires April 9, 2009 [Page 6]
Internet-Draft TAF October 2008
2.4. Trust Anchor Type
TrustAnchorType ::= CHOICE {
apex [0] ApexTrustAnchorInfo,
mgmt [1] MgmtTrustAnchorInfo,
ident [2] NULL }
taType indicates the type of trust anchor, and it carries information
specific to the type of trust anchor that is being represented. If
an apex trust anchor is represented, then apex trust anchor
information is carried using the ApexTrustAnchorInfo structure. If a
management trust anchor is represented, then management trust anchor
information is carried using the MgmtTrustAnchorInfo structure. If
an identity trust anchor is represented, no additional information is
carried.
ApexTrustAnchorInfo ::= SEQUENCE {
continPubKey ApexContingencyKey OPTIONAL,
tampSeqNum SeqNumber OPTIONAL }
ApexContingencyKey ::= SEQUENCE {
wrapAlgorithm AlgorithmIdentifier,
wrappedContinPubKey OCTET STRING }
SeqNumber ::= INTEGER (0..9223372036854775807)
The fields of ApexTrustAnchorInfo are used as follows:
o continPubKey contains the optional encrypted apex trust anchor
contingency public key using the ApexContingencyKey structure.
o tampSeqNum is OPTIONAL. This field has been deprecated. TAMP
[TAMP] provides sequence number propagation and processing
details.
The fields of ApexContingencyKey are used as follows:
o wrapAlgorithm identifies the symmetric algorithm used to encrypt
the apex trust anchor contingency public key. If this public key
is ever needed, the symmetric key needed to decrypt it will be
Housley, et al. Expires April 9, 2009 [Page 7]
Internet-Draft TAF October 2008
provided in the message that is to be validated using it. The
algorithm identifier is an AlgorithmIdentifier, which contains an
object identifier and OPTIONAL parameters. The object identifier
indicates the syntax of the parameters, if present.
o wrappedContinPubKey is the encrypted apex trust anchor contingency
public key. Once decrypted, it yields the PublicKeyInfo
structure, which consists of the algorithm identifier followed by
the public key itself. The algorithm identifier is an
AlgorithmIdentifier that contains an object identifier and
OPTIONAL parameters. The object identifier indicates the format
of the public key and the syntax of the parameters, if present.
The public key is encoded as a BIT STRING.
MgmtTrustAnchorInfo ::= SEQUENCE {
taUsage TrustAnchorUsage,
tampSeqNum SeqNumber OPTIONAL }
TrustAnchorUsage ::= CMSContentConstraints
CMSContentConstraints ::= ContentTypeConstraintList
ContentTypeConstraintList ::= SEQUENCE SIZE (1..MAX) OF
ContentTypeConstraint
ContentTypeConstraint ::= SEQUENCE {
contentType ContentType,
canSource BOOLEAN DEFAULT TRUE,
attrConstraints AttrConstraintList OPTIONAL }
ContentType ::= OBJECT IDENTIFIER
AttrConstraintList ::= SEQUENCE SIZE (1..MAX) OF AttrConstraint
AttrConstraint ::= SEQUENCE {
attrType AttributeType,
attrValues SET SIZE (1..MAX) OF AttributeValue }
The fields of MgmtTrustAnchorInfo are used as follows:
o taUsage represents the authorized uses of the management trust
anchor using the TrustAnchorUsage structure.
Housley, et al. Expires April 9, 2009 [Page 8]
Internet-Draft TAF October 2008
o tampSeqNum is OPTIONAL. This field has been deprecated. TAMP
[TAMP] provides sequence number propagation and processing
details.
The TrustAnchorUsage is defined using the CMSContentConstraints type
defined in [CCC], and repeated above. The CMSContentConstraints is a
list of permitted content types and associated constraints. The
management trust anchor can be used to validate digital signatures on
the permitted content types, including TAMP message content types.
The anyContentType object identifier can be used to indicate that the
trust anchor is unconstrained. The apex trust anchor has an implicit
CMSContentConstraints field with a single permitted content type of
anyContentType. Where anyContentType is asserted or implied,
canSource and attrConstraints MUST BE absent, indicating the trust
anchor can serve as a source for any content type without any
constraints.
The fields of ContentTypeConstraint are used as follows:
o contentType indicates the encapsulated content type identifier
that can be validated using the management trust anchor. For
example, it contains id-ct-firmwarePackage when the management
trust anchor can be used to validate digital signatures on
firmware packages [RFC4108]. A particular content type MUST NOT
appear more than once in the list. The CMS-related content types
need not be included in the list of permitted content types.
These content types are always authorized to facilitate the use of
CMS in the protection of content, and they MUST NOT appear in the
contentType field. The always authorized content types are:
* id-signedData,
* id-envelopedData,
* id-digestedData,
* id-encryptedData,
* id-ct-authEnvelopedData,
* id-ct-authData,
* id-ct-compressedData,
* id-ct-contentCollection
Housley, et al. Expires April 9, 2009 [Page 9]
Internet-Draft TAF October 2008
* id-ct-contentWithAttrs.
o canSource is a Boolean flag, and it applies to direct signatures
or direct authentication for the specified content type. If the
canSource flag is FALSE, then the management trust anchor cannot
be used to directly sign or authenticate the specified content
type. Regardless of the flag value, a management trust anchor can
be used to sign or authenticate outer layers when multiple layers
of CMS protected content type are present.
o attrConstraints is an OPTIONAL field that contains a sequence of
content type specific constraints. If the attrConstraints field
is absent, then the management trust anchor can be used to verify
the specified content type without any further checking. If the
attrConstraints field is present, then the management trust anchor
can only be used to verify the specified content type if all of
the constraints for that content type are satisfied. Content type
constraints are checked by matching the attribute values in the
AttrConstraintList against the attribute value in the content.
The constraints checking fails if the attribute is present and the
attribute value is not one of the values provided in
AttrConstraintList.
The AttrConstraintList contains a sequence of attributes, which is
defined in [CCC] and repeated above. The fields of AttrConstraint
are used as follows:
o attrType is the object identifier of the signed attribute carried
in the SignerInfo of the content. For a signed content to satisfy
the constraint, if the SignerInfo includes a signed attribute of
the same type, then the signed attribute MUST contain one of the
values supplied in the attrValues field.
o attrValues provides one or more acceptable signed attribute
values. It is a set of AttributeValue. For a signed content to
satisfy the constraint, if the SignerInfo includes a signed
attribute of the type identified in the attrType field, then the
signed attribute MUST contain one of the values in the set.
2.5. Trust Anchor Title
TrustAnchorTitle ::= UTF8String (SIZE (1..64))
taTitle is OPTIONAL. When it is present, it provides a human
Housley, et al. Expires April 9, 2009 [Page 10]
Internet-Draft TAF October 2008
readable name for the trust anchor. The text is encoded in UTF-8
[RFC3629], which accommodates most of the world's writing systems.
2.6. Certification Path Controls
CertPathControls ::= SEQUENCE {
taName Name,
certificate [0] Certificate OPTIONAL,
policySet [1] CertificatePolicies OPTIONAL,
policyFlags [2] CertPolicyFlags OPTIONAL,
clearanceConstr [3] AuthorityClearanceConstraints OPTIONAL,
nameConstr [4] NameConstraints OPTIONAL }
certPath is OPTIONAL. When it is present, it provides the controls
needed to initialize an X.509 certification path validation algorithm
implementation (see Section 6 in [RFC5280]). When absent, the trust
anchor cannot be used to validate the signature on an X.509
certificate. For the apex trust anchor, this field contains the
certification path controls associated with the operational public
key.
taName provides the X.500 distinguished name associated with the
trust anchor, and this distinguished name is used to construct and
validate an X.509 certification path. The name MUST NOT be an empty
sequence. An identity trust anchor is of little use without a
distinguished name. Omission of the taName prevents the trust anchor
from performing delegation using X.509 certificates.
certificate provides an OPTIONAL X.509 certificate, which can be used
in some environments to represent the trust anchor in certification
path development and validation. If the certificate is present, the
subject name in the certificate MUST exactly match the X.500
distinguished name provided in the taName field. The complete
description of the syntax and semantics of the Certificate are
provided in [RFC5280]. Constraints defined in the taType, policySet,
policyFlags, clearanceConstr, nameConstr and exts fields within
TrustAnchorInfo augment or replace values contained in a certificate;
values defined in these TrustAnchorInfo fields are always enforced.
Extensions included in a certificate are enforced only if there is no
value in the corresponding structure in the TrustAnchorInfo.
Correspondence between extensions within a certificate and
TrustAnchorInfo fields is defined as follows:
Housley, et al. Expires April 9, 2009 [Page 11]
Internet-Draft TAF October 2008
o id-pe-wrappedApexContinKey extensions correspond to the
TrustAnchorType.apex field.
o id-pe-cmsContentConstraints extensions correspond to the
TrustAnchorType.mgmt field.
o id-ce-certificatePolicies extensions correspond to the
CertPathControls.policySet field.
o id-ce-policyConstraints extensions correspond to the
CertPolicyFlags.inhibitPolicyMapping and
CertPolicyFlags.requireExplicitPolicy fields.
o id-ce-inhibitAnyPolicy extensions correspond to the
CertPolicyFlags.inhibitAnyPolicy field.
o id-ce-authorityClearanceConstraints extensions correspond to the
CertPathControls.clearanceConstr field.
o id-ce-nameConstraints extensions correspond to the
CertPathControls.nameConstr field.
CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
PolicyInformation ::= SEQUENCE {
policyIdentifier CertPolicyId,
policyQualifiers SEQUENCE SIZE (1..MAX) OF
PolicyQualifierInfo OPTIONAL }
CertPolicyId ::= OBJECT IDENTIFIER
policySet is OPTIONAL. When present, it contains sequence of
certificate policy identifiers to be provided as inputs to the
certification path validation algorithm. When absent, the special
value any-policy is provided as the input to the certification path
validation algorithm. The complete description of the syntax and
semantics of the CertificatePolicies are provided in [RFC5280],
including the syntax for PolicyInformation. In this context, the
OPTIONAL policyQualifiers structure MUST NOT be included.
CertPolicyFlags ::= BIT STRING {
inhibitPolicyMapping (0),
Housley, et al. Expires April 9, 2009 [Page 12]
Internet-Draft TAF October 2008
requireExplicitPolicy (1),
inhibitAnyPolicy (2) }
policyFlags is OPTIONAL. When present, three Boolean values for
input to the certification path validation algorithm are provided in
a BIT STRING. When absent, the input to the certification path
validation algorithm is { FALSE, FALSE, FALSE }, which represents the
most liberal setting for these flags. The three bits are used as
follows:
inhibitPolicyMapping indicates if policy mapping is allowed in the
certification path. When set to TRUE, policy mapping is not
permitted. This value represents the initial-policy-mapping-
inhibit input value to the certification path validation algorithm
described in section 6.1.1 of [RFC5280].
requireExplicitPolicy indicates if the certification path MUST be
valid for at least one of the certificate policies in the
policySet. When set to TRUE, all certificates in the
certification path MUST contain an acceptable policy identifier in
the certificate policies extension. This value represents the
initial-explicit-policy input value to the certification path
validation algorithm described in section 6.1.1 of [RFC5280]. An
acceptable policy identifier is a member of the policySet or the
identifier of a policy that is declared to be equivalent through
policy mapping. This bit MUST be set to FALSE if policySet is
absent.
inhibitAnyPolicy indicates whether the special anyPolicy policy
identifier, with the value { 2 5 29 32 0 }, is considered an
explicit match for other certificate policies. When set to TRUE,
the special anyPolicy policy identifier is only considered a match
for itself. This value represents the initial-any-policy-inhibit
input value to the certification path validation algorithm
described in section 6.1.1 of [RFC5280].
Housley, et al. Expires April 9, 2009 [Page 13]
Internet-Draft TAF October 2008
AuthorityClearanceConstraints ::=
SEQUENCE SIZE (1..MAX) OF Clearance
Clearance ::= SEQUENCE {
policyId [0] OBJECT IDENTIFIER,
classList [1] ClassList DEFAULT {unclassified},
securityCategories [2] SET OF SecurityCategory OPTIONAL }
ClassList ::= BIT STRING {
unmarked (0),
unclassified (1),
restricted (2),
confidential (3),
secret (4),
topSecret (5) }
SecurityCategory ::= SEQUENCE {
type [0] SECURITY-CATEGORY.&id({SecurityCategoriesTable}),
value [1] EXPLICIT SECURITY-CATEGORY.&Type
({SecurityCategoriesTable}{@type}) }
SECURITY-CATEGORY ::= TYPE-IDENTIFIER
SecurityCategoriesTable SECURITY-CATEGORY ::= {...}
clearanceConstr is OPTIONAL. It has the same syntax and semantics as
the Authority Clearance Constraints certificate extension as
specified in [ClearConstr]. When it is present, constraints are
provided on the Authority Clearance Constraints certificate extension
and Clearance certificate extension that might appear in subordinate
X.509 certificates. For a subordinate certificate to be valid, it
MUST conform to these constraints. When it is absent, no constraints
are imposed on the Authority Clearance Constraints certificate
extension and Clearance certificate extension that might appear in
subordinate X.509 certificates.
NameConstraints ::= SEQUENCE {
permittedSubtrees [0] GeneralSubtrees OPTIONAL,
excludedSubtrees [1] GeneralSubtrees OPTIONAL }
GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
GeneralSubtree ::= SEQUENCE {
base GeneralName,
minimum [0] BaseDistance DEFAULT 0,
Housley, et al. Expires April 9, 2009 [Page 14]
Internet-Draft TAF October 2008
maximum [1] BaseDistance OPTIONAL }
BaseDistance ::= INTEGER (0..MAX)
nameConstr is OPTIONAL. It has the same syntax and semantics as the
Name Constraints certificate extension [RFC5280], which includes a
list of permitted names and a list of excluded names. The definition
of GeneralName can be found in [RFC5280]. When it is present,
constraints are provided on names (including alternative names) that
might appear in subordinate X.509 certificates. When applied to
Certification Authority (CA) certificates, the CA can apply further
constraints by including the Name Constraints certificate extension
in subordinate certificates. For a subordinate certificate to be
valid, it MUST conform to these constraints. When it is absent, no
constraints are imposed on names that appear in subordinate X.509
certificates.
When the trust anchor is used to validate a certification path,
CertPathControls provides limitations on certification paths that
will successfully validate. An application that is validating a
certification path MUST NOT ignore these limitations, but the
application can impose additional limitations to ensure that the
validated certification path is appropriate for the intended
application context. As input to the certification path validation
algorithm, an application MAY:
o Provide a subset of the certification policies provided in the
policySet;
o Provide a TRUE value for any of the flags in the policyFlags;
o Provide a subset of clearance values provided in the
clearanceConstr;
o Provide a subset of the permitted names provided in the
nameConstr;
o Provide additional excluded names to the ones that are provided in
the nameConstr
2.7. Extensions
exts is OPTIONAL. When it is present, it can be used to associate
additional information with the trust anchor using the standard
Extensions structure. Extensions that are anticipated to be widely
used have been included in the CertPathControls structure to avoid
overhead associated with use of the Extensions structure. To avoid
Housley, et al. Expires April 9, 2009 [Page 15]
Internet-Draft TAF October 2008
duplication with the CertPathControls and TaType fields, the
following types of extensions MUST NOT appear in the exts field and
are ignored if they do appear: id-pe-apexTrustAnchorInfo, id-pe-
cmsContentConstraints, id-ce-certificatePolicies, id-ce-
policyConstraints, id-ce-inhibitAnyPolicy, id-ce-
authorityClearanceConstraints or id-ce-nameConstraints.
Housley, et al. Expires April 9, 2009 [Page 16]
Internet-Draft TAF October 2008
3. Security Considerations
Compromise of an identity trust anchor private key permits
unauthorized parties to issue certificates that will be acceptable to
all applications configured with the corresponding identity trust
anchor. The unauthorized private key holder will be limited by the
certification path controls associated with the identity trust
anchor. For example, clearance constraints in the identity trust
anchor will determine the clearances that will be accepted in
certificates that are issued by the unauthorized private key holder.
Compromise of a management trust anchor private key permits
unauthorized parties to generate signed messages that will be
acceptable to all applications that use a trust anchor store
containing the corresponding management trust anchor. For example,
if the management trust anchor is authorized to sign firmware
packages, then the unauthorized private key holder can generate
firmware that may be successfully installed and used by applications
that trust the management trust anchor.
Compromise of the Apex Trust Anchor operational private key permits
unauthorized parties to generate signed messages that will be
acceptable to all applications that use a trust anchor store
containing the corresponding apex trust anchor. The unauthorized
private key holder can generate signed messages of any content type
that may be accepted and used by applications that trust the apex
trust anchor. The contingency private key offers a potential way to
recover from such a compromise.
The compromise of a CA's private key leads to the same type of
problems as the compromise of an identity or a management trust
anchor private key. The unauthorized private key holder will be
limited by the certification path controls associated with the trust
anchor. If the CA is subordinate to a management trust anchor, the
scope of potential damage caused by a private key compromise is also
limited by the CMS content constraints certificate extension [CCC] in
the CA certificate, the CMS content constraints on any superior CA
certificates, and the CMS content constraints on the parent
management trust anchor.
The compromise of an end entity private key leads to the same type of
problems as the compromise of an identity or a management trust
anchor private key, except that the end entity is unable to issue any
certificates. The unauthorized private key holder will be limited by
the certification path controls associated with the trust anchor. If
the certified public key is subordinate to a management trust anchor,
the scope of potential damage caused by a private key compromise is
also limited by the CMS content constraints certificate extension
Housley, et al. Expires April 9, 2009 [Page 17]
Internet-Draft TAF October 2008
[CCC] in the end entity certificate, the CMS content constraints on
any superior CA certificates, and the CMS content constraints on the
parent management trust anchor.
Premature disclosure of the key-encryption key used to encrypt the
apex trust anchor contingency public key may result in early exposure
of the apex trust anchor contingency public key.
Usage of a certificate independent of the TrustAnchorInfo structure
that envelopes it must be carefully managed to avoid violating
constraints expressed in the TrustAnchorInfo. When enveloping a
certificate in a TrustAnchorInfo structure, values included in the
certificate should be evaluated to ensure there is no confusion or
conflict with values in the TrustAnchorInfo structure.
Housley, et al. Expires April 9, 2009 [Page 18]
Internet-Draft TAF October 2008
4. IANA Considerations
There are no IANA considerations. Please delete this section prior
to RFC publication.
Housley, et al. Expires April 9, 2009 [Page 19]
Internet-Draft TAF October 2008
5. References
5.1. Normative References
[CCC] Housley, R., Ashmore, S., and C. Wallace, "Cryptographic
Message Syntax (CMS) Content Constraints X.509 Certificate
Extension", draft-ietf-pkix-cms-content-constraints-00
(work in progress).
[ClearConstr]
Turner, S. and S. Chokhani, "Clearance Attribute and
Authority Clearance Constraints Certificate Extension",
draft-turner-caclearanceconstraints-02.txt (work in
progress), work in progress.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
10646", STD 63, RFC 3629, November 2003.
[RFC3852] Housley, R., "Cryptographic Message Syntax (CMS)",
RFC 3852, July 2004.
[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
Housley, R., and W. Polk, "Internet X.509 Public Key
Infrastructure Certificate and Certificate Revocation List
(CRL) Profile", RFC 5280, May 2008.
[X.680] "ITU-T Recommendation X.680: Information Technology -
Abstract Syntax Notation One", 1997.
5.2. Informative References
[I-D.draft-ietf-pkix-ta-mgmt-reqs]
Reddy, R. and C. Wallace, "Trust Anchor Management
Requirements", draft-ietf-pkix-ta-mgmt-reqs-01 (work in
progress).
[RFC4108] Housley, R., "Using Cryptographic Message Syntax (CMS) to
Protect Firmware Packages", RFC 4108, August 2005.
[TAMP] Housley, R., Ashmore, S., and C. Wallace, "Trust Anchor
Management Protocol (TAMP)", draft-ietf-pkix-tamp-00 (work
in progress).
[X.509] "ITU-T Recommendation X.509 - The Directory -
Authentication Framework", 2000.
Housley, et al. Expires April 9, 2009 [Page 20]
Internet-Draft TAF October 2008
Appendix A. ASN.1 Modules
Appendix A.1 provides the normative ASN.1 definitions for the
structures described in this specification using ASN.1 as defined in
[X.680].
A.1. ASN.1 Module
TrustAnchorInfo
{ joint-iso-ccitt(2) country(16) us(840) organization(1)
gov(101) dod(2) infosec(1) modules(0) 33 }
DEFINITIONS IMPLICIT TAGS ::=
BEGIN
IMPORTS
ContentType
FROM CryptographicMessageSyntax2004 -- [RFC3852]
{ iso(1) member-body(2) us(840) rsadsi(113549)
pkcs(1) pkcs-9(9) smime(16) modules(0) cms-2004(24) }
AlgorithmIdentifier, Certificate, Name, Extensions
FROM PKIX1Explicit88 -- from [RFC5280]
{ iso(1) identified-organization(3) dod(6) internet(1)
security(5) mechanisms(5) pkix(7) id-mod(0)
id-pkix1-explicit(18) }
CertificatePolicies, KeyIdentifier, NameConstraints
FROM PKIX1Implicit88 -- [RFC5280]
{ iso(1) identified-organization(3) dod(6) internet(1)
security(5) mechanisms(5) pkix(7) id-mod(0)
id-pkix1-implicit(19) }
CMSContentConstraints
FROM CMSContentConstraintsCertExtn-93
-- [CCC]
{ iso(1) identified-organization(3) dod(6) internet(1)
security(5) mechanisms(5) pkix(7) id-mod(0)
cmsContentConstraints-93(42) }
AuthorityClearanceConstraints
FROM Clearance-AuthorityClearanceConstraints93
-- from [ClearConstr]
{ joint-iso-ccitt(2) country(16) us(840) organization(1)
gov(101) dod(2) infosec(1) modules(0) 32 } ;
-- Trust Anchor Information
TrustAnchorInfo ::= SEQUENCE {
version [0] TrustAnchorInfoVersion DEFAULT v2,
pubKey PublicKeyInfo,
Housley, et al. Expires April 9, 2009 [Page 21]
Internet-Draft TAF October 2008
keyId KeyIdentifier,
taType TrustAnchorType,
taTitle TrustAnchorTitle OPTIONAL,
certPath CertPathControls OPTIONAL,
exts [3] Extensions OPTIONAL }
TrustAnchorInfoVersion ::= INTEGER { v1(1), v2(2), v3(3) }
PublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
publicKey BIT STRING }
KeyIdentifier ::= OCTET STRING
TrustAnchorType ::= CHOICE {
apex [0] ApexTrustAnchorInfo,
mgmt [1] MgmtTrustAnchorInfo,
ident [2] NULL }
ApexTrustAnchorInfo ::= SEQUENCE {
continPubKey ApexContingencyKey OPTIONAL,
tampSeqNum SeqNumber OPTIONAL }
ApexContingencyKey ::= SEQUENCE {
wrapAlgorithm AlgorithmIdentifier,
wrappedContinPubKey OCTET STRING }
SeqNumber ::= INTEGER (0..9223372036854775807)
MgmtTrustAnchorInfo ::= SEQUENCE {
taUsage TrustAnchorUsage,
tampSeqNum SeqNumber OPTIONAL }
TrustAnchorUsage ::= CMSContentConstraints
CMSContentConstraints ::= ContentTypeConstraintList
ContentTypeConstraintList ::= SEQUENCE SIZE (1..MAX) OF
ContentTypeConstraint
ContentTypeConstraint ::= SEQUENCE {
contentType ContentType,
canSource BOOLEAN DEFAULT TRUE,
attrConstraints AttrConstraintList OPTIONAL }
AttrConstraintList ::= SEQUENCE SIZE (1..MAX) OF AttrConstraint
AttrConstraint ::= SEQUENCE {
Housley, et al. Expires April 9, 2009 [Page 22]
Internet-Draft TAF October 2008
attrType AttributeType,
attrValues SET SIZE (1..MAX) OF AttributeValue }
ContentType ::= OBJECT IDENTIFIER
TrustAnchorTitle ::= UTF8String (SIZE (1..64))
CertPathControls ::= SEQUENCE {
taName Name,
certificate [0] Certificate OPTIONAL,
policySet [1] CertificatePolicies OPTIONAL,
policyFlags [2] CertPolicyFlags OPTIONAL,
clearanceConstr [3] AuthorityClearanceConstraints OPTIONAL,
nameConstr [4] NameConstraints OPTIONAL }
CertPolicyFlags ::= BIT STRING {
inhibitPolicyMapping (0),
requireExplicitPolicy (1),
inhibitAnyPolicy (2) }
END
Housley, et al. Expires April 9, 2009 [Page 23]
Internet-Draft TAF October 2008
Authors' Addresses
Russ Housley
Vigil Security, LLC
918 Spring Knoll Drive
Herndon, VA 20170
Email: housley@vigilsec.com
Sam Ashmore
National Security Agency
Suite 6751
9800 Savage Road
Fort Meade, MD 20755
Email: srashmo@radium.ncsc.mil
Carl Wallace
Cygnacom Solutions
Suite 5200
7925 Jones Branch Drive
McLean, VA 22102
Email: cwallace@cygnacom.com
Housley, et al. Expires April 9, 2009 [Page 24]
Internet-Draft TAF October 2008
Full Copyright Statement
Copyright (C) The IETF Trust (2008).
This document is subject to the rights, licenses and restrictions
contained in BCP 78, and except as set forth therein, the authors
retain all their rights.
This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Intellectual Property
The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information
on the procedures with respect to rights in RFC documents can be
found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use of
such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at
http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at
ietf-ipr@ietf.org.
Housley, et al. Expires April 9, 2009 [Page 25]