<?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.0.31 -->

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

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

<rfc ipr="trust200902" docName="draft-ietf-webpush-vapid-01" category="std">

  <front>
    <title abbrev="Self Identification">Voluntary Application Server Identification for Web Push</title>

    <author initials="M." surname="Thomson" fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>martin.thomson@gmail.com</email>
      </address>
    </author>
    <author initials="P." surname="Beverloo" fullname="Peter Beverloo">
      <organization>Google</organization>
      <address>
        <email>beverloo@google.com</email>
      </address>
    </author>

    <date year="2016"/>

    
    
    

    <abstract>


<t>An application server can voluntarily identify itself to a push service using
the described technique.  This identification information can be used by the
push service to attribute requests that are made by the same application server
to a single entity.  This can used to reduce the secrecy for push subscription
URLs by being able to restrict subscriptions to a specific application server.
An application server is further able to include additional information that the
operator of a push service can use to contact the operator of the application
server.</t>



    </abstract>


  </front>

  <middle>


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

<t>The Web Push protocol <xref target="I-D.ietf-webpush-protocol"></xref> describes how an application
server is able to request that a push service deliver a push message to a user
agent.</t>

<t>As a consequence of the expected deployment architecture, there is no basis for
an application server to be known to a push service prior to requesting delivery
of a push message.  Requiring that the push service be able to authenticate
application servers places an unwanted constraint on the interactions between
user agents and application servers, who are the ultimate users of a push
service.  That constraint would also degrade the privacy-preserving properties
the protocol provides.  For these reasons, <xref target="I-D.ietf-webpush-protocol"></xref> does not
define a mandatory system for authentication of application servers.</t>

<t>An unfortunate consequence of this design is that a push service is exposed to a
greater risk of denial of service attack.  While requests from application
servers can be indirectly attributed to user agents, this is not always
efficient or even sufficient.  Providing more information about the application
server directly to a push service allows the push service to better distinguish
between legitimate and bogus requests.</t>

<t>Additionally, this design also relies on endpoint secrecy as any application
server in possession of the endpoint is able to send messages, albeit without
payloads.  In situations where usage of a subscription can be limited to a
single application server, the ability to associate a subscription with the
application server could reduce the impact of a data leak.</t>

<section anchor="voluntary-identification" title="Voluntary Identification">

<t>This document describes a system whereby an application server can volunteer
information about itself to a push service.  At a minimum, this provides a
stable identity for the application server, though this could also include
contact information, such as an email address.</t>

<t>A consistent identity can be used by a push service to establish behavioral
expectations for an application server.  Significant deviations from an
established norm can then be used to trigger exception handling procedures.</t>

<t>Voluntarily-provided contact information can be used to contact an application
server operator in the case of exceptional situations.</t>

<t>Experience with push service deployment has shown that software errors or
unusual circumstances can cause large increases in push message volume.
Contacting the operator of the application server has proven to be valuable.</t>

<t>Even in the absence of usable contact information, an application server that
has a well-established reputation might be given preference over an unidentified
application server when choosing whether to discard a push message.</t>

</section>
<section anchor="notational-conventions" title="Notational Conventions">

<t>The words “MUST”, “MUST NOT”, “SHOULD”, and “MAY” are used in this document.
It’s not shouting, when they are capitalized, they have the special meaning
described in <xref target="RFC2119"></xref>.</t>

<t>The terms “push message”, “push service”, “push subscription”, “application
server”, and “user agent” are used as defined in <xref target="I-D.ietf-webpush-protocol"></xref>.</t>

</section>
</section>
<section anchor="jwt" title="Application Server Self-Identification">

<t>Application servers that wish to self-identity generate and maintain a signing
key pair.  This key pair MUST be usable with elliptic curve digital signature
(ECDSA) over the P-256 curve <xref target="FIPS186"></xref>.  Use of this key when sending push
messages establishes an identity for the application server that is consistent
across multiple messages.</t>

<t>When requesting delivery of a push message, the application includes a JSON Web
Token (JWT) <xref target="RFC7519"></xref>, signed using its signing key.  The token includes a
number of claims as follows:</t>

<t><list style="symbols">
  <t>An “aud” (Audience) claim in the token MUST include the unicode serialization
of the origin (Section 6.1 of <xref target="RFC6454"></xref>) of the push resource URL.  This
binds the token to a specific push service.  This ensures that the token is
reusable for all push resource URLs that share the same origin.</t>
  <t>An “exp” (Expiry) claim MUST be included with the time after which the token
expires.  This limits the time that a token over which a token is valid.  An
“exp” claim MUST NOT be more than 24 hours from the time of the request.</t>
</list></t>

<t>This JWT is included in an Authorization header field, using an auth-scheme of
“WebPush”.  A push service MAY reject a request with a 403 (Forbidden) status
code <xref target="RFC7235"></xref> if the JWT signature or its claims are invalid.</t>

<t>The JWT MUST use a JSON Web Signature (JWS) <xref target="RFC7515"></xref>.  The signature MUST use
ECDSA on the NIST P-256 curve <xref target="FIPS186"></xref>, that is “ES256” <xref target="RFC7518"></xref>.</t>

<section anchor="application-server-contact-information" title="Application Server Contact Information">

<t>If the application server wishes to provide contact details it MAY include an
“sub” (Subject) claim in the JWT.  The “sub” claim SHOULD include a contact URI
for the application server as either a “mailto:” (email) <xref target="RFC6068"></xref> or an
“https:” <xref target="RFC2818"></xref> URI.</t>

</section>
<section anchor="example" title="Example">

<t>An application server requests the delivery of a push message as described in
<xref target="I-D.ietf-webpush-protocol"></xref>.  If the application server wishes to self-identify,
it includes an Authorization header field with credentials that use the
“WebPush” authentication scheme <xref target="auth"/> and a Crypto-Key header field that
includes its public key <xref target="key"/>.</t>

<figure title="Requesting Push Message Delivery with JWT" anchor="ex-push"><artwork><![CDATA[
POST /p/JzLQ3raZJfFBR0aqvOMsLrt54w4rJUsV HTTP/1.1
Host: push.example.net
Content-Type: text/plain;charset=utf8
Content-Length: 36
Authorization: WebPush
    eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiJodHRwczovL3B
    1c2guZXhhbXBsZS5uZXQiLCJleHAiOjE0NTM1MjM3NjgsInN1YiI6Im1haWx
    0bzpwdXNoQGV4YW1wbGUuY29tIn0.i3CYb7t4xfxCDquptFOepC9GAu_HLGk
    MlMuCGSK2rpiUfnK9ojFwDXb1JrErtmysazNjjvW2L9OkSSHzvoD1oA
Crypto-Key: p256ecdsa=BA1Hxzyi1RUM1b5wjxsn7nGxAszw2u61m164i3MrAIxH
                      F6YK5h4SDYic-dRuU_RCPCfA5aq9ojSwk5Y2EmClBPs

iChYuI3jMzt3ir20P8r_jgRR-dSuN182x7iB
]]></artwork></figure>

<t>Note that the header fields shown in <xref target="ex-push"/> don’t include line wrapping.
Extra whitespace is added to meet formatting constraints.</t>

<t>The value of the Authorization header field is a base64url-encoded JWT with the
header and body shown in <xref target="ex-jwt"/>.  This JWT would be valid until
2016-01-21T01:53:25Z <xref target="RFC3339"></xref>.</t>

<figure title="Example JWT Header and Body" anchor="ex-jwt"><artwork><![CDATA[
header = {"typ":"JWT","alg":"ES256"}
body = { "aud":"https://push.example.net",
         "exp":1453341205,
         "sub":"mailto:push@example.com" }
]]></artwork></figure>

</section>
</section>
<section anchor="auth" title="WebPush Authentication Scheme">

<t>A new “WebPush” HTTP authentication scheme <xref target="RFC7235"></xref> is defined.  This
authentication scheme carries a signed JWT, as described in <xref target="jwt"/>.</t>

<t>This authentication scheme is for origin-server authentication only.  Therefore,
this authentication scheme MUST NOT be used with the Proxy-Authenticate or
Proxy-Authorization header fields.</t>

<t>This authentication scheme does not require a challenge.  Clients are able to
generate the Authorization header field without any additional information from
a server.  Therefore, a challenge for this authentication scheme MUST NOT be
sent in a WWW-Authenticate header field.</t>

<t>All unknown or unsupported parameters to “WebPush” authentication credentials
MUST be ignored.  The <spanx style="verb">realm</spanx> parameter is ignored for this authentication
scheme.</t>

</section>
<section anchor="key" title="Public Key Representation">

<t>In order for the push service to be able to validate the JWT, it needs to learn
the public key of the application server.  A <spanx style="verb">p256ecdsa</spanx> parameter is defined
for the Crypto-Key header field <xref target="I-D.ietf-httpbis-encryption-encoding"></xref> to carry
this information.</t>

<t>The <spanx style="verb">p256ecdsa</spanx> parameter includes an elliptic curve digital signature algorithm
(ECDSA) public key <xref target="FIPS186"></xref> in uncompressed form <xref target="X9.62"></xref> that is encoded using
the URL- and filename-safe variant of base-64 <xref target="RFC4648"></xref> with padding removed.</t>

<t>Note that with push message encryption <xref target="I-D.ietf-webpush-encryption"></xref>, this
results in two values in the Crypto-Key header field, one with the a <spanx style="verb">dh</spanx> key
and another with a <spanx style="verb">p256ecdsa</spanx> key.</t>

<t>Some implementations permit the same P-256 key to be used for signing and key
exchange.  An application server MUST select a different private key for the key
exchange (i.e., <spanx style="verb">dh</spanx>) and signing (i.e., <spanx style="verb">p256ecdsa</spanx>).  Though a push service is
not obligated to check either parameter for every push message, a push service
SHOULD reject push messages that have identical values for these parameters with
a 400 (Bad Request) status code.</t>

<t><list style="hanging">
  <t hangText='Editor’s Note:'>
  JWK <xref target="RFC7517"></xref> seems like the obvious choice here.  However, JWK doesn’t define
a compact representation for public keys, which complicates the representation
of JWK in a header field.</t>
</list></t>

</section>
<section anchor="subscription-restriction" title="Subscription Restriction">

<t>The public key of the application server serves as a stable identifier for the
server.  This key can be used to restrict a push subscription to a specific
application server.</t>

<t>Subscription restriction reduces the reliance on endpoint secrecy by requiring
proof of possession to be demonstrated by an application server when requesting
delivery of a push message.  This provides an additional level of protection
against leaking of the details of the push subscription.</t>

<section anchor="creating-a-restricted-push-subscription" title="Creating a Restricted Push Subscription">

<t>The user agent includes the public key of the application server when requesting
the creation of a push subscription.  This restricts use of the resulting
subscription to application servers that are able to provide proof of possession
for the corresponding private key.</t>

<t>This public key is then added to the request to create a push subscription as
described in <xref target="key"/>.  The Crypto-Key header field includes exactly one public
key.  For example:</t>

<figure title="Example Subscribe Request" anchor="ex-restrict"><artwork><![CDATA[
POST /subscribe/ HTTP/1.1
Host: push.example.net
Crypto-Key: p256ecdsa=BBa22H8qaZ-iDMH9izb4qE72puwyvfjH2RxoQr5oiS4b
                      KImoRwJm5xK9hLrbfIik20g31z8MpLFMCMr8y2cu6gY
]]></artwork></figure>

<t>An application might use the Web Push API <xref target="API"></xref> to include this information.
For example, the API might permit an application to provide a public key as part
of a new field on the <spanx style="verb">PushSubscriptionOptions</spanx> dictionary.</t>

<t><list style="hanging">
  <t hangText='Note:'>
  Allowing the inclusion of multiple keys when creating a subscription would
allow a subscription to be associated with multiple application servers or
application server instances.  This might be more flexible, but it also would
require more state to be maintained by the push service for each subscription.</t>
</list></t>

</section>
<section anchor="using-restricted-subscriptions" title="Using Restricted Subscriptions">

<t>When a push subscription has been associated with an application server, the
request for push message delivery MUST include proof of possession for the
associated private key that was used when creating the push subscription.</t>

<t>A push service MUST reject a message that omits mandatory credentials
with a 401 (Unauthorized) status code.  A push service MAY reject a message
that includes invalid credentials with a 403 (Forbidden) status code.
Credentials are invalid if:</t>

<t><list style="symbols">
  <t>either the authentication credentials or public key are not included in the
request,</t>
  <t>the signature on the JWT cannot be successfully verified using the included
public key,</t>
  <t>the current time is later than the time identified in the “exp” (Expiry)
claim or more than 24 hours before the expiry time,</t>
  <t>the origin of the push resource is not included in the “aud” (Audience) claim,
or</t>
  <t>the public key used to sign the JWT doesn’t match the one that was included in
the creation of the push message.</t>
</list></t>

<t><list style="hanging">
  <t hangText='Note:'>
  In theory, since the push service was given a public key, the push message
request could omit the public key.  On balance, requiring the key keeps things
simple and it allows push services to compress the public key (by hashing it,
for example).  In any case, the relatively minor space savings aren’t
particularly important on the connection between the application server and
push service.</t>
</list></t>

<t>A push service MUST NOT forward the JWT or public key to the user agent when
delivering the push message.</t>

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

<t>This authentication scheme is vulnerable to replay attacks if an attacker can
acquire a valid JWT.  Applying narrow limits to the period over which a
replayable token can be reused limits the potential value of a stolen token to
an attacker and can increase the difficulty of stealing a token.</t>

<t>An application server might offer falsified contact information.  A push service
operator therefore cannot use the presence of unvalidated contact information as
input to any security-critical decision-making process.</t>

<t>Validation of a signature on the JWT requires a non-trivial amount of
computation.  For something that might be used to identify legitimate requests
under denial of service attack conditions, this is not ideal.  Application
servers are therefore encouraged to reuse a JWT, which permits the push service
to cache the results of signature validation.</t>

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

<section anchor="webpush-authentication-scheme" title="WebPush Authentication Scheme">

<t>This registers the “WebPush” authentication scheme in the “Hypertext Transfer
Protocol (HTTP) Authentication Scheme Registry” established in <xref target="RFC7235"></xref>.</t>

<t><list style="hanging">
  <t hangText='Authentication Scheme Name:'>
  WebPush</t>
  <t hangText='Pointer to specification text:'>
  <xref target="auth"/> of this document</t>
  <t hangText='Notes:'>
  This scheme is origin-server only and does not define a challenge.</t>
</list></t>

</section>
<section anchor="p256ecdsa-parameter-for-crypto-key-header-field" title="p256ecdsa Parameter for Crypto-Key Header Field">

<t>This registers a <spanx style="verb">p256ecdsa</spanx> parameter for the Crypto-Key header field in the
“Hypertext Transfer Protocol (HTTP) Crypto-Key Parameters” established in
<xref target="I-D.ietf-httpbis-encryption-encoding"></xref>.</t>

<t><list style="hanging">
  <t hangText='Parameter Name:'>
  p256ecdsa</t>
  <t hangText='Purpose:'>
  Conveys a public key for that is used to generate an ECDSA signature.</t>
  <t hangText='Reference:'>
  <xref target="key"/> of this document</t>
</list></t>

</section>
</section>
<section anchor="ack" title="Acknowledgements">

<t>This document would have been much worse than it currently is if not for the
contributions of Benjamin Bangert, Chris Karlof, Costin Manolache, and others.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor='RFC2119' target='http://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='RFC2818' target='http://www.rfc-editor.org/info/rfc2818'>
<front>
<title>HTTP Over TLS</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2000' month='May' />
<abstract><t>This memo describes how to use Transport Layer Security (TLS) to secure Hypertext Transfer Protocol (HTTP) connections over the Internet.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='2818'/>
<seriesInfo name='DOI' value='10.17487/RFC2818'/>
</reference>



<reference  anchor='RFC4648' target='http://www.rfc-editor.org/info/rfc4648'>
<front>
<title>The Base16, Base32, and Base64 Data Encodings</title>
<author initials='S.' surname='Josefsson' fullname='S. Josefsson'><organization /></author>
<date year='2006' month='October' />
<abstract><t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4648'/>
<seriesInfo name='DOI' value='10.17487/RFC4648'/>
</reference>



<reference  anchor='RFC6068' target='http://www.rfc-editor.org/info/rfc6068'>
<front>
<title>The 'mailto' URI Scheme</title>
<author initials='M.' surname='Duerst' fullname='M. Duerst'><organization /></author>
<author initials='L.' surname='Masinter' fullname='L. Masinter'><organization /></author>
<author initials='J.' surname='Zawinski' fullname='J. Zawinski'><organization /></author>
<date year='2010' month='October' />
<abstract><t>This document defines the format of Uniform Resource Identifiers (URIs) to identify resources that are reached using Internet mail. It adds better internationalization and compatibility with Internationalized Resource Identifiers (IRIs; RFC 3987) to the previous syntax of 'mailto' URIs (RFC 2368).  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6068'/>
<seriesInfo name='DOI' value='10.17487/RFC6068'/>
</reference>



<reference  anchor='RFC6454' target='http://www.rfc-editor.org/info/rfc6454'>
<front>
<title>The Web Origin Concept</title>
<author initials='A.' surname='Barth' fullname='A. Barth'><organization /></author>
<date year='2011' month='December' />
<abstract><t>This document defines the concept of an &quot;origin&quot;, which is often used as the scope of authority or privilege by user agents.  Typically, user agents isolate content retrieved from different origins to prevent malicious web site operators from interfering with the operation of benign web sites.  In addition to outlining the principles that underlie the concept of origin, this document details how to determine the origin of a URI and how to serialize an origin into a string.  It also defines an HTTP header field, named &quot;Origin&quot;, that indicates which origins are associated with an HTTP request.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6454'/>
<seriesInfo name='DOI' value='10.17487/RFC6454'/>
</reference>



<reference  anchor='RFC7515' target='http://www.rfc-editor.org/info/rfc7515'>
<front>
<title>JSON Web Signature (JWS)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<author initials='J.' surname='Bradley' fullname='J. Bradley'><organization /></author>
<author initials='N.' surname='Sakimura' fullname='N. Sakimura'><organization /></author>
<date year='2015' month='May' />
<abstract><t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures.  Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification.  Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t></abstract>
</front>
<seriesInfo name='RFC' value='7515'/>
<seriesInfo name='DOI' value='10.17487/RFC7515'/>
</reference>



<reference  anchor='RFC7518' target='http://www.rfc-editor.org/info/rfc7518'>
<front>
<title>JSON Web Algorithms (JWA)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<date year='2015' month='May' />
<abstract><t>This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications.  It defines several IANA registries for these identifiers.</t></abstract>
</front>
<seriesInfo name='RFC' value='7518'/>
<seriesInfo name='DOI' value='10.17487/RFC7518'/>
</reference>



<reference  anchor='RFC7519' target='http://www.rfc-editor.org/info/rfc7519'>
<front>
<title>JSON Web Token (JWT)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<author initials='J.' surname='Bradley' fullname='J. Bradley'><organization /></author>
<author initials='N.' surname='Sakimura' fullname='N. Sakimura'><organization /></author>
<date year='2015' month='May' />
<abstract><t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties.  The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t></abstract>
</front>
<seriesInfo name='RFC' value='7519'/>
<seriesInfo name='DOI' value='10.17487/RFC7519'/>
</reference>



<reference anchor='I-D.ietf-webpush-protocol'>
<front>
<title>Generic Event Delivery Using HTTP Push</title>

<author initials='M' surname='Thomson' fullname='Martin Thomson'>
    <organization />
</author>

<author initials='E' surname='Damaggio' fullname='Elio Damaggio'>
    <organization />
</author>

<author initials='B' surname='Raymor' fullname='Brian Raymor'>
    <organization />
</author>

<date month='June' day='14' year='2016' />

<abstract><t>A simple protocol for the delivery of realtime events to user agents is described.  This scheme uses HTTP/2 server push.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-webpush-protocol-06' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-webpush-protocol-06.txt' />
<format type='PDF'
        target='http://www.ietf.org/internet-drafts/draft-ietf-webpush-protocol-06.pdf' />
</reference>



<reference anchor='I-D.ietf-httpbis-encryption-encoding'>
<front>
<title>Encrypted Content-Encoding for HTTP</title>

<author initials='M' surname='Thomson' fullname='Martin Thomson'>
    <organization />
</author>

<date month='March' day='20' year='2016' />

<abstract><t>This memo introduces a content-coding for HTTP that allows message payloads to be encrypted.  Note to Readers  Discussion of this draft takes place on the HTTP working group mailing list (ietf-http-wg@w3.org), which is archived at https://lists.w3.org/Archives/Public/ietf-http-wg/ .  Working Group information can be found at http://httpwg.github.io/ ; source code and issues list for this draft can be found at https://github.com/httpwg/http-extensions/labels/encryption .</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-httpbis-encryption-encoding-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-httpbis-encryption-encoding-01.txt' />
</reference>


<reference anchor="FIPS186" >
  <front>
    <title>Digital Signature Standard (DSS)</title>
    <author >
      <organization>National Institute of Standards and Technology (NIST)</organization>
    </author>
    <date year="2013" month="July"/>
  </front>
  <seriesInfo name="NIST PUB 186-4" value=""/>
</reference>
<reference anchor="X9.62" >
  <front>
    <title>Public Key Cryptography For The Financial Services Industry: The Elliptic Curve Digital Signature Algorithm (ECDSA)</title>
    <author >
      <organization>ANSI</organization>
    </author>
    <date year="1998"/>
  </front>
  <seriesInfo name="ANSI X9.62" value=""/>
</reference>


    </references>

    <references title='Informative References'>





<reference  anchor='RFC3339' target='http://www.rfc-editor.org/info/rfc3339'>
<front>
<title>Date and Time on the Internet: Timestamps</title>
<author initials='G.' surname='Klyne' fullname='G. Klyne'><organization /></author>
<author initials='C.' surname='Newman' fullname='C. Newman'><organization /></author>
<date year='2002' month='July' />
</front>
<seriesInfo name='RFC' value='3339'/>
<seriesInfo name='DOI' value='10.17487/RFC3339'/>
</reference>



<reference  anchor='RFC7235' target='http://www.rfc-editor.org/info/rfc7235'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Authentication</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypermedia information systems.  This document defines the HTTP Authentication framework.</t></abstract>
</front>
<seriesInfo name='RFC' value='7235'/>
<seriesInfo name='DOI' value='10.17487/RFC7235'/>
</reference>



<reference  anchor='RFC7517' target='http://www.rfc-editor.org/info/rfc7517'>
<front>
<title>JSON Web Key (JWK)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<date year='2015' month='May' />
<abstract><t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key.  This specification also defines a JWK Set JSON data structure that represents a set of JWKs.  Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t></abstract>
</front>
<seriesInfo name='RFC' value='7517'/>
<seriesInfo name='DOI' value='10.17487/RFC7517'/>
</reference>


<reference anchor="API" target="https://w3c.github.io/push-api/">
  <front>
    <title>Web Push API</title>
    <author initials="M." surname="van Ouwerkerk">
      <organization></organization>
    </author>
    <author initials="M." surname="Thomson">
      <organization></organization>
    </author>
    <date year="2015"/>
  </front>
</reference>




<reference anchor='I-D.ietf-webpush-encryption'>
<front>
<title>Message Encryption for Web Push</title>

<author initials='M' surname='Thomson' fullname='Martin Thomson'>
    <organization />
</author>

<date month='March' day='20' year='2016' />

<abstract><t>A message encryption scheme is described for the Web Push protocol. This scheme provides confidentiality and integrity for messages sent from an Application Server to a User Agent.</t></abstract>

</front>

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




    </references>



  </back>
</rfc>

