<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.9 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-barnes-tls-pake-03" category="info">

  <front>
    <title abbrev="TLS 1.3 PAKE">Usage of PAKE with TLS 1.3</title>

    <author initials="R." surname="Barnes" fullname="Richard Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <author initials="O." surname="Friel" fullname="Owen Friel">
      <organization>Cisco</organization>
      <address>
        <email>ofriel@cisco.com</email>
      </address>
    </author>

    <date year="2018" month="July" day="16"/>

    <area>Security</area>
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>The pre-shared key mechanism available in TLS 1.3 is not suitable
for usage with low-entropy keys, such as passwords entered by users.
This document describes an extension that enables the use of
password-authenticated key exchange protocols with TLS 1.3.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>DISCLAIMER: This is a work-in-progress draft and has not yet
seen significant security analysis. It should not be used as a basis
for building production systems.</t>

<t>In some applications, it is desireable to enable a client and server
to authenticate to one another using a low-entropy pre-shared value,
such as a user-entered password.</t>

<t>In prior versions of TLS, this functionality has been provided by
the integration of the Secure Remote Password PAKE protocol (SRP)
<xref target="RFC5054"/>.  The specific SRP integration described in RFC 5054
does not immediately extend to TLS 1.3 becauseit relies on the
Client Key Exchange and Server Key Exchange messages, which no
longer exist in 1.3.  At a more fundamental level, the messaging
patterns required by SRP do not map cleanly to the standard TLS 1.3
handshake, which has fewer round-trips than prior versions.</t>

<t>TLS 1.3 itself provides a mechanism for authentication with
pre-shared keys (PSKs).  However, PSKs used with this protocol need
to be “full-entropy”, because the binder values used for
authentication can be used to mount a dictionary attack on the PSK.
So while the TLS 1.3 PSK mechanism is suitable for the session
resumption cases for which it is specified, it cannot be used when
the client and server share only a low-entropy secret.</t>

<t>Enabling TLS to address this use case effectively requires the TLS
handshake to execute a password-authenticated key establishment
(PAKE) protocol.  This document describes a TLS extension <spanx style="verb">pake</spanx>
that can carry data necessary to execute a PAKE.</t>

<t>This extension is generic, in that it can be used to carry key
exchange information for multiple different PAKEs. We assume that
the client and server have pre-negotiated a choice of PAKE (and any
required parameters) in addition to the password itself.  As a first
case, this document defines a concrete protocol for executing the
SPAKE2+ PAKE protocol <xref target="I-D.irtf-cfrg-spake2"/>.</t>

</section>
<section anchor="terminology" 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>

<t>The mechanisms described in this document also apply to DTLS 1.3
<xref target="I-D.ietf-tls-dtls13"/>, but for brevity, we will refer only to TLS
throughout.</t>

</section>
<section anchor="setup" title="Setup">

<t>In order to use this protocol, a TLS client and server need to have
pre-provisioned the values required to execute the protocol:</t>

<t><list style="symbols">
  <t>A choice of PAKE protocol</t>
  <t>Any parameters required by the PAKE protocol</t>
  <t>A password (or a derived value as described by the PAKE protocol)</t>
</list></t>

<t>Servers will of course have multiple instances of this configuration
information for different clients.  Clients may also have multiple
identities, even within a given server.  We assume that in either
case, a single opaque “identity” value is sufficient to identify the
required parameters.</t>

</section>
<section anchor="tls-extensions" title="TLS Extensions">

<t>A client offers to authenticate with PAKE by including a <spanx style="verb">pake</spanx>
extension in its ClientHello.  The content of this exension is a
<spanx style="verb">PAKEClientHello</spanx> value, providing a list of identities under which
the client can authenticate, and for each identity, the client’s
first message from the underlying PAKE protocol.</t>

<t>If a client sends the <spanx style="verb">pake</spanx> extension, then it MAY also send the
<spanx style="verb">key_share</spanx> and <spanx style="verb">pre_shared_key</spanx> extensions, to allow the server to
choose an authentication mode.  Unlike PSK-based authentication,
however, authentication with PAKE cannot be combined with the
normal TLS ECDH mechanism.  Forward secrecy is provided by the PAKE
itself.</t>

<figure><artwork><![CDATA[
struct {
    opaque identity<0..2^16-1>;
    opaque pake_message<1..2^16-1>;
} PAKEShare;

struct {
    PAKEShare client_shares<0..2^16-1>;
} PAKEClientHello;
]]></artwork></figure>

<t>A server that receives a <spanx style="verb">pake</spanx> extension examines the list of
client shares to see if there is one with an identity the server
recognizes.  If so, the server may indicate its choice of PAKE
authentication by including a <spanx style="verb">pake</spanx> extension in its
ServerHello.  The content of this exension is a <spanx style="verb">PAKEServerHello</spanx>
value, specifying the identity value for the password the server has
selected, and the server’s first message in the PAKE protocol.</t>

<t>Use of PAKE authenication is compatible with standard
certificate-based authentication of both clients and servers.  If a
server includes n <spanx style="verb">pake</spanx> extension in its ServerHello, it may still
send the Certificate and CertificateVerify messages, and/or send a
CertificateRequest message to the client.</t>

<t>If a server uses PAKE authentication, then it MUST NOT send an
extension of type <spanx style="verb">key_share</spanx>, <spanx style="verb">pre_shared_key</spanx>, or <spanx style="verb">early_data</spanx>.</t>

<figure><artwork><![CDATA[
struct {
    PAKEShare server_share;
} PAKEServerHello;
]]></artwork></figure>

<t>Based on the messages exchanged in the ClientHello and ServerHello,
the client and server execute the specified PAKE protocol to derive
a shared key.  This key is used as the <spanx style="verb">ECHD(E)</spanx> input to the TLS
1.3 key schedule.</t>

<t>As with client authentication via certificates, the server has not
authenticated the client until after it has received the client’s
Finished message.  When a server negotiates the use of this
mechanism for authentication, it MUST NOT send application data
before it has received the client’s Finished message.</t>

</section>
<section anchor="compatible-pake-protocols" title="Compatible PAKE Protocols">

<t>In order to be usable with the <spanx style="verb">pake</spanx> extension, a PAKE protocol
must specify some syntax for its messages, and the protocol itself
must be compatible with the message flow described above.  A
specification describing the use of a particular PAKE protocol with
TLS must provide the following details:</t>

<t><list style="symbols">
  <t>Parameters that must be pre-provisioned</t>
  <t>Content of the <spanx style="verb">pake_message</spanx> field in a ClientHello</t>
  <t>Content of the <spanx style="verb">pake_message</spanx> field in a ServerHello</t>
  <t>How the PAKE protocol is executed based on those messages</t>
  <t>How the outputs are of the PAKE protocol are used to populate the
<spanx style="verb">PSK</spanx> and <spanx style="verb">ECDH(E)</spanx> inputs to the TLS key schedule.</t>
</list></t>

<t>The underlying cryptographic protocol must be compatible with the
message flow described above:</t>

<t><list style="symbols">
  <t>It must be possible to execute in one round-trip, with the client
speaking first</t>
  <t>The Finished MAC must provide sufficient key confirmation for the
protocol, taking into account the contents of the handshake
messages</t>
</list></t>

<t>In addition, to be compatible with the security requirements of TLS
1.3, PAKE protocols defined for use with TLS 1.3 MUST provide
forward secrecy.</t>

<t>Several current PAKE protocols satisfy these requirements, for
example:</t>

<t><list style="symbols">
  <t>SPAKE2+ (described below) <xref target="I-D.irtf-cfrg-spake2"/></t>
  <t>SPEKE and derivatives such as Dragonfly <xref target="speke"/> <xref target="I-D.harkins-tls-dragonfly"/></t>
  <t>OPAQUE <xref target="opaque"/></t>
  <t>SRP <xref target="RFC2945"/></t>
</list></t>

</section>
<section anchor="spake2-implementation" title="SPAKE2+ Implementation">

</section>
<section anchor="pre-provisioned-parameters" title="Pre-provisioned Parameters">

<t>In order to use SPAKE2+, a TLS client and server need to have
pre-provisioned the values required to execute the SPAKE2+ protocol
(see Section 3.1 of <xref target="I-D.irtf-cfrg-spake2"/>):</t>

<t><list style="symbols">
  <t>A DH group of order <spanx style="verb">p*h</spanx>, with <spanx style="verb">p</spanx> a large prime, and generator
<spanx style="verb">G</spanx></t>
  <t>Fixed elements <spanx style="verb">M</spanx> and <spanx style="verb">N</spanx> for the group</t>
  <t>A hash function <spanx style="verb">H</spanx></t>
  <t>A password <spanx style="verb">pw</spanx></t>
</list></t>

<t>Note that the hash function <spanx style="verb">H</spanx> might be different from the hash
function associated with the ciphersuite negotiated by the two
parties.  The hash function <spanx style="verb">H</spanx> MUST be a hash function suitable for
hashing passwords, e.g., Argon2 or scrypt <xref target="I-D.irtf-cfrg-argon2"/>
<xref target="RFC7914"/>.</t>

<t>The TLS client and server roles map to the <spanx style="verb">A</spanx> and <spanx style="verb">B</spanx> roles in the
SPAKE2+ specification, respectively.  The identity of the server is
the domain name sent in the <spanx style="verb">server_name</spanx> extension of the
ClientHello message.  The identity of the client is an opaque octet
string, specified in the <spanx style="verb">spake2</spanx> ClientHello extension, defined
below.</t>

<t>From the shared password, each party computes two shared integers
<spanx style="verb">w0</spanx> and <spanx style="verb">w1</spanx> by running the following algorithm twice (changing the
<spanx style="verb">context</spanx> value each time):</t>

<figure><artwork><![CDATA[
struct {
  uint16 context;
  opaque client\_identity<0..255>;
  opaque server\_name<0..255>;
  opaque password<0..255>;
} PasswordInput;
]]></artwork></figure>

<t><list style="symbols">
  <t>Encode the following values into a <spanx style="verb">PasswordInput</spanx> structure:
  <list style="symbols">
      <t><spanx style="verb">client_identity</spanx>: The client’s identity, as described above.</t>
      <t><spanx style="verb">server_name</spanx>: The server’s identity, as described above.</t>
      <t><spanx style="verb">password</spanx>: The password <spanx style="verb">pw</spanx></t>
      <t><spanx style="verb">context</spanx>: One of the following values:
      <list style="symbols">
          <t>0x7730, when generating <spanx style="verb">w0</spanx></t>
          <t>0x7731, when generating <spanx style="verb">w1</spanx></t>
        </list></t>
    </list></t>
  <t>Use the hash function <spanx style="verb">H</spanx> with the encoded <spanx style="verb">PasswordInput</spanx>
structure as input to derive an <spanx style="verb">n</spanx>-byte string, where <spanx style="verb">n</spanx> is the
byte-length of <spanx style="verb">p</spanx>.</t>
  <t>Interpret the <spanx style="verb">n</spanx>-bit string as an integer <spanx style="verb">w</spanx> in network byte
order.  Return the result <spanx style="verb">(w % p) * h</spanx> of reducing <spanx style="verb">w</spanx> mod p and
multiplying it by <spanx style="verb">h</spanx>.</t>
</list></t>

<t>Servers MUST store only the value <spanx style="verb">w0</spanx> and the product <spanx style="verb">L = w1*G</spanx>,
where <spanx style="verb">G</spanx> is the fixed generator of the group.  Clients will need to
have access to the values <spanx style="verb">w0</spanx> and <spanx style="verb">w1</spanx> directly, but SHOULD
generate these values dynamically, rather than caching them.</t>

</section>
<section anchor="content-of-the-tls-extensionswhich-pa" title="Content of the TLS Extensionswhich pa">

<t>The content of a <spanx style="verb">pake_message</spanx> in a ClientHello is the client’s key
share <spanx style="verb">T</spanx>.  The value <spanx style="verb">T</spanx> is computed as specified in
<xref target="I-D.irtf-cfrg-spake2"/>, as <spanx style="verb">T = w*M + X</spanx>, where <spanx style="verb">M</spanx> is a fixed
value for the DH group and <spanx style="verb">X</spanx> is the public key of a fresh DH key
pair.  The format of the key share <spanx style="verb">T</spanx> is the same as for a
<spanx style="verb">KeyShareEntry.key_exchange</spanx> value from the same group.</t>

<t>The content of a <spanx style="verb">pake_message</spanx> in a ServerHello is the server’s key
share <spanx style="verb">S</spanx>.  The value <spanx style="verb">S</spanx> is computed as specified in
<xref target="I-D.irtf-cfrg-spake2"/>, as <spanx style="verb">S = w*N + Y</spanx>, where <spanx style="verb">N</spanx> is a fixed
value for the DH group and <spanx style="verb">Y</spanx> is the public key of a fresh DH key
pair.  The format of the key share <spanx style="verb">S</spanx> is the same as for a
<spanx style="verb">KeyShareEntry.key_exchange</spanx> value from the same group.</t>

<t>Based on these messages, both the client and server can compute the
two shared values as specified in <xref target="I-D.irtf-cfrg-spake2"/>.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Client</ttcol>
      <ttcol align='left'>Server</ttcol>
      <c>Z</c>
      <c>x*y*G</c>
      <c>x*(S - w0*N)</c>
      <c>x*(T - w0*M)</c>
      <c>V</c>
      <c>w1*y*G</c>
      <c>w1*(S - w0*N)</c>
      <c>y*L</c>
</texttable>

<t>The following value is used as the <spanx style="verb">(EC)DHE</spanx> input to the TLS 1.3
key schedule:</t>

<figure><artwork><![CDATA[
K = H(Z || V)
]]></artwork></figure>

<t>Here <spanx style="verb">H</spanx> is the hash function corresponding to the TLS cipher suite
in use and <spanx style="verb">||</spanx> represents concatenation of octet strings.</t>

</section>
<section anchor="security-considerations" title="Security Considerations">

<t>Many of the security properties of this protocol will derive from
the PAKE protocol being used.  Security considerations for PAKE
protocols are noted in <xref target="compatible-pake-protocols"/>.</t>

<t>The mechanism defined in this document does not provide protection
for the client’s identity, in contrast to TLS client authentication
with certificates.</t>

<t>TLS servers that offer this mechanism can be used by third party
attackers as an oracle for two questions:</t>

<t><list style="numbers">
  <t>Whether the server knows about a given identity</t>
  <t>Whether the server recognizes a given (identity, password) pair</t>
</list></t>

<t>The former is signaled by whether the server returns a <spanx style="verb">pake</spanx>
extension.  The latter is signaled by whether the connection
succeeds.  These oracles are all-or-nothing: If the attacker does
not have the correct identity or password, he does not learn
anything about the correct value.</t>

<section anchor="security-when-using-spake2" title="Security when using SPAKE2+">

<t>For the most part, the security properties of the password-based
authentication described in this document are the same as those
described in the Security Considerations of
<xref target="I-D.irtf-cfrg-spake2"/>.  The TLS Finished MAC provides the key
confirmation required for the security of the protocol.  Note that
all of the elements covered by the example confirmation hash listed
in that document are also covered by the Finished MAC:</t>

<t><list style="symbols">
  <t><spanx style="verb">A</spanx>, <spanx style="verb">B</spanx>, and <spanx style="verb">T</spanx> are included via the ClientHello</t>
  <t><spanx style="verb">S</spanx> via the ServerHello</t>
  <t><spanx style="verb">K</spanx>, and <spanx style="verb">w</spanx> via the TLS key schedule</t>
</list></t>

<t>The <spanx style="verb">x</spanx> and <spanx style="verb">y</spanx> values used in the SPAKE2 protocol MUST have the
same ephemerality properties as the key shares sent in the
<spanx style="verb">key_shares</spanx> extension.  In particular, <spanx style="verb">x</spanx> and <spanx style="verb">y</spanx> MUST NOT be
equal to zero.   This ensures that TLS sessions using SPAKE2 have
the same forward secrecy properties as sessions using the normal TLS
(EC)DH mechanism.</t>

</section>
</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This document requests that IANA add a value to the TLS
ExtensionType Registry with the following contents:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Extension Name</ttcol>
      <ttcol align='center'>TLS 1.3</ttcol>
      <ttcol align='center'>Reference</ttcol>
      <c>TBD</c>
      <c>pake</c>
      <c>CH, SH</c>
      <c>RFC XXXX</c>
</texttable>

<t>[[ RFC EDITOR: Please replace “TBD” in the above table with the
value assigned by IANA, and replace “XXXX” with the RFC number
assigned to this document. ]]</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference anchor="I-D.irtf-cfrg-spake2">
<front>
<title>SPAKE2, a PAKE</title>

<author initials='W' surname='Ladd' fullname='Watson Ladd'>
    <organization />
</author>

<author initials='B' surname='Kaduk' fullname='Benjamin Kaduk'>
    <organization />
</author>

<date month='February' day='16' year='2018' />

<abstract><t>This document describes SPAKE2, a means for two parties that share a password to derive a strong shared key with no risk of disclosing the password.  This method is compatible with any group, is computationally efficient, and has a strong security proof.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-irtf-cfrg-spake2-05' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-irtf-cfrg-spake2-05.txt' />
</reference>



<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference anchor="I-D.ietf-tls-dtls13">
<front>
<title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>

<author initials='E' surname='Rescorla' fullname='Eric Rescorla'>
    <organization />
</author>

<author initials='H' surname='Tschofenig' fullname='Hannes Tschofenig'>
    <organization />
</author>

<author initials='N' surname='Modadugu' fullname='Nagendra Modadugu'>
    <organization />
</author>

<date month='July' day='2' year='2018' />

<abstract><t>This document specifies Version 1.3 of the Datagram Transport Layer Security (DTLS) protocol.  DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.  The DTLS 1.3 protocol is intentionally based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-dtls13-28' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-dtls13-28.txt' />
</reference>




    </references>

    <references title='Informative References'>

<reference anchor="speke" >
  <front>
    <title>Extended Password Key Exchange Protocols Immune to Dictionary Attacks</title>
    <author initials="D." surname="Jablon" fullname="David Jablon">
      <organization></organization>
    </author>
    <date year="1997"/>
  </front>
</reference>
<reference anchor="opaque" >
  <front>
    <title>OPAQUE: An Asymmetric PAKE Protocol Secure Against Pre-Computation Attacks</title>
    <author initials="J." surname="Xu" fullname="Jiayu Xu">
      <organization></organization>
    </author>
    <date year="2018"/>
  </front>
</reference>




<reference  anchor="RFC5054" target='https://www.rfc-editor.org/info/rfc5054'>
<front>
<title>Using the Secure Remote Password (SRP) Protocol for TLS Authentication</title>
<author initials='D.' surname='Taylor' fullname='D. Taylor'><organization /></author>
<author initials='T.' surname='Wu' fullname='T. Wu'><organization /></author>
<author initials='N.' surname='Mavrogiannopoulos' fullname='N. Mavrogiannopoulos'><organization /></author>
<author initials='T.' surname='Perrin' fullname='T. Perrin'><organization /></author>
<date year='2007' month='November' />
<abstract><t>This memo presents a technique for using the Secure Remote Password protocol as an authentication method for the Transport Layer Security protocol.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='5054'/>
<seriesInfo name='DOI' value='10.17487/RFC5054'/>
</reference>



<reference anchor="I-D.harkins-tls-dragonfly">
<front>
<title>Secure Password Ciphersuites for Transport Layer Security (TLS)</title>

<author initials='D' surname='Harkins' fullname='Dan Harkins'>
    <organization />
</author>

<date month='July' day='2' year='2018' />

<abstract><t>This memo defines several new ciphersuites for the Transport Layer Security (TLS) protocol to support certificate-less, secure authentication using only a simple, low-entropy, password.  The exchange is called TLS-PWD.  The ciphersuites are all based on an authentication and key exchange protocol, named "dragonfly", that is resistant to off-line dictionary attack.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-harkins-tls-dragonfly-03' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-harkins-tls-dragonfly-03.txt' />
</reference>



<reference  anchor="RFC2945" target='https://www.rfc-editor.org/info/rfc2945'>
<front>
<title>The SRP Authentication and Key Exchange System</title>
<author initials='T.' surname='Wu' fullname='T. Wu'><organization /></author>
<date year='2000' month='September' />
<abstract><t>This document describes a cryptographically strong network authentication mechanism known as the Secure Remote Password (SRP) protocol.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='2945'/>
<seriesInfo name='DOI' value='10.17487/RFC2945'/>
</reference>



<reference anchor="I-D.irtf-cfrg-argon2">
<front>
<title>The memory-hard Argon2 password hash and proof-of-work function</title>

<author initials='A' surname='Biryukov' fullname='Alex Biryukov'>
    <organization />
</author>

<author initials='D' surname='Dinu' fullname='Daniel Dinu'>
    <organization />
</author>

<author initials='D' surname='Khovratovich' fullname='Dmitry Khovratovich'>
    <organization />
</author>

<author initials='S' surname='Josefsson' fullname='Simon Josefsson'>
    <organization />
</author>

<date month='August' day='3' year='2017' />

<abstract><t>This document describes the Argon2 memory-hard function for password hashing and proof-of-work applications.  We provide an implementer- oriented description together with sample code and test vectors.  The purpose is to simplify adoption of Argon2 for Internet protocols.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-irtf-cfrg-argon2-03' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-irtf-cfrg-argon2-03.txt' />
</reference>



<reference  anchor="RFC7914" target='https://www.rfc-editor.org/info/rfc7914'>
<front>
<title>The scrypt Password-Based Key Derivation Function</title>
<author initials='C.' surname='Percival' fullname='C. Percival'><organization /></author>
<author initials='S.' surname='Josefsson' fullname='S. Josefsson'><organization /></author>
<date year='2016' month='August' />
<abstract><t>This document specifies the password-based key derivation function scrypt.  The function derives one or more secret keys from a secret string.  It is based on memory-hard functions, which offer added protection against attacks using custom hardware.  The document also provides an ASN.1 schema.</t></abstract>
</front>
<seriesInfo name='RFC' value='7914'/>
<seriesInfo name='DOI' value='10.17487/RFC7914'/>
</reference>




    </references>



  </back>

<!-- ##markdown-source:
H4sIAOrsTFsAA7VabXfbxpX+Pr9iVj17KqkkV3KSpma6bWVJjhRbtivK2aRJ
1hgCQxJHIMBiAFFM5P72PvfOCwYU5c2e7erkxCSBmblzX5773DszHA5FkzeF
Hsv3Rs21rGby3cmrc7nOm4W8eT2Rx6PPhJpOa3039t/5DZFVaamWGJjVatYM
p6outRk2hRmu1K0eHn0mUtXoeVVvxjIvZ5UQ+aoey6ZuTfPs6Oj50TOhaq3G
cqLTts6bjbjVm3VVZ2N5WTYaszXDM5paCNOoMvugiqrEchttxCofyx+aKh1I
U9VNrWcGnzZL+vCTEKptFlU9FnIosbIZy+uRfMHiCYk/K/V1ni5UncUPqnqu
yvxn1eRVOZanuUkr/l0vVV6MZV1M/5Kv7kbmHjPzA5787Ui+rHNdRHO/Xesy
+vF/mLea0Zt/Sen3UVotoSioq17i/TuNXUiz0rf8QUpnq73z+0aXmc7kO2UM
KU2+0ht5fo89lbDiu7qCdqrCyMvlsi21bCp5lqckgKo38qRpVHpr9njKDFYa
y+Pnz7/kr0F5MuzwbCS/UVNo3/1oN3mm7vKse1Ct1N/bLSnfvjv56/vzsTwp
5QnMs9RNnafWv7yE1vpanswV1mrwux6eVstV27C6don67Oj4D0+JOiFRa53e
5j1ZJ3Cg3BRq3Xu6Y/zFSL6q1Tr9eXPbm+CinVf9JzsGfzOS37W9Yd/katPS
j0IMh0OppqapVQqPvlloucJWDXwQVoTny6Um4+VmKdUd/AJ61Zg2xFxuZFk1
0rR5Q48EPES2HLIcqkW1HuqyqavVhmajeGjThVRGrpyHGKkprLDadIORujYj
iIFpEcjtEs9kpk1a51NtpCqlJg8zZIJmoRqMpVUNvmgaDKcVfuIhqQLjc4p3
uxftHXEVHDEGlJHTxzLPMmxFiN9QyNdV1rKLCnF2OTl9fXJ5dX4N0CEZ8Z+S
WOx2mJdDTDqvtTEWeSBsJhfKqmejG2E0os/k8zKfQSTsyziAwZuq2JjcjOQl
fl1UbZHxqCnvKSNtKTlVeIPVO23zIsvLOe3CiQaUMY1eQnXiEl+qpZZqtSpo
63gKrecNyQpN5sA2MiEiz+oOU6dFTnomgaH/O10LPI21R28D5PBGhR/JwLS8
6lk3cps7VbR6ILylFZt16M3s7WNlXdU5toQ1yaaGcB7GGMCeEHfWlhYbCtIS
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
QBY1AAA=

-->

</rfc>

