draft-fluhrer-qr-ikev2-02.txt | draft-fluhrer-qr-ikev2-03.txt | |||
---|---|---|---|---|
Internet Engineering Task Force S. Fluhrer | Internet Engineering Task Force S. Fluhrer | |||
Internet-Draft D. McGrew | Internet-Draft D. McGrew | |||
Intended status: Informational P. Kampanakis | Intended status: Informational P. Kampanakis | |||
Expires: February 5, 2017 Cisco Systems | Expires: May 1, 2017 Cisco Systems | |||
August 4, 2016 | October 28, 2016 | |||
Postquantum Preshared Keys for IKEv2 | Postquantum Preshared Keys for IKEv2 | |||
draft-fluhrer-qr-ikev2-02 | draft-fluhrer-qr-ikev2-03 | |||
Abstract | Abstract | |||
This document describes an extension of IKEv2 to allow it to be | This document describes an extension of IKEv2 to allow it to be | |||
resistant to a Quantum Computer, by using preshared keys | resistant to a Quantum Computer, by using preshared keys | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
skipping to change at page 1, line 32 ¶ | skipping to change at page 1, line 32 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
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." | |||
This Internet-Draft will expire on February 5, 2017. | This Internet-Draft will expire on May 1, 2017. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2016 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 | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 10 ¶ | skipping to change at page 2, line 10 ¶ | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
1.1. Changes . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Changes . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.2. Requirements Language . . . . . . . . . . . . . . . . . . 3 | 1.2. Requirements Language . . . . . . . . . . . . . . . . . . 3 | |||
2. Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Exchanges . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Exchanges . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3.1. Computing SKEYSEED . . . . . . . . . . . . . . . . . . . 6 | 4. Creating Child SA Keying Material . . . . . . . . . . . . . . 5 | |||
3.2. Verifying preshared key . . . . . . . . . . . . . . . . . 7 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 6 | |||
3.3. Child SAs . . . . . . . . . . . . . . . . . . . . . . . . 7 | 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 7 | 6.1. Normative References . . . . . . . . . . . . . . . . . . 7 | |||
5. References . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 6.2. Informational References . . . . . . . . . . . . . . . . 7 | |||
5.1. Normative References . . . . . . . . . . . . . . . . . . 8 | Appendix A. Discussion and Rationale . . . . . . . . . . . . . . 7 | |||
5.2. Informational References . . . . . . . . . . . . . . . . 9 | Appendix B. Acknowledgement . . . . . . . . . . . . . . . . . . 9 | |||
Appendix A. Discussion and Rationale . . . . . . . . . . . . . . 9 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
1. Introduction | 1. Introduction | |||
It is an open question whether or not it is feasible to build a | It is an open question whether or not it is feasible to build a | |||
quantum computer, but if it is, many of the cryptographic algorithms | quantum computer, but if it is, many of the cryptographic algorithms | |||
and protocols currently in use would be insecure. A quantum computer | and protocols currently in use would be insecure. A quantum computer | |||
would be able to solve DH and ECDH problems, and this would imply | would be able to solve DH and ECDH problems, and this would imply | |||
that the security of existing IKEv2 systems would be compromised. | that the security of existing IKEv2 systems would be compromised. | |||
IKEv1 when used with preshared keys does not share this | IKEv1 when used with preshared keys does not share this | |||
vulnerability, because those keys are one of the inputs to the key | vulnerability, because those keys are one of the inputs to the key | |||
skipping to change at page 2, line 47 ¶ | skipping to change at page 2, line 46 ¶ | |||
This document describes a way to extend IKEv2 to have a similar | This document describes a way to extend IKEv2 to have a similar | |||
property; assuming that the two end systems share a long secret key, | property; assuming that the two end systems share a long secret key, | |||
then the resulting exchange is quantum resistant. By bringing | then the resulting exchange is quantum resistant. By bringing | |||
postquantum security to IKEv2, this note removes the need to use an | postquantum security to IKEv2, this note removes the need to use an | |||
obsolete version of the Internet Key Exchange in order to achieve | obsolete version of the Internet Key Exchange in order to achieve | |||
that security goal. | that security goal. | |||
The general idea is that we add an additional secret that is shared | The general idea is that we add an additional secret that is shared | |||
between the initiator and the responder; this secret is in addition | between the initiator and the responder; this secret is in addition | |||
to the authentication method that is already provided within IKEv2. | to the authentication method that is already provided within IKEv2. | |||
We stir in this secret when generating the IKE keys (along with the | We stir in this secret when generating the key material (KEYMAT) keys | |||
parameters that IKEv2 normally uses); this secret adds quantum | for the child SAs (along with the parameters that IKEv2 normally | |||
resistance to the exchange. | uses); this secret provides quantum resistance to the IPsec SAs. | |||
It was considered important to minimize the changes to IKEv2. The | It was considered important to minimize the changes to IKEv2. The | |||
existing mechanisms to do authentication and key exchange remain in | existing mechanisms to do authentication and key exchange remain in | |||
place (that is, we continue to do (EC)DH, and potentially a PKI | place (that is, we continue to do (EC)DH, and potentially a PKI | |||
authentication if configured). This does not replace the | authentication if configured). This does not replace the | |||
authentication checks that the protocol does; instead, it is done as | authentication checks that the protocol does; instead, it is done as | |||
a parallel check. | a parallel check. | |||
1.1. Changes | 1.1. Changes | |||
Changes in this draft from the previous versions | Changes in this draft from the previous versions | |||
draft-02 | ||||
- Simplified the protocol by stirring in the preshared key into the | ||||
child SAs; this avoids the problem of having the responder decide | ||||
which preshared key to use (as it knows the initiator identity at | ||||
that point); it does mean that someone with a Quantum Computer can | ||||
recover the initial IKE negotation. | ||||
- Removed positive endorsements of various algorithms. Retained | ||||
warnings about algorithms known to be weak against a Quantum Computer | ||||
draft-01 | draft-01 | |||
- Added explicit guidance as to what IKE and IPsec algorithms are | - Added explicit guidance as to what IKE and IPsec algorithms are | |||
Quantum Resistant | Quantum Resistant | |||
draft-00 | draft-00 | |||
- We switched from using vendor ID's to transmit the additional data | - We switched from using vendor ID's to transmit the additional data | |||
to notifications | to notifications | |||
skipping to change at page 3, line 46 ¶ | skipping to change at page 4, line 9 ¶ | |||
1.2. Requirements Language | 1.2. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
2. Assumptions | 2. Assumptions | |||
We assume that each IKE peer (both the initiator and the responder) | We assume that each IKE peer (both the initiator and the responder) | |||
has an optional Postquantum Preshared Key (PPK) (potentially on a | has an optional Postquantum Preshared Key (PPK) (potentially on a | |||
per-peer basis), and also has a configurable flag that determines | per-peer basis, selected by peer identity), and also has a | |||
whether this postquantum preshared key is mandatory. This preshared | configurable flag that determines whether this postquantum preshared | |||
key is independent of the preshared key (if any) that the IKEv2 | key is mandatory. This preshared key is independent of the preshared | |||
protocol uses to perform authentication. | key (if any that the IKEv2 protocol uses to perform authentication. | |||
In addition, we assume that the initiator knows which PPK to use with | ||||
the peer it is initiating to (for instance, if it knows the peer, | ||||
then it can determine which PPK will be used). | ||||
3. Exchanges | 3. Exchanges | |||
If the initiator has a configured postquantum preshared key (whether | If the initiator has a configured postquantum preshared key (whether | |||
or not it is optional), then it will include a notify payload in its | or not it is optional), then it will include a notify payload in its | |||
initial exchange as follows: | initial encrypted exchange as follows: | |||
Initiator Responder | Initiator Responder | |||
------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
HDR, SAi1, KEi, Ni, N(PPK_REQUEST) ---> | HDR, SK {IDi, [CERT,] [CERTREQ,] | |||
[IDr,] AUTH, SAi2, | ||||
TS, TSr, N(PPK_NOTIFY)} ---> | ||||
N(PPK_REQUEST) is a status notification payload with the type [TBA]; | N(PPK_NOTIFY) is a status notification payload with the type [TBA]; | |||
it has a protocol ID of 0, and no SPI and no notification data | it has a protocol ID of 0, and no SPI and no notification data | |||
associated with it. | associated with it. | |||
When the responder recieves the initial exchange with the notify | When the responder receives the initial encrypted exchange, it checks | |||
payload, then (if it is configured to support PPK), it responds with: | to see if it received a notify within that exchange, is configured to | |||
support PPK with the initiator's identity, and whether that use is | ||||
Initiator Responder | mandatory. If the notify was received, and the responder does have a | |||
------------------------------------------------------------------ | PPK for that identity, then it responds with the standard IKE | |||
<--- HDR, N(COOKIE), N(PPK_ENCODE) | response with the PPK_NOTIFY notify message included, namely: | |||
If it is not configured to support PPK, the responder continues with | ||||
the standard IKEv2 protocol. | ||||
In other words, it asks for the responder to generate and send a | ||||
cookie in its responses (as listed in section 2.6 of RFC7296), and in | ||||
addition, include a notify that gives details of how the initiator | ||||
should indicate what the PPK is. This notification payload has the | ||||
type [TBA}; it has a protocol ID of 0, and no SPI; the notification | ||||
data is of the format: | ||||
1 2 3 | ||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| PPK Indicator Algorithm | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| PPK Indicator Input (variable) | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
The PPK Indicator Algorithm is a 4 byte word that states which PPK | ||||
indicator to use. That is, it gives the encoding format for the PPK | ||||
that should be used is given to the responder. At present, the only | ||||
assigned encoding is 0x00000001, which indicates that AES256_SHA256 | ||||
will be used (as explained below). | ||||
PPK Indicator Input is a data input to the PPK indicator Algorithm; | ||||
its length will depend on the PPK indicator; for the indicator | ||||
AES256_SHA256, this PPK Indicator Input is 16 bytes. | ||||
The contents of this PPK Indicator Input is selected by responder | ||||
policy; below we give trade-offs of the various possibilities | ||||
When the initiator receives this notification, it responds as | ||||
follows: | ||||
Initiator Responder | ||||
------------------------------------------------------------------ | ||||
HDR, N(COOKIE), SAi1, KEi, Ni, N(PPK_REQUEST) ---> | ||||
This is the standard IKEv2 cookie response, with a PPK_REQUEST | ||||
notification added | ||||
N(PPK_REQUEST) is a status notification payload with the type [TBA]; | ||||
it has a protocol ID of 0, and no SPI; however this time, the | ||||
notification data as as follows: | ||||
1 2 3 | ||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| PPK Indicator Algorithm | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| PPK Indicator Input (variable) | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| PPK Indicator (variable) | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
The PPK Indicator Algorithm and PPK Indicator Input are precisely the | ||||
same as was given in the PPK_ENCODE format (as is repeated in case | ||||
the responder ran this cookie protocol in a stateless manner). The | ||||
PPK Indicator is the encoded version of the PPK that the initiator | ||||
has. The idea behind this is to allow the responder to select which | ||||
PPK it should use when it derives the IKEv2 keys. | ||||
For the AES256_SHA256 PPK indicator, the PPK Indicator is 16 bytes. | ||||
To compute it, we use HMAC_SHA256(PPK, "A") as the 256 bit AES key to | ||||
encrypt the 16 bytes on PPK Indicator Input (in ECB mode), where "A" | ||||
is a string consisting of a single 0x41 octet. | ||||
When the responder receives this notification payload, it verifies | ||||
that the PPK Indicator Algorithm is as it has specified, and it MAY | ||||
verify that the PPK Indicator Input is as it has specified. If | ||||
everything is on the level, it scans through its list of configured | ||||
postquantum preshared keys, and determines which one it is (possibly | ||||
(assuming AES256_SHA256_PPK) by computing AES256(HMAC_SHA256(PPK, | ||||
"A"), PPK_Indicator_Input) and comparing that value to the 16 bytes | ||||
within the payload. Alternatively, it may have preselected a PPK | ||||
Indicator Input, and has precomputed (again assuming | ||||
AES256_SHA256_PPK) AES256(HMAC_SHA256(PPK, "A"), PPK_Indicator_Input) | ||||
for each PPK it knows about (in which case, this is a simple search). | ||||
If the responder finds a value that matches the payload for a | ||||
particular PPK, that indicates that the intiator and responder share | ||||
a PPK and can make use of this extension. Upon finding such a | ||||
preshared key, the responder includes a notification payload with the | ||||
response: | ||||
Initiator Responder | Initiator Responder | |||
------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
<--- HDR, SAr1, Ker, Nr, [CERTREQ], N(PPK_ACK) | <--- HDR, SK {IDr, [CERT,] AUTH, | |||
SAr2, TSi, TSr, N(PPK_NOTIFY)} | ||||
N(PPK_ACK) is a status notification payload with the type [TBA]; it | ||||
has a protocol ID of 0, and no SPI and no notification data | ||||
associated with it. This notification serves as a postquantum | ||||
preshared key confirmation. | ||||
If the responder does not find such a PPK, then it MAY continue with | ||||
the protocol without including a notification ID (if it is configured | ||||
to not have mandatory preshared keys), or it MAY abort the exchange | ||||
(if it configured to make preshared keys mandatory). | ||||
When the initiator receives the response, it MUST check for the | If the responder is not configured to support PPK with that identity, | |||
presence of the notification. If it receives one, it marks the SA as | it continues with the standard IKE protocol, not including the | |||
using the configured preshared key; if it does not receive one, it | notification. | |||
MAY either abort the exchange (if the preshared key was configured as | ||||
mandatory), or it MAY continue without using the preshared key (if | ||||
the preshared key was configured as optional). | ||||
3.1. Computing SKEYSEED | If the responder is configured to support PPK with that identity, and | |||
it does not receive the notification, then if the PPK usage is | ||||
configured as mandatory, it MUST abort the exchange. If the PPK | ||||
usage is configured as optional, it continues with the standard IKE | ||||
protocol, not including the notification. | ||||
When it comes time to generate the keying material during the initial | This table summarizes the above logic by the responder | |||
Exchange, the implementation (both the initiator and the responder) | ||||
checks to see if there was an agreed-upon preshared key. If there | ||||
was, then both sides use this alternative formula: | ||||
SKEYSEED = prf(prf(PPK, Ni) | prf(PPK, Nr), g^ir) | Received Nonce Have PPK PPK Mandatory Action | |||
(SK_d | SK_ai | SK_ar | SK_ei | SK_er | SK_pi | SK_pr) = | ------------------------------------------------------------------ | |||
prf+(SKEYSEED, prf(PPK, Ni) | prf(PPK, Nr) | | No No * Standard IKE protocol | |||
SPIi | SPIr) | No Yes No Standard IKE protocol | |||
No Yes Yes Abort negotiation | ||||
Yes No * Standard IKE protocol | ||||
Yes Yes * Include PPK_NOTIFY Nonce | ||||
where PPK is the postquantum preshared key, Ni, Nr are the nonces | When the initiator receives the response, then (if it is configured | |||
exchanged in the IKEv2 exchange, and prf is the pseudorandom function | to use a PPK with the responder), then it checks for the presense of | |||
that was negotiated for this SA. | the notification. If it receives one, it marks the SA as using the | |||
configured PPK; if it does not receive one, it MUST either abort the | ||||
exchange (if the PPK was configured as mandatory), or it MUST | ||||
continue without using the PPK (if the PPK was configured as | ||||
optional). | ||||
We reuse the negotiated PRF to transform the received nonces. We use | The protocol continues as standard until it comes time to compute the | |||
this PRF, rather than negotiating a separate one, because this PRF is | child SA keying material. | |||
agreed by both sides to have sufficient security properties | ||||
(otherwise, they would have negotiated something else), and so that | ||||
we don't need to specify a separate negotiation procedure. | ||||
3.2. Verifying preshared key | 4. Creating Child SA Keying Material | |||
Once both the initiator and the responder have exchanged identities, | When it comes time to generate the keying material for a child SA, | |||
they both double-check with their policy database to verify that they | the implementation (both the initiator and the responder) checks to | |||
were configured to use those preshared keys when negotiating with the | see if they agreed to use a PPK. If they did, then they look up | |||
peer. If they are not, they MUST abort the exchange. | (based on the peer's identity) the configured PPK, and then both | |||
sides use one of these alternative formula (based on whether an | ||||
optional Diffie-Hellman was included): | ||||
3.3. Child SAs | Ni' = prf(PPK, Ni) | |||
Nr' = prf(PPK, Nr) | ||||
KEYMAT = prf+(SK_d, Ni' | Nr') | ||||
When you create a child SA, the initiator and the responder will | or | |||
transform the nonces using the same PPK as they used during the | ||||
original IKE SA negotiation. That is, they will use one of the | ||||
alternative derivations (depending on whether an optional Diffie- | ||||
Hellman was included): | ||||
KEYMAT = prf+(SK_d, prf(PPK, Ni) | prf(PPK, Nr)) | Ni' = prf(PPK, Ni) | |||
Nr' = prf(PPK, Nr) | ||||
KEYMAT = prf+(SK_d, g^ir (new) | Ni' | Nr') | ||||
or | where PPK is the configured postquantum preshared key, Ni, Nr are the | |||
nonces from the IKE_SA_INIT exchange if this require is the first | ||||
Child SA created or the fresh Ni and Nr from the CREATE_CHILD_SA | ||||
exchange if this is a subsequent creation, and prf is the | ||||
pseudorandom function that was negotiated for this SA. | ||||
KEYMAT = prf+(SK_d, g^ir (new) | | This is the standard IKE KEYMAT generation, except that the nonces | |||
prf(PPK, Ni) | prf(PPK, Nr)) | are transformed (via the negotiated PRF function) using the preshared | |||
PPK value | ||||
We use this negotiated PRF, rather than negotiating a separate one, | ||||
because this PRF is agreed by both sides to have sufficient security | ||||
properties (otherwise, they would have negotiated something else), | ||||
and so that we don't need to specify a separate negotiation | ||||
procedure. | ||||
When you rekey an IKE SA (generating a fresh SKEYSEED), the initiator | When you rekey an IKE SA (generating a fresh SKEYSEED), the initiator | |||
and the responder will transform the nonces using the same PPK as | and the responder will transform the nonces using the same PPK as | |||
they used during the original IKE SA negotiation. That is, they will | they used during the original IKE SA negotiation. That is, they will | |||
use the alternate derivation: | use the alternate derivation: | |||
SKEYSEED = prf( SK_d (old), g^ir (new) | | Ni' = prf(PPK, Ni) | |||
prf(PPK, Ni) | prf(PPK, Nr)) | Nr' = prf(PPK, Nr) | |||
SKEYSEED = prf( SK_d (old), g^ir (new) | Ni' | Nr' ) | ||||
(SK_d | SK_ai | SK_ar | SK_ei | SK_er | SK_pi | SK_pr) = | (SK_d | SK_ai | SK_ar | SK_ei | SK_er | SK_pi | SK_pr) = | |||
prf+(SKEYSEED, prf(PPK, Ni) | prf(PPK, Nr) | | prf+(SKEYSEED, Ni' | Nr' | SPIi | SPIr) | |||
SPIi | SPIr) | ||||
4. Security Considerations | An implementation MAY rekey the initial IKE SA immediately after | |||
negotiating it; this would reduce the amount of data available to an | ||||
attacker with a Quantum Computer | ||||
The PPK Indicator Input within the PPK_ENCODE notification are there | 5. Security Considerations | |||
to prevent anyone from deducing whether two different exchanges use | ||||
the same PPK values. To prevent such a leakage, servers are | ||||
encouraged to vary them as much as possible (however, they may want | ||||
to repeat values to speed up the search for the PPK). Repeating | ||||
these values places the anonymity at risk; however it has no other | ||||
security implication. | ||||
Quantum computers are able to perform Grover's algorithm; that | Quantum computers are able to perform Grover's algorithm; that | |||
effectively halves the size of a symmetric key. Because of this, the | effectively halves the size of a symmetric key. Because of this, the | |||
user SHOULD ensure that the postquantum preshared key used has at | user SHOULD ensure that the postquantum preshared key used has at | |||
least 256 bits of entropy, in order to provide a 128 bit security | least 256 bits of entropy, in order to provide a 128 bit security | |||
level. | level. | |||
In addition, the policy SHOULD be set to negotiate only quantum- | Although this protocol preserves all the security properties of IKE | |||
resistant symmetric algorithms; here is a list of defined IKEv2 (and | against adversaries with conventional computers, this protocol allows | |||
IPsec) algorithms which are believed to be Quantum Resistant | an adversary with a Quantum Computer to decrypt all traffic encrypted | |||
with the initial IKE SA. In particular, it allows the adversary to | ||||
IKE Encryption algorithm: assuming that the negotiated keysize is >= | recover the identities of both sides. If there is IKE traffic other | |||
256, then all of: ENCR_AES_CBC, ENCR_AES_CTR, ENCR_AES_CCM_*, | than the identities that need to be protected against such an | |||
ENCR_AES-GCM, ENCR_CHACHA20_POLY1305, ENCR_CAMELLIA, ENCR_RC5, | adversary, one suggestion would be to form an initial IKE SA (which | |||
ENCR_BLOWFISH | is used to exchange identities), perhaps by using the protocol | |||
documented in RFC6023. Then, you would immediately create a child | ||||
IKE PRF: PRF_HMAC_SHA2_256, PRF_HMAC_SHA2_384, PRF_SHA2_512. Note | IKE SA (which is used to exchange everything else). Because the | |||
that PRF_AES128_XCBC and PRF_AES128_CBC are not on this list, even | child IKE SA keys are a function of the PPK (among other things), | |||
though they can use larger keys, because they use a 128 bit key | traffic protected by that SA is secure against Quantum capable | |||
internally | adversaries. | |||
IKE Integrity algorithm: AUTH_HMAC_SHA2_256, AUTH_HMAC_SHA2_384, | ||||
AUTH_HMAC_SHA2_512, AUTH_AES_256_GMAC | ||||
AH Transforms: AH-SHA2-256, AH-SHA2-384, AH-SHA2-512, AH-AES-256-GMAC | In addition, the policy SHOULD be set to negotiate only quantum- | |||
resistant symmetric algorithms; while this RFC doesn't claim to give | ||||
advise as to what algorithms are secure (as that may change based on | ||||
future cryptographical results), here is a list of defined IKEv2 and | ||||
IPsec algorithms that should NOT be used, as they are known not to be | ||||
Quantum Resistant | ||||
ESP Transforms: assuming that the negotiated keysize is >= 256, then | Any IKE Encryption algorithm, PRF or Integrity algorithm with key | |||
all of: ESP_AES-CBC, ESP_AES-CR, ESP_AES-CCM, ESP_AES-GCM, | size <256 bits | |||
ESP_CAMELLIA, ESP_RC5, ESP_BLOWFISH, ESP_NULL_AUTH_AES-GMAC | ||||
ESP Authentication algorithms: HMAC-SHA2-256, HMAC-SHA2-384, HMAC- | Any ESP Transform with key size <256 bits | |||
SHA2-512, AES-256-GMAC | ||||
5. References | PRF_AES128_XCBC and PRF_AES128_CBC; even though they are defined to | |||
be able to use an arbitrary key size, they convert it into a 128 bit | ||||
key internally | ||||
5.1. Normative References | 6. References | |||
[AES] National Institute of Technology, "Specification for the | 6.1. Normative References | |||
Advanced Encryption Standard (AES)", 2001, <FIPS 197>. | ||||
[RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | |||
Hashing for Message Authentication", RFC 2104, | Hashing for Message Authentication", RFC 2104, | |||
DOI 10.17487/RFC2104, February 1997, | DOI 10.17487/RFC2104, February 1997, | |||
<http://www.rfc-editor.org/info/rfc2104>. | <http://www.rfc-editor.org/info/rfc2104>. | |||
[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, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<http://www.rfc-editor.org/info/rfc2119>. | <http://www.rfc-editor.org/info/rfc2119>. | |||
[RFC7296] Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T. | [RFC7296] Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T. | |||
Kivinen, "Internet Key Exchange Protocol Version 2 | Kivinen, "Internet Key Exchange Protocol Version 2 | |||
(IKEv2)", STD 79, RFC 7296, DOI 10.17487/RFC7296, October | (IKEv2)", STD 79, RFC 7296, DOI 10.17487/RFC7296, October | |||
2014, <http://www.rfc-editor.org/info/rfc7296>. | 2014, <http://www.rfc-editor.org/info/rfc7296>. | |||
5.2. Informational References | 6.2. Informational References | |||
[RFC6023] Nir, Y., Tschofenig, H., Deng, H., and R. Singh, "A | ||||
Childless Initiation of the Internet Key Exchange Version | ||||
2 (IKEv2) Security Association (SA)", RFC 6023, | ||||
DOI 10.17487/RFC6023, October 2010, | ||||
<http://www.rfc-editor.org/info/rfc6023>. | ||||
[SPDP] McGrew, D., "A Secure Peer Discovery Protocol (SPDP)", | [SPDP] McGrew, D., "A Secure Peer Discovery Protocol (SPDP)", | |||
2001, <http://www.mindspring.com/~dmcgrew/spdp.txt>. | 2001, <http://www.mindspring.com/~dmcgrew/spdp.txt>. | |||
Appendix A. Discussion and Rationale | Appendix A. Discussion and Rationale | |||
The idea behind this is that while a Quantum Computer can easily | The idea behind this is that while a Quantum Computer can easily | |||
reconstruct the shared secret of an (EC)DH exchange, they cannot as | reconstruct the shared secret of an (EC)DH exchange, they cannot as | |||
easily recover a secret from a symmetric exchange this makes the | easily recover a secret from a symmetric exchange this makes the | |||
SKEYSEED depend on both the symmetric PPK, and also the Diffie- | IPsec KEYMAT and any child SA's SKEYSEED depend on both the symmetric | |||
Hellman exchange. If we assume that the attacker knows everything | PPK, and also the Diffie-Hellman exchange. If we assume that the | |||
except the PPK during the key exchange, and there are 2**n plausible | attacker knows everything except the PPK during the key exchange, and | |||
PPK's, then a Quantum Computer (using Grover's algorithm) would take | there are 2**n plausible PPK's, then a Quantum Computer (using | |||
O(2**(n/2)) time to recover the PPK. So, even if the (EC)DH can be | Grover's algorithm) would take O(2**(n/2)) time to recover the PPK. | |||
trivially solved, the attacker still can't recover any key material | So, even if the (EC)DH can be trivially solved, the attacker still | |||
unless they can find the PPK, and that's too difficult if the PPK has | can't recover any key material (except for the SK values for the | |||
enough entropy (say, 256 bits). | initial IKE exchange) unless they can find the PPK, and that's too | |||
difficult if the PPK has enough entropy (say, 256 bits). Note that | ||||
we do allow an attacker with a Quantum Computer to rederive the | ||||
keying material for the initial IKE SA; this was a compromise to | ||||
allow the responder to select the correct PPK quickly. | ||||
Another goal of this protocol is to minimize the number of changes | Another goal of this protocol is to minimize the number of changes | |||
within the IKEv2 protocol, and in particular, within the cryptography | within the IKEv2 protocol, and in particular, within the cryptography | |||
of IKEv2. By limiting our changes to notifications, and translating | of IKEv2. By limiting our changes to notifications, and translating | |||
the nonces, it is hoped that this would be implementable, even on | the nonces, it is hoped that this would be implementable, even on | |||
systems that perform much of the IKEv2 processing is in hardware. | systems that perform much of the IKEv2 processing is in hardware. | |||
A third goal was to be friendly to incremental deployment in | A third goal was to be friendly to incremental deployment in | |||
operational networks, for which we might not want to have a global | operational networks, for which we might not want to have a global | |||
shared key, and also if we're rolling this out incrementally. This | shared key, and also if we're rolling this out incrementally. This | |||
is why we specifically try to allow the PPK to be dependent on the | is why we specifically try to allow the PPK to be dependent on the | |||
peer, and why we allow the PPK to be configured as optional. | peer, and why we allow the PPK to be configured as optional. | |||
A fourth goal was to avoid violating any of the security goals of | A fourth goal was to avoid violating any of the security goals of | |||
IKEv2. One such goal is anonymity; that someone listening into the | IKEv2. | |||
exchanges cannot easily determine who is negotiating with whom. | ||||
The third and fourth goals are in partial conflict. In order to | The third and fourth goals are in partial conflict. In order to | |||
achieve postquantum security, we need to stir in the PPK when the | achieve postquantum security, we need to stir in the PPK when the | |||
keys are computed, however the keys are computed before we know who | keys are computed, however the keys are computed before we know who | |||
we're talking to (and so which PPK we should use). And, we can't | we're talking to (and so which PPK we should use). And, we can't | |||
just tell the other side which PPK to use, as we might use different | just tell the other side which PPK to use, as we might use different | |||
PPK's for different peers, and so that would violate the anonymity | PPK's for different peers, and so that would violate the anonymity | |||
goal. If we just (for example) included a hash of the PPK, someone | goal. If we just (for example) included a hash of the PPK, someone | |||
listening in could easily tell when we're using the same PPK for | listening in could easily tell when we're using the same PPK for | |||
different exchanges, and thus deduce that the systems are related. | different exchanges, and thus deduce that the systems are related. | |||
The compromise we selected was to allow the responder to make the | The compromise we selected was to stir in the PPK in all the derived | |||
trade-off between anonymity and efficiency (by including the PPK | keys except the initial IKE SA keys, While this allows an attacker | |||
Indicator Input, which varies how the PPK is encoded, and allowing | with a Quantum Computer to recover the identities, a poll on the | |||
the responder to specify it). | IPsecME mailing list indicated that the majority of the people on the | |||
list did not think anonymity was an important property within IKE. | ||||
A responder who values anonymitity may select a random PPK Indicator | We stir in the shared secret within the Child SA keying material; | |||
Input each time; in this case, the responder needs to do a linear | this allows an implementation that wants to protect the other IKE- | |||
scan over all PPK's it has been configured with | based traffic to create an initial IKE SA to exchange identities, and | |||
then immediately create a Child SA, and use that Child SA to exchange | ||||
A responder who can't afford a linear scan could precompute a small | the rest of the negotiation. | |||
(possibly rolling) set of the PPK Indicator Inputs; in this case, it | ||||
would precompute how each PPK would be indicated. If it reissues the | ||||
same PPK Indicator Input to two different exchanges, someone would be | ||||
able to verify whether the same PPK was used; this is some loss of | ||||
anonymity; but is considerably more efficient. | ||||
An alternative approach to solve this problem would be to do a normal | ||||
(non-QR) IKEv2 exchange, and when the two sides obtain identities, | ||||
see if they need to be QR, and if so, create an immediate IKEv2 child | ||||
SA (using the PPK). One issue with this is that someone with a | ||||
quantum computer could deduce the identities used; another issue is | ||||
the added complexity required by the IKE state machines. | ||||
A slightly different approach to try to make this even more friendly | ||||
to IKEv2-based cryptographic hardware might be to use invertible | ||||
cryptography when we present the nonces to the kdf. The idea here is | ||||
in case we have IKEv2 hardware that insists on selecting its own | ||||
nonces (and so we won't be able to give a difference nonce to the | ||||
KDF); instead, we encrypt the nonce that we send (and decrypt the | ||||
nonce that we get). Of course, this means that the responder will | ||||
need to figure out which PPK we're using up front (based on the | ||||
notifications); we're not sure if this idea would be a net | ||||
improvement (especially since the transform we're proposing now is | ||||
cryptographically secure and simple). | ||||
The reasoning behind the cryptography used: the values we use in the | ||||
AES256_SHA256 PPK Indicator Algorithm are cryptographically | ||||
independent of the values used during the SKEYSEED generation | ||||
(because, even if we use HMAC_256 as our PRF, HMAC_SHA256(PPK, A) is | ||||
independent of HMAC_SHA256(PPK, B) if A and B are different strings | ||||
(and as any real nonce must be longer than a single byte, there is | ||||
never a collision between that and "A". This independent stems from | ||||
the assumption that HMAC_SHA256 is a secure MAC. | ||||
The method of encoding the PPK within the notification (using AES- | ||||
256) was chosen as it met two goals: | ||||
o Anonymity; given A, AES256_K1(A), B, AES256_K2(B), it's fairly | ||||
obvious that gives someone (even if they have a quantum computer) | ||||
no clue about whether K1==K2 (unless either A==B or AES256_K1(A)== | ||||
AES256_K2(B); both highly unlikely events if A and B are chosen | ||||
randomly). | ||||
o Performance during the linear search; a responder could preexpand | ||||
the AES keys, and so comparing a potential PPK against a | ||||
notification from the initiator would amount to performing a | ||||
single AES block encryption and then doing a 16 byte comparison. | ||||
The first goal is considered important; one of the goals of IKEv2 is | ||||
to provide anonymity. The second is considered important because the | ||||
linear scan directly affects scalability. While this draft allows | ||||
the server to gain performance at the cost of anonymity, it was | ||||
considered useful if we make the fully-anonymous method as attractive | ||||
as possible. This use of AES makes this linear scan as cheap as | ||||
possible (while preserving security). | ||||
We allow the responder to specify the PPK Indicator Algorithm; this | In addition, when we stir in the PPK, we always use it to modify a | |||
was in response to requests for algorithm agility. At present, it | nonce (using the negotiated PRF). We modify the nonce (rather than, | |||
appears unlikely that there would be a need for an additional | say, including the PPK in with the prf or prf+ computation directly) | |||
encoding (as the current one is extremely conservative | so that this would be easier to implement on an hardware-based IKE | |||
cryptographically); however the option is there. | implementation; the prf computations might be built-in, but the | |||
nonces would be external inputs, and so modifying those would | ||||
minimize the changes. | ||||
The current draft forces a cookie exchange, and hence adds a round | Appendix B. Acknowledgement | |||
trip over the normal IKEv2 operation. This was done to allow the | ||||
server to specify the PPK Indicator algorithm. While as additional | ||||
round trip may seem costly, it does not invalidate this proposal, The | ||||
reason for this proposal is to give an alternative to IKEv1 with | ||||
preshared keys. While this additional round trip may seem costly, it | ||||
is important to note that, even with the additional round trip, this | ||||
proposal is still cheaper than IKEv1. Thus the mechanisms specified | ||||
in this note meet the goal of providing a better alternative than | ||||
relying on an obsolete version of the protocol for post quantum | ||||
security. | ||||
One issue that is currently open: what should happen if the initiator | The idea of stirring in the PPK into the IPsec key generation process | |||
guesses at the PPK Indicator Algorithm, selects a random PPK | was originally suggested on the list by Tero Kivinen. | |||
Indicator Input, and includes that in the initial message? After | ||||
all, if the server follows the recommendation that the cookie | ||||
exchange is stateless, and if the server chooses the PPK Indicator | ||||
Input In randomly, it has no way to know that the client isn't | ||||
running this protocol as specified. If the responder supports that | ||||
PPK Indicator Algorithm, it could very well respond without forcing a | ||||
cookie exchange (which would eliminate a message exchange round). | ||||
It's not clear is whether we should endorse this mode of operation, | ||||
and explicitly state that if the server recieves such an initial | ||||
request, and it doesn't recognize the PPK Indicator Input, it should | ||||
act like it recieved an iniital PPK_REQUEST. | ||||
Authors' Addresses | Authors' Addresses | |||
Scott Fluhrer | Scott Fluhrer | |||
Cisco Systems | Cisco Systems | |||
Email: sfluhrer@cisco.com | Email: sfluhrer@cisco.com | |||
David McGrew | David McGrew | |||
Cisco Systems | Cisco Systems | |||
End of changes. 44 change blocks. | ||||
311 lines changed or deleted | 171 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |