<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.18 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cisco-skip-00" category="info" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.0 -->
  <front>
    <title abbrev="SKIP">Secure Key Integration Protocol (SKIP)</title>
    <seriesInfo name="Internet-Draft" value="draft-cisco-skip-00"/>
    <author initials="R." surname="Singh" fullname="Rajiv Singh" role="editor">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>170 West Tasman Drive</street>
          <city>San Jose</city>
          <region>CA</region>
          <code>95134</code>
          <country>US</country>
        </postal>
        <email>rajisin2@cisco.com</email>
      </address>
    </author>
    <author initials="C." surname="Hill" fullname="Craig Hill">
      <organization>Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <street>170 West Tasman Drive</street>
          <city>San Jose</city>
          <region>CA</region>
          <code>95134</code>
          <country>US</country>
        </postal>
        <email>crhill@cisco.com</email>
      </address>
    </author>
    <author initials="S." surname="Kawaguchi" fullname="Scott Kawaguchi">
      <organization>QuSecure, Inc.</organization>
      <address>
        <postal>
          <street>1900 South Norfolk Street, Suite 350/11</street>
          <city>San Mateo</city>
          <region>CA</region>
          <code>94403</code>
          <country>US</country>
        </postal>
        <email>scott@qusecure.com</email>
      </address>
    </author>
    <author initials="J." surname="Lupo" fullname="Joey Lupo">
      <organization>QuSecure, Inc.</organization>
      <address>
        <postal>
          <street>1900 South Norfolk Street, Suite 350/11</street>
          <city>San Mateo</city>
          <region>CA</region>
          <code>94403</code>
          <country>US</country>
        </postal>
        <email>jlupo@qusecure.com</email>
      </address>
    </author>
    <date year="2024" month="August" day="30"/>
    <area>General</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>SKIP</keyword>
    <keyword>IKEv2 PPK</keyword>
    <abstract>
      <?line 108?>

<t>This document specifies the Secure Key Integration Protocol (SKIP), a two-party
protocol that allows a client to securely obtain a key from an independent Key
Provider. SKIP enables network and security operators to provide
quantum-resistant keys suitable for use with quantum-resistant cryptographic
algorithms such as AES-256. It can also be used to provide an additional layer
of security to an already quantum-resistant secure channel protocol for a
defense-in-depth strategy, and/or enforce key management policies.</t>
    </abstract>
  </front>
  <middle>
    <?line 118?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Many existing secure channel protocols such as the Internet Key Exchange
Protocol Version 2 (IKEv2) and Transport Layer Security (TLS) utilize public
key cryptography that is vulnerable to Cryptographically Relevant Quantum
Computers (CRQC)<xref target="PQCRYPTO"/>. One solution to mitigate this threat is to replace the vulnerable
public key algorithms with different algorithms that are believed to be
resistant to quantum computers. An alternate solution is to augment the
original protocol by providing each protocol principal with a pre-shared key.
If the pre-shared key has sufficient entropy and is mixed into the protocol's
key derivation process in a quantum-resistant manner (such as via a
pseudorandom function (PRF) instantiated using symmetric cryptography
primitives), and other encryption and authentication algorithms are
quantum-resistant, then the whole system is considered to be quantum-resistant.
Many secure channel protocols already support the ability to mix a pre-shared
key into their key derivation process. For example, <xref target="RFC8784"/> specifies an
IKEv2 extension that utilizes a post-quantum pre-shared key (PPK) in order to
provide quantum resistance to the IKEv2 handshake and the resulting IPsec
session.</t>
      <t>One common solution to distributing these pre-shared keys is to use out of band
mechanism. This approach, however, has a number of drawbacks. For one, the
administrative burden of installing the keys scales quadratically with the
number of peers. Second, key management best practices suggests periodic
rotation of keys, which requires additional and recurring support. Lastly,
manual administration increases the likelihood that a low entropy key (e.g,. a
password) is chosen. This misconfiguration would degrade any quantum resistance
security benefits that we hope to achieve by mixing in the key in the first
place. Instead, a more dynamic and automated source of key provisioning should
be preferred <xref target="RFC4107"/>.</t>
      <t>This document describes the Secure Key Integration Protocol (SKIP), a protocol
designed to facilitate the dynamic provisioning of keys to protocol principals.
SKIP operates in a model where the two principals, called encryptors, are
situated at each end of a point-to-point connection. Each encryptor is
associated and co-located with a Key Provider (KP). Each KP is capable of
producing the same key upon request from its associated encryptor, allowing
this key to function as a pre-shared key between the two encryptors. For
example, when integrated with the IKEv2 PPK extension (refer
<xref target="skip-with-ikev2"/>), SKIP can be used to provide each peer with a fresh PPK
per session. Furthermore, SKIP defines a method by which a KP can provide
entropy to an encryptor.</t>
      <t>SKIP defines a modular and extensible security architecture. The keys provided
to encryptors can be used to provide quantum-resistance to vulnerable secure
channel protocols without reducing security guarantees against classical (i.e.,
non-quantum) adversaries, provide an additional layer of security to an already
quantum-resistant secure channel protocol for a defense-in-depth strategy,
and/or enforce key management policies. It imposes no restriction on the means
by which two KPs synchronize a key. KPs may employ one or more technologies
believed to be quantum-resistant, including, but not limited to post-quantum
cryptography (PQC), quantum key distribution (QKD), a trusted third-party
protocol, or a one-time pad (OTP) <xref target="CSFC"/>. The KPs can be upgraded, replaced, or
reconfigured independent of the underlying encryptors, supporting goals such as
cryptographic agility, defense-in-depth, and high availability. Moreover, SKIP
can help enforce key management and rotation policies for any protocol that
supports the use of a pre-shared key, such as Media Access Control Security
(MACsec).</t>
      <figure>
        <name>SKIP Network Overview</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 416 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,208" fill="none" stroke="black"/>
              <path d="M 32,160 L 32,192" fill="none" stroke="black"/>
              <path d="M 40,64 L 40,96" fill="none" stroke="black"/>
              <path d="M 88,104 L 88,152" fill="none" stroke="black"/>
              <path d="M 120,64 L 120,96" fill="none" stroke="black"/>
              <path d="M 136,160 L 136,192" fill="none" stroke="black"/>
              <path d="M 160,48 L 160,64" fill="none" stroke="black"/>
              <path d="M 160,96 L 160,160" fill="none" stroke="black"/>
              <path d="M 160,192 L 160,208" fill="none" stroke="black"/>
              <path d="M 256,48 L 256,64" fill="none" stroke="black"/>
              <path d="M 256,96 L 256,160" fill="none" stroke="black"/>
              <path d="M 256,192 L 256,208" fill="none" stroke="black"/>
              <path d="M 280,160 L 280,192" fill="none" stroke="black"/>
              <path d="M 288,64 L 288,96" fill="none" stroke="black"/>
              <path d="M 336,104 L 336,152" fill="none" stroke="black"/>
              <path d="M 368,64 L 368,96" fill="none" stroke="black"/>
              <path d="M 384,160 L 384,192" fill="none" stroke="black"/>
              <path d="M 408,48 L 408,208" fill="none" stroke="black"/>
              <path d="M 8,48 L 160,48" fill="none" stroke="black"/>
              <path d="M 256,48 L 408,48" fill="none" stroke="black"/>
              <path d="M 40,64 L 120,64" fill="none" stroke="black"/>
              <path d="M 288,64 L 368,64" fill="none" stroke="black"/>
              <path d="M 128,78 L 280,78" fill="none" stroke="black"/>
              <path d="M 128,82 L 280,82" fill="none" stroke="black"/>
              <path d="M 40,96 L 120,96" fill="none" stroke="black"/>
              <path d="M 288,96 L 368,96" fill="none" stroke="black"/>
              <path d="M 32,160 L 136,160" fill="none" stroke="black"/>
              <path d="M 280,160 L 384,160" fill="none" stroke="black"/>
              <path d="M 32,192 L 136,192" fill="none" stroke="black"/>
              <path d="M 280,192 L 384,192" fill="none" stroke="black"/>
              <path d="M 8,208 L 160,208" fill="none" stroke="black"/>
              <path d="M 256,208 L 408,208" fill="none" stroke="black"/>
              <g class="text">
                <text x="76" y="36">Location</text>
                <text x="120" y="36">A</text>
                <text x="324" y="36">Location</text>
                <text x="368" y="36">B</text>
                <text x="208" y="68">IKEv2</text>
                <text x="80" y="84">Encryptor</text>
                <text x="328" y="84">Encryptor</text>
                <text x="60" y="132">SKIP</text>
                <text x="308" y="132">SKIP</text>
                <text x="48" y="180">Key</text>
                <text x="100" y="180">Provider</text>
                <text x="144" y="180">=</text>
                <text x="160" y="180">=</text>
                <text x="176" y="180">=</text>
                <text x="192" y="180">=</text>
                <text x="208" y="180">=</text>
                <text x="224" y="180">=</text>
                <text x="240" y="180">=</text>
                <text x="256" y="180">=</text>
                <text x="272" y="180">=</text>
                <text x="296" y="180">Key</text>
                <text x="348" y="180">Provider</text>
                <text x="208" y="196">Arbitrary</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
          Location A                     Location B
     +------------------+           +------------------+
     |   +---------+    |   IKEv2   |   +---------+    |
     |   |Encryptor|====================|Encryptor|    |
     |   +---------+    |           |   +---------+    |
     |         |        |           |         |        |
     |    SKIP |        |           |    SKIP |        |
     |         |        |           |         |        |
     |  +------------+  |           |  +------------+  |
     |  |Key Provider|= = = = = = = = =|Key Provider|  |
     |  +------------+  | Arbitrary |  +------------+  |
     +------------------+           +------------------+

]]></artwork>
        </artset>
      </figure>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>SKIP defines the interface through which two encryptors can obtain a key from
their co-located Key Providers. The diagram <xref target="exchange"/> provides an overview
of the steps involved.</t>
      <figure anchor="exchange">
        <name>SKIP Key Exchange</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 640 288" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,272" fill="none" stroke="black"/>
              <path d="M 24,64 L 24,112" fill="none" stroke="black"/>
              <path d="M 48,120 L 48,264" fill="none" stroke="black"/>
              <path d="M 128,64 L 128,112" fill="none" stroke="black"/>
              <path d="M 176,64 L 176,112" fill="none" stroke="black"/>
              <path d="M 216,120 L 216,264" fill="none" stroke="black"/>
              <path d="M 256,64 L 256,112" fill="none" stroke="black"/>
              <path d="M 272,48 L 272,184" fill="none" stroke="black"/>
              <path d="M 272,200 L 272,272" fill="none" stroke="black"/>
              <path d="M 344,48 L 344,176" fill="none" stroke="black"/>
              <path d="M 344,208 L 344,272" fill="none" stroke="black"/>
              <path d="M 360,64 L 360,112" fill="none" stroke="black"/>
              <path d="M 400,120 L 400,264" fill="none" stroke="black"/>
              <path d="M 440,64 L 440,112" fill="none" stroke="black"/>
              <path d="M 512,64 L 512,112" fill="none" stroke="black"/>
              <path d="M 576,120 L 576,264" fill="none" stroke="black"/>
              <path d="M 616,64 L 616,112" fill="none" stroke="black"/>
              <path d="M 632,48 L 632,272" fill="none" stroke="black"/>
              <path d="M 8,48 L 160,48" fill="none" stroke="black"/>
              <path d="M 176,48 L 272,48" fill="none" stroke="black"/>
              <path d="M 344,48 L 632,48" fill="none" stroke="black"/>
              <path d="M 24,64 L 128,64" fill="none" stroke="black"/>
              <path d="M 176,64 L 256,64" fill="none" stroke="black"/>
              <path d="M 360,64 L 440,64" fill="none" stroke="black"/>
              <path d="M 512,64 L 616,64" fill="none" stroke="black"/>
              <path d="M 24,112 L 128,112" fill="none" stroke="black"/>
              <path d="M 176,112 L 256,112" fill="none" stroke="black"/>
              <path d="M 360,112 L 440,112" fill="none" stroke="black"/>
              <path d="M 512,112 L 616,112" fill="none" stroke="black"/>
              <path d="M 56,144 L 72,144" fill="none" stroke="black"/>
              <path d="M 176,144 L 208,144" fill="none" stroke="black"/>
              <path d="M 56,160 L 72,160" fill="none" stroke="black"/>
              <path d="M 192,160 L 208,160" fill="none" stroke="black"/>
              <path d="M 224,192 L 272,192" fill="none" stroke="black"/>
              <path d="M 352,192 L 392,192" fill="none" stroke="black"/>
              <path d="M 408,240 L 424,240" fill="none" stroke="black"/>
              <path d="M 552,240 L 568,240" fill="none" stroke="black"/>
              <path d="M 408,256 L 432,256" fill="none" stroke="black"/>
              <path d="M 552,256 L 568,256" fill="none" stroke="black"/>
              <path d="M 8,272 L 160,272" fill="none" stroke="black"/>
              <path d="M 176,272 L 272,272" fill="none" stroke="black"/>
              <path d="M 344,272 L 632,272" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="576,240 564,234.4 564,245.6" fill="black" transform="rotate(0,568,240)"/>
              <polygon class="arrowhead" points="416,256 404,250.4 404,261.6" fill="black" transform="rotate(180,408,256)"/>
              <polygon class="arrowhead" points="400,192 388,186.4 388,197.6" fill="black" transform="rotate(0,392,192)"/>
              <polygon class="arrowhead" points="216,160 204,154.4 204,165.6" fill="black" transform="rotate(0,208,160)"/>
              <polygon class="arrowhead" points="64,144 52,138.4 52,149.6" fill="black" transform="rotate(180,56,144)"/>
              <g class="text">
                <text x="124" y="36">Location</text>
                <text x="168" y="36">A</text>
                <text x="484" y="36">Location</text>
                <text x="528" y="36">B</text>
                <text x="40" y="84">Key</text>
                <text x="92" y="84">Provider</text>
                <text x="216" y="84">Encryptor</text>
                <text x="400" y="84">Encryptor</text>
                <text x="528" y="84">Key</text>
                <text x="580" y="84">Provider</text>
                <text x="72" y="100">Alice</text>
                <text x="216" y="100">Alice</text>
                <text x="400" y="100">Bob</text>
                <text x="560" y="100">Bob</text>
                <text x="92" y="148">1.</text>
                <text x="120" y="148">Get</text>
                <text x="152" y="148">key</text>
                <text x="92" y="164">2.</text>
                <text x="144" y="164">key,keyId</text>
                <text x="284" y="196">3.</text>
                <text x="320" y="196">keyId</text>
                <text x="460" y="228">4.</text>
                <text x="488" y="228">Get</text>
                <text x="448" y="244">key</text>
                <text x="480" y="244">for</text>
                <text x="520" y="244">keyId</text>
                <text x="452" y="260">5.</text>
                <text x="504" y="260">key,keyId</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
           Location A                                   Location B
+------------------- ------------+        +-----------------------------------+
| +------------+     +---------+ |        | +---------+        +------------+ |
| |Key Provider|     |Encryptor| |        | |Encryptor|        |Key Provider| |
| |   Alice    |     |  Alice  | |        | |   Bob   |        |    Bob     | |
| +------------+     +---------+ |        | +---------+        +------------+ |
|    |                    |      |        |      |                     |      |
|    |<-- 1. Get key -----|      |        |      |                     |      |
|    |--- 2. key,keyId -->|      |        |      |                     |      |
|    |                    |      |        |      |                     |      |
|    |                    |-------3. keyId ----->|                     |      |
|    |                    |      |        |      |                     |      |
|    |                    |      |        |      |      4. Get         |      |
|    |                    |      |        |      |--- key for keyId -->|      |
|    |                    |      |        |      |<--- 5. key,keyId ---|      |
+------------------- ------------+        +-----------------------------------+
]]></artwork>
        </artset>
      </figure>
      <ol spacing="normal" type="1"><li>
          <t>Encryptor Alice initiates a request to KP Alice for a key.</t>
        </li>
        <li>
          <t>KP Alice generates a key and a unique identifier keyId, synchronizes the key
and keyId with KP Bob through an arbitrary protocol, returns the key and
keyId to encryptor Alice, and finally zeroizes the local copy of the key.</t>
        </li>
        <li>
          <t>Encryptor Alice establishes a connection with encryptor Bob and exchanges
the keyId.</t>
        </li>
        <li>
          <t>Encryptor Bob initiates a request to KP Bob for the key associated with the
keyId provided by encryptor Alice.</t>
        </li>
        <li>
          <t>KP Bob responds with the key associated with the keyId and zeroizes its
local copy.</t>
        </li>
      </ol>
      <t>At the end of this exchange, encryptors Alice and encryptor Bob possess the
same key, which can be utilized as a pre-shared key in another protocol,
thereby enhancing its security against potential quantum threats.</t>
    </section>
    <section anchor="skip-interface">
      <name>SKIP Interface</name>
      <t>The connection between the Key Provider and the encryptor is established using
IP over Ethernet. The communication protocol used is Hypertext Transfer
Protocol (HTTP) over Transport Layer Security (TLS) as per <xref target="RFC9110"/>, with
TLS versions 1.2 <xref target="RFC5246"/> or 1.3 <xref target="RFC8446"/>. The table below lists
supported TLS ciphersuites and authentication modes.</t>
      <table anchor="AuthModes">
        <name>TLS Authentication Modes.</name>
        <thead>
          <tr>
            <th align="left">Mode</th>
            <th align="left">TLS version</th>
            <th align="left">Ciphers (Algorithm)</th>
            <th align="left">Requirement</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Certificate</td>
            <td align="left">TLS 1.2</td>
            <td align="left">TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384</td>
            <td align="left">
              <bcp14>RECOMMENDED</bcp14></td>
          </tr>
          <tr>
            <td align="left">Pre-Shared Key (PSK)</td>
            <td align="left">TLS 1.2</td>
            <td align="left">TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, TLS_DHE_PSK_WITH_AES_256_CBC_SHA</td>
            <td align="left">
              <bcp14>RECOMMENDED</bcp14></td>
          </tr>
          <tr>
            <td align="left">Certificate/PSK</td>
            <td align="left">TLS 1.3</td>
            <td align="left">TLS_AES_256_GCM_SHA384</td>
            <td align="left">
              <bcp14>REQUIRED</bcp14></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="skip-methods-and-status-codes">
      <name>SKIP Methods and Status Codes</name>
      <t>An encryptor uses the following methods to interact with a Key Provider:</t>
      <table anchor="Methods">
        <name>SKIP Methods.</name>
        <thead>
          <tr>
            <th align="left">NO.</th>
            <th align="left">Method</th>
            <th align="left">Path</th>
            <th align="left">Meaning</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">1.</td>
            <td align="left">GET</td>
            <td align="left">https://{host-identifier:port}/capabilities</td>
            <td align="left">Get the capabilities of the KP</td>
          </tr>
          <tr>
            <td align="left">2.</td>
            <td align="left">GET</td>
            <td align="left">https://{host-identifier:port}/key?remoteSystemID=Bob</td>
            <td align="left">Get a key that is shared with KP having localSystemID Bob</td>
          </tr>
          <tr>
            <td align="left">3.</td>
            <td align="left">GET</td>
            <td align="left">https://{host-identifier:port}/key?remoteSystemID=Bob&amp;size=128</td>
            <td align="left">Get a key of size 128 bits that is shared with KP having localSystemID Bob</td>
          </tr>
          <tr>
            <td align="left">4.</td>
            <td align="left">GET</td>
            <td align="left">https://{host-identifier:port}/key/{keyId}?remoteSystemID=Alice</td>
            <td align="left">Get the key for the specified keyId that is shared with KP having localSystemID Alice</td>
          </tr>
          <tr>
            <td align="left">5.</td>
            <td align="left">GET</td>
            <td align="left">https://{host-identifier:port}/entropy</td>
            <td align="left">Get a random string having the default length of 256 bits</td>
          </tr>
          <tr>
            <td align="left">6.</td>
            <td align="left">GET</td>
            <td align="left">https://{host-identifier:port}/entropy?minentropy=128</td>
            <td align="left">Get a random string having the specified length of 128 bits</td>
          </tr>
        </tbody>
      </table>
      <t>The host-identifier is an IPv4/v6 address or a hostname providing HTTPS services on standard port 443 or any port in the user-defined range. A KP <bcp14>SHOULD</bcp14> return one of the following HTTP status codes in response to a request made by an encryptor:</t>
      <table>
        <name>General Status Codes.</name>
        <thead>
          <tr>
            <th align="left">Code</th>
            <th align="left">Meaning</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">200</td>
            <td align="left">No problems were encountered</td>
          </tr>
          <tr>
            <td align="left">404</td>
            <td align="left">A path that doesn't correspond to those described in <xref target="Methods"/> was provided</td>
          </tr>
          <tr>
            <td align="left">405</td>
            <td align="left">A bad method was used. Only 'GET' is supported</td>
          </tr>
        </tbody>
      </table>
      <t>Data in the HTTP response from a KP to an encryptor is encoded in JSON format
as described in <xref target="RFC8259"/>.</t>
      <section anchor="get-capabilities">
        <name>Get Capabilities</name>
        <t>Get capabilities method returns a JSON response detailing the capabilities of
the KP. It provides an encryptor with an overview of services supported by the
KP.</t>
        <figure>
          <name>The schema of get capabilities response body.</name>
          <sourcecode type="json" markers="false"><![CDATA[
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "entropy": {
      "type": "boolean"
    },
    "key": {
      "type": "boolean"
    },
    "algorithm": {
      "type": "string"
    },
    "localSystemID": {
      "type": "string"
    },
    "remoteSystemID": {
      "type": "array",
      "items": [
        {
          "type": "string"
        },
        {
          "type": "string"
        }
      ]
    }
  },
  "required": [
    "entropy",
    "key",
    "algorithm",
    "localSystemID",
    "remoteSystemID"
  ]
}
]]></sourcecode>
        </figure>
        <figure>
          <name>An example get capabilities response body.</name>
          <sourcecode type="json" markers="false"><![CDATA[
{
  "entropy" : true,
  "key" : true,
  "algorithm": "PRF",
  "localSystemID": "Alice",
  "remoteSystemID": [
    "Bob",
    "Eve"
  ]
}
]]></sourcecode>
        </figure>
        <t>The fields returned in the capabilities JSON response are as follows:</t>
        <table>
          <name>SKIP capability response fields.</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">entropy</td>
              <td align="left">True if the KP supports the GET /entropy method</td>
            </tr>
            <tr>
              <td align="left">key</td>
              <td align="left">True if the KP supports the GET /key method</td>
            </tr>
            <tr>
              <td align="left">algorithm</td>
              <td align="left">Identifier or description of the algorithm used by the KP for generating and synchronizing keys</td>
            </tr>
            <tr>
              <td align="left">localSystemID</td>
              <td align="left">Identifier or name associated with the KP</td>
            </tr>
            <tr>
              <td align="left">remoteSystemID</td>
              <td align="left">List of identifiers of remote KPs with which the queried KP can synchronize a key</td>
            </tr>
          </tbody>
        </table>
        <t>The frequency at which an encryptor requests the capabilities of its co-located
KP can depend on the expected frequency of changes in the KP network. If the KP
supports dynamically learning of a newly onboarded KP, then an encryptor <bcp14>MAY</bcp14>
download the capabilities on each SKIP execution to ensure it receives an
up-to-date remoteSystemID list. Conversely, if the KP network is unlikely to
change, an encryptor <bcp14>MAY</bcp14> download the capabilities only once and cache the
results. Implementation <bcp14>MUST</bcp14> support at least 16 bytes for Algorithm field and
32 bytes for localSystemID and remoteSystemID.</t>
        <section anchor="local-systemid">
          <name>Local SystemID</name>
          <t>Each KP is associated with an identifier, represented by the localSystemID
field in the capabilities response. The uniqueness of this identifier is
crucial if there are multiple KPs connected to a single encryptor, or if a
single KP is communicating with multiple peer KPs. An implementor can choose
the scope of the uniqueness of this identifier to be either global or
connection-specific.</t>
          <ol spacing="normal" type="1"><li>
              <t>Global Uniqueness: The identifier is unique to all the KPs within the
  network.</t>
            </li>
            <li>
              <t>Connection-Specific Uniqueness: The identifier is unique among all the KP
connections attached to the encryptor. This option is available only if the
KP can only share keys with exactly one other KP (and vice versa).</t>
            </li>
          </ol>
        </section>
        <section anchor="remote-systemid">
          <name>Remote SystemID</name>
          <t>The remoteSystemID field contains a list of identifiers for KPs with which the
queried KP can synchronize a key. At least one identifier <bcp14>MUST</bcp14> be specified in
the list. A list entry <bcp14>MAY</bcp14> use a glob pattern to represent more than one KP
identifier. This feature can shorten the length of the remoteSystemID list in
large networks with numerous KPs. For example, two KP identifiers KP_ALICE_LOC1
and KP_BOB_LOC1 can be expressed with a single list entry KP_*_LOC1. The
following glob patterns are supported in accordance with <xref target="POSIX"/> standards:</t>
          <table>
            <name>SKIP remote system id glob patterns.</name>
            <thead>
              <tr>
                <th align="left">Pattern</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">*</td>
                <td align="left">matches multiple characters</td>
              </tr>
              <tr>
                <td align="left">?</td>
                <td align="left">matches any single character</td>
              </tr>
              <tr>
                <td align="left">[list]</td>
                <td align="left">matches any single character in the list</td>
              </tr>
              <tr>
                <td align="left">[!list]</td>
                <td align="left">matches any single character not in the list</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="get-key">
        <name>Get Key</name>
        <t>Get key method returns a JSON response containing a key along with a
corresponding key identifier. It facilitates the delivery of a key from a KP to
an encryptor.</t>
        <figure>
          <name>The schema of the get key response body.</name>
          <sourcecode type="json" markers="false"><![CDATA[
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "keyId": {
      "type": "string"
    },
    "key": {
      "type": "string"
    }
  },
  "required": [
    "keyId",
    "key"
  ]
}
]]></sourcecode>
        </figure>
        <figure>
          <name>An example get key response body.</name>
          <sourcecode type="json" markers="false"><![CDATA[
{
   "keyId" : "1726e9AE76234FB1dd1283d4dca1911e1f93864d70f3069e",
   "key" : "ad229dfb8a276e74c1f3b6c09349a69fb2fed73c541270663f0e5cbbfb031670"
}
]]></sourcecode>
        </figure>
        <t>The fields returned in the key response are as follows</t>
        <table>
          <name>SKIP key response fields.</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">keyId</td>
              <td align="left">Hexadecimal-encoded identifier string associated with the key</td>
            </tr>
            <tr>
              <td align="left">key</td>
              <td align="left">Hexadecimal-encoded bytes of the key string</td>
            </tr>
          </tbody>
        </table>
        <t>An encryptor can request a (keyId, key) pair, or a key associated with a
specific keyId. In the typical SKIP flow, the initiating encryptor will request
a fresh (keyId, key) pair from its co-located KP and then pass the keyId to the
responder encryptor. The responder encryptor will then retrieve the key from
its co-located KP using the given keyId. To request a specific key, the
hexadecimal-encoded keyId is specified within the URL along with the
remoteSystemID as outlined in method 4 of <xref target="Methods"/>. An encryptor can also
request keys of a specific bit size by encoding the size within the URL as
outlined in method 3 of <xref target="Methods"/>.</t>
        <t>A KP <bcp14>SHOULD</bcp14> return the following HTTP status codes in response to key request
by an encryptor.</t>
        <table>
          <name>Get key Status Codes.</name>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">200</td>
              <td align="left">OK</td>
            </tr>
            <tr>
              <td align="left">400</td>
              <td align="left">A malformed keyId was requested or the key was not found</td>
            </tr>
            <tr>
              <td align="left">500</td>
              <td align="left">There was an internal error while trying to read or zeroize the key</td>
            </tr>
          </tbody>
        </table>
        <section anchor="keyid">
          <name>keyId</name>
          <t>Each key supplied by a KP is associated with a unique key identifier. The bit
position in a keyId uniquely maps only to a particular key, guaranteeing that
any key request for a specific keyId always yields the same key. The key <bcp14>MUST
NOT</bcp14> be recoverable with knowledge of the keyId alone. An encryptor in
possession of a valid keyId can use it to request its associated KP for the
corresponding key. The keyId is returned in responses and supplied in requests
as a hexadecimal-encoded string and has a default length of 128 bits.</t>
        </section>
        <section anchor="key">
          <name>Key</name>
          <t>The key bytes, returned as a hexadecimal-encoded string have a default length
of 256 bits. A KP <bcp14>MUST</bcp14> zeroize its local copy of a key after it is provided to
an encryptor.</t>
        </section>
      </section>
      <section anchor="get-entropy">
        <name>Get Entropy</name>
        <t>Get entropy method returns a JSON response containing a randomly generated
entropy string and the length of this string in bits. encryptors can request an
entropy sample for its internal consumption. The KPs <bcp14>MUST NOT</bcp14> utilize the
entropy sample for any other purpose.</t>
        <figure>
          <name>The schema of the get entropy response body.</name>
          <sourcecode type="json" markers="false"><![CDATA[
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "randomStr": {
      "type": "string"
    },
    "minentropy": {
      "type": "integer"
    }
  },
  "required": [
    "randomStr",
    "minentropy"
  ]
}
]]></sourcecode>
        </figure>
        <figure>
          <name>An example get entropy response body.</name>
          <sourcecode type="json" markers="false"><![CDATA[
{
   "randomStr" : "AD229DFB8A276E74C1F3B6C09349A69FB2FED73C541270663F0E5CBBFB031670",
   "minentropy" : 256
}
]]></sourcecode>
        </figure>
        <t>The default length of the entropy supplied by randomStr field is 256 bits.
An encryptor can request an entropy sample of a specific bit size by
encoding the minentropy size within the URL as outlined
in method 6 of <xref target="Methods"/>.</t>
        <table>
          <name>SKIP entropy response fields.</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">randomStr</td>
              <td align="left">Hexadecimal-encoded random bytes string</td>
            </tr>
            <tr>
              <td align="left">minentropy</td>
              <td align="left">Length of random bytes provided in response</td>
            </tr>
          </tbody>
        </table>
        <t>A KP <bcp14>SHOULD</bcp14> return the following HTTP status codes in response to
entropy request by the encryptors.</t>
        <table>
          <name>Get entropy Status Codes.</name>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">200</td>
              <td align="left">OK</td>
            </tr>
            <tr>
              <td align="left">503</td>
              <td align="left">A hardware random number generator is not available or the entropy pool doesn't have enough entropy bits</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="skip-with-ikev2">
      <name>SKIP with IKEv2</name>
      <t>SKIP can be used to dynamically supply post-quantum pre-shared keys (PPKs)
in the IKEv2 PPK protocol extension <xref target="RFC8784"/>.
The process of how SKIP is utilized in this context is outlined below.</t>
      <figure anchor="skipIkeExchange">
        <name>SKIP Protocol Exchange</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 904 480" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,48 L 8,464" fill="none" stroke="black"/>
              <path d="M 24,64 L 24,112" fill="none" stroke="black"/>
              <path d="M 48,120 L 48,456" fill="none" stroke="black"/>
              <path d="M 144,64 L 144,112" fill="none" stroke="black"/>
              <path d="M 288,64 L 288,112" fill="none" stroke="black"/>
              <path d="M 328,120 L 328,456" fill="none" stroke="black"/>
              <path d="M 368,64 L 368,112" fill="none" stroke="black"/>
              <path d="M 384,48 L 384,240" fill="none" stroke="black"/>
              <path d="M 384,272 L 384,328" fill="none" stroke="black"/>
              <path d="M 384,344 L 384,424" fill="none" stroke="black"/>
              <path d="M 384,440 L 384,464" fill="none" stroke="black"/>
              <path d="M 504,48 L 504,240" fill="none" stroke="black"/>
              <path d="M 504,272 L 504,328" fill="none" stroke="black"/>
              <path d="M 504,344 L 504,424" fill="none" stroke="black"/>
              <path d="M 504,440 L 504,464" fill="none" stroke="black"/>
              <path d="M 520,64 L 520,112" fill="none" stroke="black"/>
              <path d="M 560,120 L 560,456" fill="none" stroke="black"/>
              <path d="M 600,64 L 600,112" fill="none" stroke="black"/>
              <path d="M 760,64 L 760,112" fill="none" stroke="black"/>
              <path d="M 856,120 L 856,456" fill="none" stroke="black"/>
              <path d="M 880,64 L 880,112" fill="none" stroke="black"/>
              <path d="M 896,48 L 896,464" fill="none" stroke="black"/>
              <path d="M 8,48 L 384,48" fill="none" stroke="black"/>
              <path d="M 504,48 L 896,48" fill="none" stroke="black"/>
              <path d="M 24,64 L 144,64" fill="none" stroke="black"/>
              <path d="M 288,64 L 368,64" fill="none" stroke="black"/>
              <path d="M 520,64 L 600,64" fill="none" stroke="black"/>
              <path d="M 760,64 L 880,64" fill="none" stroke="black"/>
              <path d="M 24,112 L 144,112" fill="none" stroke="black"/>
              <path d="M 288,112 L 368,112" fill="none" stroke="black"/>
              <path d="M 520,112 L 600,112" fill="none" stroke="black"/>
              <path d="M 760,112 L 880,112" fill="none" stroke="black"/>
              <path d="M 56,142 L 136,142" fill="none" stroke="black"/>
              <path d="M 56,146 L 136,146" fill="none" stroke="black"/>
              <path d="M 216,142 L 320,142" fill="none" stroke="black"/>
              <path d="M 216,146 L 320,146" fill="none" stroke="black"/>
              <path d="M 568,142 L 656,142" fill="none" stroke="black"/>
              <path d="M 568,146 L 656,146" fill="none" stroke="black"/>
              <path d="M 736,142 L 848,142" fill="none" stroke="black"/>
              <path d="M 736,146 L 848,146" fill="none" stroke="black"/>
              <path d="M 56,176 L 112,176" fill="none" stroke="black"/>
              <path d="M 272,176 L 320,176" fill="none" stroke="black"/>
              <path d="M 568,176 L 624,176" fill="none" stroke="black"/>
              <path d="M 784,176 L 848,176" fill="none" stroke="black"/>
              <path d="M 56,224 L 96,224" fill="none" stroke="black"/>
              <path d="M 272,224 L 320,224" fill="none" stroke="black"/>
              <path d="M 568,224 L 608,224" fill="none" stroke="black"/>
              <path d="M 800,224 L 848,224" fill="none" stroke="black"/>
              <path d="M 336,256 L 376,256" fill="none" stroke="black"/>
              <path d="M 512,256 L 552,256" fill="none" stroke="black"/>
              <path d="M 56,288 L 72,288" fill="none" stroke="black"/>
              <path d="M 56,320 L 120,320" fill="none" stroke="black"/>
              <path d="M 256,320 L 320,320" fill="none" stroke="black"/>
              <path d="M 336,336 L 400,336" fill="none" stroke="black"/>
              <path d="M 480,336 L 552,336" fill="none" stroke="black"/>
              <path d="M 824,368 L 848,368" fill="none" stroke="black"/>
              <path d="M 568,400 L 640,400" fill="none" stroke="black"/>
              <path d="M 776,400 L 848,400" fill="none" stroke="black"/>
              <path d="M 336,432 L 384,432" fill="none" stroke="black"/>
              <path d="M 496,432 L 552,432" fill="none" stroke="black"/>
              <path d="M 8,464 L 384,464" fill="none" stroke="black"/>
              <path d="M 504,464 L 896,464" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="856,368 844,362.4 844,373.6" fill="black" transform="rotate(0,848,368)"/>
              <polygon class="arrowhead" points="856,176 844,170.4 844,181.6" fill="black" transform="rotate(0,848,176)"/>
              <polygon class="arrowhead" points="856,144 844,138.4 844,149.6" fill="black" transform="rotate(0,848,144)"/>
              <polygon class="arrowhead" points="576,400 564,394.4 564,405.6" fill="black" transform="rotate(180,568,400)"/>
              <polygon class="arrowhead" points="576,224 564,218.4 564,229.6" fill="black" transform="rotate(180,568,224)"/>
              <polygon class="arrowhead" points="576,144 564,138.4 564,149.6" fill="black" transform="rotate(180,568,144)"/>
              <polygon class="arrowhead" points="560,432 548,426.4 548,437.6" fill="black" transform="rotate(0,552,432)"/>
              <polygon class="arrowhead" points="560,336 548,330.4 548,341.6" fill="black" transform="rotate(0,552,336)"/>
              <polygon class="arrowhead" points="560,256 548,250.4 548,261.6" fill="black" transform="rotate(0,552,256)"/>
              <polygon class="arrowhead" points="344,432 332,426.4 332,437.6" fill="black" transform="rotate(180,336,432)"/>
              <polygon class="arrowhead" points="344,256 332,250.4 332,261.6" fill="black" transform="rotate(180,336,256)"/>
              <polygon class="arrowhead" points="328,320 316,314.4 316,325.6" fill="black" transform="rotate(0,320,320)"/>
              <polygon class="arrowhead" points="328,224 316,218.4 316,229.6" fill="black" transform="rotate(0,320,224)"/>
              <polygon class="arrowhead" points="328,144 316,138.4 316,149.6" fill="black" transform="rotate(0,320,144)"/>
              <polygon class="arrowhead" points="64,288 52,282.4 52,293.6" fill="black" transform="rotate(180,56,288)"/>
              <polygon class="arrowhead" points="64,176 52,170.4 52,181.6" fill="black" transform="rotate(180,56,176)"/>
              <polygon class="arrowhead" points="64,144 52,138.4 52,149.6" fill="black" transform="rotate(180,56,144)"/>
              <g class="text">
                <text x="156" y="36">Location</text>
                <text x="200" y="36">A</text>
                <text x="676" y="36">Location</text>
                <text x="720" y="36">B</text>
                <text x="48" y="84">Key</text>
                <text x="100" y="84">Provider</text>
                <text x="328" y="84">Encryptor</text>
                <text x="560" y="84">Encryptor</text>
                <text x="784" y="84">Key</text>
                <text x="836" y="84">Provider</text>
                <text x="80" y="100">Alice</text>
                <text x="328" y="100">Alice</text>
                <text x="560" y="100">Bob</text>
                <text x="816" y="100">Bob</text>
                <text x="180" y="132">SKIP</text>
                <text x="700" y="132">SKIP</text>
                <text x="160" y="148">TLS</text>
                <text x="192" y="148">PSK</text>
                <text x="680" y="148">TLS</text>
                <text x="712" y="148">PSK</text>
                <text x="32" y="180">(1)</text>
                <text x="136" y="180">Get</text>
                <text x="208" y="180">/capabilities</text>
                <text x="648" y="180">Get</text>
                <text x="720" y="180">/capabilities</text>
                <text x="872" y="180">(1)</text>
                <text x="164" y="212">localSystemID:</text>
                <text x="248" y="212">Alice</text>
                <text x="676" y="212">localSystemID:</text>
                <text x="752" y="212">Bob</text>
                <text x="168" y="228">remoteSystemID:</text>
                <text x="248" y="228">Bob</text>
                <text x="344" y="228">(2)</text>
                <text x="544" y="228">(2)</text>
                <text x="680" y="228">remoteSystemID:</text>
                <text x="768" y="228">Alice</text>
                <text x="424" y="244">(3)</text>
                <text x="464" y="244">IKEv2</text>
                <text x="448" y="260">(IKE_SA_INIT)</text>
                <text x="32" y="292">(4)</text>
                <text x="96" y="292">Get</text>
                <text x="208" y="292">/key?remoteSystemID=Bob</text>
                <text x="32" y="324">(5)</text>
                <text x="156" y="324">key:K,</text>
                <text x="216" y="324">keyId:I</text>
                <text x="444" y="324">(IKE_AUTH)</text>
                <text x="440" y="340">keyId:I</text>
                <text x="576" y="340">(6)</text>
                <text x="576" y="372">Get</text>
                <text x="704" y="372">/key/I?remoteSystemID=Alice</text>
                <text x="872" y="372">(7)</text>
                <text x="544" y="404">(8)</text>
                <text x="676" y="404">key:K,</text>
                <text x="736" y="404">keyId:I</text>
                <text x="416" y="436">IKEv2</text>
                <text x="452" y="436">SA</text>
                <text x="476" y="436">UP</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
               Location A                                                       Location B
+----------------------------------------------+              +------------------------------------------------+
| +--------------+                 +---------+ |              | +---------+                   +--------------+ |
| | Key Provider |                 |Encryptor| |              | |Encryptor|                   | Key Provider | |
| |    Alice     |                 |  Alice  | |              | |   Bob   |                   |     Bob      | |
| +--------------+                 +---------+ |              | +---------+                   +--------------+ |
|    |              SKIP                |      |              |      |               SKIP                 |    |
|    |<========== TLS PSK =============>|      |              |      |<=========== TLS PSK ==============>|    |
|    |                                  |      |              |      |                                    |    |
| (1)|<------- Get /capabilities -------|      |              |      |-------- Get /capabilities -------->|(1) |
|    |                                  |      |              |      |                                    |    |
|    |       localSystemID: Alice       |      |              |      |       localSystemID: Bob           |    |
|    |------ remoteSystemID: Bob ------>|(2)   |              |   (2)|<----- remoteSystemID: Alice -------|    |
|    |                                  |      |   (3) IKEv2  |      |                                    |    |
|    |                                  |<-----  (IKE_SA_INIT) ----->|                                    |    |
|    |                                  |      |              |      |                                    |    |
| (4)|<-- Get /key?remoteSystemID=Bob   |      |              |      |                                    |    |
|    |                                  |      |              |      |                                    |    |
| (5)|--------- key:K, keyId:I -------->|      |  (IKE_AUTH)  |      |                                    |    |
|    |                                  |--------- keyId:I --------->|(6)                                 |    |
|    |                                  |      |              |      |                                    |    |
|    |                                  |      |              |      |Get /key/I?remoteSystemID=Alice --->|(7) |
|    |                                  |      |              |      |                                    |    |
|    |                                  |      |              |   (8)|<--------- key:K, keyId:I ----------|    |
|    |                                  |      |              |      |                                    |    |
|    |                                  |<------ IKEv2 SA UP ------->|                                    |    |
|    |                                  |      |              |      |                                    |    |
+----------------------------------------------+              +------------------------------------------------+
]]></artwork>
        </artset>
      </figure>
      <t>(1) Each encryptor establishes a secure TLS connection with its corresponding
     Key Provider and retrieves the capabilities of the co-located Key Provider
     using the get capabilities method (refer <xref target="get-capabilities"/>).</t>
      <t>(2) The Key Provider responds with its capabilities. For simplicity, only the
     localSystemID and remoteSystemID fields are shown in the capabilities
     response in the diagram.</t>
      <t>(3) As part of IKE_SA_INIT exchange, encryptors propose the use of IKEv2 PPK
     extension by including USE_PPK notification payload, having type 16435,
     protocol ID of 0, no Security Parameter Index (SPI), and the localSystemID
     of its co-located Key Provider as notification data.</t>
      <t>(4) Encryptor Alice invokes the get key method with Key Provider Alice to
     obtain a (keyId, key) pair (refer <xref target="get-key"/>). The key request URL is
     encoded as https://{host-identifier:port}/key?remoteSystemID=Bob.</t>
      <t>(5) Key Provider Alice responds with a key and its associated keyId.</t>
      <t>(6) Encryptor Alice transmits the keyId to the peer encryptor Bob as part of
     IKE_AUTH request message using PPK_IDENTITY notification payload, having
     type 16436, protocol ID of 0, no SPI, and PPK_ID Type as 2 (PPK_ID_FIXED)
     followed by keyId as notification data.</t>
      <t>(7) Encryptor Bob invokes the get key method with Key Provider Bob to retrieve
     the key associated with the keyId. The key request URL is encoded as
     https://{host-identifier:port}/key/{keyId}?remoteSystemID=Alice.</t>
      <t>(8) Key Provider Bob responds with the key associated with the keyId.</t>
      <t>At the end of this exchange, both encryptors possess the identical key, which
is utilized to create key material for the IKEv2/IPsec Security Associations
(SAs). <xref target="QRIPSEC"/></t>
      <t>Although this document uses IKEv2 with SKIP as an example, it's important to
note that SKIP is a generic protocol that can be integrated with any existing
security protocols by adding suitable extensions to provide quantum resistance.</t>
    </section>
    <section anchor="skip-use-cases">
      <name>SKIP Use Cases</name>
      <t>This section of the document describes the use cases where SKIP can be
leveraged and deployed, particularly in scenarios requiring robust
network encryption across a wide range of industries.</t>
      <section anchor="high-speed-data-center-interconnect">
        <name>High Speed Data Center Interconnect</name>
        <t>High speed data center interconnection (DCI) connects multiple data centers
using high speed connectivity. The DCI encryption use case caters to industries
that require secure, high speed data transport between multiple data centers
for critical operations such as disaster recovery backups, synchronous and
asynchronous replication, and extending data center fabric in a private data
center or within a colocation space.</t>
        <section anchor="industries-covered">
          <name>Industries covered</name>
          <t>Industries such as telecommunications carriers, financial institutions, cloud
service providers, large enterprises, government entities, and defense
agencies. For these sectors, maintaining high uptime is critical, along with
the protection and security of data transmitted across this infrastructure. The
need for robust encryption is driven by the sensitive nature of the data and
the potential consequences of data breaches or interruptions.</t>
        </section>
        <section anchor="common-topologys">
          <name>Common topology(s)</name>
          <t>The topologies typically encountered in this use case are point-to-point (p2p),
where a direct p2p link is established between two data centers. This topology
is favored for its simplicity and efficiency in handling large volumes of data
traffic.</t>
        </section>
        <section anchor="encryption-types">
          <name>Encryption types</name>
          <t>For DCI use case, p2p topologies align well with IEEE 802.1AE MAC Security
(MACsec) due to its simplicity and the capability to support high-speed
transport encryption at link rates exceeding 400 Gbps. SKIP can be integrated
with MACsec to provide dynamic key management and enhance the security of the
key exchange process. In some cases needing the flexibility of IP transport,
IPsec is applicable, although in a smaller subset of use cases. IPsec operates
at the network layer and can secure data across diverse network paths. SKIP can
be integrated with IPsec to provide PPKs which provide resistance to quantum
computing attacks.</t>
        </section>
      </section>
      <section anchor="access-and-aggregation-backhaul-networks">
        <name>Access and Aggregation Backhaul networks</name>
        <t>Backhaul networks refer to the aggregation of branch and remote sites to a
centralized location. These use cases and topologies are very common for both
enterprise and service provider networks that require access to resources and
applications typically hosted at a centralized location (i.e., private data
centers, colocation facilities, and more recently inside of public clouds).
They are indispensable for industries that require reliable and secure
connectivity from multiple locations typically over lower-cost public IP
transport (i.e., Internet, 5G, LEO). For high speed requirements, private Metro
Ethernet transport services can be leveraged.</t>
        <section anchor="industries-covered-1">
          <name>Industries covered</name>
          <t>Backhaul networks are essential for industries like telecommunication, service
providers, enterprises, government, and commercial entities for secure access
to vital resources relevant to the mission and business.</t>
        </section>
        <section anchor="common-topologys-1">
          <name>Common topology(s)</name>
          <t>Topologies found in this use case typically include point-to-point connections
in a hub-and-spoke topology, but can also support other diverse topologies such
as point to multipoint, full/partial-mesh, or ring configurations, depending on
the network topology, redundancy and security requirements.</t>
        </section>
        <section anchor="encryption-types-1">
          <name>Encryption types</name>
          <t>IPsec is utilized for securing site-to-site connections in the various
topologies, enabling secure data transmission between branch offices to a
central corporate networks and data centers, or to and from a data center or
colocation facility.</t>
          <t>MACsec is typically implemented when Metro Ethernet backhaul is leveraged to
provide the high-speed encryption capabilities needed to secure point-to-point
or point-to-multipoint connections over these high-speed transport options.</t>
        </section>
      </section>
      <section anchor="cloud-service-providers">
        <name>Cloud service providers</name>
        <t>Cloud service providers (CSPs) deliver infrastructure, applications and
workload management services to a wide spectrum of industries. These industries
entrust their sensitive and confidential data to CSPs, which necessitates
secure handling of data during transit or at rest. While the ability exists
today for securing the private link connection from a CSP partner into the CSP
environment, the ability for operators to leverage the global infrastructure of
the CSP for optimal and cost-effective inter and intra-region transport is
becoming more common as a WAN transport alternative.</t>
        <section anchor="industries-covered-2">
          <name>Industries covered</name>
          <t>Enterprise, financial services, healthcare, education and government entities
are some of the top industries that utilize the cloud service providers.</t>
        </section>
        <section anchor="common-topologys-2">
          <name>Common topology(s)</name>
          <t>Topologies in this use case are varied and include point-to-point, hub and
spoke, full/partial mesh, or a hybrid approach combining elements of the
aforementioned topology types.</t>
        </section>
        <section anchor="encryption-types-2">
          <name>Encryption types</name>
          <t>IPsec is the most common type of encryption used to securely route traffic from
customer network to the cloud service provider network, or for the
intra/inter-region design options aforementioned above. MACsec is another
option for those operators wanting to leverage a high-speed private link from
the enterprise into the private domain of the CSP, and this form of secure
high-speed connectivity into the cloud is available today from some public
CSP's.</t>
        </section>
      </section>
      <section anchor="scale-target">
        <name>Scale target</name>
        <t>SKIP is designed to be both flexible and scalable, making it suitable for
networks ranging from small-scale to large-scale. It enables the provision of
post-quantum security without requiring an overhaul of the existing encryption
framework.</t>
      </section>
      <section anchor="skip-usage">
        <name>SKIP usage</name>
        <t>SKIP can be utilized across all the use cases and delivers all the benefits
highlighted in this document. It allow operators to leverage external QKD or
PQC cloud-based key sources and benefit from the automated provisioning,
refresh, and entropy of the imported PPK, either for MACsec or IPsec.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document updates the use of the PPK_IDENTITY (16435) notify message as
defined in <xref target="RFC8784"/> to include the localSystemID of the Key Provider as
notification data.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>SKIP is designed to facilitate the secure distribution of keys over a network.
Its security depends primarily on two considerations: the strength of keys
generated by the Key Provider (KP) and the secure delivery of keys from KPs to
encryptors.</t>
      <t>For the first consideration, this document does not impose any restrictions on
the mechanism used by a KP to generate the key. In general, the same security
considerations for generating a post-quantum pre-shared key (PPK) outlined in
<xref target="RFC8784"/> apply equally here. In particular, it is strongest practice to ensure
that a key generated by a KP has at least 256 bits of entropy, which will
provide 128 bits of post-quantum security when Grover's algorithm <xref target="GROVER"/> is
taken into account.</t>
      <t>For the secure delivery of keys within SKIP, there are three different links
(physical or logical) to consider: (1) the link between the two KPs, (2) the
link between the two encryptors, and (3) the link between a KP and an
encryptor. We will address each in turn. For (1), the mechanism by which two
KPs synchronize a key is intentionally out-of-scope for SKIP, such that it can
interoperate with various hardware or software technologies. It should be
clear, however, that this key synchronization mechanism should be
quantum-resistant if the key is intended to upgrade an existing protocol to
quantum resistance. To this end, KPs can employ one or more technologies
believed to be quantum-resistant, including, but not limited to: post-quantum
cryptography (PQC), quantum key distribution (QKD), a trusted third-party
protocol, or a one-time pad (OTP). For (2), this document makes no assumptions
about the security of this link. Indeed, the primary purpose of SKIP is to
augment an existing protocol between the two encryptors in the face of future
quantum computing or other cryptanalytic advances. As such, the only
SKIP-related piece of data to traverse this link is an opaque key identifier,
from which it <bcp14>MUST</bcp14> be infeasible to derive the corresponding key. After the
SKIP exchange completes, the two encryptors can use the key as a pre-shared
key. The link in (3) between the KP and encryptor is specified in <xref target="AuthModes"/>
to be HTTP over TLS v1.2 or v1.3, with support for both certificate and
pre-shared key (PSK) authentication modes of TLS. The inclusion of certificates
based on Rivest-Shamir-Adelman (RSA) and elliptic curve cryptography (ECC) that
are known to have vulnerabilities to quantum computers recognizes the reality
of interoperating with encryptors that do not yet have access to post-quantum
cryptography, in addition to the the lack of post-quantum x509 certificates at
the time of writing. The use of PSK-based authentication is <bcp14>RECOMMENDED</bcp14> since
it is believed to be quantum-resistant, though the use of PSKs can introduce
the same administrative challenges that SKIP is trying to solve for the
encryptor-to-encryptor link. To mitigate these issues, an implementor <bcp14>SHOULD</bcp14>
seek to limit the exposure of the KP-to-encryptor link by co-locating the KP
and encryptor, and employ techniques such as network segmentation. Where
feasible, running the KP on the same physical device as the encryptor as a
co-process or hosted application can also significantly reduce the exposure of
this link.</t>
      <t>Finally, there is an additional security consideration that the identifier
scheme used for KPs can potentially leak information about the larger network
topology or about specific software or hardware versions in use. In particular,
access to the remoteSystemID list in the KP capabilities response may help an
adversary in finding lateral compromises within a network or new insertion
points into the network. To mitigate this threat, an identifier scheme based on
random pseudonyms can remove any correspondence between the KP and its location
or underlying technology. The use of the glob patterns in the remoteSystemID
field can also conceal specific details about the KP network by collapsing
groups of KPs into a single entry in the remoteSystemID list.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8784">
          <front>
            <title>Mixing Preshared Keys in the Internet Key Exchange Protocol Version 2 (IKEv2) for Post-quantum Security</title>
            <author fullname="S. Fluhrer" initials="S." surname="Fluhrer"/>
            <author fullname="P. Kampanakis" initials="P." surname="Kampanakis"/>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <author fullname="V. Smyslov" initials="V." surname="Smyslov"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>The possibility of quantum computers poses a serious challenge to cryptographic algorithms deployed widely today. The Internet Key Exchange Protocol Version 2 (IKEv2) is one example of a cryptosystem that could be broken; someone storing VPN communications today could decrypt them at a later time when a quantum computer is available. It is anticipated that IKEv2 will be extended to support quantum-secure key exchange algorithms; however, that is not likely to happen in the near term. To address this problem before then, this document describes an extension of IKEv2 to allow it to be resistant to a quantum computer by using preshared keys.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8784"/>
          <seriesInfo name="DOI" value="10.17487/RFC8784"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="GROVER" target="https://doi.org/10.1145/237814.237866">
          <front>
            <title>A Fast Quantum Mechanical Algorithm for Database Search, STOC '96: Proceedings of the Twenty- Eighth Annual ACM Symposium on the Theory of Computing, pp. 212-219</title>
            <author initials="L. K." surname="Grover" fullname="Lov K. Grover">
              <organization/>
            </author>
            <date year="1996" month="July"/>
          </front>
        </reference>
        <reference anchor="QRIPSEC" target="https://www.qusecure.com/resources/ipsec-case-study-with-cisco-core-networking/">
          <front>
            <title>Engineering Quantum Resistance: An IPsec Case Study</title>
            <author initials="C." surname="Hill" fullname="Craig Hill">
              <organization/>
            </author>
            <author initials="S." surname="Kawaguchi" fullname="Scott Kawaguchi">
              <organization/>
            </author>
            <author initials="J." surname="Lupo" fullname="Joey Lupo">
              <organization/>
            </author>
            <date year="2024" month="February"/>
          </front>
        </reference>
        <reference anchor="POSIX" target="https://doi.org/10.1109/IEEESTD.2009.5393893">
          <front>
            <title>IEEE/ISO/IEC International Standard - Information technology Portable Operating System Interface (POSIX(TM)) Base Specifications, Issue 7, in ISO/IEC/IEEE 9945:2009(E)</title>
            <author>
              <organization/>
            </author>
            <date year="2009" month="September"/>
          </front>
        </reference>
        <reference anchor="PQCRYPTO" target="https://media.defense.gov/2021/Aug/04/2002821837/-1/-1/1/Quantum_FAQs_20210804.PDF">
          <front>
            <title>National Security Agency | Frequently Asked Question - Quantum Computing and Post-Quantum Cryptography</title>
            <author>
              <organization/>
            </author>
            <date year="2021" month="August"/>
          </front>
        </reference>
        <reference anchor="CSFC" target="https://www.nsa.gov/Portals/75/documents/resources/everyone/csfc/capability-packages/Symmetric%20Key%20Management%20Requirements%20v2_1.pdf">
          <front>
            <title>National Security Agency Central Security Service - Commercial Solutions for Classified (CSfc) Symmetric Key Management Requirements Annex V2.1</title>
            <author>
              <organization/>
            </author>
            <date year="2022" month="May"/>
          </front>
        </reference>
        <reference anchor="RFC4107">
          <front>
            <title>Guidelines for Cryptographic Key Management</title>
            <author fullname="S. Bellovin" initials="S." surname="Bellovin"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>The question often arises of whether a given security system requires some form of automated key management, or whether manual keying is sufficient. This memo provides guidelines for making such decisions. When symmetric cryptographic mechanisms are used in a protocol, the presumption is that automated key management is generally but not always needed. If manual keying is proposed, the burden of proving that automated key management is not required falls to the proposer. 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="107"/>
          <seriesInfo name="RFC" value="4107"/>
          <seriesInfo name="DOI" value="10.17487/RFC4107"/>
        </reference>
        <reference anchor="RFC5246">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
            <author fullname="T. Dierks" initials="T." surname="Dierks"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2008"/>
            <abstract>
              <t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol. The TLS protocol provides communications security over the Internet. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5246"/>
          <seriesInfo name="DOI" value="10.17487/RFC5246"/>
        </reference>
      </references>
    </references>
    <?line 783?>

<section numbered="false" anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t>David McGrew, Scott Fluher, Lionel Florit, and Amjad Inamdar made significant contributions
to this work.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="D." surname="McGrew" fullname="David McGrew">
        <organization>Cisco Systems, Inc.</organization>
        <address>
          <email>mcgrew@cisco.com</email>
        </address>
      </contact>
      <contact initials="S." surname="Fluhrer" fullname="Scott Fluhrer">
        <organization>Cisco Systems, Inc.</organization>
        <address>
          <email>sfluhrer@cisco.com</email>
        </address>
      </contact>
      <contact initials="A." surname="Inamdar" fullname="Amjad Inamdar">
        <organization>Cisco Systems, Inc.</organization>
        <address>
          <email>amjads@cisco.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
