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


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-buraglio-6man-hcga-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Hierarchical Cryptographically Generated Addresses (HCGA)">Hierarchical Cryptographically Generated Addresses (HCGA)</title>

    <author fullname="Nick Buraglio">
      <organization>Energy Sciences Network</organization>
      <address>
        <email>buraglio@forwardingplane.net</email>
      </address>
    </author>
    <author fullname="Josh Bailey">
      <organization>Overly Specific Dynamics</organization>
      <address>
        <email>josh@felllight.com</email>
      </address>
    </author>

    <date year="2026" month="October" day="27"/>

    <area>INT</area>
    <workgroup>6man</workgroup>
    <keyword>hcga</keyword> <keyword>ipv6</keyword> <keyword>Internet-Draft</keyword>

    <abstract>


<?line 108?>

<t>RFC 3972 defines Cryptographically Generated Addresses (CGA), in which the
Interface Identifier (IID) of an IPv6 address is derived from a cryptographic
public key. The /64 subnet prefix is supplied by network infrastructure and
has no cryptographic relationship to the key. This document specifies
Hierarchical CGA (HCGA), an extension to RFC 3972 that also derives part of
the upper 64 bits -- specifically the bits between the organizational prefix
and the /64 boundary -- from the same public key. The result is an address
whose full 128-bit value is a deterministic function of a public key
(typically hardware-bound), an operator-controlled aggregate prefix, and
two modifiers. HCGA is a traceability component intended for use within a
larger accountability architecture that supplies key attestation, parameter
distribution, and source-address enforcement; that architecture is not
specified here. The capability supports workload network accountability in
multi-tenant environments such as Kubernetes clusters, where
infrastructure-assigned prefixes provide no per-instance cryptographic binding.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://github.com/buraglio/draft-buraglio-6man-hcga"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-buraglio-6man-hcga/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        6man Working Group mailing list (<eref target="mailto:ipv6@ietf.org"/>),
        which is archived at <eref target="https://datatracker.ietf.org/wg/6man/about/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/ipv6/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/buraglio/draft-buraglio-6man-hcga"/>.</t>
    </note>


  </front>

  <middle>


<?line 128?>

<section anchor="introduction"><name>Introduction</name>

<t>RFC 3972 <xref target="RFC3972"/> provides a mechanism to bind an IPv6 <xref target="RFC8200"/> host's
network address to a public key by deriving the 64-bit Interface Identifier
(IID) <xref target="RFC4291"/> from a cryptographic hash of the key. This binding enables Secure Neighbor
Discovery <xref target="RFC3971"/> and is used by ANCHOR <xref target="ANCHOR-PoC"/> as the primary
forensic accountability signal.</t>

<t>RFC 3972 treats the /64 prefix as a trusted external input from network
infrastructure. For hosts with a single, stable interface on a
well-administered network, that assumption holds. For containerized and
virtualized workloads, however, the prefix is assigned by an orchestration
layer (CNI plugin, cloud provider, or hypervisor) and has no cryptographic
relationship to the workload's identity.</t>

<t>This gap matters for agentic accountability in two concrete ways:</t>

<t><list style="numbers" type="1">
  <t><strong>Multiple agents per prefix.</strong> Thousands of agentic instances may share
a single /64 (e.g., all pods on a node subnet). The IID distinguishes
instances within the prefix, but the prefix itself is a coarse-grained
infrastructure artifact with no binding to any particular workload key.</t>
  <t><strong>Per-agent routing granularity.</strong> Routing and monitoring operate at
prefix granularity. If each agent has its own cryptographically-identified
/64, routing tables can carry per-agent policy without per-agent
configuration -- the prefix encodes the identity.</t>
</list></t>

<t>HCGA extends RFC 3972 by deriving the lower bits of the /64 prefix -- the
"subnet bits" between the organizational aggregate and the /64 boundary --
from the same public key as the IID. The result is a two-level cryptographic
hierarchy:</t>

<t><list style="symbols">
  <t>The /64 subnet identifies the agent at the routing level.</t>
  <t>The IID provides the RFC 3972 address-level binding within that subnet.</t>
</list></t>

<t>Together, the full 128-bit address is a deterministic, verifiable function of
the hardware key, the operator-controlled aggregate prefix, and the RFC 3972
modifier. HCGA operates at the network layer and is designed as a complement
to application-layer workload identity mechanisms such as the WIMSE
architecture <xref target="WIMSE-ARCH"/> and the AI Identity Management System
<xref target="WIMSE-AIMS"/>, which address authentication and authorization of AI agent
interactions above the IP layer.</t>

<t>HCGA is one component of a larger accountability architecture and is not
useful in isolation. This document specifies only the address derivation
and verification functions. It assumes, and does not specify, a surrounding
architecture that (a) attests the public key and its protection (see §9.5),
(b) conveys the HCGA parameters (public key, modifier, prefix modifier) to
verifiers, (c) binds packets or sessions to the key, for example through
signed neighbor discovery <xref target="RFC3971"/> or a transport- or application-layer
signature, and (d) enforces source-address validity within the aggregate.
The forensic value of an HCGA address is bounded by the weakest of these.
<xref target="ANCHOR-PoC"/> is one such architecture.</t>

</section>
<section anchor="conventions-and-terminology"><name>Conventions and Terminology</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" 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>

<t><strong>Aggregate Prefix (A):</strong> An IPv6 prefix of length L (L &lt; 64), operator-
controlled, announced via BGP. All HCGA-derived addresses are within A.
Typical length: /48.</t>

<t><strong>Subnet bits:</strong> The bits from position L through position 63 inclusive
(0-indexed from the MSB). Bit count: 64 - L. For a /48 aggregate, the
subnet bits occupy positions 48-63, a 16-bit field.</t>

<t><strong>Pod prefix / HCGA prefix:</strong> The /64 derived by appending the subnet bits
to the aggregate prefix.</t>

<t><strong>CGA params:</strong> As defined in RFC 3972: modifier (128-bit random value),
subnet prefix, collision count, public key (SPKI format), and optional
extension fields <xref target="RFC4581"/>.</t>

<t><strong>Prefix modifier (PM):</strong> A 128-bit value, chosen by the generating node,
used to resolve /64 prefix collisions (§5.7). It is an HCGA parameter
conveyed alongside the CGA params by the surrounding architecture; it is
not part of the RFC 3972 CGA Parameters data structure.</t>

<t><strong>SPKI:</strong> SubjectPublicKeyInfo, the DER-encoded format for a public key.
<xref target="RFC3972"></xref> specifies this encoding for RSA keys; this document uses it with
ECDSA keys as defined in <xref target="RFC5480"></xref>.</t>

</section>
<section anchor="rfc-3972-background"><name>RFC 3972 Background</name>

<t>RFC 3972 Section 5 defines the CGA IID generation procedure in terms of two
hashes over the CGA Parameters data structure:</t>

<t>```
CGA_Params = modifier[16] || subnet_prefix[8] || collision_count[1]
             || public_key_SPKI || extension_fields
Hash1 = H(CGA_Params)[:8]
Hash2 = H(modifier[16] || 0x00^9 || public_key_SPKI || extension_fields)</t>

<t>IID = Hash1
IID[0] = (IID[0] &amp; 0x1C) | (Sec &lt;&lt; 5)
         # bits 0-2 := Sec; bits 6 and 7 (u/g) := 0
```</t>

<t>where <spanx style="verb">subnet_prefix</spanx> (8 octets) is the first 8 bytes of the /64 prefix, <spanx style="verb">Sec</spanx> is
a 3-bit security parameter encoded in the leftmost bits of the IID, and
the 16xSec leftmost bits of <spanx style="verb">Hash2</spanx> are required to be zero (the modifier
is incremented until this holds). The collision count takes the values 0,
1 or 2 and is incremented on duplicate address detection failure.</t>

<t>Verification works in reverse: given <spanx style="verb">(address, CGA_Params)</spanx>, check that
<spanx style="verb">subnet_prefix</spanx> equals bits 0-63 of the address, recompute <spanx style="verb">Hash1</spanx> and
compare it against <spanx style="verb">address[8:16]</spanx> ignoring the Sec and u/g bits, and
check the <spanx style="verb">Hash2</spanx> zero-bit condition for the Sec value read from the
address.</t>

<t><xref target="RFC3972"></xref> uses SHA-1 for <spanx style="verb">H</spanx>. <xref target="RFC4982"></xref> provides hash agility by having
the Sec value identify both the hash function and the security parameter,
via the IANA "CGA SEC" registry. HCGA uses SHA-256 for <spanx style="verb">H</spanx> under a Sec
value assigned per that registry (§10.1), with security parameter 0.</t>

</section>
<section anchor="problem-statement"><name>Problem Statement</name>

<section anchor="infrastructure-assigned-prefixes-carry-no-key-binding"><name>Infrastructure-Assigned Prefixes Carry No Key Binding</name>

<t>In RFC 3972 deployments, the /64 prefix is external. Consider a Kubernetes
node with prefix <spanx style="verb">3fff:1:cafe:1::/64</spanx> assigned by the CNI plugin. All pods
on that node share the same /64. Each pod generates a CGA IID from its own
key and the shared prefix, producing unique addresses within the /64.</t>

<t>In this scenario, each pod gets a unique, verifiable address within the
/64. The limitation is that the prefix itself is a network infrastructure
artifact -- it identifies the node or node subnet, not the individual agent.
The prefix alone carries no cryptographic relationship to any particular
workload key.</t>

</section>
<section anchor="per-agent-64-routing"><name>Per-Agent /64 Routing</name>

<t>A network operator managing a large agentic deployment may prefer or be required by policy to provide per-agent
routing policy on order to provide technical features such as rate limiting, traffic engineering, QoS, and monitoring. If each
agent is provisioned with its own /64, those policies are able to map directly to routing table entries.
Infrastructure-assigned prefixes require an external table to connect an
address to an agent; hardware-derived prefixes carry that mapping in the
address itself.</t>

</section>
<section anchor="multiple-addresses-per-agent"><name>Multiple Addresses per Agent</name>

<t>CGA allows a host to derive multiple addresses from the same key with
different modifiers. In <xref target="RFC3972"></xref>, all such addresses share the same /64.
In HCGA, the agent owns the /64 entirely -- it may derive addresses with
any IID within its /64, enabling per-connection address pseudonymity while
retaining per-agent /64 accountability.</t>

</section>
</section>
<section anchor="hcga-specification"><name>HCGA Specification</name>

<section anchor="parameters"><name>Parameters</name>

<t>HCGA takes the following inputs:</t>

<t><list style="symbols">
  <t><strong>public_key</strong>: ECDSA P-256 public key, SPKI DER encoded</t>
  <t><strong>modifier</strong>: 128-bit value (as in RFC 3972; see §5.7 and §6)</t>
  <t><strong>prefix_modifier</strong>: 128-bit value, initially random (see §5.7)</t>
  <t><strong>aggregate</strong>: IPv6 prefix of length L, where L &lt; 64 (operator-controlled)</t>
  <t><strong>hash_alg</strong>: SHA-256 (required for this profile)</t>
  <t><strong>Sec</strong>: the CGA SEC value assigned to this profile (TBD1, §10.1)</t>
</list></t>

</section>
<section anchor="subnet-bit-derivation"><name>Subnet Bit Derivation</name>

<t>Let <spanx style="verb">n = 64 - L</spanx> be the number of subnet bits, and <spanx style="verb">aggregate_bytes</spanx>
(8 octets: the aggregate prefix with bits L through 63 set to zero).</t>

<t><spanx style="verb">
subnet_hash = SHA-256(aggregate_bytes[8] || prefix_modifier[16]
                      || public_key_SPKI_DER)
subnet_bits = subnet_hash[0:n]      # leftmost n bits
</spanx></t>

<t>For a /48 aggregate (n = 16), <spanx style="verb">subnet_bits</spanx> is the first two bytes of
<spanx style="verb">subnet_hash</spanx>.</t>

<t>For non-byte-aligned cases (n not divisible by 8), the leftmost <spanx style="verb">n</spanx> bits of
the hash are used and placed at bit positions L through 63 of the prefix;
no bits of the hash beyond position n-1 contribute.</t>

<t>Including the aggregate in the hash input separates derivations under
different aggregates; including the prefix modifier allows a node whose key
yields a prefix already in use to derive a different prefix without
changing its key.</t>

</section>
<section anchor="hcga-prefix-construction"><name>HCGA Prefix Construction</name>

<t><spanx style="verb">
hcga_prefix_bits = aggregate_bits[0:L] || subnet_bits[0:n]
hcga_prefix      = IPv6 prefix of length 64 formed from hcga_prefix_bits
</spanx></t>

<t>Equivalently, in GoLang notation:
<spanx style="verb">go
var prefixBytes [8]byte
aggBytes := aggregate.Masked().Addr().As16()
copy(prefixBytes[:], aggBytes[:L/8])
h := sha256.New()
h.Write(aggBytes[:8])
h.Write(prefixModifier[:])
h.Write(publicKeySPKIDER)
subnetHash := h.Sum(nil)
if L%8 == 0 {
    // Byte-aligned: copy hash bytes directly
    for i := L / 8; i &lt; 8; i++ {
        prefixBytes[i] = subnetHash[i-L/8]
    }
} else {
    // Non-byte-aligned: shift hash bits to align with address bit boundary
    shift := uint(L % 8)
    mask := byte(0xFF) &lt;&lt; (8 - shift)
    prefixBytes[L/8] = (aggBytes[L/8] &amp; mask) | (subnetHash[0] &gt;&gt; shift)
    for i := L/8 + 1; i &lt; 8; i++ {
        j := i - L/8 - 1
        hi := subnetHash[j] &lt;&lt; (8 - shift)
        lo := subnetHash[j+1] &gt;&gt; shift
        prefixBytes[i] = hi | lo
    }
}
</spanx></t>

</section>
<section anchor="iid-derivation"><name>IID Derivation</name>

<t>The IID is computed per <xref target="RFC3972"></xref> §5, with the hash function and Sec value
given by <xref target="RFC4982"></xref> for the CGA SEC value TBD1, using <spanx style="verb">hcga_prefix</spanx> as the
subnet prefix input:</t>

<t><spanx style="verb">
CGA_Params = modifier[16] || hcga_prefix_bytes[8] || collision_count[1]
             || public_key_SPKI_DER
Hash1 = SHA-256(CGA_Params)[:8]
IID   = Hash1
IID[0] = (IID[0] &amp; 0x1C) | (TBD1 &lt;&lt; 5)
</spanx></t>

<t>where <spanx style="verb">hcga_prefix_bytes</spanx> (8 octets) is the 8-byte representation of the /64
network address (i.e., the first 8 bytes of a 128-bit address formed by
appending 64 zero bits to <spanx style="verb">hcga_prefix</spanx>), and <spanx style="verb">collision_count</spanx> is the
RFC 3972 collision count (0, 1 or 2; see §5.7). The leftmost three bits of
the IID carry the Sec value and bits 6 and 7 are cleared, exactly as in
RFC 3972.</t>

<t>Because the security parameter associated with TBD1 is 0, the RFC 3972
<spanx style="verb">Hash2</spanx> condition (16x0 = 0 leading zero bits) is satisfied for every
modifier and no modifier search is needed at generation time.</t>

<t>This is identical to <xref target="RFC3972"/> §5 as extended by <xref target="RFC4982"/>, with
<spanx style="verb">hcga_prefix</spanx> substituted for the externally-provided prefix.</t>

</section>
<section anchor="hcga-address-construction"><name>HCGA Address Construction</name>

<t><spanx style="verb">
hcga_address = hcga_prefix :: IID
</spanx></t>

<t>The resulting 128-bit address has:
- Bits 0 to L-1: operator-controlled aggregate prefix (fixed, BGP-announced)
- Bits L to 63: leftmost 64-L bits of
  <spanx style="verb">SHA-256(aggregate || prefix_modifier || public_key)</spanx> -- key-derived subnet bits
- Bits 64 to 127: RFC 3972/4982 IID -- key-derived, modifier-randomized</t>

</section>
<section anchor="verification-procedure"><name>Verification Procedure</name>

<t>Given <spanx style="verb">(hcga_address, CGA_Params, prefix_modifier)</spanx>, where <spanx style="verb">CGA_Params</spanx>
carries the modifier, subnet prefix, collision count and public key:</t>

<t><list style="numbers" type="1">
  <t><strong>Aggregate check:</strong> verify that bits 0 to L-1 of <spanx style="verb">hcga_address</spanx> match
the operator's aggregate prefix. This is a routing-level check, performed
before cryptographic verification.</t>
  <t><strong>Subnet bit check:</strong> compute <spanx style="verb">subnet_hash</spanx> per §5.2 from the aggregate,
<spanx style="verb">prefix_modifier</spanx> and the public key, and verify that bits L to 63 of
<spanx style="verb">hcga_address</spanx> match bits 0 to (63-L) of the hash.</t>
  <t><strong>IID check:</strong> perform the <xref target="RFC3972"></xref> §5 verification procedure on
<spanx style="verb">(hcga_address, CGA_Params)</spanx> using the hash function and security
parameter given by <xref target="RFC4982"></xref> for the Sec value read from the address.
This includes checking that the subnet prefix in <spanx style="verb">CGA_Params</spanx> equals
bits 0-63 of <spanx style="verb">hcga_address</spanx>, that the collision count is 0, 1 or 2, and
that <spanx style="verb">Hash1</spanx> matches bits 64-127 ignoring the Sec and u/g bits. If the
Sec value is not TBD1 the address is not an HCGA address under this
profile.</t>
</list></t>

<t>All three checks MUST pass for the address to be considered a valid HCGA
address. Failure of any check MUST be treated as a verification failure.</t>

<t>Note that step 3 is exactly RFC 3972/4982 verification. A verifier that
implements <xref target="RFC4982"></xref> and recognizes Sec value TBD1 therefore validates the
IID without any knowledge of HCGA; only step 2 requires this specification.</t>

</section>
<section anchor="collision-handling"><name>Collision Handling</name>

<t>Two independent values are used to resolve collisions:</t>

<t><list style="symbols">
  <t><strong>Collision count</strong> (IID collisions within the /64): on duplicate address
detection failure, the collision count is incremented and the IID
recomputed, exactly as in <xref target="RFC3972"></xref> §5 steps 6-8. The modifier is not
changed for this purpose. After three collisions generation fails, per
RFC 3972.</t>
  <t><strong>Prefix modifier</strong> (/64 collisions within the aggregate): if the derived
<spanx style="verb">hcga_prefix</spanx> is already in use by a different key within the aggregate,
the generating node MUST increment <spanx style="verb">prefix_modifier</spanx> (as a 128-bit
unsigned integer, modulo 2^128) and recompute §5.2 through §5.4. How
prefix use is detected (for example, by querying a registry maintained by
the surrounding architecture, or by prefix-level duplicate detection on
the fabric) is outside the scope of this document.</t>
</list></t>

<t>The probability that a freshly derived /64 collides with one of n existing
prefixes in a /48 aggregate is approximately n/2^16, and the expected number
of prefix-modifier retries is correspondingly small while n &lt;&lt; 2^16. The
subnet field cannot hold more than 2^(64-L) prefixes; operators SHOULD
choose L so that 2^(64-L) comfortably exceeds the expected number of
simultaneously active keys (for example, L &lt;= 32 for deployments of tens of
thousands of workloads).</t>

<t>The modifier plays no role in collision resolution under this profile; it
is used only to derive multiple addresses within a /64 (§6).</t>

</section>
</section>
<section anchor="multiple-hcga-addresses-per-agent"><name>Multiple HCGA Addresses per Agent</name>

<t>The HCGA prefix depends on the public key and prefix modifier but not on
the modifier, while the IID depends on all of these. An agent can therefore
derive multiple valid addresses within the same /64 by varying the
modifier (RFC 3972 places no constraint on how the modifier is chosen
beyond the Hash2 condition, which is vacuous under this profile). This
enables:</t>

<t><list style="symbols">
  <t>Per-connection pseudonymity: each outbound connection uses a different
IID (different modifier), making traffic correlation within the /64
more difficult for passive observers.</t>
  <t>Connection-level accountability: the registry maps the HCGA prefix
to the agent; the specific IID is per-connection context.</t>
</list></t>

<t>Multiple addresses per agent do not affect forensic accountability: any
address in the agent's /64 is attributable to the same hardware key via
the prefix verification step.</t>

</section>
<section anchor="interaction-with-rfc-3972-cga-parameters"><name>Interaction with RFC 3972 CGA Parameters</name>

<t>HCGA reuses the <xref target="RFC3972"></xref> CGA parameter structure (modifier, subnet prefix,
collision count, public key) directly, with one substitution:</t>

<t><list style="symbols">
  <t><strong>modifier</strong>: unchanged, per RFC 3972</t>
  <t><strong>subnet prefix</strong>: set to <spanx style="verb">hcga_prefix</spanx> (the derived /64), not the
aggregate -- this allows RFC 4982-capable verifiers to validate the IID
given the /64, without knowledge of HCGA</t>
  <t><strong>collision count</strong>: unchanged, per RFC 3972</t>
  <t><strong>public key</strong>: unchanged, per RFC 3972</t>
</list></t>

<t>The prefix modifier is not carried in the CGA Parameters structure and is
conveyed separately (§2). A verifier given <spanx style="verb">(hcga_address, cga_params)</spanx>
that implements <xref target="RFC4982"></xref> and recognizes Sec value TBD1 will correctly
validate the IID with <spanx style="verb">hcga_prefix</spanx> as the subnet prefix. A verifier that
implements only <xref target="RFC3972"></xref>, or that does not recognize TBD1, will reject the
address, because the hash function differs from SHA-1. No verifier can
check that <spanx style="verb">hcga_prefix</spanx> is itself derived from the public key without
the prefix modifier and this specification.</t>

</section>
<section anchor="routing-considerations"><name>Routing Considerations</name>

<section anchor="aggregate-announcement"><name>Aggregate Announcement</name>

<t>The autonomous system operating the ANCHOR deployment MUST announce the
aggregate prefix A via BGP <xref target="RFC4271"/>, covered by an RPKI ROA <xref target="RFC9582"/>.
Per-/64 routes are not announced externally; they remain internal to the
cluster or network segment. External observers see only the aggregate,
as with any provider-independent prefix assignment.</t>

</section>
<section anchor="intra-cluster-routing"><name>Intra-Cluster Routing</name>

<t>Within a Kubernetes cluster or datacenter fabric, the CNI plugin (Calico,
Cilium with BGP enabled) installs per-/64 routes for active agents. Each
agent's HCGA /64 is programmed as a host route into the pod's network
namespace.</t>

</section>
<section anchor="rpki-alignment"><name>RPKI Alignment</name>

<t>The aggregate ROA covers all HCGA addresses by containment. No per-/64 ROA
is needed -- RPKI operates at the granularity of BGP announcements, and
per-/64 routes are never advertised externally. The full accountability
chain ROA(aggregate) -&gt; ASN -&gt; aggregate -&gt; HCGA /64 -&gt; IID is verifiable
without any additional RPKI infrastructure.</t>

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

<section anchor="scope-and-threat-model"><name>Scope and Threat Model</name>

<t>HCGA binds an address to a public key; it does not by itself prove that a
given packet was sent by the holder of that key. As with RFC 3972 (see
RFC 3972 §7.1), an HCGA address is only meaningful as evidence when
combined with a signature made with the corresponding private key, or with
network-layer enforcement that prevents other nodes from sourcing packets
from that address. Both are the responsibility of the surrounding
architecture (Section 1). An HCGA address presented without such a
binding is a
claim, not evidence.</t>

<t>Verification (§5.6) requires the modifier, collision count, public key and
prefix modifier. HCGA does not specify how a verifier obtains these; in
<xref target="RFC3971"></xref> they are carried in neighbor discovery options and are therefore
available only on-link. A forensic verifier operating off-link depends on
the surrounding architecture to have recorded the parameters at generation
time. Without such a record, no verification is possible and the address
carries no more information than any other address in the aggregate.</t>

</section>
<section anchor="subnet-bit-security"><name>Subnet Bit Security</name>

<t>The subnet bits are the leftmost n = 64-L bits of a SHA-256 output. The
binding between a /64 prefix and a key is therefore n bits strong, not 256
bits strong. In particular, for a /48 aggregate an attacker who wishes to
derive a valid HCGA address inside a victim's /64 needs only to generate
candidate key pairs (or candidate prefix modifiers for a key of their own)
until the 16-bit subnet hash matches -- approximately 2^16 trials, which is
trivial. The subnet bits do not prevent a second key from occupying a
given /64; they only make it impossible for an address to be a valid
HCGA address without some key that hashes to its prefix.</t>

<t>Consequently, the forensic claim "this /64 belongs to key K" cannot be made
from the address alone. It can only be made by a verifier that holds a
record, established at generation time by the surrounding architecture,
of which key (and prefix modifier) was admitted to that /64, and that
enforces exclusivity (§5.7). The value HCGA adds over an opaque registry
mapping is that the record is self-checking: a mismatch between the
recorded parameters and the address is detectable, so a registry entry
cannot be silently re-pointed at a different key. The subnet bits also
allow per-/64 policy to be applied before any registry lookup, at the cost
of the squatting exposure above.</t>

<t>The same bound applies to the IID: with security parameter 0 the IID is 59
bits of hash output and an attacker can find a key producing any chosen IID
within a chosen /64 in roughly 2^59 trials, as for an RFC 3972 address with
Sec = 0.</t>

<t>The subnet bits expose partial information about the public key --
specifically, a truncated hash output -- which is equivalent in kind to
what the RFC 3972 IID already reveals. No additional key material is
exposed.</t>

</section>
<section anchor="privacy-implications"><name>Privacy Implications</name>

<t>Compared to RFC 3972 CGA, HCGA addresses are more linkable in one respect:
the /64 subnet is stable across IID rotations (modifier changes). Any two
HCGA addresses that share the same /64 are attributable to the same hardware
key, even without inspecting the IID. This is intentional for agentic
accountability, but it may be inappropriate for privacy-sensitive deployments.
Operators MUST assess this tradeoff before using HCGA for traffic involving
personal data.</t>

<t>Multiple HCGA addresses per agent (Section 6) provide IID-level pseudonymity
but
not /64-level pseudonymity -- the /64 is permanently bound to the hardware
key. This linkability is stronger than that of temporary addresses <xref target="RFC8981"/>,
which rotate both the IID and (in some deployments) the prefix, and stronger
than semantically opaque stable IIDs <xref target="RFC7217"/>, which hide structure but
do not rotate. Operators should weigh RFC 8981 semantics carefully before
deploying HCGA where individual privacy is a concern.</t>

</section>
<section anchor="ipr-status-of-rfc-3972"><name>IPR Status of RFC 3972</name>

<t>RFC 3972 carries IETF IPR disclosures (ipr/676, KAME). Any standards-track
work extending RFC 3972 must address these encumbrances. This document takes
no position on IPR; that determination belongs to the IETF Standards Process.</t>

</section>
<section anchor="hardware-root-of-trust-scope"><name>Hardware Root of Trust Scope</name>

<t>The security properties of HCGA depend on the hardware root of trust used
for the underlying key pair:</t>

<t><list style="symbols">
  <t><strong>Hardware TPM 2.0 (physical):</strong> non-extractable private key; maximum
binding strength</t>
  <t><strong>vTPM (VM-bound):</strong> bounded by hypervisor isolation; attestation via TDX/SEV-SNP</t>
  <t><strong>SPIFFE SVID key pair:</strong> software-generated, rotated; no direct hardware binding;
chain via SPIRE <xref target="SPIRE"/> tpm_devid node attestation</t>
  <t><strong>Software key (stub mode):</strong> no hardware binding; development use only</t>
</list></t>

<t>HCGA verification does not encode attestation tier; the mechanism binds
an address to a public key regardless of how that key is protected. Relying
parties SHOULD obtain and verify attestation evidence alongside the HCGA
address to determine the strength of the underlying key binding. The RATS
architecture <xref target="RFC9334"/> provides the framework for remote attestation
evidence conveyance; <xref target="RATS-KEY-ATTEST"/> addresses hardware key attestation
for HSMs and TPMs. For SPIFFE-chained deployments, <xref target="TRANSITIVE-ATTEST"/>
addresses transitive attestation across workload boundaries.</t>

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

<section anchor="cga-sec-value"><name>CGA SEC Value</name>

<t><xref target="RFC4982"></xref> establishes the "CGA SEC" registry, in which each Sec value
identifies a hash function and a security parameter. This document
requests the assignment of one value from that registry:</t>

<texttable>
      <ttcol align='left'>Sec value</ttcol>
      <ttcol align='left'>Hash function</ttcol>
      <ttcol align='left'>Security parameter</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>TBD1</c>
      <c>SHA-256</c>
      <c>0</c>
      <c>This document</c>
</texttable>

<t>The assigned value is to replace "TBD1" throughout this document. The
public key type is not encoded in the Sec value; this profile uses ECDSA
P-256 keys as described in §5.1.</t>

</section>
<section anchor="cga-parameters-extension"><name>CGA Parameters Extension</name>

<t>No new CGA Parameters extensions are required. This document passes
<spanx style="verb">hcga_prefix</spanx> as the <spanx style="verb">subnet_prefix</spanx> field in the existing CGA Parameters
structure, and conveys the prefix modifier outside that structure (§2).</t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<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="RFC4291">
  <front>
    <title>IP Version 6 Addressing Architecture</title>
    <author fullname="R. Hinden" initials="R." surname="Hinden"/>
    <author fullname="S. Deering" initials="S." surname="Deering"/>
    <date month="February" year="2006"/>
    <abstract>
      <t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol. The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
      <t>This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture". [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4291"/>
  <seriesInfo name="DOI" value="10.17487/RFC4291"/>
</reference>
<reference anchor="RFC8200">
  <front>
    <title>Internet Protocol, Version 6 (IPv6) Specification</title>
    <author fullname="S. Deering" initials="S." surname="Deering"/>
    <author fullname="R. Hinden" initials="R." surname="Hinden"/>
    <date month="July" year="2017"/>
    <abstract>
      <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="86"/>
  <seriesInfo name="RFC" value="8200"/>
  <seriesInfo name="DOI" value="10.17487/RFC8200"/>
</reference>
<reference anchor="RFC3972">
  <front>
    <title>Cryptographically Generated Addresses (CGA)</title>
    <author fullname="T. Aura" initials="T." surname="Aura"/>
    <date month="March" year="2005"/>
    <abstract>
      <t>This document describes a method for binding a public signature key to an IPv6 address in the Secure Neighbor Discovery (SEND) protocol. Cryptographically Generated Addresses (CGA) are IPv6 addresses for which the interface identifier is generated by computing a cryptographic one-way hash function from a public key and auxiliary parameters. The binding between the public key and the address can be verified by re-computing the hash value and by comparing the hash with the interface identifier. Messages sent from an IPv6 address can be protected by attaching the public key and auxiliary parameters and by signing the message with the corresponding private key. The protection works without a certification authority or any security infrastructure. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3972"/>
  <seriesInfo name="DOI" value="10.17487/RFC3972"/>
</reference>
<reference anchor="RFC4581">
  <front>
    <title>Cryptographically Generated Addresses (CGA) Extension Field Format</title>
    <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
    <author fullname="J. Arkko" initials="J." surname="Arkko"/>
    <date month="October" year="2006"/>
    <abstract>
      <t>This document defines a Type-Length-Value format for Cryptographically Generated Address (CGA) Extensions. This document updates RFC 3972. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4581"/>
  <seriesInfo name="DOI" value="10.17487/RFC4581"/>
</reference>
<reference anchor="RFC4982">
  <front>
    <title>Support for Multiple Hash Algorithms in Cryptographically Generated Addresses (CGAs)</title>
    <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
    <author fullname="J. Arkko" initials="J." surname="Arkko"/>
    <date month="July" year="2007"/>
    <abstract>
      <t>This document analyzes the implications of recent attacks on commonly used hash functions on Cryptographically Generated Addresses (CGAs) and updates the CGA specification to support multiple hash algorithms. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4982"/>
  <seriesInfo name="DOI" value="10.17487/RFC4982"/>
</reference>
<reference anchor="RFC5480">
  <front>
    <title>Elliptic Curve Cryptography Subject Public Key Information</title>
    <author fullname="S. Turner" initials="S." surname="Turner"/>
    <author fullname="D. Brown" initials="D." surname="Brown"/>
    <author fullname="K. Yiu" initials="K." surname="Yiu"/>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <author fullname="T. Polk" initials="T." surname="Polk"/>
    <date month="March" year="2009"/>
    <abstract>
      <t>This document specifies the syntax and semantics for the Subject Public Key Information field in certificates that support Elliptic Curve Cryptography. This document updates Sections 2.3.5 and 5, and the ASN.1 module of "Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 3279. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5480"/>
  <seriesInfo name="DOI" value="10.17487/RFC5480"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC3971">
  <front>
    <title>SEcure Neighbor Discovery (SEND)</title>
    <author fullname="J. Arkko" initials="J." role="editor" surname="Arkko"/>
    <author fullname="J. Kempf" initials="J." surname="Kempf"/>
    <author fullname="B. Zill" initials="B." surname="Zill"/>
    <author fullname="P. Nikander" initials="P." surname="Nikander"/>
    <date month="March" year="2005"/>
    <abstract>
      <t>IPv6 nodes use the Neighbor Discovery Protocol (NDP) to discover other nodes on the link, to determine their link-layer addresses to find routers, and to maintain reachability information about the paths to active neighbors. If not secured, NDP is vulnerable to various attacks. This document specifies security mechanisms for NDP. Unlike those in the original NDP specifications, these mechanisms do not use IPsec. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3971"/>
  <seriesInfo name="DOI" value="10.17487/RFC3971"/>
</reference>
<reference anchor="RFC4271">
  <front>
    <title>A Border Gateway Protocol 4 (BGP-4)</title>
    <author fullname="Y. Rekhter" initials="Y." role="editor" surname="Rekhter"/>
    <author fullname="T. Li" initials="T." role="editor" surname="Li"/>
    <author fullname="S. Hares" initials="S." role="editor" surname="Hares"/>
    <date month="January" year="2006"/>
    <abstract>
      <t>This document discusses the Border Gateway Protocol (BGP), which is an inter-Autonomous System routing protocol.</t>
      <t>The primary function of a BGP speaking system is to exchange network reachability information with other BGP systems. This network reachability information includes information on the list of Autonomous Systems (ASes) that reachability information traverses. This information is sufficient for constructing a graph of AS connectivity for this reachability from which routing loops may be pruned, and, at the AS level, some policy decisions may be enforced.</t>
      <t>BGP-4 provides a set of mechanisms for supporting Classless Inter-Domain Routing (CIDR). These mechanisms include support for advertising a set of destinations as an IP prefix, and eliminating the concept of network "class" within BGP. BGP-4 also introduces mechanisms that allow aggregation of routes, including aggregation of AS paths.</t>
      <t>This document obsoletes RFC 1771. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4271"/>
  <seriesInfo name="DOI" value="10.17487/RFC4271"/>
</reference>
<reference anchor="RFC7217">
  <front>
    <title>A Method for Generating Semantically Opaque Interface Identifiers with IPv6 Stateless Address Autoconfiguration (SLAAC)</title>
    <author fullname="F. Gont" initials="F." surname="Gont"/>
    <date month="April" year="2014"/>
    <abstract>
      <t>This document specifies a method for generating IPv6 Interface Identifiers to be used with IPv6 Stateless Address Autoconfiguration (SLAAC), such that an IPv6 address configured using this method is stable within each subnet, but the corresponding Interface Identifier changes when the host moves from one network to another. This method is meant to be an alternative to generating Interface Identifiers based on hardware addresses (e.g., IEEE LAN Media Access Control (MAC) addresses), such that the benefits of stable addresses can be achieved without sacrificing the security and privacy of users. The method specified in this document applies to all prefixes a host may be employing, including link-local, global, and unique-local prefixes (and their corresponding addresses).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7217"/>
  <seriesInfo name="DOI" value="10.17487/RFC7217"/>
</reference>
<reference anchor="RFC8981">
  <front>
    <title>Temporary Address Extensions for Stateless Address Autoconfiguration in IPv6</title>
    <author fullname="F. Gont" initials="F." surname="Gont"/>
    <author fullname="S. Krishnan" initials="S." surname="Krishnan"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <author fullname="R. Draves" initials="R." surname="Draves"/>
    <date month="February" year="2021"/>
    <abstract>
      <t>This document describes an extension to IPv6 Stateless Address Autoconfiguration that causes hosts to generate temporary addresses with randomized interface identifiers for each prefix advertised with autoconfiguration enabled. Changing addresses over time limits the window of time during which eavesdroppers and other information collectors may trivially perform address-based network-activity correlation when the same address is employed for multiple transactions by the same host. Additionally, it reduces the window of exposure of a host as being accessible via an address that becomes revealed as a result of active communication. This document obsoletes RFC 4941.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8981"/>
  <seriesInfo name="DOI" value="10.17487/RFC8981"/>
</reference>
<reference anchor="RFC9334">
  <front>
    <title>Remote ATtestation procedureS (RATS) Architecture</title>
    <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
    <author fullname="D. Thaler" initials="D." surname="Thaler"/>
    <author fullname="M. Richardson" initials="M." surname="Richardson"/>
    <author fullname="N. Smith" initials="N." surname="Smith"/>
    <author fullname="W. Pan" initials="W." surname="Pan"/>
    <date month="January" year="2023"/>
    <abstract>
      <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9334"/>
  <seriesInfo name="DOI" value="10.17487/RFC9334"/>
</reference>
<reference anchor="RFC9582">
  <front>
    <title>A Profile for Route Origin Authorizations (ROAs)</title>
    <author fullname="J. Snijders" initials="J." surname="Snijders"/>
    <author fullname="B. Maddison" initials="B." surname="Maddison"/>
    <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
    <author fullname="D. Kong" initials="D." surname="Kong"/>
    <author fullname="S. Kent" initials="S." surname="Kent"/>
    <date month="May" year="2024"/>
    <abstract>
      <t>This document defines a standard profile for Route Origin Authorizations (ROAs). A ROA is a digitally signed object that provides a means of verifying that an IP address block holder has authorized an Autonomous System (AS) to originate routes to one or more prefixes within the address block. This document obsoletes RFC 6482.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9582"/>
  <seriesInfo name="DOI" value="10.17487/RFC9582"/>
</reference>

<reference anchor="WIMSE-ARCH" >
  <front>
    <title>Workload Identity in a Multi System Environment (WIMSE) Architecture</title>
    <author initials="J." surname="Salowey">
      <organization></organization>
    </author>
    <author initials="Y." surname="Rosomakho">
      <organization></organization>
    </author>
    <author initials="H." surname="Tschofenig">
      <organization></organization>
    </author>
    <date year="2026"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-arch-08"/>
</reference>
<reference anchor="TRANSITIVE-ATTEST" >
  <front>
    <title>Transitive Attestation for Sovereign Workloads</title>
    <author initials="G." surname="Mandyam">
      <organization></organization>
    </author>
    <author initials="J." surname="Walker">
      <organization></organization>
    </author>
    <date year="2026"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-mw-wimse-transitive-attestation-00"/>
</reference>
<reference anchor="RATS-KEY-ATTEST" >
  <front>
    <title>Evidence Encoding for Hardware Security Modules</title>
    <author initials="J." surname="Fiset">
      <organization></organization>
    </author>
    <author initials="M." surname="Ounsworth">
      <organization></organization>
    </author>
    <author initials="H." surname="Tschofenig">
      <organization></organization>
    </author>
    <author initials="H." surname="Birkholz">
      <organization></organization>
    </author>
    <author initials="M." surname="Wiseman">
      <organization></organization>
    </author>
    <author initials="N." surname="Smith">
      <organization></organization>
    </author>
    <date year="2026"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-rats-pkix-key-attestation-07"/>
</reference>
<reference anchor="WIMSE-AIMS" >
  <front>
    <title>AI Identity Management System</title>
    <author initials="P." surname="Kasselman">
      <organization></organization>
    </author>
    <author initials="J." surname="Lombardo">
      <organization></organization>
    </author>
    <author initials="Y." surname="Rosomakho">
      <organization></organization>
    </author>
    <author initials="B." surname="Campbell">
      <organization></organization>
    </author>
    <author initials="N." surname="Steele">
      <organization></organization>
    </author>
    <author initials="A." surname="Parecki">
      <organization></organization>
    </author>
    <date year="2026"/>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-aims-00"/>
</reference>
<reference anchor="ANCHOR-PoC" target="https://github.com/buraglio/anchor">
  <front>
    <title>ANCHOR: Agent Network Cryptographic Hardware Origin Recording</title>
    <author initials="N." surname="Buraglio" fullname="Nick Buraglio">
      <organization></organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="SPIRE" target="https://github.com/spiffe/spire">
  <front>
    <title>SPIRE</title>
    <author >
      <organization>SPIFFE Project</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

</references>


<?line 641?>

<section anchor="appendix-a-example-hcga-derivation-ecdsa-p-256-48-aggregate"><name>Appendix A: Example HCGA Derivation (ECDSA P-256, /48 Aggregate)</name>

<t>This example uses Sec = 3 as an assumed value for TBD1; the vector will be
regenerated once IANA assigns the value. The key is derived from a fixed
scalar so that the vector is reproducible; it MUST NOT be used in
production.</t>

<t>Given:
- aggregate: <spanx style="verb">3fff:1:cafe::/48</spanx> (L = 48, n = 16)
- ECDSA P-256 private scalar d (hex):
  <spanx style="verb">3c7d964d5fe2da80544713c9312c5203ac4569111f3f063c6e2dacd5721acb01</spanx>
- public key, SPKI DER (91 bytes, hex):
<spanx style="verb">
3059301306072a8648ce3d020106082a8648ce3d03010703420004d93d035f38
f4414da99b65c170f24a0d72e962a84f6b42f2f32fa06bf99d4b2468776b5fb7
bb958b60aa9e0b4c7b60ce82b0e9a1dbd2baf5457e850b31f93435
</spanx>
- prefix_modifier: 16 zero bytes
- modifier: 16 zero bytes
- collision_count: 0x00</t>

<t>Step 1 -- Subnet bits (16 bits for /48 -&gt; /64):
<spanx style="verb">
aggregate_bytes = 3f ff 00 01 ca fe 00 00
subnet_hash = SHA-256(aggregate_bytes || prefix_modifier || SPKI_DER)
            = 6633525504192ef7d5fe7fef4de9fe103d499fca1e1c5cb3d71c2e462e620c87
subnet_bits = 0x6633
</spanx></t>

<t>Step 2 -- HCGA prefix:
<spanx style="verb">
hcga_prefix = 3fff:1:cafe:6633::/64
</spanx></t>

<t>Step 3 -- IID:
<spanx style="verb">
hcga_prefix_bytes = 3f ff 00 01 ca fe 66 33
CGA_Params = modifier[16] || hcga_prefix_bytes[8] || 0x00 || SPKI_DER
Hash1[:8]  = b7 b2 a1 62 23 12 55 ab
IID[0]     = (0xb7 &amp; 0x1C) | (3 &lt;&lt; 5) = 0x74
IID        = 74 b2 a1 62 23 12 55 ab
</spanx></t>

<t>Step 4 -- HCGA address:
<spanx style="verb">
3fff:1:cafe:6633:74b2:a162:2312:55ab
</spanx></t>

<t>Verification:
1. Aggregate check: <spanx style="verb">3fff:1:cafe::/48</spanx> -&gt; matches operator's /48
2. Subnet check: <spanx style="verb">SHA-256(aggregate_bytes || prefix_modifier || SPKI_DER)[0:2] = 0x6633</spanx>
   -&gt; matches bits 48-63
3. IID check (RFC 3972/4982, Sec = 3 -&gt; SHA-256, security parameter 0):
   subnet prefix in CGA_Params = bits 0-63 ; collision count 0 ;
   Hash1 = <spanx style="verb">b7b2a162231255ab</spanx> matches <spanx style="verb">74b2a162231255ab</spanx> ignoring bits 0-2
   and 6-7 ; Hash2 requires 0 leading zero bits</t>

</section>
<section anchor="appendix-b-go-implementation-sketch"><name>Appendix B: Go Implementation Sketch</name>

<t>```go
// DeriveHCGAPrefix derives the /64 HCGA prefix from an aggregate, a prefix
// modifier and a public key. aggregate must be a /L prefix with L &lt; 64.
// Returns the /64 HCGA prefix.
func DeriveHCGAPrefix(aggregate netip.Prefix, prefixModifier [16]byte, pub *ecdsa.PublicKey) (netip.Prefix, error) {
    L := aggregate.Bits()
    if L &gt;= 64 {
        return netip.Prefix{}, errors.New("hcga: aggregate must be shorter than /64")
    }
    pubDER, err := x509.MarshalPKIXPublicKey(pub)
    if err != nil {
        return netip.Prefix{}, err
    }
    aggBytes := aggregate.Masked().Addr().As16()</t>

<figure><artwork><![CDATA[
h := sha256.New()
h.Write(aggBytes[:8])
h.Write(prefixModifier[:])
h.Write(pubDER)
subnetHash := h.Sum(nil)

var prefixBytes [16]byte
copy(prefixBytes[:], aggBytes[:L/8])

// Fill subnet bytes from hash
if L%8 == 0 {
    for i := L / 8; i < 8; i++ {
        prefixBytes[i] = subnetHash[i-L/8]
    }
} else {
    shift := uint(L % 8)
    mask := byte(0xFF) << (8 - shift)
    prefixBytes[L/8] = (aggBytes[L/8] & mask) | (subnetHash[0] >> shift)
    for i := L/8 + 1; i < 8; i++ {
        j := i - L/8 - 1
        hi := subnetHash[j] << (8 - shift)
        lo := subnetHash[j+1] >> shift
        prefixBytes[i] = hi | lo
    }
}
// Zero the IID portion (bits 64-127)
for i := 8; i < 16; i++ {
    prefixBytes[i] = 0
}

addr, ok := netip.AddrFromSlice(prefixBytes[:])
if !ok {
    return netip.Prefix{}, errors.New("hcga: prefix build failed")
}
return netip.PrefixFrom(addr.Unmap(), 64), nil } ```
]]></artwork></figure>

</section>
<section numbered="false" anchor="acknowledgements"><name>Acknowledgements</name>

<t>The authors would like to thank Fern Siedel and Kapil Agrawal for valuable input.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAJDS4GoAA6V97XYTSZL2/7yKXPfZHYmRZEm2ZVsMfcYYaDxtwIuZ7p2X
w+JSKSXVIFWpq0oYTcP1zH3Mlb3xRGRmZZVlmunlnG5sqSo/IuPziYik2+2q
MimXZqz3nicmj/J4kcTRUp/n23WZzfNozb8vt/oHk9L3pZnqs+k0N0VhCt16
fv7DWXtPRZNJbj7+38aI6fN5lm/HuiinSk2zOI1WtK5pHs3K7mSTR/NlknVH
qyjtLuJ51F3SC0Wpis1klRRFkqXldk3PXzx980zr73S0LDJaUZJOzdrQ/9Jy
r6P3zDQpszyJlvjl4uwx/ZXl9NPrN8/2VLpZTUw+VlMaeaziLC1MWmyKsS7z
jVG0vwMV5SaiOV6+UbdZ/mGeZ5v1WGNN6oPZ0kfTsdJdjfXh72T9cYS/L9LS
5Kkpu0+wGfXRpBuaQOvwfa1l/T/TuEk61z/gO/p0FSXLMY/058SUs16Wz+lT
EHmsF2W5Lsb7+7TgqMyj+IPJe+6h/dv5PgbejybZptzHbEm52EzG2tFy/z7S
0rNC3GoGebcXZ6v9335dRZtykeUgBQ2l9WyzXMphvkziD/qxfYO/o5VGafKP
qKQDHOunxB/zrb6OE5PGxBwvTQk685NGKOHm+/Msy2+jfEq0Wi+j1PSIvncn
/EtWLPRjetFsd0z36qPJiS2v1yZOZkmsn2zprSQuwvn+TiP8eWaWy2UyX5Sg
gFJplq9oiI98iK+fnQ8Hg1P748ng+ND+eDg8HbhPh/2+/fHg9HjoHjg6cQ8c
np64T48OT+hZlaSzxiz0pn986H88Hg6O3SynfrzTgwO3jNMjGfrnixfXT7tn
r8+fj3l/Vu7Bb8ssmuoLyEhSbnWS6ki/2CzLRF9vi9Ks6Fg+JnmWrugB3eJx
2voMYl6auNzkhsfzh85/iPlTkpy/9PR1tMxuLfn953/r6ddZka2iD4us/s3z
nn5TxItsZtJkzl8VJk9MAXq4wevy5HQEOL97m6wK04V4dPsn/DhLsx72hySK
+s3rs5fXF28ufiJKvHnz9PpNjRZv8igtEpBcn5UQAOYTTQehrzPiFZPMU0+w
4v5d/9DTL6J0uo1Wd6jxc7QkKf239rW6tbsq/fK6UbW8br9/d5+vz95cd398
+rddu3z6MZlCvOhY4wzywxt8TrJE8mT0tYk3OfjgRTbdLM1XtvmXXveqp58l
BSQv/OJFT7/apAWJbrn4rdMNv3qc5MQPy3/cGe1nmkOUZPD5S+KtVWJn+LeY
hGxQ0V1/SD51SWvXaXl8l5ZWcOj/NTKeXVQiQ6cdzQ3Lh4jM/UQjiv0YkeVb
3tkPccdltprQOWTfKiyPe/o8Wq0npJ7u0qY0ZmnqH5/19BWdcfwh+d2SRf/f
yXFnL8+fv3rdvcrOa1Tak89p6jmoYxV63TeoeO9VnsxJ/bw2ccaafW8nHe+z
JbX10AqifG5+w4ZFKTEjxPH66uL109rK+ZOd85MR4a+fPXuqr/Ls76QEf2vC
Yp3MZgZ/kbZUXXK78D8dTQrY7VIpUtQapkFPzSxJyfR9o/cE56kDlX1Ljy10
uTCKz3AWkYALf87IKdOti4snbZ3NdJTqi6uPIx3JGDopaMqcdMpUz/JsRao/
DmdW681kSUdEgkKiuzB6f3SoyeciHtHrnNb6CSMUm/V6mdAQk61O7RETW+UR
bW/DJoLmnapFVOg0q0+gc7Nk2SsWyVqXGbbgZsPasnjDclWIkSZ9VHcyfziz
LmQHWzOfSvLZoLRpJE/TchGV7BDarRZ6HeUlUUNhMlo7EYi2NUnKQtOp2KmE
6niCv5jQvoxJ+YPQjaBFCCEUbZG/BYnI6UqnUb7FeExXfFEQ4+omQekUyNaC
irR+eyrqdpEVhv0YPRiedGkB+mO03Bh+jHZBJ7xK0qQoaaTZJo3ZTuF0g+FV
izxKu4uFlbAur0tola3BTlneJU+3zLPlks4vms9zMycms3vq8LnRgeoVmQpw
UtHTILcsBMxrokmyhBIkPl9nKc4qIQ4kl3vKhmVDG7klSYBboZYQkVxHcUzr
KN2bUeBLyGFZhiqwDx0o6A5OjqhI+1dT2n6eTDbyOYhfZJs8Jh1lWdvAhYpZ
LT+0PBBOlIAZKYCwjDXVC7LwciZxtHZrw0rIjhX61jlKjsEbm0hStYLT1KW9
R0QEUzlNEBASTuL+HzcT1q+0s3i5IUuRFx0SXZpY1eWlSzaCvA1alRwEeDbP
YLkhQXRyXVLoZQQzXhenCUU8pDl7gZZZJdMpWQL1HdR7Tlad2SXQOb/+ah3T
L1/cLDjdlYkXxObFCsKEcb3y4Bfg1NILxKnlHwrlqWKJT6+EzAjNwMIHfwOy
MDpkrt6lrJQoK54ETjRNsks1EVOTc09MX9cYlgBE/2hC7ov4M4YsD/nvE9L1
T5IihjO39dvGBGAfepmYlZWYWC16ojJreKjgudZ5siLRVsRdUDZxkxNwcNGy
FxC4pLCxLLxysIozEhECG0xZc+VQJkm63pSyYUvTBmuQy0ViBbIXLFg0CNnw
+dJ0KHTGnln+hKgZhO6W3AMSClEYxGqehTtWKopis1qzCiHva1rIBNAKEZmi
PPkHFAOpAeLnchMt+XcnDcS+C3LviZ4dSxtnEzwDEzmhbUj0DKwd894y2sIo
nb+80Ovlhmx+h+Qh20wd++Ucly8oIs4/JkWWt/mAdtkPtct+uNX9geyb9dHo
OJg95tGaYuoSksfqKYJfcvcMSVtB6xER4pzEVd9G24KiskFPP3jAsdGa6Mzv
FpBGu+/egwfEhNmmoNUWrI/t6E5YC5qbGITUMXtm7uSYK1qmN++RIiOdv87w
OuKwNCOJF3vbFt1EsqGh+ujFTVIsxEGvxreqtjqLDoXMZe1sSvI+Z6LA4yzK
yasjWtJJT2WkutnOSSbJQxFOSzMvXpDvdMuGNIk3pNcrBQlZVGoIUl2RomIa
6DzbYMmapkrxOI6EqPXafozjXWUpozP0q9gmmp49K7vw8FV9MdMmglLl0cEZ
MNLZbVpnD1i/buJUC++QaN3xyylFScTEoXGUk1JY+xWvM9JdW944PVx9gTGI
L2bJfCPcDBsf0NcgrDIi7QH3sdVk/4TO1muGplpErJyLw2E1W6AwZB61Z/0v
PLX3Nb+ksub3uCbqPtfEqTpitjteCgSjuySRXzYkcWEdsy0JSrfpLPozkIGF
xJEwpjsMHrRn3wWfe2OEpzzNrImxa3AM6Rmf3QfMCZHPyCNfOOVU86cCB7jh
UXU0qTNaKuvSwLtib9F5UqCSjPrNflRtF8o5VNafshxfOJo4eyqa0ponIoXo
1EiEd0VaCA6GgjTCY4oljJWXvEA6LqwseuWRYC6OcFXNOfr11wovsuYRT349
6PUv0f+/fOnYmMQRGmEUa0MRGgwpkZVlWDA8jS8yxiYsYsrTmxMy2MKPV0IQ
J08J1KQJXE/2gb/By7QEhQNINp8YAxqfLI3YknuDD5rNxgRuVyy9YtQwpnCO
3aLjHbKoF9bMmkJYYZoZnt0OTaxEtmCT55BN4mZ11yVuRW3rCVsvJBBWbKZk
DxGvYOpWYYz+1z9Pe0ftjmpN2tBYH81WXmXSeUeaoshqrI539DtO67gP2qTz
leyP3dZW3GbhQzQVfzDQWLmmoLTgM6siuQ7bWfMpArfSh7TH+UJZRk6tWwaT
tsMtg4HWjHvBCe/y700+56EiEEpI25q2netfNEMCCqKSKZghMJNeVnsKesd7
dRJwScjMFAs0ButQ8W3Y3zDRBzoYq7ILGqnhOVo+FaELjrYHr/wcR5NaVqcN
vGFVlC2z+VbxknDGSC4Ueu/FX6/fIHeBv/XLV/zz66f//deL10+f4Ofr52eX
l/4HeULRL6/+emm/x0/Vm+evXrx4+vKJvEyf6sZHL87+tidB4N6rqzcXr16e
Xe6xc1STD+hDxAjW9VzDZWIlRQorphiNfqF3Hp9f6cGh4vMFZE50kUBicHxI
P1MYZOM4FjL5lci5xZEbcjAQQZICp+AsKSma7yiaoFjA5HPkptSDB2de714J
87bO2mNyM85s4GJZms5padI5eTSXunWp/0TRCMXEXpGrSpNjQSkddkxb+JhE
+vEPVz19RqsAR3QdchJ5QAaUsLx1RvwkAbidbKz3D094mdeVAR+zy2gxBjbH
6wwgL8nwpROW6qPRAVEBkSNNq1r9LtJbnxx0A058cf24DSC11Kz7xsA1uvpS
XPoIC6j4namrAmdCZ3G8WW/9dIU+POmODqCbBiM2miT6yylv4SpzoanetwqF
f3P7gel35JnIEVrHceEcWp5TWUXRtJg8iddTTKazwqJjzE3OkI69gtItZ9tJ
YUyJICzBpP9qeBVFGnSyCYNETKNOqEpb11c/XmhJvbQtN67FnVIVuMRkKGyE
enRCmkpoUleYunX1QrivDuLQCgDvpE57zAXYA3Hg7ncUR6FEF+KpbPmx5gL6
tZPW/tc/j3rHbbYtgh7V9boSlQ/2XGbpvAB2gOkqoroFBIanpp0eklWhoRXs
lEXM6p4Yhrqq7AjykLqKU5nTiZwgAXE8cNIrpvSPZntBClrcpydPX3fFZZ5a
uktcFgJl6q0FKN4FpphVkAlzGK+vz/B48bChnjaQzERiGPX0/Il9TBSUZ6i3
Nvn2jpWy3+NjMm5zJk8Q0F9bM3vk8VpHWbit7kDpATLJpDoYbiKlSYpd/Prb
DGDoAg4F2Tz/8r20JI/65uZG0TPvr+ToHnk2ezsYvdOfP1uhei+M8vaEP/Ps
8p5Z/e3gnUWx7R96RMj8ngjynnmfPvKM/l4YXT2ntQ5oyuetagXtt+OTd/zN
kL9pLqf/qd//39NvnKGtFAhH42Am/Py2/45+bdmf/ouGG5y39WcSUBPrP/1J
H7WrnXwn2qvfHerxI5zNQ/lgxPJ7rFub/XkbX/WZiooBN31TI9iNbp2Q/ivJ
j2lDnDheSHIy6ickJnDM78RjHX1Dc91AQiJ9wPJduOSZl0LteNt6G0szK1dZ
UdZiPNqlRVrpl8HoE/Z458EbpvUNm5jc/LJJctESZHX/YfJMt/CyOwVFW0iA
XUAA6Dk6/GQpYsEYjwUTGqqQwuEPlpdZUxFNO2oAr2voPOZwUHptuhFvLHSI
nQ86i5Kl6IGfQq8YYQnGoU0Q7xdmrOdkJVJ907JDdHTAZTfQlib+wE6wap4Z
kYE8AXf8ZB0tQf1IuUFssKH1MfkGN0xmfAYyIgycRwBP9I195e3JmBiYDnWe
ChSB4XAe2D/xEc8lh+XWZfzR4ByYD0j1ThOfPHZDiEeZm6gy2MpOS0SqdBzr
K3LgugN+/eb5TY+1E6oE3lVBMeOf0VyimwlAfsAIqj6bjbvpgazk/JC85sNa
F9nd5dyOgsPD7Hn28kzvQUFdPz3fow3MAb1vbeTqVzs8Grn1arjHUOK0ECUL
qQBtVnik5t04sGSDfm9A9pZRph1C1GedfJVnFJKv9HVJDMdxr/oOoHYNOD9z
81w54PycgZ2XmSa7Q66RBFjqonIhiGfXy2zLUH2nCbrAyFhstgdXHXYUO6ug
fMUgHS/dvnNzMJvNxoNxHM0M/TWm4W5qgCgrfA9+ikcJ0E9lFsEQ3G/BjrWD
Z2iUnn4K0IsedUaGkXpneJirLA6mXGTI72Okqddba84CgLs3afLLxgQObBAY
YT6mE6uNIjZplCdktU21hBKzyxg11MQpg2o0xauHzlkmq8RWVrCeje5FJ3en
EpXHJLtddlDqyBJTjrgwQE47HGkzHkeHT8KzYXCMXpOQz+HxS8YSiFsS8w2J
yjr8qRrwJzEmwE9Je4OdLNKp1Jnflws49ApQCntfgl143LhiTAaOsVBiPnpj
EtiAydZhlbQqlyWq4EqHrtlnALTkYOHgYdLYi5QjlZnhSLrChxiG5SOjMTqI
xWcolaKAhtwek/OH/51ddxoIrgdolSB9ic1fwdYgfQBhcYAtA7IlZzx5jYmN
o5iTaJWraK2ntNO4XPIWa9gtraTEefXUxW8l0CzBXJ6Ysy2lm4Q0dkoz0Jcq
TGGlchQPqwyqC2r8sIIbMx/TStdYmWV5DxgwTwtT+ORBlcSHQmQ+UYphhuUy
uwX7I8WDRciMeuXTDv7NOnzLMAFc3CmKDXJmmipreyEeLlsYyTLIEfvBdmgb
CD90fCfAbOnEqkwWuJTkYmtFETxqV1vXKArCAg1lFQKOno+ds3TMnYYB1NT6
Do5068Jsplm6XTFos0iWRuUGeSn3TuQFrA73scFg++TK+wSkY8H0braFESu3
Z5aB+nKG5DYUDGU/eFC5sA8ejLWEEFds8ELojL1bimecz8evuiPAi/Vcfisq
wkD2oRbMjoI6FqZ//XPUlsmZ097fOxDqP0g8OdFvI9+WH0qG8NE1Xr4HCbGJ
aC14iG7twLVlMDgQ76PlHGM5u9/y2kgcHpH3GZ2XvEN+AB53gQ75EbrhFjAO
UL2mW28ePxl0tHUN+NwsbAJ040kFu6pL+uwmpWhBsI4bKEe2BFzPiy0GeIMo
qhtPkPfs3N8o7/2Pd8IRorHYz6xgGfI3C8MiCsev3ZMgzbqo7GY9cgRqNSa0
8VnjaBE71QO0r0Rq74nT2m42XtkjHcz9tj9O37n4yAcTqYAuHAbtgIR0C3Qc
jMgVuwlGvqlHRMiMupjIu+SY86Yno6ZZ2sUD3WgphxtHXK2UsiGGCS4S6F2y
XCftTj0uuklvXMijvLsKzcSoCA5vvYwAx0V8oAFYVTsYGwgIgR8qzlxWARcP
OjHbDMM5cC0lf5t5HUUlhl2feLnxoFVFJOsf8SCSri8MfFVQpMoHFOIEB9rY
j1A8FBjPj92A2isbIK4l20aU9GwFeIoqlwXRBKerUWdTGYtIV9MGHEyWUyEF
xM4G6OGdFdaDFsCCl8t2lMULvIK6bht0OVYLGJo+IG67DFEI+1n6LnxVuPHR
PQqIpBf4j0Mzm1MKzz4lLUOKg7a13HLd2w/ZZcTAmbiUYzw2zyjmcDn5x8yo
JG9gSPJG5vLBONhB70VUfDDTVrsHo4y/isGo1aYwcb1tBaO8HcNy2hHeji/3
T9611QJDke0kIe+9NLf02qL3M4UvplU9yc/ZT2W8F07ix+FXDh2DeAfSjegS
syx615tVK02WbZXM9OV/nuhHj3Rf/8oqY39fPw5EbqyxesvovGPnQkmJPElp
gjEv9b4+IXYkpY+//vhHO5z2eXfZQ/LOqxcs523Sxfb50S/qizZLYj+/kJcN
+R8TgZJZaVcD/oFvhe9sBYu19pBnl56WClV+jZa5SdKydan/k/QFf7GiE8Pn
mKXV//TsWRugECnxrrwjT4UbwHKBKPlT4Q/+i0diYCnYXP+d/v77cKCKXPsn
+o96cA/B/o5HEhihfaxk4L9Y8MvBDH9/t2u9+LPMmo/+cVAt5/6zoSk+08vu
RERcEB6T1xVaS5dbJ41uoREJySv4gfwGG4nvhgs8uKAEuCEtXqETDu+oW3mx
5RtUu+ibQLJvbApaNUpKoVS/BfOsKYnArv77uCesqcc5ndFuop2gm/4mlBIb
tjBlCDneWe8u2PGEZYfCFXqwIE3ns+PW675Ta9dKeqbX2Q1ZRncKHqySnWxV
lZQh3csYopPN2hnZPMhNg6jOKahQ8Saa2Op3tKCHgW9rkUdv78lmG1Oz+KCy
C6pCKAuLqOG68AripQG00UGCmQNEdqr9msi4PTZxxMZxJ8oFBzSLE66rZp7n
k0uAfNbrNRzGV0F7rcHoU19DA9MamIyehnyWBR1cwZWlnABHcltVFp52kFZl
tbQyZF64JsGYqbg3QR6hTFbGlbAlrqoNATsdVli+SSQGBaTOSLAByVKRcHJJ
BoKxugSS6BVlUrIicNLr4uPltmsxAhfwBt6CjWDvcxccvz0KpVSPxzhfEYqq
sAjEa/IpKZ4xxQ6PGdvFPi+7g/E3VdvoFiJz4onHP1x1ff627Qa7xGCjg3HF
g6PD7qVnQa1v7jjtO3z1ug5p3yAERjuJwwfCHKedmKSMZh4Mj8eerfZxMMzx
9derOoyuhHSoumTS17D0K5deUuoHC6KHtA+R9E5zA4DWrVqqnrpRDv8Kswkd
/fUUqrjlPhJ2hZJVNp6hcuQBGSO0aMkkPFnOcIRrv0GZZszdPWGV1R+Ku6li
7cQictiQq0/DtB2YN1F6GGxiUOHRwPbCsh1Xu1gl6avl+2RCGPSw+YRuG1aA
TJVkx5w3DdLfeGA2hA98/VBIH8uswpg7KRTQsTU66F62wyCHNnOAzbBOdbuw
9OCHama/Xr5U5S4zblW6n7eI+8W273YYnNblWk6veL/iPNyTLNE+WUIDyZlz
FAUQDnuTFVg8uelR1LjcJo6YH8LcUZ2+nWq0JsOLgRDjJtkg5lN62uWZ+GyM
zU2RgiGx/3pSiSFT2FMaKcjfSJkYW6Ww7sx+3qxNkrwLgBQpnGUshZgACQax
tEypQnMB0ToSf6A2sqQUY5vpgHqVsimeyOer9DPJ7kmB1NYm6XhUwC8oeHd1
ivWaOJ8UfJmVrtujNGt9IJkWMeJ19ViTTn2mXRGa5AQTVwVZBJwEwiL3N09J
cRYBPR0hc1EDvDMO3EF5h1Ci3heb+pBmt2Rg5rxLbP+h1CbxgocOULalCEWI
M4qZPPdc85wWtGT4/81tpoOudJdo9QhHUPdRFXtYGPK8zoUkyi0W7KoopJ6+
aY935miJNe5kaTv3sXmY8HVaCxZcV7nVpvfVUCqgFolA90Q8P29Abf2l1oxI
1KDDTb7OCkNnPSv5mJlxq10GjhGWX7CKl3Zn5/WBXI16HJALQPFucnmNTURL
RIFaW6x0I2aBpakDL6hwChAXh8Q3h4Yx2FHxI2LjCb3DXLRYkKyHRINsUoua
ot5uDgO9Qrdupof/Sw+1PfuLtRLb5MAx/HbY08+zW+VL67GHxOXuadhWULLZ
we5+2ZD3Khkqn7ZdRYm0iHAwob9aSsT9HJOtnc+a54oxK3ZkU8ORTDTJk5gd
aRJHX71UxOQJiIULSnx6yibysokr95XWFrIdplgst74WzTPA1KYmuDCTxkNS
SNoqlE/tcCt8HSDF2a9pnk8JKXhkPtJ9ovmoKvA2n9ZCQ4GfFQ1tN+0ZPzec
spIQPKcFrjOmGDTLCpkZTnTQiiiAxOAsNy5E5oIZNCxA/aOWg45eaoRTergF
V7btk1MPvd+EFD1KP1W8yIAmXuoiExr5l4hd6NiREdvSLmIKQ4pdO4IrUiTI
RkWpyTYFpD7mpnkuqqqzzqX+0yN9MGTRDrLsfIAmtSFf0DDj+4ra9kg90dbL
aMtZWXL6GYKtdBXrS+4DDOyfM34oYlOutUvKt7+WUnOtitKSgxwMZ5J82i6M
fOq5uze+slpkSlQ89/HsqNduIr5o0sGJEv/XPW/hBRcXB4OCUXzBMSpcJRWG
VhZv31Rzo2LJd6b7XdYPYvoxEmmHUazKGX2gzwi8pMg59oMi0Nw+dluLG5jD
udZRWbCdy8+5ZszH0a5PIEF5drwhZthxim1x8pXt6mN7eFVPGYapwrEUKZDi
YDhRB49xuUqgrEndgLCtu0nTNmnVSJxKm/VmaV3aMqaapcVNLRBDjIKCACli
hH8F8meTwuQodkJzy7lfi1WD9cSl5J8CJbsOi/al01hrXzVrm1uNdz8cuNdI
qCJcpqiemPnFXaYHFwv3TDNxK4kWcVnVwjeXSM5Rld1Oq6X8gdO6rCRLyaO4
/LrnsLCBBiXVKsh/1DxFuA0927XqekFEY99Tf2qTubnhI64HN7XK2KquUrfu
C3HVV6qE2x5L71QmxMMonIW4k/qleEi8HPZVKlgJz9VmxsM2q1j3OlqBS8LO
nS9rwYVA3kBxkxh7KJxCwkRwibvc0wwN4Do4MINzfwOvTsIyy9Yd7w7fcYV5
5XHTIf36RisSfu3JsCan4Sza6hxfTdkomq1dN4C6TF8C7RJ0S642G7ZrYcR8
J3TCtLfhrWJL+TsijdsEHQtQG5x6adJb2GcXIl5nx69GPWzUgtqOzNbX+R4j
vzyLw/OicoOC7LBOhRy9ACqth/GiHW3FCZcm9lBR59dEVkdVdZp3/WVb1lW7
aqJhFV1+cmc+lE3HriDLd5C60jzJvXL4VeFPZxYEXHlLHW3KLM1WsDaF3HIk
npKLzm0HeFCAxU66QxOFbk3c8cz1iLjmdTQxAS37aHLfCf0aVSKvX53JM7ie
Ce0DMGZQnQCwbDgo8b3rPqkgWdb3WzpAOODScZMKEoxF2XsFuATO5gkKM2cn
WT91ZU/eIDEuXzW1VYFK5JrLUeVmm7K7Ydzqm9gRiVgf/Du5YiDqnttF+KK3
n51bdfcGBKwU1e4xYszc+v2dRomkbp2T6MRZR52TCdqsZHGgtHgE07b0QC+X
YvkCUnI3gTio0rAtRZTKGSw2GtZq0U7nJPErB11wCRaPAzqLFVtn6Ct3vfm4
jKZY0+Jl+3y4Z0tLEstqnk1w6swMrJ5ryI3hbgzbdC+n9TLzW6EXVZUaIBXP
8zR7RoMGaWhpUCcKGN+WLa93cBqSE7QS+n+ZFDVmk5idO2frTgDqCFC99Oqs
gsnbuvu9Prt+ib8Ci/R9RWP62fonVbWoCiEXIkdi25d5j427DyDx/oaqHSJ/
zeEhd9EtgEHhFiuztJ6BdCtW16w0L6ngfhevNek4rNYC/1uoKrI5T2l51Ldo
QYM02JpexGNScsRP860UZ0XDa0FxVpU0+9c/j7n0eUeXIcvlykQodkOLKhI7
7vIutMehjn2S+HrKSPtOSHIbXUmywDpBlIn7Kz7iXBh0JuHgnJDlZ9s6HFyd
IjtZo1ifjQ1iC0YtrDHgDkseVrpAXU955DM5Pf0YteeuulBWUiQ2Trdg9b3N
ry3XazNoc5RTI5LNkFoKgIekqFG5rnA4QqQSo2Ql3pKjX7MpgZupRu0Q0guD
sK+1jLFM1e2VrYxvNvlyfBRVRjObQNgLCeFQEuR6AAbvRMVzgrPyeHY0y0pz
mvSNWgLbyC/6GCVL9viYjRBtJOkHOBJVh6tfiDd92WzGzwWBpvoargMRWkQf
DfsYOZQTq8jKJaulMRWnMfXPtbOyr+J86gEA9HFWSKWYQ1ccghlUaXPc5a9L
lAL6lHWJ8OqdOMW3+zZqCp1eEa0d9kU61g3K6B7VkobodLCVkLSx9aYUyMZx
obujIapd/4IjYw6SPLpFpKVCD65shtpqsA8Nq4IPuZa3qjzv2H65Ok4FEpQl
3wmK+jGSD243KzPlK8QqVD+gEQNt9F1CQrey4VzKUJDDTlzjAZ0B7W5qNQkt
KEEreca+oP28IRbWFvPjIvZJjnritnLtScY1mlrqsxPqMim4MK0GvQEbo9g8
QTOwBxFUies00KzRPEUb21pVBnVpAELwclhpSfsrs7hV87R7622JLo4+cNMQ
Od+OMXlHaSN5YmmrarT1GiqztdqsI20bIL0nHfw2xw7TRqrI1rlJZbKVWtZm
eo/dYYZrDLd3YgiM+uOeAwcnYgZUM30mjQ7cNwqwiHdmnxUguxZpSL8YUcSJ
qeFbhsBOu4oUfquntANAVM6K+213YGFtNqu4sKgsXWFwVEo4KnqA4h/f4W8+
ST80bEkrrDCRKMwdge205HvPol82FcKifNF+0Iwie+UiDnIAui67OMatWElh
067VxSvKa79Q89VVVoWvQyl3AL8GWDq6GLaqOrgikRpHeqK7zhLJvpTNJMNd
Hsctd4pDf+87Vr0h4Ex3UZ8oG2hJv4Zlln3YrDvapzyLUjnr/MuGtAlfq/WJ
WJ8jbFzKYUFaBnYEaYvsxW3WWSZnb3x/V5cPg4k2R6fKKVO52Iv1qGjJQJeB
Y2eJV51VJ5MkIbmvGkCGx3HtZ+zgp5pTIKw6jk696ogKJ8bNO2bEN0JM/4h7
0JrkZmoYUcZ8d1dlhfje5WaM2+2q8HbBjlwAlsacLA23TbrOo6LG17xiBx+w
eVLjt45X/ZpBSJeXgo6jvXEQEbjUWAOUZ86rLZSsf2r7leAXEqdcrPwNGwU0
EfdKTms3KnJPSCN8gZFkWwz/wd5DxsgYHD5i+7GyoJK/EqhwF5ZFcU76lDeQ
20LeooLmbH6wYP9vy83Tjakli3ynf0W6iH4LiFTsB8MmeBVNZhArdliAvQXJ
ll7hckNLzuACMVWPjuTWLdsSw/disOki1xt2kbFhoXYXl4zLncNBfqSnXvm8
jeAO2KdNNFOAPTXkqDkhltILJglnUC1YnaQfsyV3hNJQBa8XYXaIADfIWMHA
3uketX2TGFHBAtYh0q5on3xBANF7x9fubiwXXxsSj1Q0m+gLeyLhYVhaCxvZ
69ic7yNGyTZJchKJTHGO26yqbcilIqe4lqGjRIqYq0zVA8uigrtiiEXZHge0
b+sKgbL3StqpFU/NVxGX9mJNa0wsH9Owdnpcy11dgbQA/SpwEiSzzogsrKer
4y6IA5cUz8DXZ4HDTvyk3G6G+4rYZtsUD5buWUBKuoJGR8to7sI3Cn5yW55w
cfWae2k3rHUr/LUq6LReNl+qj6cReCxZ/6PqdJ3vj45HHf3j2YunVjhxDd2U
zrLo8oX03BVpqxGxQj/yalNUlX4c/6BparOa5HyNXfMCJm7QQhOHb9bIcKPL
a3uvp7u+SzRv4BDxWWPx125dUjLHDdeoY3TJiNdZxvz0BtcxCopgtb03Wzmi
pDKRslqJ7zhGcgk+n9jI7Vh8tSPnHZWrseHE1pIPy/nMNlfgV/Lm6oUe9vq6
tV5sC3AZXyGCjhoiI9IgzGlBDP+QdAy5xBtcOu0CDuI1bqrgoT9iyNZPL+zl
rxguuL+oumSxuv/qYXjnKmOab578z/7105+61y+vpJ9Lrj++/okEye+EBi6y
Wcltki5KmHYsj08fIliTxElFK7vgh1IFkshkfPUyyRH//eWLLter91NE7lIt
EaxN1mLnFIeyKDcTuJLG0u3uXHRupKaytbsbhD1gCxHVAlAfv0s/X40oxAi5
JN6qa1IZX1L340twtWgxS3wFN4ezpQITWfBRyi96+rVhJlHsWBiXu7eAQVgo
GC7JY0P1+17Csi3JfYuwWFtpOcXhMA0OddfJsqOJW+Wb18TZf2wgvDmWoxX4
eCz8YP3crLKyfnB+sZKigdQ/xHD1i+tx9ZzX67XMYTgW319//cLennX1wt5g
KjzaZb4iXq81+f/6651/CuDLFxV4FNU/BRCS2DoqvtfbNqtw/zEylbgoYQcq
6ZohfuKuCVUlj6pYSsh295KF4HJvTmlXzRdB33u0o+gy2uFxN9SqAtrlL5Sr
kHzwAhw3iaAqPM+tiVTW5yDR9Zkz+tXsnyuEtvL1PxNPc+BCR/5Zfe52u7X/
aEDOl332OMpnCg8+N8zAZwuou55RXyLJRXNclaD3MM6eq3YSHzysFGJgJpBJ
/LMrLrvYuKvFb/FhrRZBSgi4CVhJE3B1m1Bw3Rli0UHPn3+Qpnzqbr9BEaRO
zW3zAX89TlG77aVpFdfsFaqd6cPmTSlSNmQ35iqdmgl076KI3xPeGdjMyFU1
WVzA6fPpnFwNLp+ewAsg0TiTXpNP+mxM+5e7AFnjVr1JuhU0VncYz/IZvLbt
fXDXCMqlIxyXHXCqJrX3KzqmgE4AJ4iO/kj6ipHu5ZLcA+J7b540HCIRXGGr
4Pob0XpWOzduyecOA1WQfY5yX0oVTJUU3MDD0elEqpC0u7QPAQGXIyWpWvsL
uXu2hh9NDx7HG9fvEhkTUW5wZd0jfXjS0bZZl16otaRb38AujrzchfnUxr9f
cHMQH09PR4fTo5kZTqOT/tHh4fHgID49GAzjo2H/IIoPj0ang8FgdjDrjw7i
ER6Lp0fkzkbxpD+4oal2dry3TgfSc9TRMhkaPA76R6cH/cFBf9Q/HkYno8OT
2BxM+8P+gD45CT6hh/rH/YPDYb/fP5ye4pOj2cGJmh0eDg6n0enpZHQUD477
s+Fh1J8eD83piN4+nI0mh8PZcHYwnEX90WR2ejo9nAwPRyfHx6PJ0WxyrCaT
06OTyagfRaemPzmMj+nn2JwMJ31zGg2mk+lwEs2ODo+OzclRf3IwmJ0eHB4c
8eK7zX6JMZHadvhgo/TA/d80WqXGfBuWUteoGx4gJgpuAEQfkb3+j/gGXN/9
Xop3eR2NxnEw/ExT8Nfv6/6APHQ9M/xz/9saz+/pZKkaysM2uUd6NDo4OBoe
HfUPB6dDMzsG5xzPzOxwak5nZtA/mB6ens7iaGAG8VE8OZgeD+KhORwNzWjY
j0+OG/3p/U8YULp/rqWImogRXh/YbDfm/VYCgNf5Pp1gjAOMAaDpbqvyvRQb
jTSt43f1FuIoQ5JJ1yD6A0GwybGeDHU00KOhHh7owVAfHelo4poFhaqt/id6
LmgXPJBeQabQ8aHtM7QPHx/uHrEiwKEnonVgrPg16XZM0jGOBqPheEgCPz46
cqOEqbAxeneanTu7tBBxqUPmg+Yc+grtM5a/3du/kxnf9sfDd55tbsCbwazM
U3xDJXpcfIdLVafI3QMdbyboVbuOzk40klXk3b6RGpNU3SIP7xTL9zXCGO2a
SG8mx5MhqA1ig9ZVT8gNTqL+lW8NcVfZ8f3wZIRH3WOaS2omfXZyR8uhqlnZ
x2P9Q8ZIHidxxb5efzDoqLIt8vv7YnsNOOfK1azKv4/iIJuwnlUMXxreH+ru
IcBYtVqd2u2NQVaKw35OkOxf1m7WkEtHehjotSFPIt25hp6Ck3ln2UGfHh1d
su5d+Xuuwl57DckG33H6Vj8w8bSIev5KyrZu1d82eY5/eUDauy/rNwagn68l
yhKt+Pp7vn2k6gTPeRO15fz6xQ5Z8D0Be9Av4x20KRZZXjqciwiw17Y93dz2
vZmQYPBAWNCno/5p70WUF4toSULzP34zuEvALw8P/8cjnSbLb1phMN2/dV0C
v3H3OgT+dOeVCOE3O65FqH3N+5bP7r0Ugb+9c/ODPXT+8ptudHC3GDxL+JIk
MdQ8llxMQRP7g6/fwVC/KuArNyvs7ODffbtCdRi1WxaYEPfdjoA/33ZDQnMh
/6dbEurb/+pNCfhz720JfPDffmMC/nzjrQk76R7enBBQ27HB/4OGdaAxriHn
UCVo62tcEWHPfDD6zes0+nYiETWSpY7O+MxEKCFdz4jjrkmkTYNrvWz/B73x
O9SO1b2TTUJRIXqozLSmZ3YMhKXwFZ29v6araN1qd+TabBI9f92EPot9oTAj
LerXsXSNmOmjvVlE/Lv3xRdgLoB33zLcvUw+2OxMlH7QzwzNfZ2YKarjyZz8
GK1Jd53N8+jWZl0Qn9kcE6otJOD8/25gAonPdgAA

-->

</rfc>

