<?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.24 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cisco-skip-01" category="info" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="SKIP">Secure Key Integration Protocol (SKIP)</title>
    <seriesInfo name="Internet-Draft" value="draft-cisco-skip-01"/>
    <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="2025" month="March" day="02"/>
    <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 USE_PPK (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>
