One document matched: draft-sheffer-emu-eap-eke-01.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"
[
<!ENTITY rfc2104 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2104.xml'>
<!ENTITY rfc2119 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
<!ENTITY rfc2284 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2284.xml'>
<!ENTITY rfc3526 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3526.xml'>
<!ENTITY rfc3748 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3748.xml'>
<!ENTITY rfc4013 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4013.xml'>
<!ENTITY rfc4017 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4017.xml'>
<!ENTITY rfc4086 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4086.xml'>
<!ENTITY rfc4282 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4282.xml'>
<!ENTITY rfc4306 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4306.xml'>
<!ENTITY rfc4718 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4718.xml'>
<!ENTITY rfc4478 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4478.xml'>
<!ENTITY rfc4507 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4507.xml'>
<!ENTITY rfc4555 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4555.xml'>
<!ENTITY rfc5114 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5114.xml'>
<!ENTITY rfc5226 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5226.xml'>
<!ENTITY draft-harkins-emu-eap-pwd PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.harkins-emu-eap-pwd'>
]>
<rfc category="std" ipr="trust200811"
docName="draft-sheffer-emu-eap-eke-01">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes" ?>
<?rfc compact="yes" ?>
<front>
<title abbrev="The EAP-EKE Method">An EAP Authentication Method Based on the EKE Protocol</title>
<author initials="Y." surname="Sheffer" fullname="Yaron Sheffer">
<organization abbrev="Check Point">Check Point Software Technologies Ltd.</organization>
<address>
<postal>
<street>5 Hasolelim St.</street>
<city>Tel Aviv</city>
<code>67897</code>
<country>Israel</country>
</postal>
<email>yaronf@checkpoint.com</email>
</address>
</author>
<author fullname="Glen Zorn" initials="G.Z." surname="Zorn">
<organization>Network Zen</organization>
<address>
<postal>
<street>1310 East Thomas Street</street>
<street>#306</street>
<city>Seattle</city>
<region>Washington</region>
<code>98102</code>
<country>USA</country>
</postal>
<phone>+1 (206) 377-9035</phone>
<email>gwz@net-zen.net</email>
</address>
</author>
<author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
<organization>Nokia Siemens Networks</organization>
<address>
<postal>
<street>Linnoitustie 6</street>
<city>Espoo</city>
<code>02600</code>
<country>Finland</country>
</postal>
<phone>+358 (50) 4871445</phone>
<email>Hannes.Tschofenig@gmx.net</email>
<uri>http://www.tschofenig.priv.at</uri>
</address>
</author>
<author initials="S." surname="Fluhrer" fullname="Scott Fluhrer">
<organization abbrev="Cisco">Cisco Systems.</organization>
<address>
<postal>
<street>1414 Massachusetts Ave.</street>
<city>Boxborough, MA</city>
<code>01719</code>
<country>USA</country>
</postal>
<email>sfluhrer@cisco.com</email>
</address>
</author>
<date year="2009"/>
<abstract>
<t>The Extensible Authentication Protocol (EAP) describes a framework that allows the use of
multiple authentication mechanisms. This document defines an authentication mechanism for
EAP called EAP-EKE, based on the Encrypted Key Exchange (EKE) protocol. This method provides
mutual authentication through the use of a short, easy to remember password.</t>
</abstract>
</front>
<middle>
<!-- ************************************************************************************ -->
<section title="Introduction">
<t>The predominant access method for the Internet today is that of a human using a username
and password to authenticate to a computer enforcing access control. Proof of knowledge of
the password authenticates the human to the computer.</t>
<t>Typically, these passwords are not stored on a user's computer for security reasons and
must be entered each time the human desires network access. Therefore, the passwords must be
ones that can be repeatedly entered by a human with a low probability of error. They will
likely not possess high entropy and it may be assumed that an adversary with access to a
dictionary will have the ability to guess a user's password. It is therefore desirable to
have a robust authentication method that is secure even when used with a weak password in
the presence of a strong adversary.</t>
<t>EAP-EKE is an EAP method <xref target="RFC3748"/> that addresses the problem of
password-based authenticated key exchange, using a possibly weak password for authentication
and to derive an authenticated and cryptographically strong shared secret. This problem was
first described by Bellovin and Merritt in <xref target="BM92"/> and <xref target="BM93"/>.
Subsequently, a number of other solution approaches have been proposed, for example <xref
target="JAB96"/>, <xref target="LUC97"/>, <xref target="BMP00"/>, and others.</t>
<t> This proposal is based on the original Encrypted Key Exchange (EKE) proposal, as described
in <xref target="BM92"/>. Some of the variants of the original EKE has been attacked,
see e.g. <xref target="PA97"/>,
and improvements have been proposed.
None of these subsequent improvements have been incorporated into the current protocol.
However, we have used only the subset of <xref target="BM92"/> (namely the variant described
in Section 3.1) which has withstood the test of time and is believed secure as of this
writing.</t>
</section>
<!-- ************************************************************************************ -->
<section title="Terminology">
<t>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
<xref target="RFC2119"/>.</t>
</section>
<!-- ************************************************************************************ -->
<section title="Protocol" anchor="protocol">
<section title="Protocol Overview">
<t> EAP is a two-party protocol spoken between an EAP peer and an EAP server
(also known as "authenticator"). An EAP method
defines the specific authentication protocol being used by EAP. This memo defines a
particular method and therefore defines the messages sent between the EAP server
and the EAP peer for the purpose of authentication and key derivation. </t>
</section>
<section title="Message Flows">
<t>EAP-EKE defines three message exchanges: an Identity exchange, a Commit exchange and a
Confirm exchange. A successful authentication is shown in <xref target="message-flows"/>.</t>
<t>The peer and server use the EAP-EKE Identity exchange to learn each other's identities
and to agree upon a ciphersuite to use in the subsequent exchanges. In the Commit exchange
the peer and server exchange information to generate a shared key and also to bind each
other to a particular guess of the password. In the Confirm exchange the peer and server
prove liveness and knowledge of the password by generating and verifying verification
data.</t>
<t>
<figure anchor="message-flows" title="A Successful EAP-EKE Exchange">
<artwork>
<![CDATA[
+--------+ +--------+
| | EAP-EKE-ID/Request | |
| EAP |<------------------------------------| EAP |
| peer | | server |
| (P) | EAP-EKE-ID/Response | (S) |
| |------------------------------------>| |
| | | |
| | EAP-EKE-Commit/Request | |
| |<------------------------------------| |
| | | |
| | EAP-EKE-Commit/Response | |
| |------------------------------------>| |
| | | |
| | EAP-EKE-Confirm/Request | |
| |<------------------------------------| |
| | | |
| | EAP-EKE-Confirm/Response | |
| |------------------------------------>| |
| | | |
| | EAP-Success | |
| |<------------------------------------| |
+--------+ +--------+
]]>
</artwork>
</figure>
</t>
<t> Schematically, the original exchange as described in <xref target="BM92"/> (and with the
roles reversed) is: <figure>
<artwork>
<![CDATA[
Server Peer
------ ----
E(Password, Y_S)) ->
<- E(Password, Y_P), E(SharedSecret, Nonce_P)
E(SharedSecret, Nonce_S | Nonce_P) ->
<- E(SharedSecret, Nonce_S)
]]>
</artwork>
</figure>
Where:
<list style="symbols">
<t>Y_S and Y_P are the server's (and respectively, the peer's) ephemeral public key,
i.e. g^x (mod p), g^y (mod p).</t>
<t>Nonce_S, Nonce_P are random strings generated by the server and the peer as
cryptographic challenges.</t>
<t>SharedSecret is the secret created by the Diffie-Hellman algorithm,
namely g^(x*y) (mod p).</t>
</list>
The current protocol extends the basic cryptographic protocol, and the regular
successful exchange becomes: <figure>
<artwork>
<![CDATA[
EAP-EKE-ID/Request: S -> P
ID_S, CryptoProposals
EAP-EKE-ID/Response: S <- P
ID_P, CryptoSelection
EAP-EKE-Commit/Request: S -> P
E(Password, Y_S))
EAP-EKE-Commit/Response: S <- P
E(Password, Y_P), E(Ke, Nonce_P)
EAP-EKE-Confirm/Request: S -> P
E(Ke, Nonce_S | Nonce_P), Auth_S
EAP-EKE-Confirm/Response: S <- P
E(Ke, Nonce_S), Auth_P
]]>
</artwork>
</figure> As shown in the exchange above, the following information elements are added to
the original protocol: identity values for both protocol parties (ID_S, ID_P), negotiation of
cryptographic protocols, and signature fields to protect the integrity of the negotiated
parameters (Auth_S, Auth_P). In addition the shared secret is not used directly.
Note that a few details have been omitted for clarity. </t>
</section>
</section>
<!-- ************************************************************************************ -->
<section title="Packet Formats">
<section title="EAP-EKE Header">
<t>The EAP-EKE header consists of the standard EAP header (see Section 4 of <xref
target="RFC3748"/>), followed an EAP-EKE exchange type. The header has the following
structure:</t>
<t>
<figure anchor="eap-eke-header" title="EAP-EKE Header">
<artwork>
<![CDATA[
0 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | EKE-Exch | Data ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]>
</artwork>
</figure>
</t>
<t> The Code, Identifier, Length, and Type fields are all part of the EAP header, and
defined in <xref target="RFC3748"/>. The Type field in the EAP header MUST be the value
allocated by IANA for EAP-EKE version 1. </t>
<t> The EKE-Exch field identifies the type of EAP-EKE payload encapsulated in the Data
field. This document defines the following values for the EKE-Exch field: <list
style="symbols">
<t>0x00: Reserved</t>
<t>0x01: EAP-EKE-ID exchange</t>
<t>0x02: EAP-EKE-Commit exchange</t>
<t>0x03: EAP-EKE-Confirm exchange</t>
<t>0x04: EAP-EKE-Failure message</t>
<t>0x05: EAP-EKE-Protected-Failure message</t>
</list></t>
<t>Further values of this EKE-Exch field are available via IANA registration. </t>
</section>
<section title="EAP-EKE Payloads">
<t>EAP-EKE payloads all contain the EAP-EKE header and encoded information, which differs
for the different exchanges.</t>
</section>
<section title="EAP-EKE-ID">
<t>
<figure anchor="eap-eke-id-payload" title="EAP-EKE-ID Payload">
<artwork>
<![CDATA[
0 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NumProposals | Reserved | Proposal ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
... Proposal | IDType | Identity ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]>
</artwork>
</figure>
</t>
<t>The EAP-EKE-ID payload contains the following fields:</t>
<t>
<list style="hanging">
<t hangText="NumProposals:">
<vspace blankLines="1"/>The NumProposals field contains the number of proposals
subsequently contained in the Proposal field. In the EAP-EKE-ID/Request the NumProposals
field MUST NOT be set to zero (0) and in the EAP-EKE-ID/Response message the NumProposals
field MUST be set to one (1). The offered proposals in the Request are listed
contiguously in priority order, most preferable first. The selected proposal in the
Response MUST be fully identical with one of the offered proposals.<vspace
blankLines="1"/></t>
<t hangText="Proposal:"><vspace blankLines="1"/>Each proposal consists of four one-octet
fields, in this order: <vspace blankLines="1"/>
<list style="hanging">
<t hangText="Group Description:"><vspace blankLines="1"/>This field's value is taken
from the IANA registry for Diffie-Hellman groups defined in <xref
target="iana-group"/>.<vspace blankLines="1"/></t>
<t hangText="Encryption:"><vspace blankLines="1"/>This field's value is taken from
the IANA registry for encryption algorithms defined in <xref target="iana-enc"
/>.<vspace blankLines="1"/></t>
<t hangText="PRF:"><vspace blankLines="1"/>This field's value is taken from the IANA
registry for pseudo random functions defined in <xref target="iana-prf"/>.<vspace
blankLines="1"/></t>
<t hangText="MAC:"><vspace blankLines="1"/>This field's value is taken from the IANA
registry for keyed message digest algorithms defined in <xref target="iana-mac"/>
used to provide integrity protection.<vspace blankLines="1"/></t>
</list></t>
<t hangText="IDType"><vspace blankLines="1"/>Denotes the Identity type. This is taken
from the IANA registry defined in <xref target="iana"/>. The server and the peer MAY
use different identity types.</t>
</list>
</t>
<t>The Identity field is always printable, and its meaning depends on the values of the Code
and IDType fields.</t>
<t>
<list style="symbols">
<t>EAP-EKE-ID/Request: server ID</t>
<t>EAP-EKE-ID/Response: peer ID</t>
</list>
</t>
<t>The server SHOULD assert its own identity (e.g. its host name), or it MAY use the peer's
identity if it knows it before the protocol starts.</t>
<t>The length of the Identity is computed from the Length field in the EAP header.</t>
</section>
<section title="EAP-EKE-Commit">
<t>In this exchange both parties send their encrypted ephemeral public key, and the peer
also includes a Challenge.</t>
<t>
<figure anchor="eap-eke-commit-payload" title="EAP-EKE-Commit Payload">
<artwork>
<![CDATA[
0 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DHComponent ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Commit_P ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]>
</artwork>
</figure>
</t>
<t>
<list style="hanging">
<t hangText="DHComponent:">
<vspace blankLines="1"/>This field contains the password-encrypted Diffie-Hellman
public key, see <xref target="commit-request"/>.<vspace blankLines="1"/></t>
<t hangText="Commit_P:">
<vspace blankLines="1"/>This field only appears in the response, and contains the
encrypted challenge value sent by the peer. See <xref target="commit-response"/>.</t>
</list>
</t>
</section>
<section title="EAP-EKE-Confirm">
<t>In this exchange both parties complete the authentication by generating a shared
temporary key, authenticating the entire protocol, and generating key material for the EAP
consumer protocol.</t>
<t>
<figure anchor="eap-eke-confirm-payload" title="EAP-EKE-Confirm Payload">
<artwork>
<![CDATA[
0 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Confirm_? ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Auth_? ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]>
</artwork>
</figure>
</t>
<t>
<list style="hanging">
<t hangText="Confirm_?:">
<vspace blankLines="1"/>This field contains the encrypted response to the other peer's
challenge, see <xref target="confirm-request"/> and <xref target="confirm-response"
/>.<vspace blankLines="1"/></t>
<t hangText="Auth_?">
<vspace blankLines="1"/>This field signs the Identity and the negotiated fields, to
prevent downgrade attacks. See <xref target="confirm-request"/> and <xref
target="confirm-response"/>.</t>
</list>
</t>
</section>
<section anchor="eap-eke-failure" title="EAP-EKE-Failure and EAP-EKE-Protected-Failure">
<t> The EAP-EKE-Failure message format is defined as follows: <figure
title="EAP-EKE-Failure Payload">
<artwork>
<![CDATA[
0 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Failure-Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]>
</artwork>
</figure>
</t>
<t> The EAP-EKE-Protected-Failure payload format is defined as follows: <figure
title="EAP-EKE-Protected-Failure Payload">
<artwork>
<![CDATA[
0 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Failure-Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
... MAC ...
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]>
</artwork>
</figure>
</t>
<t>The MAC field contains the keyed message digest computed with the MAC algorithm selected
during the initial exchange computed over the Failure-Code using the MAC key (see <xref
target="crypto"/> on how this key is derived). A protected failure response can only be
returned once the MAC key has been derived.</t>
<t>Currently the following Failure-Code values are defined: <list style="symbols">
<t>0x00000000: Reserved</t>
<t>0x00000001: No Error</t>
<t>0x00000002: Protocol Error</t>
<t>0x00000003: Password Not Found</t>
<t>0x00000004: Authentication Failure</t>
<t>0x00000005: Authorization Failure</t>
<t>0x00000006: No Proposal Chosen</t>
</list>
</t>
<t>Additional values of this field are available via IANA registration. </t>
<t>"No Error" is used for failure acknowledgement, see below.
"Protocol Error" indicates a failure to parse or understand a protocol message or one
of its payloads.
"Password Not Found" indicates a password for a particular user could not be located, making
authentication impossible.
"Authentication Failure" indicates failure in the cryptographic
computation most likely caused by an incorrect password, or an inappropriate identity type.
"Authorization Failure" indicates that
while the password being used is correct, the user is not authorized to connect.
"No Proposal Chosen" indicates that the peer is unwilling to select any of the
cryptographic proposals offered by the server.
</t>
<t>
When the peer encounters an error situation, it MUST respond with either EAP-EKE-Failure or
EAP-EKE-Protected-Failure, depending on whether it believes a common MAC key has been
agreed upon. The server MUST send an EAP-Failure message to end the exchange.
</t>
<t>
When the server encounters an error situation, it MUST respond with either EAP-EKE-Failure or
EAP-EKE-Protected-Failure, depending on whether it believes a common MAC key has been
agreed upon. The peer MUST send back either EAP-EKE-Failure or
EAP-EKE-Protected-Failure (corresponding to the server's selection), containing a "No Error"
failure code. Then the server MUST send an EAP-Failure message to end the exchange.
</t>
</section>
</section>
<!-- ************************************************************************************ -->
<section anchor="crypto" title="Cryptographic Operations">
<section title="Generating Keying Material">
<t>Keying material will always be derived as the output of the negotiated prf algorithm.
Since the amount of keying material needed may be greater than the size of the output of
the prf algorithm, we will use the prf iteratively. We will use the terminology prf+ to
describe the function that outputs a pseudo-random stream based on the inputs to a prf as
follows: (where | indicates concatenation)</t>
<t>
<list style="empty">
<t>prf+ (K,S) = T1 | T2 | T3 | T4 | ...</t>
</list>
</t>
<t> where: <list style="empty">
<t>T1 = prf(K, S | 0x01)</t>
<t>T2 = prf(K, T1 | S | 0x02)</t>
<t>T3 = prf(K, T2 | S | 0x03)</t>
<t>T4 = prf(K, T3 | S | 0x04)</t>
</list>
</t>
<t> continuing as needed to compute all required keys. The keys are taken from the output
string without regard to boundaries (e.g., if the required keys are a 256-bit Advanced
Encryption Standard (AES) key and a 160-bit HMAC key, and the prf function generates 160
bits, the AES key will come from T1 and the beginning of T2, while the HMAC key will come
from the rest of T2 and the beginning of T3). </t>
<t> The constant concatenated to the end of each string feeding the prf is a single octet.
prf+ in this document is not defined beyond 255 times the size of the prf output. </t>
</section>
<section anchor="commit-request" title="EAP-EKE-Commit/Request">
<t>The server computes </t>
<t>
<list style="empty">
<t>Y_S = g^x mod N,</t>
</list>
</t>
<t>where 'x' is a randomly chosen number in the range 2 .. N-1. The randomly chosen number
is the private key, and the calculated field is the corresponding public key. The
calculated value MUST NOT be zero modulo N. If the peer receives a bad value for this
field, it MUST take action to disconnect or disable the link. Each of the peers MUST use a
fresh, random value for this field on each run of the protocol.</t>
<t>Note: If Elliptic Curve Diffie-Hellman is used, the corresponding additive
group operations are to be understood.</t>
<t>The server transmits</t>
<t>
<list style="empty">
<t>DHComponent_S = E(prf+(password, "EAP-EKE Password"), Y_S),</t>
</list>
</t>
<t>encrypted using the algorithm negotiated during the previous exchange. If required by the
encryption algorithm/mode, the encrypted field is preceded by an Initialization Vector
(IV), whose length depends on the algorithm. The IV value MUST be unpredictable. </t>
<t>When using block ciphers, it may be necessary to pad Y_S on the right, to fit
the encryption algorithm's block size. In such cases, random padding MUST be used, and
this randomness is critical to the security of the protocol. Randomness recommendations
can be found in <xref target="RFC4086"/>. When decrypting this field, the real length of
Y_S is determined according to the negotiated Diffie Hellman group.</t>
<t>If the password needs to be stored on the server, it is RECOMMENDED to store the
randomized password value, i.e. prf+(password, ...), as a password-equivalent, rather than
the cleartext password.</t>
</section>
<section anchor="commit-response" title="EAP-EKE-Commit/Response">
<t>The peer computes</t>
<t>
<list style="empty">
<t>Y_P = g^y mod N</t>
</list>
</t>
<t>and sends</t>
<t>
<list style="empty">
<t>DHComponent_P = E(prf+(password, "EAP-EKE Password"), Y_P)</t>
</list>
</t>
<t>If the password is non-ASCII, it SHOULD be normalized by the peer before the EAP-EKE
message is constructed. The normalization method is SASLprep, <xref target="RFC4013"/>.
Note that the password is not null-terminated.</t>
<t>Both sides calculate </t>
<t>
<list style="empty">
<t>SharedSecret = g^(x*y) mod N</t>
</list>
</t>
<t>The encryption key is computed: </t>
<t>
<list style="empty">
<t>Ke = prf+(SharedSecret, "EAP-EKE Ke" | ID_S | ID_P)</t>
</list>
</t>
<t>The MAC key is computed:</t>
<t>
<list style="empty">
<t>MAC = prf+(SharedSecret, "EAP-EKE MAC" | ID_S | ID_P)</t>
</list>
</t>
<t>And the peer generates </t>
<t>
<list style="empty">
<t>Challenge_P = E(Ke, Nonce_P),</t>
</list>
</t>
<t>where Nonce_P is a randomly generated binary string. Nonce_P has length equal to the
block size of E for block ciphers, or 32 octets if E is a stream cipher.</t>
</section>
<section anchor="confirm-request" title="EAP-EKE-Confirm/Request">
<t>The server sends:</t>
<t>
<list style="empty">
<t>Commit_S = E(Ke, Nonce_P | Nonce_S),</t>
</list>
</t>
<t>where Nonce_S is a randomly generated string, similar to Nonce_P.</t>
<t>It computes: </t>
<t>
<list style="empty">
<t>Ka = prf+(SharedSecret, "EAP-EKE Ka" | ID_S | ID_P | Nonce_P | Nonce_S)</t>
</list>
</t>
<t>And sends:</t>
<t>
<list style="empty">
<t>Auth_S = prf(Ka, "EAP-EKE server" | EAP-EKE-ID/Request | EAP-EKE-ID/Response |
EAP-EKE-Commit/Request | EAP-EKE-Commit/Response),</t>
</list>
</t>
<t>where the literal string is encoded using ASCII with no zero terminator. The messages are
included in full, starting with the EAP header, and including any possible future
extensions.</t>
</section>
<section anchor="confirm-response" title="EAP-EKE-Confirm/Response">
<t>The peer computes Ka, and sends:</t>
<t>
<list style="empty">
<t>Commit_P = E(Ke, Nonce_S)</t>
<t>Auth_P = prf(Ka, "EAP-EKE peer" | EAP-EKE-ID/Request | EAP-EKE-ID/Response |
EAP-EKE-Commit/Request | EAP-EKE-Commit/Response)</t>
</list>
</t>
</section>
<section title="MSK and EMSK">
<t>Following the last message of the protocol, both sides compute and export the shared
keys, each 512 bits in length:</t>
<t>
<list style="empty">
<t>MSK = prf+(SharedSecret, "EAP-EKE MSK" | ID_S | ID_P | Nonce_P | Nonce_S)</t>
<t>EMSK = prf+(SharedSecret, "EAP-EKE EMSK" | ID_S | ID_P | Nonce_P | Nonce_S)</t>
</list>
</t>
</section>
<section anchor="dh-groups" title="Diffie-Hellman Groups">
<t>
Many of the commonly used Diffie Hellman groups are inappropriate for use in EKE.
Most of these groups use a generator which is not a primitive element of the group.
As a result, an attacker running a dictionary attack would be able to learn at least
1 bit of information for each decrypted password guess.
</t>
<t>
Any MODP Diffie Hellman group defined for use in this protocol MUST have the following properties,
to ensure that it does not leak a usable amount of information about the password:
<list style="numbers">
<t>The generator is a primitive element of the group.</t>
<t>The most significant 64 bits of the prime number are 1.</t>
<t>The group's order p is a "safe prime", i.e. (p-1)/2 is also prime.
</t>
</list>
</t>
<t>
The last requirement is related to the strength of the Diffie Hellman algorithm,
rather than the password encryption. It also makes it easy to verify that the
generator is primitive.
</t>
<t>
We have defined the following groups:
<list style="symbols">
<t>DHGROUP_EKE_14 is defined by: the prime number of Group 14 <xref target="RFC3526"/>,
with the generator 11 (decimal).</t>
<t>Additional groups will be defined by future versions of this document.</t>
</list>
</t>
</section>
<section title="Mandatory Algorithms">
<t>To facilitate interoperability, the following algorithms are mandatory to implement:</t>
<t>
<list style="symbols">
<t>ENCR_AES128_CBC (encryption algorithm)</t>
<t>PRF_HMAC_SHA1 (pseudo random function and keyed message digest)</t>
<t>DHGROUP_EKE_14 (DH-group)</t>
</list>
</t>
</section>
</section>
<!-- ************************************************************************************ -->
<section title="IANA Considerations" anchor="iana">
<t>This document allocates an EAP method type, for "EAP-EKE Version 1".</t>
<t>This document requires IANA to create the registries described in the subsequent sections.
Values can be added or modified in these registries per
Specification Required <xref target="RFC5226"
/>. </t>
<section toc="exclude" anchor="iana-enc" title="Encryption Algorithm Registry">
<t>This section defines an IANA registry for encryption algorithms: <figure>
<artwork>
<![CDATA[
+-----------------+---------+----------------------------------+
| Name | Value | Definition |
+-----------------+---------+----------------------------------+
| Reserved | 0 | |
| ENCR_AES128_CBC | 1 | AES with a 128-bit key, CBC mode |
| | 2-127 | Available for allocation via IANA|
| | 128-255 | Reserved for private use |
+-----------------+---------+----------------------------------+
]]>
</artwork>
</figure>
</t>
</section>
<section toc="exclude" anchor="iana-prf" title="Pseudo Random Function Registry">
<t>This section defines an IANA registry for pseudo random function algorithms: <figure>
<artwork>
<![CDATA[
+---------------+---------+-------------------------------------+
| Name | Value | Definition |
+---------------+---------+-------------------------------------+
| Reserved | 0 | |
| PRF_HMAC_SHA1 | 1 | HMAC SHA-1, as defined in [RFC2104] |
| | 2-127 | Available for allocation via IANA |
| | 128-255 | Reserved for private use |
+---------------+---------+-------------------------------------+
]]>
</artwork>
</figure>
</t>
</section>
<section toc="exclude" anchor="iana-mac" title="Keyed Message Digest Registry">
<t>This section defines an IANA registry for keyed message digest algorithms: <figure>
<artwork>
<![CDATA[
+---------------+---------+-------------------------------------+
| Name | Value | Definition |
+---------------+---------+-------------------------------------+
| Reserved | 0 | |
| PRF_HMAC_SHA1 | 1 | HMAC SHA-1, as defined in [RFC2104] |
| | 2-127 | Available for allocation via IANA |
| | 128-255 | Reserved for private use |
+---------------+---------+-------------------------------------+
]]>
</artwork>
</figure>
</t>
</section>
<section toc="exclude" anchor="iana-group" title="Diffie-Hellman Group Registry">
<t>This section defines an IANA registry for Diffie-Hellman groups: <figure>
<artwork>
<![CDATA[
+----------------+---------+-------------------------------------------+
| Name | Value | Definition |
+----------------+---------+-------------------------------------------+
| Reserved | 0 | |
| DHGROUP_EKE_14 | 1 | 2048-bit MODP Group defined in this |
| | | document |
| | 2-127 | Available for allocation via IANA |
| | 128-255 | Reserved for private use |
+----------------+---------+-------------------------------------------+
]]>
</artwork>
</figure>
</t>
</section>
<section toc="exclude" anchor="iana-identity" title="Identity Type Registry">
<t>In addition, an identity type registry is defined: <figure>
<artwork>
<![CDATA[
+-----------+---------+---------------------------------------------+
| Name | Value | Definition |
+-----------+---------+---------------------------------------------+
| Reserved | 0 | |
| ID_OPAQUE | 1 | A printable string whose format is |
| | | undefined |
| ID_NAI | 2 | A Network Access Identifier, as defined in |
| | | [RFC4282] (mandatory to implement) |
| ID_IPv4 | 3 | An IPv4 address, in binary format |
| ID_IPv6 | 4 | An IPv6 address, in binary format |
| ID_FQDN | 5 | A fully qualified domain name (mandatory to |
| | | implement) |
| | 6-127 | Available for allocation via IANA |
| | 128-255 | Reserved for private use |
+-----------+---------+---------------------------------------------+
]]>
</artwork>
</figure>
</t>
</section>
<section toc="exclude" title="Failure-Code Registry">
<t>This section defines an IANA registry for the Failure-Code registry, a 32-bit long code.
Initial values are defined in <xref target="eap-eke-failure"/>. All values up to 0xff000000 are
available for allocation via IANA. The remaining values
up to 0xffffffff are available for private use.
</t>
</section>
</section>
<!-- ************************************************************************************ -->
<section title="Security Considerations" anchor="security">
<t>Any protocol that claims to solve the problem of password-authenticated key exchange must
be resistant to active, passive and dictionary attack and have the quality of forward
secrecy. These characteristics are discussed further in the following paragraphs.</t>
<t>
<list style="hanging">
<t hangText="Resistance to Passive Attack"> A passive attacker is one that merely relays
messages back and forth between the peer and server, faithfully, and without
modification. The contents of the messages are available for inspection, but that is
all. To achieve resistance to passive attack, such an attacker must not be able to
obtain any information about the password or anything about the resulting shared secret
from watching repeated runs of the protocol. Even if a passive attacker is able to learn
the password, she will not be able to determine any information about the resulting
secret shared by the peer and server.</t>
<t hangText="Resistance to Active Attack"> An active attacker is able to modify, add,
delete, and replay messages sent between protocol participants. For this protocol to be
resistant to active attack, the attacker must not be able to obtain any information
about the password or the shared secret by using any of its capabilities. In addition,
the attacker must not be able to fool a protocol participant into thinking that the
protocol completed successfully. It is always possible for an active attacker to deny
delivery of a message critical in completing the exchange. This is no different than
dropping all messages and is not an attack against the protocol.</t>
<t hangText="Resistance to Dictionary Attack"> For this protocol to be resistant to
dictionary attack any advantage an adversary can gain must be directly related to the
number of interactions she makes with an honest protocol participant and not through
computation. The adversary will not be able to obtain any information about the password
except whether a single guess from a single protocol run is correct or incorrect.</t>
<t hangText="Forward Secrecy"> Compromise of the password must not provide any information
about the secrets generated by earlier runs of the protocol.</t>
</list>
</t>
<t>
<xref target="RFC3748"/> requires that documents describing new EAP methods clearly
articulate the security properties of the method. In addition, for use with wireless LANs,
<xref target="RFC4017"/> mandates and recommends several of these. The claims are: <list
style="numbers">
<t>Mechanism: password.</t>
<t>Claims: <list style="symbols">
<t>Mutual authentication: the peer and server both authenticate each other by proving
possession of a shared password. This is REQUIRED by <xref target="RFC4017"/>.</t>
<t>Forward secrecy: compromise of the password does not reveal the secret keys (MSK
and EMSK) from earlier runs of the protocol.</t>
<t>Replay protection: an attacker is unable to replay messages from a previous
exchange either to learn the password or a key derived by the exchange. Similarly
the attacker is unable to induce either the peer or server to believe the exchange
has successfully completed when it hasn't.</t>
<t>Key derivation: a shared secret is derived by performing a group operation in a
finite cyclic group (e.g. exponentiation) using secret data contributed by both the
peer and server. An MSK and EMSK are derived from that shared secret. This is
REQUIRED by <xref target="RFC4017"/>.</t>
<t>Dictionary attack resistance: an attacker can only make one password guess per
active attack, and the protocol is designed so that the attacker does not
gain any confirmation of her guess by observing the decrypted Y_x value (see below).
The advantage she can gain is through interaction not through
computation. This is REQUIRED by <xref target="RFC4017"/>.</t>
<t>Session independence: this protocol is resistant to active and passive attacks and
does not enable compromise of subsequent or prior MSKs or EMSKs from either passive
or active attacks.</t>
<t>Denial of Service resistance: it is possible for an attacker to cause a server to
allocate state and consume CPU. Such an attack is gated, though, by the requirement
that the attacker first obtain connectivity through a lower-layer protocol (e.g.
802.11 authentication followed by 802.11 association, or 802.3 "link-up") and
respond to two EAP messages--the EAP-ID/ Request and the EAP-EKE-ID/Request.</t>
<t>Man-in-the-Middle Attack resistance: this exchange is resistant to active attack,
which is a requirement for launching a man-in-the-middle attack. This is REQUIRED by
<xref target="RFC4017"/>.</t>
<t>Shared state equivalence: upon completion of EAP-EKE the peer and server both agree
on MSK, EMSK. The peer has authenticated the server based on the Server_ID and the
server has authenticated the peer based on the Peer_ID. This is due to the fact that
Peer_ID, Server_ID, and the generated shared secret are all combined to make the
authentication element which must be shared between the peer and server for the
exchange to complete. This is REQUIRED by <xref target="RFC4017"/>.</t>
<t>Fragmentation: this protocol does not define a technique for fragmentation and
reassembly.</t>
<t>Resistance to "Denning-Sacco" attack: learning keys distributed from an earlier run
of the protocol, such as the MSK or EMSK, will not help an adversary learn the
password.</t>
</list></t>
<t>Key strength: the strength of the resulting key depends on the finite cyclic group
chosen. Sufficient key strength is REQUIRED by <xref target="RFC4017"/>.</t>
<t>Key hierarchy: MSKs and EMSKs are derived from the secret values generated during the
protocol run, using a negotiated pseudo-random function.</t>
<t>Vulnerabilities (note that none of these are REQUIRED by <xref target="RFC4017"/>):
<list style="symbols">
<t>Protected ciphersuite negotiation: the ciphersuite proposal made by the server is
not protected from tampering by an active attacker. However if a proposal was
modified by an active attacker it would result in a failure to confirm the message
sent by the other party, since the proposal is bound by each side into its Confirm
message, and the protocol would fail as a result.</t>
<t>Confidentiality: none of the messages sent in this protocol are encrypted.</t>
<t>Integrity protection: all messages in this protocol are integrity protected.</t>
<t>Channel binding: this protocol does not enable the exchange of integrity-protected
channel information that can be compared with values communicated via out-of-band
mechanisms.</t>
<t>Fast reconnect: this protocol does not provide a fast reconnect capability.</t>
<t>Cryptographic binding: this protocol is not a tunneled EAP method and therefore has
no cryptographic information to bind.</t>
<t>Identity protection: the EAP-EKE-ID exchange is not protected. An attacker will see
the server's identity in the EAP-EKE-ID/Request and see the peer's identity in
EAP-EKE-ID/ Response.</t>
</list></t>
</list></t>
<!--
<t>Here's a few, more to come:</t>
<t>
<list style="symbols">
<t>No identity protection.</t>
<t>The encrypted pieces are not authenticated, do they have to be?</t>
<t>Password salt, to be sent by server.</t>
<t>Denial-of-service resistance, e.g. an anti clogging token.</t>
<t>Binding of EAP-EKE identity with EAP identity.</t>
</list>
</t>
-->
<section title="Cryptographic Analysis">
<t>
When analyzing the Commit exchange, it should be noted that the base security assumptions are
different from "normal" cryptology. Normally, we assume that the key has strong
security properties, and that the data may have little. Here, we assume that the key has
weak security properties (the attacker may have a list of possible keys), and hence we need
to ensure that the data has strong properties (indistinguishable from random).
This difference may mean that conventional wisdom in cryptology might not apply in this case. This
also imposes severe constraints on the protocol, e.g. the mandatory use of random padding, and
the need to define specific finite groups.
</t>
</section>
<section title="Diffie Hellman Group Considerations">
<t>
It is fundamental to the dictionary attack resistance that the Diffie Hellman
public values Y_S and Y_P are indistinguishable from a random string.
If this condition is not met, then a passive attacker can do trial-decryption of
the encrypted DHComponent_P, DHComponent_S values based on a password guess,
and if they decrypt to a value which in not a valid public value,
they know that the password guess was incorrect.
</t>
<t>
For MODP groups, <xref target="dh-groups"/> gives conditions on the group to make sure that
this criterion is met. For other groups (for example, Elliptic Curve groups),
some other means of ensuring this must be employed. The standard way of expressing
Elliptic Curve public values does not meet this criterion, as a valid Elliptic Curve X
coordinate can be distinguished from a random string with probability approximately 0.5.
</t>
<t>
A future version of this document might introduce a group representation, and/or
a slight modification of the password encryption scheme, so that Elliptic Curve groups
can be accommodated. <xref target="BR02"/> presents several alternative solutions for this problem.
</t>
</section>
</section>
<!-- ************************************************************************************ -->
<section title="Acknowledgements">
<t>Much of this document was unashamedly picked from <xref target="I-D.harkins-emu-eap-pwd"/>
and <xref target="I-D.ietf-pppext-eap-srp-03"/>, and we would like to acknowledge the
authors of these documents: Dan Harkins, Glen Zorn, James Carlson, Bernard Aboba and Henry
Haverinen.
We would like to thank David Jacobson and Steve Bellovin for their useful comments.
</t>
</section>
</middle>
<back>
<references title="Normative References">&rfc2104; &rfc2119; &rfc2284; &rfc3526;
&rfc3748; &rfc4013; &rfc4282;</references>
<references title="Informative References">&rfc4017; &rfc4306; &rfc4086;
&rfc5114; &draft-harkins-emu-eap-pwd; &rfc5226; <reference
anchor="I-D.ietf-pppext-eap-srp-03">
<front>
<title>EAP SRP-SHA1 Authentication Protocol</title>
<author initials="J." surname="Carlson" fullname="James Carlson">
<organization/>
</author>
<author initials="B." surname="Aboba" fullname="Bernard Aboba">
<organization/>
</author>
<author initials="H." surname="Haverinen" fullname="Henry Haverinen">
<organization/>
</author>
<date month="July" year="2001"/>
</front>
<seriesInfo name="Internet-Draft" value="draft-ietf-pppext-eap-srp-03"/>
</reference>
<reference anchor="BM92">
<front>
<title>Encrypted Key Exchange: Password-Based Protocols Secure Against Dictionary Attacks</title>
<author initials="S." surname="Bellovin" fullname="Steven M. Bellovin">
<organization/>
</author>
<author initials="M." surname="Merritt" fullname="Michael Merritt">
<organization/>
</author>
<date month="May" year="1992"/>
</front>
<seriesInfo name="Proc. IEEE Symp. on Research in Security and Privacy" value=""/>
</reference>
<reference anchor="BM93">
<front>
<title>Augmented Encrypted Key Exchange: A Password-Based Protocol Secure against
Dictionary Attacks and Password File Compromise</title>
<author initials="S." surname="Bellovin" fullname="Steven M. Bellovin">
<organization/>
</author>
<author initials="M." surname="Merritt" fullname="Michael Merritt">
<organization/>
</author>
<date year="1993"/>
</front>
<seriesInfo name="Proc. 1st ACM Conference on Computer and Communication Security" value=""
/>
</reference>
<reference anchor="BMP00">
<front>
<title>Provably Secure Password Authenticated Key Exchange Using Diffie-Hellman</title>
<author initials="V." surname="Boyko" fullname="Victor Boyko">
<organization/>
</author>
<author initials="P." surname="MacKenzie" fullname="Philip MacKenzie">
<organization/>
</author>
<author initials="S." surname="Patel" fullname="Sarvar Patel">
<organization/>
</author>
<date year="2000"/>
</front>
<seriesInfo name="Advances in Cryptology, EUROCRYPT 2000"
value=""/>
</reference>
<reference anchor="BR02">
<front>
<title>Ciphers with Arbitrary Finite Domains</title>
<author initials="J." surname="Black" fullname="John Black">
<organization/>
</author>
<author initials="P." surname="Rogaway" fullname="Phillip Rogaway">
<organization/>
</author>
<date year="2002"/>
</front>
<seriesInfo name="Proc. of the RSA Cryptographer's Track (RSA CT '02), LNCS 2271"
value=""/>
</reference>
<reference anchor="PA97">
<front>
<title>Number Theoretic Attacks On Secure Password Schemes</title>
<author initials="S." surname="Patel" fullname="Sarvar Patel">
<organization/>
</author>
<date year="1997"/>
</front>
<seriesInfo name="Proceedings of the 1997 IEEE Symposium on Security and Privacy"
value=""/>
</reference>
<reference anchor="JAB96">
<front>
<title>Strong Password-Only Authenticated Key Exchange</title>
<author initials="D." surname="Jablon" fullname="David P. Jablon">
<organization/>
</author>
<date month="October" year="1996"/>
</front>
<seriesInfo name="ACM Computer Communications Review" value="Volume 1, Issue 5"/>
</reference>
<reference anchor="LUC97">
<front>
<title>Open Key Exchange: How to Defeat Dictionary Attacks Without Encrypting Public Keys</title>
<author initials="S." surname="Lucks" fullname="Stefan Lucks">
<organization/>
</author>
<date year="1997"/>
</front>
<seriesInfo name="Proc. of the Security Protocols Workshop" value="LNCS 1361"/>
</reference></references>
<section title="Change Log">
<section title="-01">
<t>Revised following comments raised on the CFRG mailing list. In particular, added security
considerations and a new DH group definition, to resolve the vulnerability in case the group's
generator is not a primitive element.</t>
</section>
<section title="-00">
<t>Initial version.</t>
</section>
</section>
<section title="Design Options">
<section title="Number of Round Trips">
<t>We have looked at three options: 2 round trips, 3 round trips, and a normal run of 2
round trips with an optional third. Some of the decision factors include:</t>
<t>
<list style="symbols">
<t>Performance (latency).</t>
<t>Crypto-agility, the ability to negotiate cryptographic algorithms. Ideally this
applies to both the symmetric and asymmetric algorithms.</t>
<t>Complexity of the protocol state machine, when some messages are optional.</t>
<t>Dependence on a higher-level protocol sending the peer's identity before EAP-EKE
starts, so that the correct password can be used.</t>
</list>
</t>
<t>The initial version of this protocol has 3 round trips, primarily for simplicity.</t>
</section>
<section title="Fragmentation">
<t>While similar documents ( <xref target="I-D.harkins-emu-eap-pwd"/>) provide fragmentation
support at the level of the EAP method, we have decided that such support is unnecessary
given the expected size of messages in EAP-EKE.</t>
</section>
</section>
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-24 04:05:21 |