<?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.35 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-opennhp-ztcpp-nhp-00" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="NHP">Network-Infrastructure Hiding Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-opennhp-ztcpp-nhp-00"/>
    <author fullname="Benfeng Chen">
      <organization>OpenNHP</organization>
      <address>
        <email>benfeng@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="April" day="23"/>
    <keyword>zero trust</keyword>
    <keyword>session layer</keyword>
    <keyword>network obfuscation</keyword>
    <keyword>SDP</keyword>
    <abstract>
      <?line 62?>

<t>The Network-Infrastructure Hiding Protocol (NHP) is a cryptography-based session-layer protocol designed to operationalize Zero Trust principles by concealing protected network resources from unauthorized entities. NHP enforces authentication-before-connect access control, rendering IP addresses, ports, and domain names invisible to unauthorized users. This document defines the protocol architecture, cryptographic framework, message formats, and workflow to enable independent implementation of NHP. It represents the third generation of network hiding technology—evolving from first-generation port knocking to second-generation Single-Packet Authorization (SPA) and now to NHP with advanced asymmetric cryptography, mutual authentication, and scalability for modern threats. This specification also provides guidance for integration with Software-Defined Perimeter (SDP), DNS, FIDO, and Zero Trust policy engines.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://OpenNHP.github.io/ietf-rfc-nhp/draft-opennhp-ztcpp-nhp.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-opennhp-ztcpp-nhp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        ztcpp Independent Submission mailing list (<eref target="mailto:ztcpp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ztcpp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/ztcpp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/OpenNHP/ietf-rfc-nhp"/>.</t>
    </note>
  </front>
  <middle>
    <?line 66?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Since its inception in the 1970s, the TCP/IP networking model has prioritized openness and interoperability, laying the foundation for the modern Internet. However, this design philosophy also exposes systems to reconnaissance and attack. As Vint Cerf, who personally designed many of these components, stated, "We didn't focus on how you could wreck this system intentionally."</t>
      <t>Today, the cyber threat landscape has been dramatically reshaped by the rise of AI-driven attacks, which bring unprecedented speed and scale to vulnerability discovery and exploitation. Automated tools continuously scan the global network space, identifying weaknesses in real-time. Large Language Models (LLMs) can now autonomously exploit one-day vulnerabilities, and AI systems can generate working exploits for published CVEs in minutes. As a result, the Internet is evolving into a "Dark Forest," where <strong>visibility equates to vulnerability</strong>. In such an environment, any exposed service becomes an immediate target.</t>
      <t>The Zero Trust model, which mandates continuous verification and eliminates implicit trust, has emerged as a modern approach to cybersecurity. Within this context, the Network-Infrastructure Hiding Protocol (NHP) offers a new architectural element: authenticated-before-connect access at the session layer.</t>
      <t>NHP builds upon foundational work in the Cloud Security Alliance's Software-Defined Perimeter (SDP) and Single-Packet Authorization (SPA) frameworks, representing the third generation of network hiding technology:</t>
      <ul spacing="normal">
        <li>
          <t><strong>First Generation - Port Knocking:</strong> Simple port sequences vulnerable to interception and replay attacks.</t>
        </li>
        <li>
          <t><strong>Second Generation - SPA:</strong> Encrypted single-packet authorization with improved security but limited scalability.</t>
        </li>
        <li>
          <t><strong>Third Generation - NHP:</strong> Advanced asymmetric cryptography, mutual authentication, Noise Protocol-based key exchange, and enterprise-grade scalability.</t>
        </li>
      </ul>
      <t>This document outlines the motivations behind NHP, its design objectives, message structures, integration options, and security considerations for adoption within Zero Trust frameworks.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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?>

<t>The following terms are used throughout this document:</t>
      <dl>
        <dt>NHP</dt>
        <dd>
          <t>Network-Infrastructure Hiding Protocol</t>
        </dd>
        <dt>NHP-Agent</dt>
        <dd>
          <t>The client-side component that initiates NHP communication</t>
        </dd>
        <dt>NHP-Server</dt>
        <dd>
          <t>The control-plane service that validates requests and makes access decisions</t>
        </dd>
        <dt>NHP-AC</dt>
        <dd>
          <t>NHP Access Controller, the enforcement component near protected resources</t>
        </dd>
        <dt>SPA</dt>
        <dd>
          <t>Single-Packet Authorization</t>
        </dd>
        <dt>SDP</dt>
        <dd>
          <t>Software-Defined Perimeter</t>
        </dd>
        <dt>ZTA</dt>
        <dd>
          <t>Zero Trust Architecture</t>
        </dd>
        <dt>ECC</dt>
        <dd>
          <t>Elliptic Curve Cryptography</t>
        </dd>
        <dt>AEAD</dt>
        <dd>
          <t>Authenticated Encryption with Associated Data</t>
        </dd>
        <dt>ASP</dt>
        <dd>
          <t>Authorization Service Provider</t>
        </dd>
        <dt>PEP</dt>
        <dd>
          <t>Policy Enforcement Point</t>
        </dd>
        <dt>KGC</dt>
        <dd>
          <t>Key Generation Center</t>
        </dd>
      </dl>
    </section>
    <section anchor="design-objectives">
      <name>Design Objectives</name>
      <t>The NHP protocol is designed to achieve the following objectives:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Infrastructure Invisibility:</strong> Eliminate unauthorized network visibility by enforcing authentication prior to session establishment. Protected resources remain invisible to unauthorized scanners and attackers.</t>
        </li>
        <li>
          <t><strong>Session Layer Operation:</strong> Operate at OSI Layer 5, complementing existing TCP, UDP, and QUIC transports without requiring changes to underlying network infrastructure.</t>
        </li>
        <li>
          <t><strong>Decentralized Trust:</strong> Support decentralized trust using asymmetric cryptography and ephemeral key exchange, eliminating single points of trust failure.</t>
        </li>
        <li>
          <t><strong>Fine-Grained Access Control:</strong> Enable context-based policy enforcement across heterogeneous environments, supporting least-privilege access.</t>
        </li>
        <li>
          <t><strong>Integration Capability:</strong> Integrate with existing Zero Trust controllers, SDP gateways, identity systems (IAM), DNS infrastructure, and FIDO authentication.</t>
        </li>
        <li>
          <t><strong>Scalability:</strong> Support enterprise-scale deployments with clustered servers, distributed access controllers, and multi-tenant isolation.</t>
        </li>
        <li>
          <t><strong>AI Threat Mitigation:</strong> Reduce the attack surface against AI-driven reconnaissance and exploitation by denying visibility before authentication.</t>
        </li>
      </ol>
    </section>
    <section anchor="relationship-to-tls">
      <name>Relationship to TLS</name>
      <t>NHP and TLS (Transport Layer Security) are complementary protocols that operate at different OSI layers and serve distinct security purposes. This section clarifies their differences and how they work together.</t>
      <section anchor="osi-layer-positioning">
        <name>OSI Layer Positioning</name>
        <artwork><![CDATA[
+-------------------+
| Application (L7)  |  HTTP, SMTP, SSH, etc.
+-------------------+
        ↓
+-------------------+
| Presentation (L6) |  TLS/SSL - Data encryption & integrity
+-------------------+
        ↓
+-------------------+
| Session (L5)      |  NHP - Authentication before connection
+-------------------+
        ↓
+-------------------+
| Transport (L4)    |  TCP, UDP, QUIC
+-------------------+
        ↓
+-------------------+
| Network (L3)      |  IP
+-------------------+
]]></artwork>
      </section>
      <section anchor="key-differences">
        <name>Key Differences</name>
        <table>
          <thead>
            <tr>
              <th align="left">Aspect</th>
              <th align="left">NHP (Layer 5)</th>
              <th align="left">TLS (Layer 6)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <strong>Primary Purpose</strong></td>
              <td align="left">Infrastructure hiding and access control</td>
              <td align="left">Data encryption and integrity</td>
            </tr>
            <tr>
              <td align="left">
                <strong>When Authentication Occurs</strong></td>
              <td align="left">BEFORE connection establishment</td>
              <td align="left">AFTER TCP connection established</td>
            </tr>
            <tr>
              <td align="left">
                <strong>Service Visibility</strong></td>
              <td align="left">Services are INVISIBLE to unauthorized users</td>
              <td align="left">Services are VISIBLE, communication is encrypted</td>
            </tr>
            <tr>
              <td align="left">
                <strong>Attack Surface</strong></td>
              <td align="left">Eliminates pre-authentication attack surface</td>
              <td align="left">Protects data in transit, but service ports remain exposed</td>
            </tr>
            <tr>
              <td align="left">
                <strong>Port Exposure</strong></td>
              <td align="left">No ports exposed until authenticated</td>
              <td align="left">Ports must be open to initiate TLS handshake</td>
            </tr>
            <tr>
              <td align="left">
                <strong>Vulnerability Window</strong></td>
              <td align="left">None—no connection without authentication</td>
              <td align="left">TLS handshake vulnerabilities can be exploited</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="the-pre-authentication-problem">
        <name>The Pre-Authentication Problem</name>
        <t>TLS provides excellent protection for data in transit, but it has a fundamental limitation: <strong>the service must be reachable to initiate the TLS handshake</strong>. This creates a pre-authentication attack window:</t>
        <artwork><![CDATA[
Traditional TLS Flow:

Attacker    ──────►  Open Port 443  ──────►  TLS Handshake  ──────►  Authentication
                         ↑
                    Service is VISIBLE
                    Port scan succeeds
                    Pre-auth exploits possible
]]></artwork>
        <artwork><![CDATA[
NHP + TLS Flow:

Attacker    ──────►  No Open Ports  ──────►  BLOCKED (Service Invisible)
                         ↑
                    Cannot discover service
                    Port scan fails

Authorized  ──────►  NHP Knock  ──────►  Port Opens  ──────►  TLS  ──────►  Application
User                     ↑                    ↑
                    Authenticated         Encrypted
                    BEFORE connect        data transfer
]]></artwork>
      </section>
      <section anchor="complementary-security-model">
        <name>Complementary Security Model</name>
        <t>NHP and TLS are designed to work together, not replace each other:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>NHP provides:</strong> Authentication-before-connect, infrastructure invisibility, access control</t>
          </li>
          <li>
            <t><strong>TLS provides:</strong> Data encryption, integrity verification, server authentication</t>
          </li>
        </ol>
        <t>A complete Zero Trust deployment <bcp14>SHOULD</bcp14> use both:</t>
        <ul spacing="normal">
          <li>
            <t><strong>NHP</strong> ensures only authorized users can discover and reach the service</t>
          </li>
          <li>
            <t><strong>TLS</strong> encrypts all data exchanged after access is granted</t>
          </li>
        </ul>
      </section>
      <section anchor="vulnerabilities-addressed-by-nhp-but-not-tls">
        <name>Vulnerabilities Addressed by NHP but Not TLS</name>
        <table>
          <thead>
            <tr>
              <th align="left">Vulnerability Type</th>
              <th align="left">TLS Protection</th>
              <th align="left">NHP Protection</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Port scanning and service discovery</td>
              <td align="left">✗ None</td>
              <td align="left">✓ Service invisible</td>
            </tr>
            <tr>
              <td align="left">Pre-authentication exploits (e.g., Heartbleed)</td>
              <td align="left">✗ Vulnerable</td>
              <td align="left">✓ No connection possible</td>
            </tr>
            <tr>
              <td align="left">TLS implementation bugs before handshake</td>
              <td align="left">✗ Vulnerable</td>
              <td align="left">✓ No handshake initiated</td>
            </tr>
            <tr>
              <td align="left">DDoS attacks on exposed services</td>
              <td align="left">✗ Service reachable</td>
              <td align="left">✓ Service hidden</td>
            </tr>
            <tr>
              <td align="left">Credential stuffing on login pages</td>
              <td align="left">✗ Page accessible</td>
              <td align="left">✓ Page invisible</td>
            </tr>
            <tr>
              <td align="left">Zero-day exploits before authentication</td>
              <td align="left">✗ Service exposed</td>
              <td align="left">✓ Service protected</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="why-both-are-needed">
        <name>Why Both Are Needed</name>
        <t>NHP alone does not encrypt application data—it only controls access. TLS alone does not hide services—it only encrypts traffic. Together, they provide defense in depth:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Without NHP:</strong> Attackers can scan, probe, and exploit services before any authentication occurs</t>
          </li>
          <li>
            <t><strong>Without TLS:</strong> Authorized traffic would be transmitted in plaintext after NHP grants access</t>
          </li>
          <li>
            <t><strong>With Both:</strong> Services are invisible to attackers, and all authorized traffic is encrypted</t>
          </li>
        </ul>
        <t>This layered approach aligns with Zero Trust principles: never trust, always verify, and minimize attack surface at every layer.</t>
      </section>
    </section>
    <section anchor="threat-model">
      <name>Threat Model</name>
      <t>NHP is designed to mitigate the following threat categories:</t>
      <section anchor="reconnaissance-and-scanning">
        <name>Reconnaissance and Scanning</name>
        <t>Automated scanning tools and AI-driven reconnaissance continuously probe Internet-facing services. NHP eliminates the ability to discover protected resources by requiring cryptographic authentication before any network visibility is granted.</t>
      </section>
      <section anchor="pre-authentication-exploits">
        <name>Pre-Authentication Exploits</name>
        <t>Many vulnerabilities can be exploited before authentication occurs. By enforcing authentication-before-connect, NHP prevents attackers from reaching vulnerable services.</t>
      </section>
      <section anchor="ddos-attacks">
        <name>DDoS Attacks</name>
        <t>NHP reduces DDoS attack surface by hiding service endpoints. Attackers cannot target what they cannot discover.</t>
      </section>
      <section anchor="credential-theft-and-replay">
        <name>Credential Theft and Replay</name>
        <t>NHP uses ephemeral keys and timestamp-based nonces to prevent credential replay attacks. Each session requires fresh cryptographic material.</t>
      </section>
      <section anchor="man-in-the-middle-attacks">
        <name>Man-in-the-Middle Attacks</name>
        <t>Mutual authentication using asymmetric cryptography ensures both parties verify each other's identity before establishing communication.</t>
      </section>
    </section>
    <section anchor="architectural-overview">
      <name>Architectural Overview</name>
      <t>NHP operates as a distributed session-layer protocol that enforces authentication-before-connect access between clients and protected resources.</t>
      <section anchor="core-components">
        <name>Core Components</name>
        <section anchor="nhp-agent">
          <name>NHP-Agent</name>
          <t>The NHP-Agent is a client-side process, SDK, or embedded module that initiates communication with the protected network. Its responsibilities include:</t>
          <ul spacing="normal">
            <li>
              <t>Generating and sending NHP-KNK (Knock) messages to the NHP-Server</t>
            </li>
            <li>
              <t>Performing cryptographic key exchange using Noise Protocol handshakes</t>
            </li>
            <li>
              <t>Managing client identity credentials and device attestation</t>
            </li>
            <li>
              <t>Handling session lifecycle including keepalives and re-authentication</t>
            </li>
          </ul>
        </section>
        <section anchor="nhp-server">
          <name>NHP-Server</name>
          <t>The NHP-Server is the core control-plane service responsible for:</t>
          <ul spacing="normal">
            <li>
              <t>Receiving and validating NHP-KNK messages from NHP-Agents</t>
            </li>
            <li>
              <t>Authenticating the NHP-Agent identity and device posture</t>
            </li>
            <li>
              <t>Interfacing with external Authorization Service Providers (ASP) or IAM systems</t>
            </li>
            <li>
              <t>Evaluating access policies based on identity, context, and resource attributes</t>
            </li>
            <li>
              <t>Instructing NHP-AC components to open or close access paths</t>
            </li>
            <li>
              <t>Managing session state and expiration</t>
            </li>
          </ul>
          <t>Functionally, the NHP-Server maps to the <strong>Policy Administrator</strong> role defined in NIST SP 800-207 Zero Trust Architecture.</t>
        </section>
        <section anchor="nhp-ac-access-controller">
          <name>NHP-AC (Access Controller)</name>
          <t>The NHP-AC is the enforcement component residing logically or physically near protected resources. Its responsibilities include:</t>
          <ul spacing="normal">
            <li>
              <t>Maintaining default-deny firewall rules for all protected resources</t>
            </li>
            <li>
              <t>Receiving NHP-AOP (AC Operations) commands from the NHP-Server</t>
            </li>
            <li>
              <t>Temporarily opening access paths for authorized NHP-Agents</t>
            </li>
            <li>
              <t>Automatically reverting to default-deny state when sessions expire</t>
            </li>
            <li>
              <t>Reporting access logs and status to the NHP-Server</t>
            </li>
          </ul>
          <t>The NHP-AC corresponds to the <strong>Policy Enforcement Point (PEP)</strong> in NIST SP 800-207 terminology.</t>
        </section>
        <section anchor="authorization-service-provider-asp">
          <name>Authorization Service Provider (ASP)</name>
          <t>The ASP is an external identity and policy service that the NHP-Server queries for authorization decisions. This may include:</t>
          <ul spacing="normal">
            <li>
              <t>Identity Providers (IdP) such as LDAP, Active Directory, or OIDC providers</t>
            </li>
            <li>
              <t>Policy Decision Points (PDP) implementing ABAC or RBAC policies</t>
            </li>
            <li>
              <t>Device posture assessment services</t>
            </li>
            <li>
              <t>Risk scoring engines</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="component-interactions">
        <name>Component Interactions</name>
        <t>The following diagram illustrates the relationship between NHP components:</t>
        <artwork><![CDATA[
+-------------+          +-------------+          +-------------+
|             |  NHP-KNK |             |  Auth    |             |
| NHP-Agent   |--------->| NHP-Server  |<-------->|    ASP      |
|             |<---------|             |  Query   |   (IAM)     |
+-------------+  NHP-ACK +-------------+          +-------------+
      |                        |
      |                        | NHP-AOP
      |                        v
      |                  +-------------+
      |    NHP-ACC       |             |
      +----------------->|   NHP-AC    |
      |                  |             |
      v                  +-------------+
+-------------+                |
|  Protected  |<---------------+
|  Resource   |   Data Plane
+-------------+
]]></artwork>
      </section>
      <section anchor="deployment-models">
        <name>Deployment Models</name>
        <t>NHP components can be deployed in different configurations:</t>
        <section anchor="standalone-deployment">
          <name>Standalone Deployment</name>
          <t>For small environments or testing scenarios, the NHP-Server and NHP-AC can coexist on the same host. This configuration simplifies setup while maintaining full protocol compliance.</t>
        </section>
        <section anchor="clustered-deployment">
          <name>Clustered Deployment</name>
          <t>In enterprise or cloud environments, multiple NHP-Servers can be deployed in a load-balanced cluster. Each server manages a pool of NHP-AC instances distributed across data centers or network segments. The NHP-Agent dynamically discovers the nearest NHP-Server through DNS or bootstrap configuration.</t>
        </section>
        <section anchor="edge-ac-deployment">
          <name>Edge AC Deployment</name>
          <t>Edge nodes (e.g., gateways, routers, or micro-segmentation agents) can host lightweight NHP-AC components. These edge ACs enforce fine-grained policies close to workloads, improving latency and fault isolation.</t>
        </section>
        <section anchor="multi-tenant-deployment">
          <name>Multi-Tenant Deployment</name>
          <t>In service-provider or multi-cloud environments, each tenant can operate an independent NHP-Server while sharing an underlying AC infrastructure. The NHP protocol's namespace isolation ensures complete tenant separation through identity-scoped keys and per-tenant policy databases.</t>
        </section>
      </section>
    </section>
    <section anchor="protocol-workflow">
      <name>Protocol Workflow</name>
      <section anchor="control-plane-vs-data-plane">
        <name>Control Plane vs Data Plane</name>
        <t>The <strong>Control Plane</strong> carries cryptographic authentication and authorization information among NHP-Agent, NHP-Server, NHP-AC, and optional external ASP. Control plane messages are encrypted using Noise Protocol handshakes.</t>
        <t>The <strong>Data Plane</strong> carries application data between the resource requester (NHP-Agent host) and the protected resource, but only after NHP-AC explicitly authorizes access.</t>
        <t>This strict separation enforces the <em>authenticate-before-connect</em> principle central to Zero Trust.</t>
      </section>
      <section anchor="workflow-steps">
        <name>Workflow Steps</name>
        <t>The complete NHP workflow consists of the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Knock Request:</strong> NHP-Agent sends NHP-KNK message to NHP-Server containing encrypted identity claims and access request.</t>
          </li>
          <li>
            <t><strong>Authorization Query:</strong> NHP-Server validates the cryptographic envelope and queries ASP for authorization decision.</t>
          </li>
          <li>
            <t><strong>Authorization Response:</strong> ASP returns authorization decision with granted permissions and session parameters.</t>
          </li>
          <li>
            <t><strong>Door Opening:</strong> NHP-Server sends NHP-AOP command to NHP-AC instructing it to open access for the specific NHP-Agent.</t>
          </li>
          <li>
            <t><strong>AC Confirmation:</strong> NHP-AC enforces the access rule and replies with NHP-ART confirming the operation.</t>
          </li>
          <li>
            <t><strong>Agent Notification:</strong> NHP-Server sends NHP-ACK to NHP-Agent with access token and connection parameters.</t>
          </li>
          <li>
            <t><strong>Resource Access:</strong> NHP-Agent sends NHP-ACC to NHP-AC and establishes data plane connection to protected resource.</t>
          </li>
          <li>
            <t><strong>Session Maintenance:</strong> NHP-Server and NHP-AC maintain session state through NHP-KPL keepalive messages.</t>
          </li>
          <li>
            <t><strong>Logging and Audit:</strong> NHP-AC uploads access logs via NHP-LOG messages for compliance and auditing.</t>
          </li>
        </ol>
      </section>
      <section anchor="sequence-diagram">
        <name>Sequence Diagram</name>
        <artwork><![CDATA[
NHP-Agent           NHP-Server            NHP-AC             ASP/IAM
    |                    |                    |                   |
    |--- NHP-KNK ------->|                    |                   |
    |                    |--- Auth Query -----|------------------>|
    |                    |<-- Auth Result ----|-------------------|
    |                    |                    |                   |
    |                    |--- NHP-AOP ------->|                   |
    |                    |<-- NHP-ART --------|                   |
    |                    |                    |                   |
    |<-- NHP-ACK --------|                    |                   |
    |                    |                    |                   |
    |--- NHP-ACC --------|------------------>|                   |
    |<================== Data Session ======>|                   |
    |                    |                    |                   |
    |                    |<-- NHP-LOG --------|                   |
    |                    |--- NHP-LAK ------->|                   |
    |                    |                    |                   |
]]></artwork>
      </section>
    </section>
    <section anchor="cryptographic-framework">
      <name>Cryptographic Framework</name>
      <t>NHP employs the Noise Protocol Framework <xref target="NoiseFramework"/> for all cryptographic operations. This section defines the required cryptographic primitives and handshake patterns.</t>
      <section anchor="cryptographic-primitives">
        <name>Cryptographic Primitives</name>
        <t>Implementations <bcp14>MUST</bcp14> support the following cryptographic primitives:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Function</th>
              <th align="left">Algorithm</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">DH</td>
              <td align="left">Curve25519</td>
              <td align="left">RFC 7748</td>
            </tr>
            <tr>
              <td align="left">Cipher</td>
              <td align="left">ChaCha20-Poly1305</td>
              <td align="left">RFC 8439</td>
            </tr>
            <tr>
              <td align="left">Hash</td>
              <td align="left">SHA-256</td>
              <td align="left">RFC 6234</td>
            </tr>
            <tr>
              <td align="left">Key Derivation</td>
              <td align="left">HKDF</td>
              <td align="left">RFC 5869</td>
            </tr>
          </tbody>
        </table>
        <t>Implementations <bcp14>MAY</bcp14> additionally support:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Function</th>
              <th align="left">Algorithm</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">DH</td>
              <td align="left">P-256 (secp256r1)</td>
              <td align="left">RFC 8422</td>
            </tr>
            <tr>
              <td align="left">Cipher</td>
              <td align="left">AES-256-GCM</td>
              <td align="left">RFC 5116</td>
            </tr>
            <tr>
              <td align="left">Hash</td>
              <td align="left">BLAKE2s</td>
              <td align="left">RFC 7693</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="noise-protocol-handshake-patterns">
        <name>Noise Protocol Handshake Patterns</name>
        <t>NHP supports the following Noise handshake patterns:</t>
        <section anchor="xx-pattern-default">
          <name>XX Pattern (Default)</name>
          <t>The XX pattern provides full forward secrecy and identity protection for both parties. It is the <bcp14>RECOMMENDED</bcp14> pattern for most deployments.</t>
          <artwork><![CDATA[
XX:
  -> e
  <- e, ee, s, es
  -> s, se
]]></artwork>
        </section>
        <section anchor="ik-pattern-performance-optimized">
          <name>IK Pattern (Performance Optimized)</name>
          <t>The IK pattern is used when the NHP-Agent knows the NHP-Server's static public key in advance, reducing round trips.</t>
          <artwork><![CDATA[
IK:
  <- s
  ...
  -> e, es, s, ss
  <- e, ee, se
]]></artwork>
        </section>
        <section anchor="k-pattern-one-way">
          <name>K Pattern (One-Way)</name>
          <t>The K pattern is used for one-way initiation where only the initiator needs to be authenticated by the responder.</t>
          <artwork><![CDATA[
K:
  <- s
  ...
  -> e, es, ss
]]></artwork>
        </section>
      </section>
      <section anchor="key-management">
        <name>Key Management</name>
        <section anchor="static-keys">
          <name>Static Keys</name>
          <t>Each NHP component maintains a static Curve25519 key pair:</t>
          <ul spacing="normal">
            <li>
              <t>NHP-Agent: Used for client identity and authentication</t>
            </li>
            <li>
              <t>NHP-Server: Used for server identity and authentication</t>
            </li>
            <li>
              <t>NHP-AC: Used for secure communication with NHP-Server</t>
            </li>
          </ul>
          <t>Static public keys <bcp14>MUST</bcp14> be distributed through a secure out-of-band mechanism or registered through the NHP-REG message flow.</t>
        </section>
        <section anchor="ephemeral-keys">
          <name>Ephemeral Keys</name>
          <t>Ephemeral keys are generated for each session to provide forward secrecy. Implementations <bcp14>MUST</bcp14> use cryptographically secure random number generators for ephemeral key generation.</t>
        </section>
        <section anchor="key-rotation">
          <name>Key Rotation</name>
          <t>Static keys <bcp14>SHOULD</bcp14> be rotated periodically. The NHP-REG and NHP-RAK messages support key re-registration without service interruption.</t>
        </section>
      </section>
    </section>
    <section anchor="message-format">
      <name>Message Format</name>
      <t>All NHP messages share a common header structure followed by an encrypted payload.</t>
      <section anchor="message-header">
        <name>Message Header</name>
        <t>The NHP message header is 32 bytes with the following structure:</t>
        <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Version    |     Type      |     Flags     |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                          Nonce (96 bits)                      +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                       Timestamp (64 bits)                     +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Payload Length         |        Header Checksum        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <section anchor="header-fields">
          <name>Header Fields</name>
          <dl>
            <dt>Version (8 bits)</dt>
            <dd>
              <t>Protocol version. Current version is 0x01.</t>
            </dd>
            <dt>Type (8 bits)</dt>
            <dd>
              <t>Message type code. See <xref target="message-types"/>.</t>
            </dd>
            <dt>Flags (8 bits)</dt>
            <dd>
              <t>Control flags:
* Bit 0: Compression enabled
* Bit 1: Fragmentation flag
* Bit 2: Priority message
* Bits 3-7: Reserved</t>
            </dd>
            <dt>Reserved (8 bits)</dt>
            <dd>
              <t>Reserved for future use. <bcp14>MUST</bcp14> be set to zero.</t>
            </dd>
            <dt>Nonce (96 bits)</dt>
            <dd>
              <t>Unique nonce for AEAD encryption. <bcp14>MUST</bcp14> be unique per message within a session.</t>
            </dd>
            <dt>Timestamp (64 bits)</dt>
            <dd>
              <t>UNIX epoch time in milliseconds. Used for replay protection.</t>
            </dd>
            <dt>Payload Length (16 bits)</dt>
            <dd>
              <t>Length of the encrypted payload in bytes.</t>
            </dd>
            <dt>Header Checksum (16 bits)</dt>
            <dd>
              <t>CRC-16 checksum of the header for integrity verification.</t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="message-types">
        <name>Message Types</name>
        <table>
          <thead>
            <tr>
              <th align="left">Type Code</th>
              <th align="left">Name</th>
              <th align="left">Direction</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x00</td>
              <td align="left">NHP-KPL</td>
              <td align="left">Any</td>
              <td align="left">Keepalive message</td>
            </tr>
            <tr>
              <td align="left">0x01</td>
              <td align="left">NHP-KNK</td>
              <td align="left">Agent→Server</td>
              <td align="left">Knock request</td>
            </tr>
            <tr>
              <td align="left">0x02</td>
              <td align="left">NHP-ACK</td>
              <td align="left">Server→Agent</td>
              <td align="left">Knock acknowledgment</td>
            </tr>
            <tr>
              <td align="left">0x03</td>
              <td align="left">NHP-AOP</td>
              <td align="left">Server→AC</td>
              <td align="left">AC operation command</td>
            </tr>
            <tr>
              <td align="left">0x04</td>
              <td align="left">NHP-ART</td>
              <td align="left">AC→Server</td>
              <td align="left">AC operation result</td>
            </tr>
            <tr>
              <td align="left">0x05</td>
              <td align="left">NHP-LST</td>
              <td align="left">Agent→Server</td>
              <td align="left">Resource list request</td>
            </tr>
            <tr>
              <td align="left">0x06</td>
              <td align="left">NHP-LRT</td>
              <td align="left">Server→Agent</td>
              <td align="left">Resource list response</td>
            </tr>
            <tr>
              <td align="left">0x07</td>
              <td align="left">NHP-COK</td>
              <td align="left">Server→Agent</td>
              <td align="left">Cookie for session resumption</td>
            </tr>
            <tr>
              <td align="left">0x08</td>
              <td align="left">NHP-RKN</td>
              <td align="left">Agent→Server</td>
              <td align="left">Re-knock with cookie</td>
            </tr>
            <tr>
              <td align="left">0x09</td>
              <td align="left">NHP-RLY</td>
              <td align="left">Relay→Server</td>
              <td align="left">Relayed message</td>
            </tr>
            <tr>
              <td align="left">0x0A</td>
              <td align="left">NHP-AOL</td>
              <td align="left">AC→Server</td>
              <td align="left">AC online notification</td>
            </tr>
            <tr>
              <td align="left">0x0B</td>
              <td align="left">NHP-AAK</td>
              <td align="left">Server→AC</td>
              <td align="left">AC acknowledge</td>
            </tr>
            <tr>
              <td align="left">0x0C</td>
              <td align="left">NHP-OTP</td>
              <td align="left">Any</td>
              <td align="left">One-time password request</td>
            </tr>
            <tr>
              <td align="left">0x0D</td>
              <td align="left">NHP-REG</td>
              <td align="left">Agent→Server</td>
              <td align="left">Public key registration</td>
            </tr>
            <tr>
              <td align="left">0x0E</td>
              <td align="left">NHP-RAK</td>
              <td align="left">Server→Agent</td>
              <td align="left">Registration acknowledgment</td>
            </tr>
            <tr>
              <td align="left">0x0F</td>
              <td align="left">NHP-ACC</td>
              <td align="left">Agent→AC</td>
              <td align="left">Access request</td>
            </tr>
            <tr>
              <td align="left">0x10</td>
              <td align="left">NHP-LOG</td>
              <td align="left">AC→Server</td>
              <td align="left">Log upload</td>
            </tr>
            <tr>
              <td align="left">0x11</td>
              <td align="left">NHP-LAK</td>
              <td align="left">Server→AC</td>
              <td align="left">Log acknowledgment</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="message-definitions">
        <name>Message Definitions</name>
        <section anchor="nhp-kpl-keepalive">
          <name>NHP-KPL (Keepalive)</name>
          <t>Keepalive messages maintain session state between components. The payload contains:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Size</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Session ID</td>
                <td align="left">16 bytes</td>
                <td align="left">Current session identifier</td>
              </tr>
              <tr>
                <td align="left">Sequence</td>
                <td align="left">4 bytes</td>
                <td align="left">Monotonic sequence number</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="nhp-knk-knock">
          <name>NHP-KNK (Knock)</name>
          <t>The knock message initiates access request from NHP-Agent to NHP-Server. The encrypted payload contains:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Size</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">User ID</td>
                <td align="left">Variable</td>
                <td align="left">Unique user identifier</td>
              </tr>
              <tr>
                <td align="left">Device ID</td>
                <td align="left">Variable</td>
                <td align="left">Unique device identifier</td>
              </tr>
              <tr>
                <td align="left">Device Fingerprint</td>
                <td align="left">32 bytes</td>
                <td align="left">Device attestation hash</td>
              </tr>
              <tr>
                <td align="left">Requested Resources</td>
                <td align="left">Variable</td>
                <td align="left">List of resource identifiers</td>
              </tr>
              <tr>
                <td align="left">Context Data</td>
                <td align="left">Variable</td>
                <td align="left">Additional context (location, etc.)</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="nhp-ack-acknowledge">
          <name>NHP-ACK (Acknowledge)</name>
          <t>The acknowledge message confirms knock success and provides access parameters:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Size</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Status Code</td>
                <td align="left">2 bytes</td>
                <td align="left">Result status</td>
              </tr>
              <tr>
                <td align="left">Session ID</td>
                <td align="left">16 bytes</td>
                <td align="left">Assigned session identifier</td>
              </tr>
              <tr>
                <td align="left">Access Token</td>
                <td align="left">Variable</td>
                <td align="left">Token for NHP-AC access</td>
              </tr>
              <tr>
                <td align="left">AC Addresses</td>
                <td align="left">Variable</td>
                <td align="left">List of AC endpoints</td>
              </tr>
              <tr>
                <td align="left">Expiration</td>
                <td align="left">8 bytes</td>
                <td align="left">Session expiration timestamp</td>
              </tr>
              <tr>
                <td align="left">Granted Resources</td>
                <td align="left">Variable</td>
                <td align="left">List of granted resource access</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="nhp-aop-ac-operations">
          <name>NHP-AOP (AC Operations)</name>
          <t>The AC operations message instructs NHP-AC to modify access rules:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Size</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Operation</td>
                <td align="left">1 byte</td>
                <td align="left">OPEN (0x01) or CLOSE (0x02)</td>
              </tr>
              <tr>
                <td align="left">Agent Address</td>
                <td align="left">Variable</td>
                <td align="left">Source IP/port of authorized agent</td>
              </tr>
              <tr>
                <td align="left">Resource ID</td>
                <td align="left">Variable</td>
                <td align="left">Target resource identifier</td>
              </tr>
              <tr>
                <td align="left">Expiration</td>
                <td align="left">8 bytes</td>
                <td align="left">Rule expiration timestamp</td>
              </tr>
              <tr>
                <td align="left">Access Token</td>
                <td align="left">Variable</td>
                <td align="left">Token for agent verification</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="nhp-art-ac-result">
          <name>NHP-ART (AC Result)</name>
          <t>The AC result message reports operation status:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Size</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Status Code</td>
                <td align="left">2 bytes</td>
                <td align="left">Operation result</td>
              </tr>
              <tr>
                <td align="left">Operation ID</td>
                <td align="left">16 bytes</td>
                <td align="left">Reference to NHP-AOP</td>
              </tr>
              <tr>
                <td align="left">Details</td>
                <td align="left">Variable</td>
                <td align="left">Additional status information</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="nhp-acc-access">
          <name>NHP-ACC (Access)</name>
          <t>The access message is sent from NHP-Agent to NHP-AC to initiate data plane access:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Size</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">User ID</td>
                <td align="left">Variable</td>
                <td align="left">User identifier</td>
              </tr>
              <tr>
                <td align="left">Device ID</td>
                <td align="left">Variable</td>
                <td align="left">Device identifier</td>
              </tr>
              <tr>
                <td align="left">Access Token</td>
                <td align="left">Variable</td>
                <td align="left">Token from NHP-ACK</td>
              </tr>
              <tr>
                <td align="left">Requested Service</td>
                <td align="left">Variable</td>
                <td align="left">Target service identifier</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="nhp-reg-register">
          <name>NHP-REG (Register)</name>
          <t>The registration message registers NHP-Agent public key with NHP-Server:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Size</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">User ID</td>
                <td align="left">Variable</td>
                <td align="left">User identifier</td>
              </tr>
              <tr>
                <td align="left">Device ID</td>
                <td align="left">Variable</td>
                <td align="left">Device identifier</td>
              </tr>
              <tr>
                <td align="left">Public Key</td>
                <td align="left">32 bytes</td>
                <td align="left">Agent's static public key</td>
              </tr>
              <tr>
                <td align="left">OTP</td>
                <td align="left">Variable</td>
                <td align="left">One-time password for verification</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="nhp-rak-register-acknowledge">
          <name>NHP-RAK (Register Acknowledge)</name>
          <t>Confirms successful registration:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Size</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Status Code</td>
                <td align="left">2 bytes</td>
                <td align="left">Registration result</td>
              </tr>
              <tr>
                <td align="left">Server Public Key</td>
                <td align="left">32 bytes</td>
                <td align="left">Server's static public key</td>
              </tr>
              <tr>
                <td align="left">Certificate</td>
                <td align="left">Variable</td>
                <td align="left">Optional server certificate</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="nhp-log-log">
          <name>NHP-LOG (Log)</name>
          <t>Log upload message from NHP-AC to NHP-Server:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Size</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">AC ID</td>
                <td align="left">Variable</td>
                <td align="left">Access controller identifier</td>
              </tr>
              <tr>
                <td align="left">Log ID</td>
                <td align="left">32 bytes</td>
                <td align="left">Unique log identifier (hash)</td>
              </tr>
              <tr>
                <td align="left">Log Content</td>
                <td align="left">Variable</td>
                <td align="left">Compressed log entries</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="nhp-lak-log-acknowledge">
          <name>NHP-LAK (Log Acknowledge)</name>
          <t>Confirms log receipt:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Size</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Log ID</td>
                <td align="left">32 bytes</td>
                <td align="left">Received log identifier</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section anchor="logging-and-auditing">
      <name>Logging and Auditing</name>
      <t>NHP provides comprehensive logging capabilities to support security monitoring, compliance, and forensic analysis.</t>
      <section anchor="log-types">
        <name>Log Types</name>
        <t>NHP defines the following log categories:</t>
        <dl>
          <dt>Access Logs</dt>
          <dd>
            <t>Record all access attempts, including source identity, timestamp, requested resource, and decision outcome.</t>
          </dd>
          <dt>Authentication Logs</dt>
          <dd>
            <t>Record authentication events including key exchanges, identity verification, and authentication failures.</t>
          </dd>
          <dt>Policy Logs</dt>
          <dd>
            <t>Record policy evaluation decisions and the factors considered.</t>
          </dd>
          <dt>System Logs</dt>
          <dd>
            <t>Record component health, configuration changes, and operational events.</t>
          </dd>
        </dl>
      </section>
      <section anchor="log-format">
        <name>Log Format</name>
        <t>All NHP logs <bcp14>SHOULD</bcp14> use structured JSON format with the following mandatory fields:</t>
        <sourcecode type="json"><![CDATA[
{
  "timestamp": "2025-01-01T12:00:00.000Z",
  "log_type": "access",
  "component": "nhp-ac-01",
  "session_id": "abc123...",
  "user_id": "user@example.com",
  "device_id": "device-uuid",
  "source_ip": "192.0.2.1",
  "resource_id": "resource-001",
  "action": "access_granted",
  "details": {}
}
]]></sourcecode>
      </section>
      <section anchor="log-transmission">
        <name>Log Transmission</name>
        <t>NHP-AC components transmit logs to NHP-Server using NHP-LOG messages. Implementations <bcp14>MUST</bcp14>:</t>
        <ul spacing="normal">
          <li>
            <t>Encrypt all log transmissions using the established Noise session</t>
          </li>
          <li>
            <t>Batch logs to reduce network overhead</t>
          </li>
          <li>
            <t>Implement retry logic for failed transmissions</t>
          </li>
          <li>
            <t>Store logs locally if transmission fails</t>
          </li>
        </ul>
      </section>
      <section anchor="compliance-considerations">
        <name>Compliance Considerations</name>
        <t>NHP logging supports compliance with:</t>
        <ul spacing="normal">
          <li>
            <t>SOC 2 Type II audit requirements</t>
          </li>
          <li>
            <t>GDPR access logging requirements</t>
          </li>
          <li>
            <t>HIPAA audit trail requirements</t>
          </li>
          <li>
            <t>PCI-DSS logging requirements</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="integration-with-sdp">
      <name>Integration with SDP</name>
      <t>NHP is designed to integrate seamlessly with existing Software-Defined Perimeter (SDP) deployments as defined in <xref target="CSA.SDP.Spec2.0"/>.</t>
      <section anchor="integration-architecture">
        <name>Integration Architecture</name>
        <t>In an SDP integration, NHP components map to SDP components as follows:</t>
        <table>
          <thead>
            <tr>
              <th align="left">NHP Component</th>
              <th align="left">SDP Component</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">NHP-Agent</td>
              <td align="left">SDP Initiating Host</td>
            </tr>
            <tr>
              <td align="left">NHP-Server</td>
              <td align="left">SDP Controller</td>
            </tr>
            <tr>
              <td align="left">NHP-AC</td>
              <td align="left">SDP Gateway</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="integration-process">
        <name>Integration Process</name>
        <ol spacing="normal" type="1"><li>
            <t><strong>Discovery:</strong> SDP Controller advertises NHP-Server endpoint to SDP Initiating Hosts.</t>
          </li>
          <li>
            <t><strong>Authentication:</strong> SDP Initiating Host uses NHP-KNK to authenticate with NHP-Server instead of SPA.</t>
          </li>
          <li>
            <t><strong>Authorization:</strong> NHP-Server queries SDP Controller for policy decisions.</t>
          </li>
          <li>
            <t><strong>Enforcement:</strong> NHP-AC opens ports on SDP Gateway based on NHP-AOP commands.</t>
          </li>
        </ol>
      </section>
      <section anchor="benefits-of-nhp-sdp-integration">
        <name>Benefits of NHP-SDP Integration</name>
        <ul spacing="normal">
          <li>
            <t><strong>Stronger Cryptography:</strong> NHP's Noise-based key exchange provides better forward secrecy than traditional SPA.</t>
          </li>
          <li>
            <t><strong>Mutual Authentication:</strong> Both client and server authenticate each other.</t>
          </li>
          <li>
            <t><strong>Scalability:</strong> NHP's architecture supports enterprise-scale deployments.</t>
          </li>
          <li>
            <t><strong>Extensibility:</strong> NHP message types support richer interaction patterns.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="integration-with-dns">
      <name>Integration with DNS</name>
      <t>NHP can integrate with DNS infrastructure to provide stealth resolution of protected resources.</t>
      <section anchor="dns-integration-architecture">
        <name>DNS Integration Architecture</name>
        <artwork><![CDATA[
+-------------+     +-------------+     +-------------+
| NHP-Agent   |---->| NHP-Server  |---->| DNS Server  |
|             |     |             |     | (Internal)  |
+-------------+     +-------------+     +-------------+
      |                   |
      v                   v
+-------------+     +-------------+
| Public DNS  |     | NHP-AC      |
| (No Records)|     |             |
+-------------+     +-------------+
]]></artwork>
      </section>
      <section anchor="integration-process-1">
        <name>Integration Process</name>
        <ol spacing="normal" type="1"><li>
            <t>Protected resources have no public DNS records.</t>
          </li>
          <li>
            <t>NHP-Agent authenticates with NHP-Server via NHP-KNK.</t>
          </li>
          <li>
            <t>NHP-Server returns resource IP addresses in NHP-ACK only after successful authentication.</t>
          </li>
          <li>
            <t>NHP-Agent can then connect to the resolved addresses.</t>
          </li>
        </ol>
        <t>This prevents DNS enumeration attacks and keeps resource addresses invisible to unauthorized users.</t>
      </section>
    </section>
    <section anchor="integration-with-fido">
      <name>Integration with FIDO</name>
      <t>NHP supports integration with FIDO2/WebAuthn for strong user authentication.</t>
      <section anchor="fido-integration-flow">
        <name>FIDO Integration Flow</name>
        <ol spacing="normal" type="1"><li>
            <t>User initiates NHP-KNK with FIDO assertion</t>
          </li>
          <li>
            <t>NHP-Server validates FIDO assertion with FIDO server</t>
          </li>
          <li>
            <t>Upon successful FIDO authentication, NHP-Server proceeds with access grant</t>
          </li>
        </ol>
      </section>
      <section anchor="recovery-and-fallback">
        <name>Recovery and Fallback</name>
        <t>For FIDO authentication failures, NHP supports fallback to:</t>
        <ul spacing="normal">
          <li>
            <t>One-Time Password (OTP) via NHP-OTP message</t>
          </li>
          <li>
            <t>SMS/Email verification codes</t>
          </li>
          <li>
            <t>Recovery codes</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="infrastructure-invisibility">
        <name>Infrastructure Invisibility</name>
        <t>NHP ensures infrastructure invisibility by:</t>
        <ul spacing="normal">
          <li>
            <t>Encrypting all control plane traffic using Noise Protocol</t>
          </li>
          <li>
            <t>Requiring mutual authentication before any resource visibility</t>
          </li>
          <li>
            <t>Maintaining default-deny firewall rules on all NHP-AC components</t>
          </li>
          <li>
            <t>Supporting ephemeral port allocation for data plane connections</t>
          </li>
        </ul>
      </section>
      <section anchor="replay-attack-prevention">
        <name>Replay Attack Prevention</name>
        <t>NHP prevents replay attacks through:</t>
        <ul spacing="normal">
          <li>
            <t>Timestamp validation with configurable tolerance (<bcp14>RECOMMENDED</bcp14>: 60 seconds)</t>
          </li>
          <li>
            <t>Unique nonce per message</t>
          </li>
          <li>
            <t>Session-bound tokens that cannot be reused across sessions</t>
          </li>
        </ul>
      </section>
      <section anchor="key-security">
        <name>Key Security</name>
        <t>Implementations <bcp14>MUST</bcp14>:</t>
        <ul spacing="normal">
          <li>
            <t>Use cryptographically secure random number generators for all key generation</t>
          </li>
          <li>
            <t>Store private keys in secure enclaves or HSMs where available</t>
          </li>
          <li>
            <t>Implement key rotation policies</t>
          </li>
          <li>
            <t>Securely erase key material when no longer needed</t>
          </li>
        </ul>
      </section>
      <section anchor="session-security">
        <name>Session Security</name>
        <ul spacing="normal">
          <li>
            <t>Sessions <bcp14>MUST</bcp14> have configurable expiration (<bcp14>RECOMMENDED</bcp14> default: 4 hours)</t>
          </li>
          <li>
            <t>Sessions <bcp14>MUST</bcp14> be revocable by NHP-Server</t>
          </li>
          <li>
            <t>Session tokens <bcp14>MUST</bcp14> be bound to client identity and IP address</t>
          </li>
        </ul>
      </section>
      <section anchor="denial-of-service-mitigation">
        <name>Denial of Service Mitigation</name>
        <t>NHP provides DoS resistance through:</t>
        <ul spacing="normal">
          <li>
            <t>Cryptographic puzzles for computationally expensive operations</t>
          </li>
          <li>
            <t>Rate limiting on NHP-Server and NHP-AC</t>
          </li>
          <li>
            <t>Cookie-based session resumption to avoid repeated handshakes</t>
          </li>
        </ul>
      </section>
      <section anchor="limitations">
        <name>Limitations</name>
        <t>NHP does not protect against:</t>
        <ul spacing="normal">
          <li>
            <t>Compromised endpoints with valid credentials</t>
          </li>
          <li>
            <t>Insider threats with legitimate access</t>
          </li>
          <li>
            <t>Attacks on the data plane after access is granted</t>
          </li>
          <li>
            <t>Social engineering attacks targeting user credentials</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests IANA to establish a new registry for NHP Message Types with the following initial values:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Name</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">0x00</td>
            <td align="left">NHP-KPL</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x01</td>
            <td align="left">NHP-KNK</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x02</td>
            <td align="left">NHP-ACK</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x03</td>
            <td align="left">NHP-AOP</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x04</td>
            <td align="left">NHP-ART</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x05</td>
            <td align="left">NHP-LST</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x06</td>
            <td align="left">NHP-LRT</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x07</td>
            <td align="left">NHP-COK</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x08</td>
            <td align="left">NHP-RKN</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x09</td>
            <td align="left">NHP-RLY</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x0A</td>
            <td align="left">NHP-AOL</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x0B</td>
            <td align="left">NHP-AAK</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x0C</td>
            <td align="left">NHP-OTP</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x0D</td>
            <td align="left">NHP-REG</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x0E</td>
            <td align="left">NHP-RAK</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x0F</td>
            <td align="left">NHP-ACC</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x10</td>
            <td align="left">NHP-LOG</td>
            <td align="left">This document</td>
          </tr>
          <tr>
            <td align="left">0x11</td>
            <td align="left">NHP-LAK</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>
      <t>Values 0x12-0xFF are reserved for future use.</t>
    </section>
    <section anchor="reference-implementation">
      <name>Reference Implementation</name>
      <t>An open-source reference implementation of NHP is available at:</t>
      <t>https://github.com/OpenNHP/opennhp</t>
      <section anchor="implementation-characteristics">
        <name>Implementation Characteristics</name>
        <t>The OpenNHP reference implementation is designed with the following characteristics:</t>
        <section anchor="memory-safe-language">
          <name>Memory-Safe Language</name>
          <t>OpenNHP is implemented in <strong>Go (Golang)</strong>, a memory-safe programming language that eliminates entire classes of vulnerabilities common in C/C++ implementations:</t>
          <ul spacing="normal">
            <li>
              <t><strong>No Buffer Overflows:</strong> Go's built-in bounds checking prevents buffer overflow attacks.</t>
            </li>
            <li>
              <t><strong>No Use-After-Free:</strong> Automatic garbage collection eliminates dangling pointer vulnerabilities.</t>
            </li>
            <li>
              <t><strong>No Null Pointer Dereferences:</strong> Go's type system and nil handling prevent null pointer crashes.</t>
            </li>
            <li>
              <t><strong>Race Condition Detection:</strong> Built-in race detector helps identify concurrency issues during development.</t>
            </li>
          </ul>
          <t>This choice aligns with recommendations from CISA, NSA, and other security agencies advocating for memory-safe languages in critical infrastructure software.</t>
        </section>
        <section anchor="cross-platform-support">
          <name>Cross-Platform Support</name>
          <t>OpenNHP provides native support across multiple platforms:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Platform</th>
                <th align="left">Components</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Linux</td>
                <td align="left">Agent, Server, AC</td>
                <td align="left">Full production support for x86_64, ARM64</td>
              </tr>
              <tr>
                <td align="left">Windows</td>
                <td align="left">Agent, Server, AC</td>
                <td align="left">Native Windows service integration</td>
              </tr>
              <tr>
                <td align="left">macOS</td>
                <td align="left">Agent</td>
                <td align="left">Desktop client with system integration</td>
              </tr>
              <tr>
                <td align="left">FreeBSD</td>
                <td align="left">Agent, Server, AC</td>
                <td align="left">BSD-family operating system support</td>
              </tr>
              <tr>
                <td align="left">Android</td>
                <td align="left">Agent (Library)</td>
                <td align="left">Mobile SDK for Android applications</td>
              </tr>
              <tr>
                <td align="left">iOS</td>
                <td align="left">Agent (Library)</td>
                <td align="left">Mobile SDK for iOS applications</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="modular-architecture">
          <name>Modular Architecture</name>
          <t>The implementation provides separate binaries for each NHP component:</t>
          <ul spacing="normal">
            <li>
              <t><strong>nhp-agent:</strong> Client-side agent for initiating NHP connections</t>
            </li>
            <li>
              <t><strong>nhp-server:</strong> Control plane server for authentication and authorization</t>
            </li>
            <li>
              <t><strong>nhp-ac:</strong> Access controller for policy enforcement</t>
            </li>
          </ul>
          <t>Each component can be deployed independently, enabling flexible deployment topologies from standalone to distributed enterprise configurations.</t>
        </section>
        <section anchor="cryptographic-implementation">
          <name>Cryptographic Implementation</name>
          <t>The reference implementation uses well-audited cryptographic libraries:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Noise Protocol:</strong> flynn/noise library for Noise Framework handshakes</t>
            </li>
            <li>
              <t><strong>Curve25519:</strong> golang.org/x/crypto for elliptic curve operations</t>
            </li>
            <li>
              <t><strong>ChaCha20-Poly1305:</strong> Standard library crypto/cipher for AEAD encryption</t>
            </li>
            <li>
              <t><strong>HKDF:</strong> golang.org/x/crypto/hkdf for key derivation</t>
            </li>
          </ul>
        </section>
        <section anchor="performance-characteristics">
          <name>Performance Characteristics</name>
          <t>The Go implementation provides:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Low Latency:</strong> Typical NHP handshake completes in under 10ms on local networks</t>
            </li>
            <li>
              <t><strong>High Throughput:</strong> Single NHP-Server can handle thousands of concurrent sessions</t>
            </li>
            <li>
              <t><strong>Minimal Footprint:</strong> Agent binary under 15MB, low memory consumption</t>
            </li>
            <li>
              <t><strong>Concurrent Design:</strong> Goroutine-based concurrency for efficient resource utilization</t>
            </li>
          </ul>
        </section>
        <section anchor="open-source-governance">
          <name>Open Source Governance</name>
          <t>The OpenNHP project operates under the Apache 2.0 license, fostering community collaboration and transparent development to accelerate adoption and ensure rigorous peer review of its security mechanisms.</t>
        </section>
      </section>
      <section anchor="practical-use-case-stealthdns">
        <name>Practical Use Case: StealthDNS</name>
        <t>StealthDNS is a Zero Trust DNS client powered by OpenNHP that demonstrates practical application of the NHP protocol for DNS-level infrastructure hiding. It is available at:</t>
        <t>https://github.com/OpenNHP/StealthDNS</t>
        <t>StealthDNS implements the NHP-DNS integration described in this specification, providing:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Invisible DNS Resolution:</strong> Protected domains have no public DNS records. Only authenticated clients can resolve hidden service addresses.</t>
          </li>
          <li>
            <t><strong>NHP-Powered Authentication:</strong> Uses the OpenNHP library to perform cryptographic NHP knocking before DNS resolution.</t>
          </li>
          <li>
            <t><strong>Transparent Local Resolver:</strong> Runs as a local DNS resolver (127.0.0.1:53), requiring no application changes.</t>
          </li>
          <li>
            <t><strong>Cross-Platform Support:</strong> Available on Windows, macOS, Linux, Android, and iOS.</t>
          </li>
        </ul>
        <t>The StealthDNS workflow demonstrates the authenticate-before-connect principle:</t>
        <ol spacing="normal" type="1"><li>
            <t>Application performs DNS lookup for a protected domain.</t>
          </li>
          <li>
            <t>StealthDNS checks if the domain is NHP-protected.</t>
          </li>
          <li>
            <t>If protected, StealthDNS performs NHP knock with identity and device context.</t>
          </li>
          <li>
            <t>Upon successful authentication, the NHP Controller returns ephemeral address mappings.</t>
          </li>
          <li>
            <t>StealthDNS returns valid DNS records only to authorized clients.</t>
          </li>
          <li>
            <t>Unauthorized clients receive NXDOMAIN—the service remains invisible.</t>
          </li>
        </ol>
        <t>This enforces <strong>identity before visibility</strong> and <strong>authorization before connectivity</strong>, demonstrating real-world application of NHP principles.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </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="RFC9180">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="NoiseFramework" target="https://noiseprotocol.org/noise.html">
          <front>
            <title>The Noise Protocol Framework</title>
            <author initials="T." surname="Perrin" fullname="Trevor Perrin">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="NIST.SP.800-207">
          <front>
            <title>Zero Trust Architecture</title>
            <author initials="S." surname="Rose" fullname="Scott Rose">
              <organization/>
            </author>
            <author initials="O." surname="Borchert" fullname="Oliver Borchert">
              <organization/>
            </author>
            <author initials="S." surname="Mitchell" fullname="Stu Mitchell">
              <organization/>
            </author>
            <author initials="S." surname="Connelly" fullname="Sean Connelly">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
          <seriesInfo name="NIST" value="Special Publication 800-207"/>
        </reference>
        <reference anchor="CSA.SDP.Spec2.0">
          <front>
            <title>Software Defined Perimeter Specification v2.0</title>
            <author>
              <organization>Cloud Security Alliance</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="CSA.NHP.Whitepaper">
          <front>
            <title>Stealth Mode SDP for Zero Trust Network Infrastructure: Introducing the Network-Infrastructure Hiding Protocol (NHP)</title>
            <author>
              <organization>Cloud Security Alliance</organization>
            </author>
            <date year="2026"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1006?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This work builds upon foundational research from the Cloud Security Alliance (CSA) Zero Trust Working Group, particularly the "Stealth Mode SDP for Zero Trust Network Infrastructure" whitepaper <xref target="CSA.NHP.Whitepaper"/>. The authors acknowledge the contributions of the CSA Zero Trust Research Working Group.</t>
      <t>The authors would also like to thank the China Computer Federation (CCF) for their collaborative support, and the OpenNHP open source community for their contributions, testing, and feedback on early implementations of the Network-Infrastructure Hiding Protocol.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA81923IjyZXYO74i3R1hkRwAvPRlehhardAg2U03L1iCc5Ec
DkUBlQRqu1AFVRXYgxmOQk96t1dhv/jB3+FHf8p8ic81K7NQYHdLowj1aiUC
yOvJcz8nT/Z6vU6VVKk9Nk+ubPUhL973zrO7IiqrYjWtVoU1b5M4yWZmVORV
Ps3TJ51oMinsPXZ4O3rSmUaVneXF+tgk2V3eifNpFi1guLiI7qpevrRZNl/2
fqimy2UP/zo46JSrySIpyyTPqvXSYsfYQrvYZlUHxn3WeW/XsJL4uGN65gdb
5AYWU1b4qbTUz6TR2hb4RcaLNvnkblXCWuBH/Hp8Murc22xlYQwzK/LVEtZL
i3gCX/C0T87rec3YrQkbLKIk1Q6/TWx118+LGf4QFdM5/DCvqmV5vL+P7fCr
5N72tdk+frE/KfIPpd2nEfax5yyp5qsJ9L2GKQFy+9i+V9xNESrYIAVAlpU3
uDTsc89+kgdd9rcAuD+vFnBInWhVzfMCQQhjG3O3SlM+mNc2u7NwoMO5zegn
WHOUJT8Q7I6NzEq/WIbDhHv8doYf+9N80elkebGADvcE35uz4dHh4Vfy56vD
L5/Ln18dHBzot8+fv9RvD1/Rt1d5UtqzAhaFJ3hMMyou3s4t/+7wzriWT6il
2x/9463dAl7mhRnZokh4bzEA9dgcHRy+4uGjYmYBxgriDKdYygx0ePQNwbDT
QYT2tnl1Pr7tj0f9VwcHvaODL8MF/x7R9BbR1AwQISpL1NO21p6sdjzNq8rc
5KVt/HCdwoyFeZ3DQLaomt2qlblMKvgpTZs/2SgzwzzL4Kd1sP+jA/pY2iKx
Je5LF4Obgo5LO02i1IxWkzRhKjKyTWg3HA/6QFB9bHXUPwg3Ps7vqg8R8IkT
e5dkNkboJwtbwQZo1Dsd7x66toEDoH5shmm+imH901WRVGszSNMkyqY23MOR
rAWJ4lsE8TJa2qKxnMpGaTU3l3lskQsYOELjHY4wORMyuWP4XBV5vJoiq6sQ
+T6JGZodWMvu37erl51Or9cz0QRmiaZVp3P7mdObpDSRmRbrZZXPimg5X/cm
UQknIcyyR8zSKJqbGDBghidV5QbYR0HHE6XJD9YH1BJIaJosU1uaydpMc1g3
tIHJcRxAbuivvLewZb4qptDyrsgXZpUxKGDA2ABvTSrAub6BpcInOA5siC3w
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
KEa1cYBDp/P/Afcjr4a5mwAA

-->

</rfc>
