draft-josefsson-krb5starttls-bootstrap-00.txt | draft-josefsson-krb5starttls-bootstrap-01.txt | |||
---|---|---|---|---|
Network Working Group S. Josefsson | Network Working Group S. Josefsson | |||
Internet-Draft SJD AB | Internet-Draft SJD AB | |||
Updates: 4120 (if approved) March 2, 2009 | Updates: 4120 (if approved) March 3, 2009 | |||
Intended status: Standards Track | Intended status: Standards Track | |||
Expires: September 3, 2009 | Expires: September 4, 2009 | |||
Strengthening the Kerberos V5 Reply Key using TLS | Kerberos V5 Reply Keys From TLS | |||
draft-josefsson-krb5starttls-bootstrap-00 | draft-josefsson-krb5starttls-bootstrap-01 | |||
Status of this Memo | Status of this Memo | |||
This Internet-Draft is submitted to IETF in full conformance with the | This Internet-Draft is submitted to IETF in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
other groups may also distribute working documents as Internet- | other groups may also distribute working documents as Internet- | |||
Drafts. | Drafts. | |||
skipping to change at page 1, line 33 | skipping to change at page 1, line 33 | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
This Internet-Draft will expire on September 3, 2009. | This Internet-Draft will expire on September 4, 2009. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2009 IETF Trust and the persons identified as the | Copyright (c) 2009 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents in effect on the date of | Provisions Relating to IETF Documents in effect on the date of | |||
publication of this document (http://trustee.ietf.org/license-info). | publication of this document (http://trustee.ietf.org/license-info). | |||
Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
and restrictions with respect to this document. | and restrictions with respect to this document. | |||
Abstract | Abstract | |||
This document describes how to strengthen the Kerberos V5 reply key | This document describes how the Kerberos V5 over TLS protocol | |||
using keying material derived from TLS, by using a pre-authentication | together with a users' long term shared secret can be used to 1) | |||
mechanism. The goals are to 1) allow clients to securely learn a | allow clients to securely learn a realm's KDC X.509 certificate, 2) | |||
realm's KDC X.509 certificate, 2) distribute the X.509 trust anchors | distribute the X.509 trust anchors used by the KDC, and 3) make it | |||
used by the KDC, and 3) make it possible for clients to use Kerberos | possible for clients to use Kerberos V5 over TLS without having to | |||
V5 over TLS without having to validate the server certificates. | validate the server certificates. | |||
We also describe how the Kerberos V5 over TLS protocol can be used to | ||||
4) avoid the need for a long term shared key between the user and the | ||||
KDC by instead using TLS user authentication. | ||||
This goals are achieved by introducing two new Kerberos V5 pre- | ||||
authentication mechanisms that modify how the Kerberos V5 reply key | ||||
is derived. | ||||
Table of Contents | Table of Contents | |||
1. Introduction and Background . . . . . . . . . . . . . . . . . 3 | 1. Introduction and Background . . . . . . . . . . . . . . . . . 4 | |||
2. Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. TLS Exporter Function . . . . . . . . . . . . . . . . . . . . 5 | |||
3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6 | 3. Reply Key Strengthening . . . . . . . . . . . . . . . . . . . 6 | |||
4. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 7 | 4. Avoiding Use Of Long-Term Shared Key . . . . . . . . . . . . . 8 | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | |||
6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
6.1. Normative References . . . . . . . . . . . . . . . . . . . 9 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | |||
6.2. Informative References . . . . . . . . . . . . . . . . . . 9 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 8.1. Normative References . . . . . . . . . . . . . . . . . . . 12 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . . 12 | ||||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
1. Introduction and Background | 1. Introduction and Background | |||
This document describes a Kerberos V5 [RFC4120] pre-authentication | This document describes a Kerberos V5 [RFC4120] pre-authentication | |||
mechanism that uses Kerberos V5 over TLS | mechanism that uses Kerberos V5 over TLS | |||
[I-D.josefsson-kerberos5-starttls] to achieve: | [I-D.josefsson-kerberos5-starttls] to achieve: | |||
o Allow Kerberos V5 clients to securely learn a Kerberos V5 realm's | o Allow Kerberos V5 clients to securely learn a Kerberos V5 realm's | |||
Key Distribution Center (KDC) certificates. This is achieved by | Key Distribution Center (KDC) certificates. | |||
having the client connect to a KDC, take a note of the server's | ||||
certificate, and verify them as belonging to the KDC the user | ||||
trusts by properly decrypting the Kerberos V5 response using the | ||||
user's password. Only the correct KDC will be able to generate a | ||||
Kerberos V5 response using the user's password and the secrets | ||||
derived from the TLS channel. | ||||
o Securely distribute the trust anchors used by the Key Distribution | o Securely distribute the trust anchors used by the Key Distribution | |||
Center (KDC) in a Kerberos V5 realm. This is achieved the same | Center (KDC) in a Kerberos V5 realm. | |||
way as before, but rather than remembering the server certificate, | ||||
it remembers the trust anchor. | ||||
o The ability to use Kerberos V5 over TLS without having to validate | o The ability to use Kerberos V5 over TLS without having to validate | |||
the server certificates. | the server certificates. | |||
These goals are achieved by having the client connect to a KDC, take | ||||
a note of the server's certificate, and verify them as belonging to | ||||
the KDC the user trusts by properly decrypting the Kerberos V5 | ||||
response using the user's password. Only the correct KDC will be | ||||
able to generate a Kerberos V5 response using the user's password and | ||||
the secrets derived from the TLS channel. | ||||
The mechanism to achieve the above goals is for the KDC to strengthen | The mechanism to achieve the above goals is for the KDC to strengthen | |||
the Kerberos V5 reply key using keying material derived from the TLS | the Kerberos V5 reply key using keying material derived from the TLS | |||
channel [RFC5246] using the algorithm specified in Keying Material | channel [RFC5246] using the algorithm specified in Keying Material | |||
Exporters for Transport Layer Security (TLS) | Exporters for Transport Layer Security (TLS) | |||
[I-D.ietf-tls-extractor]. | [I-D.ietf-tls-extractor]. | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The document also describes a pre-authentication mechanism that can | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | be used to achieve: | |||
document are to be interpreted as described in RFC 2119 [RFC2119]. | ||||
2. Protocol | ||||
The client and KDC MUST support Kerberos V5 over TLS | ||||
[I-D.josefsson-kerberos5-starttls]. If the client do not (yet) have | ||||
trust anchors for the KDC, it should disable verification of the | ||||
server certificate. | ||||
To signal that the client wishes the KDC to strengthen the reply key | o Allow use of Kerberos V5 without a long-term shared secret between | |||
using keying material derived from the TLS session, it sends a pre- | the user and the KDC. | |||
authentication mechanism called "pa-krb5starttls-bootstrap". It has | ||||
a pdata-type integer value of #TBD. | ||||
The pre-authentication structure is defined in RFC 4120 as: | This goal is achieved by having the client authenticate itself using | |||
TLS, and having the KDC request that the client send a PA-ENC- | ||||
TIMESTAMP pre-authentication data encrypted using a key derived from | ||||
the TLS channel. If successful, the KDC will encrypt the response | ||||
using a reply key derived only from the TLS channel. | ||||
PA-DATA ::= SEQUENCE { | This document requires that both the client and the KDC MUST support | |||
-- NOTE: first tag is [1], not [0] | Kerberos V5 over TLS [I-D.josefsson-kerberos5-starttls]. | |||
padata-type [1] Int32, | ||||
padata-value [2] OCTET STRING -- might be encoded AP-REQ | ||||
} | ||||
The content of the padata-value should be the DER encoding of the | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
empty string. | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in RFC 2119 [RFC2119]. | ||||
When receiving the request to use the "pa-krb5starttls-bootstrap" | 2. TLS Exporter Function | |||
pre-authentication message, the KDC needs to decide whether to honor | ||||
it or not. This is a policy decision that can depend on several | ||||
reasons, including the content of the request. If the KDC decides | ||||
that it does not wish to honor the "pa-krb5starttls-bootstrap" | ||||
request, the KDC MUST fail the request by returning | ||||
KDC_ERR_PREAUTH_FAILED. | ||||
When the KDC decides to honor the client's request, it will process | The following function Krb5KeyFromTLS is used elsewhere to derive | |||
the incoming request as usual except that the KDC-REP reply key is | keys from a TLS session. | |||
post processed as follows. The post processing uses Keying Material | ||||
Exporters for Transport Layer Security (TLS) | ||||
[I-D.ietf-tls-extractor]. The channel binding input "tlscb" value | ||||
MUST be the client's TLS Finished message data as described in the | ||||
"tls-unique" channel binding registration. | ||||
StrengthenKrb5ReplyKeyUsingTLS (inkey, inkey_len, | Krb5KeyFromTLS (inkey, inkey_len, tlscb, tlscb_len, length, label) | |||
tlscb, tlscb_len) | ||||
Input: inkey encryption key, an octet string | Input: inkey encryption key, an octet string | |||
inkey_len length of encryption key, | inkey_len length of encryption key, | |||
a positive integer | a positive integer | |||
tlscb channel binding data, an octet string, | tlscb channel binding data, an octet string, | |||
tlscb_len length of channel binding data, | tlscb_len length of channel binding data, | |||
a positive integer | a positive integer | |||
length number of bytes to derive, | ||||
a positive integer | ||||
label the TLS PRF label to use, | ||||
a IANA registered string | ||||
Output: outkey derived key, a inlen-octet string | Output: outkey derived key, an "length"-octet string | |||
Steps: | Steps: | |||
1. Perform the TLS Exporter step: | 1. Perform the TLS Exporter step: | |||
outkey = PRF(master_secret, label, | outkey = PRF(master_secret, label, | |||
SecurityParameters.client_random + | SecurityParameters.client_random + | |||
SecurityParameters.server_random + | SecurityParameters.server_random + | |||
context_value_length + context_value | context_value_length + context_value | |||
)[length] | )[length] | |||
The "context_value" should be the concatenation of "inkey" | The "context_value" should be the concatenation of "inkey" | |||
followed by "tlscb". | followed by "tlscb". | |||
Consequently, the length of "context_value" (which used to | Consequently, the length of "context_value" (which used to | |||
derived "context_value_length") will be the sum of | derived "context_value_length") will be the sum of | |||
"inkey_len" and "tlscb_len". | "inkey_len" and "tlscb_len". | |||
Use the value of "inkey_len" as the value of the "length" | The values of "length" and "label" are as the inputs to this | |||
variable. | function. | |||
3. Output the derived key "outkey". | 3. Output the derived key "outkey". | |||
The client will strengthen the KDC-REP reply key using the same | 3. Reply Key Strengthening | |||
If the client do not (yet) have trust anchors for the KDC, it should | ||||
delay verification of the server certificate. | ||||
To signal that the client wishes the KDC to strengthen the reply key | ||||
using keying material derived from the TLS session, it sends a pre- | ||||
authentication mechanism called "pa-krb5starttls-strengthen". It has | ||||
a pdata-type integer value of #TBD. | ||||
The pre-authentication structure is defined in RFC 4120 as: | ||||
PA-DATA ::= SEQUENCE { | ||||
-- NOTE: first tag is [1], not [0] | ||||
padata-type [1] Int32, | ||||
padata-value [2] OCTET STRING -- might be encoded AP-REQ | ||||
} | ||||
The content of the padata-value should be the DER encoding of the | ||||
empty string. | ||||
When receiving the request to use the "pa-krb5starttls-strengthen" | ||||
pre-authentication message, the KDC needs to decide whether to honor | ||||
it or not. This is a policy decision that can depend on several | ||||
reasons, including the content of the request. If the KDC decides | ||||
that it does not wish to honor the "pa-krb5starttls-strengthen" | ||||
request, the KDC MUST fail the request by returning | ||||
KDC_ERR_PREAUTH_FAILED. | ||||
When the KDC decides to honor the client's request, it will process | ||||
the incoming request as usual except that the KDC-REP reply key is | ||||
post processed. The post processing uses Keying Material Exporters | ||||
for Transport Layer Security (TLS) [I-D.ietf-tls-extractor], by | ||||
invoking the Krb5KeyFromTLS function with the following inputs: | ||||
inkey: user's long term shared secret | ||||
inkey_len: length of "inkey" | ||||
tlscb: the client's TLS Finished message data, | ||||
as described in the "tls-unique" channel binding | ||||
registration. | ||||
tlscb_len: length of "tlscb". | ||||
length: same as "inkey_len" | ||||
label: "Kerberos V5 strengthen key" | ||||
The client will strengthen its local KDC-REP reply key using the same | ||||
procedure. | procedure. | |||
On successful decryption of the KDC-REP, the clients is certain that | On successful decryption of the KDC-REP, the clients is certain that | |||
it is talking to a KDC that knows the client's shared key without any | it is talking to a KDC that knows the client's shared key without any | |||
man-in-the-middle. The client can then remember the KDC server | man-in-the-middle. The client can then remember the KDC server | |||
certificate and/or trust anchors transferred during the TLS | certificate and/or trust anchors transferred during the TLS | |||
handshake, to be used during future Kerberos V5 over TLS connections. | handshake, to be used during future Kerberos V5 over TLS connections. | |||
The client MAY skip using this protocol for future connections, and | The client MAY skip using this protocol for future connections, and | |||
instead rely on the standard Kerberos V5 over TLS protocol with | instead rely on the standard Kerberos V5 over TLS protocol with | |||
proper validation of server certificate. | proper validation of server certificate. | |||
3. IANA Considerations | 4. Avoiding Use Of Long-Term Shared Key | |||
None. | The ETYPE-INFO-TLS pre-authentication type is sent by the KDC in a | |||
KRB-ERROR indicating a requirement for additional pre-authentication | ||||
before sending a reply protected using a key derived only from the | ||||
TLS session. It is used to notify a client of which encryption type | ||||
to use for the encryption of an encrypted timestamp for the purposes | ||||
of sending a PA-ENC-TIMESTAMP pre-authentication value using an | ||||
encryption key derived from the TLS session. | ||||
4. Acknowledgements | ETYPE-INFO-TLS ::= SEQUENCE OF Int32 -- EncryptionType | |||
-- in preference order --, | ||||
The client choses a supported encryption type and re-send the request | ||||
with a PA-ENC-TIMESTAMP encrypted using a key derived from the TLS | ||||
session by using Krb5KeyFromTLS with the following input: | ||||
inkey: empty string | ||||
inkey_len: 0 | ||||
tlscb: the client's TLS Finished message data, | ||||
as described in the "tls-unique" channel binding | ||||
registration. | ||||
tlscb_len: length of "tlscb". | ||||
length: key length of the chosen encryption type | ||||
label: "Kerberos V5 pre-auth key" | ||||
The KDC verifies the PA-ENC-TIMESTAMP and if successful it knows it | ||||
is talking to the authenticated user and can send a response | ||||
encrypted using the same encryption type as the client selected but | ||||
with a key derived using Krb5KeyFromTLS with the same inputs except | ||||
for: | ||||
label: "Kerberos V5 derive key" | ||||
The client derives the key the same way, and will be able to decrypt | ||||
the response. | ||||
Note that this means the long term shared key will not be involved in | ||||
deriving the reply that protects the Kerberos V5 response. | ||||
(The reason for encrypting the response is because Kerberos V5 does | ||||
not have any null encryption scheme.) | ||||
5. IANA Considerations | ||||
The IANA is requested to allocate the string "kerberos V5 reply key" | ||||
in the TLS Exporter label registry. | ||||
6. Acknowledgements | ||||
Nicolas Williams mentioned the advantages in | Nicolas Williams mentioned the advantages in | |||
<http://permalink.gmane.org/gmane.ietf.krb-wg/5016>. | <http://permalink.gmane.org/gmane.ietf.krb-wg/5016>, and also | |||
suggested the use of PA-ENC-TIMESTAMP. | ||||
5. Security Considerations | 7. Security Considerations | |||
The security considerations in Kerberos V5 [RFC4120], TLS [RFC5246], | The security considerations in Kerberos V5 [RFC4120], TLS [RFC5246], | |||
Kerberos V5 TCP extension [RFC5021], and Kerberos V5 over TLS | Kerberos V5 TCP extension [RFC5021], and Kerberos V5 over TLS | |||
[I-D.josefsson-kerberos5-starttls] are inherited. | [I-D.josefsson-kerberos5-starttls] are inherited. | |||
6. References | By using ETYPE-INFO-TLS the long-term shared key of the user is no | |||
longer involved in deriving the Kerberos V5 ticket. Instead only the | ||||
authentication from the TLS channel is used. This changes the | ||||
cryptographic model of Kerberos V5 significantly, and makes it | ||||
possible to operate Kerberos V5 without even having a long term | ||||
shared key for a particular user. This changes how a Kerberos V5 | ||||
security analysis should be made, so be aware of this model change | ||||
when reading other literature. | ||||
6.1. Normative References | 8. References | |||
8.1. Normative References | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The | [RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The | |||
Kerberos Network Authentication Service (V5)", RFC 4120, | Kerberos Network Authentication Service (V5)", RFC 4120, | |||
July 2005. | July 2005. | |||
[I-D.josefsson-kerberos5-starttls] | [I-D.josefsson-kerberos5-starttls] | |||
Josefsson, S., "Using Kerberos V5 over the Transport Layer | Josefsson, S., "Using Kerberos V5 over the Transport Layer | |||
Security (TLS) protocol", | Security (TLS) protocol", | |||
draft-josefsson-kerberos5-starttls-04 (work in progress), | draft-josefsson-kerberos5-starttls-04 (work in progress), | |||
December 2008. | December 2008. | |||
[I-D.ietf-tls-extractor] | [I-D.ietf-tls-extractor] | |||
Rescorla, E., "Keying Material Exporters for Transport | Rescorla, E., "Keying Material Exporters for Transport | |||
Layer Security (TLS)", draft-ietf-tls-extractor-04 (work | Layer Security (TLS)", draft-ietf-tls-extractor-04 (work | |||
in progress), February 2009. | in progress), February 2009. | |||
6.2. Informative References | 8.2. Informative References | |||
[RFC5021] Josefsson, S., "Extended Kerberos Version 5 Key | [RFC5021] Josefsson, S., "Extended Kerberos Version 5 Key | |||
Distribution Center (KDC) Exchanges over TCP", RFC 5021, | Distribution Center (KDC) Exchanges over TCP", RFC 5021, | |||
August 2007. | August 2007. | |||
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
(TLS) Protocol Version 1.2", RFC 5246, August 2008. | (TLS) Protocol Version 1.2", RFC 5246, August 2008. | |||
Author's Address | Author's Address | |||
End of changes. 30 change blocks. | ||||
80 lines changed or deleted | 172 lines changed or added | |||
This html diff was produced by rfcdiff 1.29, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |