<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-denis-ipcrypt-07" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="ipcrypt">Methods for IP Address Encryption and Obfuscation</title>
    <seriesInfo name="Internet-Draft" value="draft-denis-ipcrypt-07"/>
    <author initials="F." surname="Denis" fullname="Frank Denis">
      <organization>Fastly Inc.</organization>
      <address>
        <email>fde@00f.net</email>
      </address>
    </author>
    <date year="2025"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 134?>

<t>IP addresses are personally identifiable information that require protection, yet many anonymization approaches have critical flaws. Simple techniques like truncation destroy data irreversibly while providing inconsistent privacy guarantees, and ad-hoc encryption schemes often lack interoperability and security analysis.</t>
      <t>This document specifies secure, efficient methods for encrypting IP addresses for privacy-preserving storage, logging, and analytics. The methods enable data analysis while protecting user privacy from third parties without key access, addressing data minimization concerns raised in <xref target="RFC6973"/>.</t>
      <t>Three concrete instantiations are defined: <tt>ipcrypt-deterministic</tt> provides deterministic, format-preserving encryption, while <tt>ipcrypt-nd</tt> and <tt>ipcrypt-ndx</tt> introduce randomness to prevent correlation. All methods are reversible with the encryption key and designed for high-performance processing at network speeds.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/jedisct1/draft-denis-ipcrypt"/>.</t>
    </note>
  </front>
  <middle>
    <?line 142?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>IP addresses are personally identifiable information requiring protection, yet common anonymization approaches have fundamental limitations. Truncation (zeroing parts of addresses) irreversibly destroys data while providing unpredictable privacy levels - a /24 mask may hide one user or thousands depending on network allocation. Hashing produces non-reversible outputs unsuitable for operational tasks like abuse investigation. Ad-hoc encryption schemes often lack rigorous security analysis and cannot interoperate between systems.</t>
      <t>This document addresses these deficiencies by specifying secure, efficient, and interoperable methods for IP address encryption and obfuscation. The objective is to enable network operators, researchers, and privacy advocates to share or analyze data while protecting sensitive address information through cryptographically sound techniques rather than flawed approaches.</t>
      <t>This work directly addresses concerns raised in <xref target="RFC7624"/> regarding confidentiality when sharing data with third parties. Unlike existing practices that merely obscure addresses, these methods provide mathematically provable security properties, discussed throughout this document and summarized in <xref target="security-considerations"/>.</t>
      <section anchor="use-cases-and-motivations">
        <name>Use Cases and Motivations</name>
        <t>Organizations handling IP addresses face a critical dilemma: they must protect user privacy while maintaining operational capabilities. Generic encryption systems, though secure, are poorly suited for IP addresses - they expand data unpredictably, break compatibility with network tools, and operate too slowly for high-volume processing. The specialized methods in this specification resolve these conflicts through purpose-built cryptographic techniques:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Efficiency and Compactness:</strong> All variants operate on exactly 128 bits, achieving single-block encryption speed critical for network-rate processing. Non-deterministic variants add only 8-16 bytes of tweak overhead versus potentially hundreds of bytes with generic encryption. This difference enables processing billions of addresses in real-time rather than requiring expensive batch operations.</t>
          </li>
          <li>
            <t><strong>High Usage Limits:</strong> Non-deterministic variants safely handle massive volumes - approximately 4 billion operations for <tt>ipcrypt-nd</tt> and 18 quintillion for <tt>ipcrypt-ndx</tt> per key - without degrading security. Generic encryption often requires complex key rotation schemes at much lower thresholds.</t>
          </li>
          <li>
            <t><strong>Format Preservation (Deterministic):</strong> The <tt>ipcrypt-deterministic</tt> variant produces valid IP addresses, not arbitrary ciphertext. This enables encrypted addresses to flow through existing network infrastructure, monitoring tools, and databases without modification (see <xref target="format-preservation-and-limitations"/>).</t>
          </li>
          <li>
            <t><strong>Interoperability:</strong> This specification ensures that encrypted IP addresses can be exchanged between different systems, vendors, and programming languages. All conforming implementations produce identical results, enabling seamless data exchange and avoiding vendor lock-in.</t>
          </li>
        </ul>
        <t>These specialized encryption methods unlock several critical use cases:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Privacy Protection:</strong> They prevent the exposure of sensitive user information to third parties in logs, analytics data, and network measurements (<xref target="RFC6973"/>). Note that protection is specifically against parties without key access; the key holder retains full decryption capability.</t>
          </li>
          <li>
            <t><strong>Correlation Attack Resistance:</strong> While deterministic encryption can reveal repeated inputs, the non-deterministic variants leverage random tweaks to hide patterns and enhance confidentiality (see <xref target="non-deterministic-encryption"/>).</t>
          </li>
          <li>
            <t><strong>Privacy-Preserving Analytics:</strong> Encrypted IP addresses can be used directly for operations such as counting unique clients, rate limiting, or deduplication—without needing to reveal the original values to third-party processors. This approach addresses the anonymization requirements for DNS query data sharing outlined in <xref target="RSSAC040"/>, enabling research while protecting source IP privacy. Since network hierarchy and geographic relationships are not preserved by encryption, organizations requiring such metadata SHOULD extract and store it separately (e.g., country, ASN) rather than relying on the flawed practice of IP address truncation, which provides inconsistent privacy protection and irreversibly destroys information.</t>
          </li>
          <li>
            <t><strong>Seamless Third-Party Integration:</strong> Encrypted IPs can act as privacy-preserving identifiers when interacting with untrusted services, cloud providers, or external platforms.</t>
          </li>
        </ul>
        <t>For implementation guidelines and practical examples, see <xref target="implementation-details"/>.</t>
      </section>
      <section anchor="relationship-to-ietf-work">
        <name>Relationship to IETF Work</name>
        <t><em>This section is to be removed before publishing as an RFC.</em></t>
        <t>This document does not conflict with any active IETF working group efforts. While the IETF has produced several RFCs related to privacy (<xref target="RFC6973"/>, <xref target="RFC7258"/>, <xref target="RFC7624"/>), there is no current standardization effort for IP address encryption methods. This specification complements existing IETF privacy guidance by providing concrete implementation methods.</t>
        <t>The cryptographic primitives used (AES, format-preserving encryption) align with IETF cryptographic recommendations, and the document follows IETF formatting and terminology conventions where applicable.</t>
      </section>
    </section>
    <section anchor="terminology">
      <name>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="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
      <t>Throughout this document, the following terms and conventions apply:</t>
      <ul spacing="normal">
        <li>
          <t><strong>IP Address:</strong> An IPv4 or IPv6 address as defined in <xref target="RFC4291"/>.</t>
        </li>
        <li>
          <t><strong>16-Byte Representation:</strong> A fixed-length representation used for both IPv4 (via IPv4-mapped IPv6) and IPv6 addresses.</t>
        </li>
        <li>
          <t><strong>Tweak:</strong> A non-secret, additional input to a tweakable block cipher that further randomizes the output.</t>
        </li>
        <li>
          <t><strong>Deterministic Encryption:</strong> Encryption that always produces the same ciphertext for a given input and key.</t>
        </li>
        <li>
          <t><strong>Non-Deterministic Encryption:</strong> Encryption that produces different ciphertexts for the same input due to the inclusion of a randomly sampled tweak.</t>
        </li>
        <li>
          <t><strong>(Input, Tweak) Collision:</strong> A scenario where the same input is encrypted with the same tweak. This reveals that the input was repeated but not the input’s value.</t>
        </li>
      </ul>
    </section>
    <section anchor="ip-address-conversion">
      <name>IP Address Conversion</name>
      <t>This section describes the conversion of IP addresses to and from a 16-byte representation. This conversion is necessary to operate a 128-bit cipher on both IPv4 and IPv6 addresses.</t>
      <section anchor="converting-to-a-16-byte-representation">
        <name>Converting to a 16-Byte Representation</name>
        <section anchor="ipv6-addresses">
          <name>IPv6 Addresses</name>
          <t>IPv6 addresses are natively 128 bits and are converted directly using network byte order (big-endian) as specified in <xref target="RFC4291"/>.</t>
          <t><em>Example:</em></t>
          <artwork><![CDATA[
IPv6 Address:    2001:0db8:85a3:0000:0000:8a2e:0370:7334
16-Byte Representation: [20 01 0d b8 85 a3 00 00 00 00 8a 2e 03 70 73 34]
]]></artwork>
        </section>
        <section anchor="ipv4-addresses">
          <name>IPv4 Addresses</name>
          <t>IPv4 addresses (32 bits) are mapped using the IPv4-mapped IPv6 format as specified in <xref target="RFC4291"/>:</t>
          <artwork><![CDATA[
IPv4 Address:    192.0.2.1
16-Byte Representation: [00 00 00 00 00 00 00 00 00 00 FF FF C0 00 02 01]
]]></artwork>
        </section>
      </section>
      <section anchor="converting-from-a-16-byte-representation-to-an-ip-address">
        <name>Converting from a 16-Byte Representation to an IP Address</name>
        <t>The conversion algorithm is as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Examine the first 12 bytes of the 16-byte representation</t>
          </li>
          <li>
            <t>If they match the IPv4-mapped prefix (10 bytes of 0x00 followed by 0xFF, 0xFF):
            </t>
            <ul spacing="normal">
              <li>
                <t>Interpret the last 4 bytes as an IPv4 address in dotted-decimal notation</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Otherwise:
            </t>
            <ul spacing="normal">
              <li>
                <t>Interpret the 16 bytes as an IPv6 address in colon-hexadecimal notation</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="generic-constructions">
      <name>Generic Constructions</name>
      <t>This specification defines two generic cryptographic constructions:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>128-bit Block Cipher Construction:</strong>
          </t>
          <ul spacing="normal">
            <li>
              <t>Used in deterministic encryption (see <xref target="deterministic-encryption"/>)</t>
            </li>
            <li>
              <t>Operates on a single 16-byte block</t>
            </li>
            <li>
              <t>Example: AES-128 treated as a permutation</t>
            </li>
          </ul>
        </li>
        <li>
          <t><strong>128-bit Tweakable Block Cipher (TBC) Construction:</strong>
          </t>
          <ul spacing="normal">
            <li>
              <t>Used in non-deterministic encryption (see <xref target="non-deterministic-encryption"/>)</t>
            </li>
            <li>
              <t>Accepts a key, a tweak, and a message</t>
            </li>
            <li>
              <t>The tweak must be uniformly random when generated</t>
            </li>
            <li>
              <t>Reuse of the same tweak on different inputs does not compromise confidentiality</t>
            </li>
          </ul>
        </li>
      </ol>
      <t>Valid options for implementing a tweakable block cipher include, but are not limited to:</t>
      <ul spacing="normal">
        <li>
          <t><strong>SKINNY</strong> (see <xref target="SKINNY"/>)</t>
        </li>
        <li>
          <t><strong>DEOXYS-BC</strong> (see <xref target="DEOXYS-BC"/>)</t>
        </li>
        <li>
          <t><strong>KIASU-BC</strong> (see <xref target="implementing-kiasu-bc"/> for implementation details)</t>
        </li>
        <li>
          <t><strong>AES-XTS</strong> (see <xref target="ipcrypt-ndx"/> for usage)</t>
        </li>
      </ul>
      <t>Implementers MUST choose a cipher that meets the required security properties and provides robust resistance against related-tweak and other cryptographic attacks.</t>
    </section>
    <section anchor="deterministic-encryption">
      <name>Deterministic Encryption</name>
      <t>Deterministic encryption applies a 128-bit block cipher directly to the 16-byte representation of an IP address. The defining characteristic is that the same IP address always encrypts to the same ciphertext when using the same key - this predictability is both its strength and limitation.</t>
      <t>Choose deterministic encryption when:</t>
      <ul spacing="normal">
        <li>
          <t>You need to detect duplicate IP addresses in encrypted form (e.g., for rate limiting)</t>
        </li>
        <li>
          <t>Storage space is critical (produces only 16 bytes output)</t>
        </li>
        <li>
          <t>Format preservation is required (output remains a valid IP address)</t>
        </li>
        <li>
          <t>Correlation of the same address across records is acceptable</t>
        </li>
      </ul>
      <t>All instantiations documented in this specification (<tt>ipcrypt-deterministic</tt>, <tt>ipcrypt-nd</tt>, and <tt>ipcrypt-ndx</tt>) are invertible - encrypted IP addresses can be decrypted back to their original values using the same key. For non-deterministic modes, the tweak must be preserved along with the ciphertext to enable decryption.</t>
      <t>For implementation details, see <xref target="implementation-details"/>.</t>
      <section anchor="ipcrypt-deterministic">
        <name>ipcrypt-deterministic</name>
        <t>The <tt>ipcrypt-deterministic</tt> instantiation employs AES-128 in a single-block operation. The key MUST be exactly 16 bytes (128 bits) in length. Since AES-128 is a permutation, every distinct 16-byte input maps to a unique 16-byte ciphertext, preserving the IP address format.</t>
        <t>For test vectors, see <xref target="ipcrypt-deterministic-test-vectors"/>.</t>
        <artwork><![CDATA[
      +---------------------+
      |      IP Address     |
      |    (IPv4 or IPv6)   |
      +---------------------+
                 |
                 v
      +---------------------+
      | Convert to 16 Bytes |
      +---------------------+
                 |
                 v
      +---------------------+
      |   AES128 Encrypt    |
      |   (Single Block)    |
      +---------------------+
                 |
                 v
      +---------------------+
      |    16-Byte Output   |
      +---------------------+
                 |
                 v
      +---------------------+
      | Convert to IP Format|
      +---------------------+
]]></artwork>
      </section>
      <section anchor="format-preservation-and-limitations">
        <name>Format Preservation and Limitations</name>
        <section anchor="network-hierarchy-preservation">
          <name>Network Hierarchy Preservation</name>
          <t>The encryption methods described in this specification do not preserve network hierarchy or prefix relationships.</t>
          <ul spacing="normal">
            <li>
              <t>IPv4 and IPv6 prefixes are completely scrambled in the encrypted output</t>
            </li>
            <li>
              <t>Addresses from the same subnet will not appear related after encryption</t>
            </li>
            <li>
              <t>Geographic or topological proximity cannot be inferred from encrypted addresses</t>
            </li>
          </ul>
        </section>
        <section anchor="format-preservation-for-ipv4">
          <name>Format Preservation for IPv4</name>
          <t>The methods specified in this document typically result in IPv4 addresses being encrypted as IPv6 addresses.</t>
          <t>IPv4 format preservation (maintaining IPv4 addresses as IPv4 rather than mapping them to IPv6) is not specified in this document and is generally discouraged due to the limited 32-bit address space, which significantly reduces encryption security.</t>
          <t>If IPv4 format preservation is absolutely required despite the security limitations, implementers SHOULD implement a Format-Preserving Encryption (FPE) mode such as the FF1 algorithm specified in <xref target="NIST-SP-800-38G"/> or FAST <xref target="FAST"/>.</t>
        </section>
        <section anchor="preserving-metadata-for-analytics">
          <name>Preserving Metadata for Analytics</name>
          <t>Organizations requiring network metadata for analytics SHOULD extract and store geographic location, ASN, or network classification separately before encryption, rather than using IP address truncation. Truncation (e.g., storing only /24 or /48 prefixes) is a fundamentally flawed privacy mechanism that provides inconsistent protection and irreversibly destroys data.</t>
          <t>Recommended approach:
1. Extract metadata (geographic location, ASN, network type) from the original IP address
2. Store this information as separate fields alongside the encrypted IP address
3. Apply appropriate privacy-preserving aggregation to the metadata itself</t>
          <t>Example storage schema:
~~~
{
  “encrypted_ip”: “bde9:6789:d353:824c:d7c6:f58a:6bd2:26eb”,
  “country”: “US”,
  “asn”: 15169,
  “network_type”: “cloud_provider”
}
~~~</t>
          <t>This approach ensures consistent privacy protection through proper encryption while preserving analytical capabilities in a controlled manner.</t>
        </section>
      </section>
    </section>
    <section anchor="non-deterministic-encryption">
      <name>Non-Deterministic Encryption</name>
      <t>Non-deterministic encryption enhances privacy by ensuring that the same IP address produces different ciphertexts each time it is encrypted, preventing correlation attacks that plague deterministic schemes. This is achieved through tweakable block ciphers that incorporate random values called tweaks.</t>
      <t>Choose non-deterministic encryption when:
- Preventing correlation of the same IP address across records is critical
- Storage can accommodate the additional tweak data (8-16 bytes)
- You need stronger privacy guarantees than deterministic encryption provides
- Processing the same address multiple times without revealing repetition patterns</t>
      <t>For implementation details, see <xref target="implementation-details"/>.</t>
      <section anchor="encryption-process">
        <name>Encryption Process</name>
        <t>The encryption process for non-deterministic modes consists of the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>Generate a random tweak using a cryptographically secure random number generator</t>
          </li>
          <li>
            <t>Convert the IP address to its 16-byte representation</t>
          </li>
          <li>
            <t>Encrypt the 16-byte representation using the key and the tweak</t>
          </li>
          <li>
            <t>Concatenate the tweak with the encrypted output to form the final ciphertext</t>
          </li>
        </ol>
        <t>The tweak is not considered secret and is included in the ciphertext. This allows the same tweak to be used for decryption.</t>
      </section>
      <section anchor="decryption-process">
        <name>Decryption Process</name>
        <t>The decryption process consists of the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>Split the ciphertext into the tweak and the encrypted IP</t>
          </li>
          <li>
            <t>Decrypt the encrypted IP using the key and the tweak</t>
          </li>
          <li>
            <t>Convert the resulting 16-byte representation back to an IP address</t>
          </li>
        </ol>
        <t>Although the tweak is generated uniformly at random, occasional collisions may occur according to birthday bounds. Such collisions are benign when they occur with different inputs. An <tt>(input, tweak)</tt> collision reveals that the same input was encrypted with the same tweak but does not disclose the input’s value. The usage limits discussed below apply per cryptographic key; rotating keys can extend secure usage beyond these bounds.</t>
      </section>
      <section anchor="output-format-and-encoding">
        <name>Output Format and Encoding</name>
        <t>The output of non-deterministic encryption is binary data. For applications that require text representation (e.g., logging, JSON encoding, or text-based protocols), the binary output MUST be encoded. Common encoding options include hexadecimal and Base64. The choice of encoding is application-specific and outside the scope of this specification. However, implementations SHOULD document their chosen encoding method clearly.</t>
      </section>
      <section anchor="concrete-instantiations">
        <name>Concrete Instantiations</name>
        <t>This document defines two concrete instantiations:</t>
        <ul spacing="normal">
          <li>
            <t><strong><tt>ipcrypt-nd</tt>:</strong> Uses the KIASU-BC tweakable block cipher with an 8-byte (64-bit) tweak. See <xref target="KIASU-BC"/> for details.</t>
          </li>
          <li>
            <t><strong><tt>ipcrypt-ndx</tt>:</strong> Uses the AES-XTS tweakable block cipher with a 16-byte (128-bit) tweak. See <xref target="XTS-AES"/> for background.</t>
          </li>
        </ul>
        <t>In both cases, if a tweak is generated randomly, it MUST be uniformly random. Reusing the same randomly generated tweak on different inputs is acceptable from a confidentiality standpoint.</t>
        <t>For test vectors, see <xref target="ipcrypt-nd-test-vectors"/> and <xref target="ipcrypt-ndx-test-vectors"/>.</t>
        <section anchor="ipcrypt-nd">
          <name>ipcrypt-nd (KIASU-BC)</name>
          <t>The <tt>ipcrypt-nd</tt> instantiation uses the KIASU-BC tweakable block cipher with an 8-byte (64-bit) tweak. For implementation details, see <xref target="implementing-kiasu-bc"/>. The output is 24 bytes total, consisting of an 8-byte tweak concatenated with a 16-byte ciphertext.</t>
          <t>Random sampling of an 8-byte tweak yields an expected collision for a specific tweak value after about 2^(64/2) = 2^32 operations (approximately 4 billion operations). If an <tt>(input, tweak)</tt> collision occurs, it indicates that the same input was processed with that tweak without revealing the input’s value.</t>
          <t>These collision bounds apply per cryptographic key. By rotating keys regularly, secure usage can be extended well beyond these bounds. The effective security is determined by the underlying block cipher’s strength.</t>
          <t>For test vectors, see <xref target="ipcrypt-nd-test-vectors"/>.</t>
        </section>
        <section anchor="ipcrypt-ndx">
          <name>ipcrypt-ndx (AES-XTS)</name>
          <t>The <tt>ipcrypt-ndx</tt> instantiation uses the AES-XTS tweakable block cipher with a 16-byte (128-bit) tweak. The output is 32 bytes total, consisting of a 16-byte tweak concatenated with a 16-byte ciphertext.</t>
          <t>For AES-XTS encryption of a single block, the computation avoids the sequential tweak calculations required in full XTS mode. Independent sampling of a 16-byte tweak results in an expected collision after about 2^(128/2) = 2^64 operations (approximately 18 quintillion operations).</t>
          <t>As with <tt>ipcrypt-nd</tt>, an <tt>(input, tweak)</tt> collision reveals repetition without compromising the input value. These limits are per key, and regular key rotation further extends secure usage. The effective security is governed by the strength of AES-128 (approximately 2^128 operations).</t>
        </section>
        <section anchor="comparison-of-modes">
          <name>Comparison of Modes</name>
          <t>Choosing the right mode depends on your specific privacy requirements and operational constraints:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Deterministic (<tt>ipcrypt-deterministic</tt>):</strong>
              </t>
              <ul spacing="normal">
                <li>
                  <t><strong>Output size:</strong> 16 bytes (most compact)</t>
                </li>
                <li>
                  <t><strong>Privacy:</strong> Same IP always produces same ciphertext (allows correlation)</t>
                </li>
                <li>
                  <t><strong>Use case:</strong> When you need to identify duplicates or when format preservation is critical</t>
                </li>
                <li>
                  <t><strong>Performance:</strong> Fastest (single AES operation)</t>
                </li>
              </ul>
            </li>
            <li>
              <t><strong>Non-Deterministic <tt>ipcrypt-nd</tt> (KIASU-BC):</strong>
              </t>
              <ul spacing="normal">
                <li>
                  <t><strong>Output size:</strong> 24 bytes (16-byte ciphertext + 8-byte tweak)</t>
                </li>
                <li>
                  <t><strong>Privacy:</strong> Same IP produces different ciphertexts (prevents most correlation)</t>
                </li>
                <li>
                  <t><strong>Use case:</strong> General privacy protection with reasonable storage overhead</t>
                </li>
                <li>
                  <t><strong>Collision resistance:</strong> Approximately 4 billion operations per key</t>
                </li>
              </ul>
            </li>
            <li>
              <t><strong>Non-Deterministic <tt>ipcrypt-ndx</tt> (AES-XTS):</strong>
              </t>
              <ul spacing="normal">
                <li>
                  <t><strong>Output size:</strong> 32 bytes (16-byte ciphertext + 16-byte tweak)</t>
                </li>
                <li>
                  <t><strong>Privacy:</strong> Same IP produces different ciphertexts (prevents correlation)</t>
                </li>
                <li>
                  <t><strong>Use case:</strong> Maximum privacy protection when storage permits</t>
                </li>
                <li>
                  <t><strong>Collision resistance:</strong> Approximately 18 quintillion operations per key</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="alternatives-to-random-tweaks">
        <name>Alternatives to Random Tweaks</name>
        <t>While this specification recommends the use of uniformly random tweaks for non-deterministic encryption, implementers may consider alternative approaches:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Monotonic Counter:</strong> A counter could be used as a tweak, but this is difficult to maintain in distributed systems. If the counter is not encrypted and the tweakable block cipher is not secure against related-tweak attacks, this could enable correlation attacks.</t>
          </li>
          <li>
            <t><strong>UUIDs:</strong> UUIDs (such as UUIDv6 or UUIDv7) could be used as tweaks; however, these would reveal the original timestamp of the logged IP addresses, which may not be desirable from a privacy perspective.</t>
          </li>
        </ul>
        <t>Although the birthday bound is a concern with random tweaks, the use of random tweaks remains the recommended and most practical approach, offering the best tradeoffs for most real-world use cases.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The methods specified in this document provide strong confidentiality guarantees but explicitly do not provide integrity protection. Understanding this distinction is critical for secure deployment:</t>
      <t><strong>What these methods protect against:</strong></t>
      <ul spacing="normal">
        <li>
          <t>Unauthorized parties learning the original IP addresses (without the key)</t>
        </li>
        <li>
          <t>Statistical analysis revealing patterns in network traffic (non-deterministic modes)</t>
        </li>
        <li>
          <t>Brute-force attacks on the address space (128-bit security level)</t>
        </li>
      </ul>
      <t><strong>What these methods do NOT protect against:</strong></t>
      <ul spacing="normal">
        <li>
          <t>Active attackers modifying, reordering, or removing encrypted addresses</t>
        </li>
        <li>
          <t>Authorized key holders decrypting addresses (by design)</t>
        </li>
        <li>
          <t>Traffic analysis based on volume and timing (metadata)</t>
        </li>
      </ul>
      <t>Applications requiring integrity protection must additionally employ authentication mechanisms such as HMAC, authenticated encryption modes, or digital signatures over the encrypted data. While outside this specification’s scope, implementers should carefully evaluate whether their threat model requires such additional protections.</t>
      <section anchor="deterministic-mode-security">
        <name>Deterministic Mode Security</name>
        <t>A permutation ensures distinct inputs yield distinct outputs. However, repeated inputs result in identical ciphertexts, thereby revealing repetition.</t>
        <t>This property makes deterministic encryption suitable for applications where format preservation is required, but linkability of repeated inputs is acceptable.</t>
      </section>
      <section anchor="non-deterministic-mode-security">
        <name>Non-Deterministic Mode Security</name>
        <t>The inclusion of a random tweak ensures that encrypting the same input generally produces different outputs. In cases where an <tt>(input, tweak)</tt> collision occurs, an attacker learns only that the same input was processed with that tweak, not the value of the input itself.</t>
        <t>Security is determined by the underlying block cipher (≈2^128 for AES-128) on a per-key basis. Key rotation is recommended to extend secure usage beyond the per-key collision bounds.</t>
      </section>
      <section anchor="implementation-security">
        <name>Implementation Security</name>
        <t>Implementations MUST ensure that:</t>
        <ol spacing="normal" type="1"><li>
            <t>Keys are generated using a cryptographically secure random number generator</t>
          </li>
          <li>
            <t>Tweak values are uniformly random for non-deterministic modes</t>
          </li>
          <li>
            <t>Side-channel attacks are mitigated through constant-time operations</t>
          </li>
          <li>
            <t>Error handling does not leak sensitive information</t>
          </li>
        </ol>
      </section>
      <section anchor="key-management-considerations">
        <name>Key Management Considerations</name>
        <t>This specification focuses on the cryptographic transformations and does not mandate specific key management practices. However, implementers MUST ensure:</t>
        <ol spacing="normal" type="1"><li>
            <t>Keys are generated using cryptographically secure random number generators (see <xref target="RFC4086"/>)</t>
          </li>
          <li>
            <t>Keys are stored securely and access-controlled appropriately for the deployment environment</t>
          </li>
          <li>
            <t>Key rotation policies are established based on usage volume and security requirements</t>
          </li>
          <li>
            <t>Key compromise procedures are defined and tested</t>
          </li>
        </ol>
        <t>For high-volume deployments processing billions of IP addresses, regular key rotation (e.g., monthly or quarterly) is RECOMMENDED to stay well within the security bounds discussed in this document.</t>
      </section>
    </section>
    <section anchor="implementation-details">
      <name>Implementation Details</name>
      <t>This section provides detailed pseudocode and implementation guidance for the key operations described in this document.</t>
      <section anchor="diagrams">
        <name>Visual Diagrams</name>
        <t>The following diagrams illustrate the key processes described in this specification.</t>
        <section anchor="ipv4-address-conversion-diagram">
          <name>IPv4 Address Conversion Diagram</name>
          <artwork><![CDATA[
       IPv4: 192.0.2.1
           |
           v
  Octets:  C0  00  02  01
           |
           v
   16-Byte Array:
[00 00 00 00 00 00 00 00 00 00 | FF FF | C0 00 02 01]
]]></artwork>
        </section>
        <section anchor="deterministic-encryption-flow">
          <name>Deterministic Encryption Flow</name>
          <artwork><![CDATA[
            IP Address
                |
                v
       [Convert to 16 Bytes]
                |
                v
    [AES-128 Single-Block Encrypt]
                |
                v
       16-Byte Ciphertext
                |
                v
     [Convert to IP Format]
                |
                v
       Encrypted IP Address
]]></artwork>
        </section>
        <section anchor="non-deterministic-encryption-flow-ipcrypt-nd">
          <name>Non-Deterministic Encryption Flow (ipcrypt-nd)</name>
          <artwork><![CDATA[
              IP Address
                  |
                  v
       [Convert to 16 Bytes]
                  |
                  v
    [Generate Random 8-Byte Tweak]
                  |
                  v
       [KIASU-BC Tweakable Encrypt]
                  |
                  v
          16-Byte Ciphertext
                  |
                  v
    [Concatenate Tweak || Ciphertext]
                  |
                  v
       24-Byte Output (ipcrypt-nd)
]]></artwork>
        </section>
        <section anchor="non-deterministic-encryption-flow-ipcrypt-ndx">
          <name>Non-Deterministic Encryption Flow (ipcrypt-ndx)</name>
          <artwork><![CDATA[
              IP Address
                  |
                  v
       [Convert to 16 Bytes]
                  |
                  v
    [Generate Random 16-Byte Tweak]
                  |
                  v
       [AES-XTS Tweakable Encrypt]
                  |
                  v
          16-Byte Ciphertext
                  |
                  v
    [Concatenate Tweak || Ciphertext]
                  |
                  v
       32-Byte Output (ipcrypt-ndx)
]]></artwork>
        </section>
      </section>
      <section anchor="ipv4-address-conversion">
        <name>IPv4 Address Conversion</name>
        <t>For a diagram of this conversion process, see <xref target="ipv4-address-conversion-diagram"/>.</t>
        <sourcecode type="pseudocode"><![CDATA[
function IPv4To16Bytes(ipv4_address):
    // Split the IPv4 address into its octets
    parts = ipv4_address.split(".")
    if length(parts) != 4:
         raise Error("Invalid IPv4 address")
    // Create a 16-byte array with the IPv4-mapped prefix
    bytes16 = [0x00] * 10         // 10 bytes of 0x00
    bytes16.append(0xFF)          // 11th byte: 0xFF
    bytes16.append(0xFF)          // 12th byte: 0xFF
    // Append each octet (converted to an 8-bit integer)
    for part in parts:
         bytes16.append(int(part))
    return bytes16
]]></sourcecode>
        <t><em>Example:</em> For <tt>"192.0.2.1"</tt>, the function returns</t>
        <artwork><![CDATA[
[00, 00, 00, 00, 00, 00, 00, 00, 00, 00, FF, FF, C0, 00, 02, 01]
]]></artwork>
      </section>
      <section anchor="ipv6-address-conversion">
        <name>IPv6 Address Conversion</name>
        <sourcecode type="pseudocode"><![CDATA[
function IPv6To16Bytes(ipv6_address):
    // Parse the IPv6 address into eight 16-bit words.
    words = parseIPv6(ipv6_address)  // Expands shorthand notation and returns 8 words
    bytes16 = []
    for word in words:
         high_byte = (word >> 8) & 0xFF
         low_byte = word & 0xFF
         bytes16.append(high_byte)
         bytes16.append(low_byte)
    return bytes16
]]></sourcecode>
        <t><em>Example:</em> For <tt>"2001:0db8:85a3:0000:0000:8a2e:0370:7334"</tt>, the output is the corresponding 16-byte sequence.</t>
      </section>
      <section anchor="conversion-from-a-16-byte-array-to-an-ip-address">
        <name>Conversion from a 16-Byte Array to an IP Address</name>
        <sourcecode type="pseudocode"><![CDATA[
function Bytes16ToIP(bytes16):
    if length(bytes16) != 16:
         raise Error("Invalid byte array")

    // Check for the IPv4-mapped prefix
    if bytes16[0:10] == [0x00]*10 and bytes16[10] == 0xFF and bytes16[11] == 0xFF:
         ipv4_parts = []
         for i from 12 to 15:
             ipv4_parts.append(str(bytes16[i]))
         ipv4_address = join(ipv4_parts, ".")
         return ipv4_address
    else:
         words = []
         for i from 0 to 15 step 2:
             word = (bytes16[i] << 8) | bytes16[i+1]
             words.append(format(word, "x"))
         ipv6_address = join(words, ":")
         return ipv6_address
]]></sourcecode>
      </section>
      <section anchor="deterministic-encryption-ipcrypt-deterministic">
        <name>Deterministic Encryption (ipcrypt-deterministic)</name>
        <sourcecode type="pseudocode"><![CDATA[
function ipcrypt_deterministic_encrypt(ip_address, key):
    // The key MUST be exactly 16 bytes (128 bits) in length
    if length(key) != 16:
        raise Error("Key must be 16 bytes")

    bytes16 = convertTo16Bytes(ip_address)
    ciphertext = AES128_encrypt(key, bytes16)
    encrypted_ip = Bytes16ToIP(ciphertext)
    return encrypted_ip

function ipcrypt_deterministic_decrypt(encrypted_ip, key):
    if length(key) != 16:
        raise Error("Key must be 16 bytes")

    bytes16 = convertTo16Bytes(encrypted_ip)
    plaintext = AES128_decrypt(key, bytes16)
    original_ip = Bytes16ToIP(plaintext)
    return original_ip
]]></sourcecode>
      </section>
      <section anchor="non-deterministic-encryption-using-kiasu-bc-ipcrypt-nd">
        <name>Non-Deterministic Encryption using KIASU-BC (ipcrypt-nd)</name>
        <sourcecode type="pseudocode"><![CDATA[
function ipcrypt_nd_encrypt(ip_address, key):
    if length(key) != 16:
        raise Error("Key must be 16 bytes")

    // Step 1: Generate random tweak (8 bytes)
    tweak = random_bytes(8)  // MUST be uniformly random

    // Step 2: Convert IP to 16-byte representation
    bytes16 = convertTo16Bytes(ip_address)

    // Step 3: Encrypt using key and tweak
    ciphertext = KIASU_BC_encrypt(key, tweak, bytes16)

    // Step 4: Concatenate tweak and ciphertext
    result = concatenate(tweak, ciphertext)  // 8 bytes || 16 bytes = 24 bytes total
    return result

function ipcrypt_nd_decrypt(ciphertext, key):
    // Step 1: Split ciphertext into tweak and encrypted IP
    tweak = ciphertext[0:8]  // First 8 bytes
    encrypted_ip = ciphertext[8:24]  // Remaining 16 bytes

    // Step 2: Decrypt using key and tweak
    bytes16 = KIASU_BC_decrypt(key, tweak, encrypted_ip)

    // Step 3: Convert back to IP address
    ip_address = Bytes16ToIP(bytes16)
    return ip_address
]]></sourcecode>
      </section>
      <section anchor="non-deterministic-encryption-using-aes-xts-ipcrypt-ndx">
        <name>Non-Deterministic Encryption using AES-XTS (ipcrypt-ndx)</name>
        <sourcecode type="pseudocode"><![CDATA[
function AES_XTS_encrypt(key, tweak, block):
    // Split the key into two halves
    K1, K2 = split_key(key)

    // Encrypt the tweak with the second half of the key
    ET = AES128_encrypt(K2, tweak)

    // Encrypt the block: AES128(block ⊕ ET, K1) ⊕ ET
    return AES128_encrypt(K1, block ⊕ ET) ⊕ ET
]]></sourcecode>
        <sourcecode type="pseudocode"><![CDATA[
function ipcrypt_ndx_encrypt(ip_address, key):
    if length(key) != 32:
        raise Error("Key must be 32 bytes (two AES-128 keys)")

    // Step 1: Generate random tweak (16 bytes)
    tweak = random_bytes(16)  // MUST be uniformly random

    // Step 2: Convert IP to 16-byte representation
    bytes16 = convertTo16Bytes(ip_address)

    // Step 3: Encrypt using key and tweak
    ciphertext = AES_XTS_encrypt(key, tweak, bytes16)

    // Step 4: Concatenate tweak and ciphertext
    result = concatenate(tweak, ciphertext)  // 16 bytes || 16 bytes = 32 bytes total
    return result

function ipcrypt_ndx_decrypt(ciphertext, key):
    // Step 1: Split ciphertext into tweak and encrypted IP
    tweak = ciphertext[0:16]  // First 16 bytes
    encrypted_ip = ciphertext[16:32]  // Remaining 16 bytes

    // Step 2: Decrypt using key and tweak
    bytes16 = AES_XTS_decrypt(key, tweak, encrypted_ip)

    // Step 3: Convert back to IP address
    ip_address = Bytes16ToIP(bytes16)
    return ip_address
]]></sourcecode>
      </section>
      <section anchor="implementing-kiasu-bc">
        <name>KIASU-BC Implementation Guide</name>
        <t>This section provides a detailed guide for implementing the KIASU-BC tweakable block cipher used in <tt>ipcrypt-nd</tt>. KIASU-BC is based on AES-128 with modifications to incorporate a tweak.</t>
        <section anchor="overview">
          <name>Overview</name>
          <t>KIASU-BC extends AES-128 by incorporating an 8-byte tweak into each round. The tweak is padded to 16 bytes and XORed with the round key at each round of the cipher. This construction is used in the <tt>ipcrypt-nd</tt> instantiation.</t>
        </section>
        <section anchor="tweak-padding">
          <name>Tweak Padding</name>
          <t>The 8-byte tweak is padded to 16 bytes using the following method:</t>
          <ol spacing="normal" type="1"><li>
              <t>Split the 8-byte tweak into four 2-byte pairs</t>
            </li>
            <li>
              <t>Place each 2-byte pair at the start of each 4-byte group</t>
            </li>
            <li>
              <t>Fill the remaining 2 bytes of each group with zeros</t>
            </li>
          </ol>
          <t>Example:</t>
          <artwork><![CDATA[
8-byte tweak:    [T0 T1 T2 T3 T4 T5 T6 T7]
16-byte padded:  [T0 T1 00 00 T2 T3 00 00 T4 T5 00 00 T6 T7 00 00]
]]></artwork>
        </section>
        <section anchor="round-structure">
          <name>Round Structure</name>
          <t>Each round of KIASU-BC consists of the following standard AES operations:</t>
          <ol spacing="normal" type="1"><li>
              <t><strong>SubBytes:</strong> Apply the AES S-box to each byte of the state</t>
            </li>
            <li>
              <t><strong>ShiftRows:</strong> Rotate each row of the state matrix</t>
            </li>
            <li>
              <t><strong>MixColumns:</strong> Mix the columns of the state matrix (except in the final round)</t>
            </li>
            <li>
              <t><strong>AddRoundKey:</strong> XOR the state with the round key and padded tweak</t>
            </li>
          </ol>
          <t>For details about these operations, see <xref target="FIPS-197"/>.</t>
        </section>
        <section anchor="key-schedule">
          <name>Key Schedule</name>
          <t>The key schedule follows the standard AES-128 key expansion:</t>
          <ol spacing="normal" type="1"><li>
              <t>The initial key is expanded into 11 round keys</t>
            </li>
            <li>
              <t>Each round key is XORed with the padded tweak before use</t>
            </li>
            <li>
              <t>The first round key is used in the initial AddRoundKey operation</t>
            </li>
          </ol>
        </section>
        <section anchor="implementation-steps">
          <name>Implementation Steps</name>
          <ol spacing="normal" type="1"><li>
              <t><strong>Key Expansion:</strong>
              </t>
              <ul spacing="normal">
                <li>
                  <t>Expand the 16-byte key into 11 round keys using the standard AES key schedule</t>
                </li>
                <li>
                  <t>Each round key is 16 bytes</t>
                </li>
              </ul>
            </li>
            <li>
              <t><strong>Tweak Processing:</strong>
              </t>
              <ul spacing="normal">
                <li>
                  <t>Pad the 8-byte tweak to 16 bytes as described above</t>
                </li>
                <li>
                  <t>XOR the padded tweak with each round key before use</t>
                </li>
              </ul>
            </li>
            <li>
              <t><strong>Encryption Process:</strong>
              </t>
              <ul spacing="normal">
                <li>
                  <t>Perform initial AddRoundKey with the first tweaked round key</t>
                </li>
                <li>
                  <t>For rounds 1-9:
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>SubBytes</t>
                    </li>
                    <li>
                      <t>ShiftRows</t>
                    </li>
                    <li>
                      <t>MixColumns</t>
                    </li>
                    <li>
                      <t>AddRoundKey (with tweaked round key)</t>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>For round 10 (final round):
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>SubBytes</t>
                    </li>
                    <li>
                      <t>ShiftRows</t>
                    </li>
                    <li>
                      <t>AddRoundKey (with tweaked round key)</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="example-implementation">
          <name>Example Implementation</name>
          <t>The following pseudocode illustrates the core operations of KIASU-BC:</t>
          <sourcecode type="pseudocode"><![CDATA[
function pad_tweak(tweak):
    // Input: 8-byte tweak
    // Output: 16-byte padded tweak
    padded = [0] * 16
    for i in range(0, 8, 2):
        padded[i*2] = tweak[i]
        padded[i*2+1] = tweak[i+1]
    return padded

function kiasu_bc_encrypt(key, tweak, plaintext):
    // Input: 16-byte key, 8-byte tweak, 16-byte plaintext
    // Output: 16-byte ciphertext

    // Expand key and pad tweak
    round_keys = expand_key(key)
    padded_tweak = pad_tweak(tweak)

    // Initial round
    state = plaintext
    state = add_round_key(state, round_keys[0] ^ padded_tweak)

    // Main rounds
    for round in range(1, 10):
        state = sub_bytes(state)
        state = shift_rows(state)
        state = mix_columns(state)
        state = add_round_key(state, round_keys[round] ^ padded_tweak)

    // Final round
    state = sub_bytes(state)
    state = shift_rows(state)
    state = add_round_key(state, round_keys[10] ^ padded_tweak)

    return state
]]></sourcecode>
          <t>Key and tweak sizes for each variant:</t>
          <ul spacing="normal">
            <li>
              <t><tt>ipcrypt-deterministic</tt>: Key: 16 bytes (128 bits), no tweak</t>
            </li>
            <li>
              <t><tt>ipcrypt-nd</tt>: Key: 16 bytes (128 bits), Tweak: 8 bytes (64 bits)</t>
            </li>
            <li>
              <t><tt>ipcrypt-ndx</tt>: Key: 32 bytes (256 bits, two AES-128 keys), Tweak: 16 bytes (128 bits)</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t><em>This section is to be removed before publishing as an RFC.</em></t>
      <t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/>. The description of implementations in this section is intended to assist the Independent Submissions Editor in judging whether the specification is suitable for publication.</t>
      <t>Please note that the listing of any individual implementation here does not imply endorsement. Furthermore, no effort has been spent to verify the information presented here that was supplied by contributors. This is not intended as, and must not be construed to be, a catalog of available implementations or their features.</t>
      <t>Multiple independent, interoperable implementations of the schemes described in this document have been developed:</t>
      <ul spacing="normal">
        <li>
          <t>C implementation</t>
        </li>
        <li>
          <t>D implementation</t>
        </li>
        <li>
          <t>Dart implementation (pub.dev package)</t>
        </li>
        <li>
          <t>Elixir implementation (hex package)</t>
        </li>
        <li>
          <t>Go implementation</t>
        </li>
        <li>
          <t>Java implementation (maven package)</t>
        </li>
        <li>
          <t>JavaScript/TypeScript implementation (npm package)</t>
        </li>
        <li>
          <t>PHP implementation (Composer package)</t>
        </li>
        <li>
          <t>Python reference implementation</t>
        </li>
        <li>
          <t>Ruby implementation (rubygems package)</t>
        </li>
        <li>
          <t>Rust implementation (cargo package)</t>
        </li>
        <li>
          <t>Swift implementation</t>
        </li>
        <li>
          <t>Zig implementation</t>
        </li>
      </ul>
      <t>A comprehensive list of implementations and their test results can be found at: https://ipcrypt-std.github.io/implementations/</t>
      <t>All implementations pass the common test vectors specified in this document, demonstrating interoperability across programming languages.</t>
    </section>
    <section anchor="licensing">
      <name>Licensing</name>
      <t><em>This section is to be removed before publishing as an RFC.</em></t>
      <t>Implementations of the ipcrypt methods are freely available under permissive open source licenses (MIT, BSD, or Apache 2.0) at the repository listed in the Implementation Status section.</t>
      <t>There are no known patent claims on these methods.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FIPS-197" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf">
          <front>
            <title>Advanced Encryption Standard (AES)</title>
            <author initials="" surname="NIST">
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2001" month="November" day="26"/>
          </front>
          <seriesInfo name="FIPS" value="PUB 197"/>
        </reference>
        <reference anchor="NIST-SP-800-38G" target="https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38G.pdf">
          <front>
            <title>Recommendation for Block Cipher Modes of Operation: Methods for Format-Preserving Encryption</title>
            <author initials="" surname="NIST">
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2016" month="March"/>
          </front>
          <seriesInfo name="NIST" value="SP 800-38G"/>
        </reference>
        <reference anchor="FAST" target="https://eprint.iacr.org/2021/1171">
          <front>
            <title>FAST: Format-Preserving Encryption via Shortened AES Tweakable Block Cipher</title>
            <author initials="Y." surname="Doh">
              <organization/>
            </author>
            <author initials="J." surname="Ha">
              <organization/>
            </author>
            <author initials="J." surname="Kim">
              <organization/>
            </author>
            <date year="2021" month="September" day="12"/>
          </front>
          <seriesInfo name="Cryptology ePrint Archive" value="Report 2021/1171"/>
        </reference>
        <reference anchor="IEEE-P1619" target="https://standards.ieee.org/ieee/1619/2041/">
          <front>
            <title>IEEE Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices</title>
            <author initials="" surname="IEEE">
              <organization/>
            </author>
            <date year="2007" month="December" day="18"/>
          </front>
          <seriesInfo name="IEEE" value="1619-2007"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
        <reference anchor="RFC7624">
          <front>
            <title>Confidentiality in the Face of Pervasive Surveillance: A Threat Model and Problem Statement</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="B. Schneier" initials="B." surname="Schneier"/>
            <author fullname="C. Jennings" initials="C." surname="Jennings"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <author fullname="B. Trammell" initials="B." surname="Trammell"/>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="D. Borkmann" initials="D." surname="Borkmann"/>
            <date month="August" year="2015"/>
            <abstract>
              <t>Since the initial revelations of pervasive surveillance in 2013, several classes of attacks on Internet communications have been discovered. In this document, we develop a threat model that describes these attacks on Internet confidentiality. We assume an attacker that is interested in undetected, indiscriminate eavesdropping. The threat model is based on published, verified attacks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7624"/>
          <seriesInfo name="DOI" value="10.17487/RFC7624"/>
        </reference>
        <reference anchor="RFC7258">
          <front>
            <title>Pervasive Monitoring Is an Attack</title>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>Pervasive monitoring is a technical attack that should be mitigated in the design of IETF protocols, where possible.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="188"/>
          <seriesInfo name="RFC" value="7258"/>
          <seriesInfo name="DOI" value="10.17487/RFC7258"/>
        </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="RFC4086">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <author fullname="S. Crocker" initials="S." surname="Crocker"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. 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="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="DEOXYS-BC" target="https://eprint.iacr.org/2014/427">
          <front>
            <title>Deoxys-BC: A Highly Secure Tweakable Block Cipher</title>
            <author initials="J." surname="Jean">
              <organization/>
            </author>
            <author initials="I." surname="Nikolić">
              <organization/>
            </author>
            <author initials="T." surname="Peyrin">
              <organization/>
            </author>
            <date year="2014"/>
          </front>
          <seriesInfo name="Cryptology ePrint Archive" value="Paper 2014/427"/>
        </reference>
        <reference anchor="SKINNY" target="https://eprint.iacr.org/2016/660">
          <front>
            <title>The SKINNY Family of Block Ciphers and its Low-Latency Variant MANTIS</title>
            <author initials="C." surname="Beierle">
              <organization/>
            </author>
            <author initials="A." surname="Biryukov">
              <organization/>
            </author>
            <author initials="L." surname="Perrin">
              <organization/>
            </author>
            <author initials="A." surname="Udovenko">
              <organization/>
            </author>
            <author initials="V." surname="Velichkov">
              <organization/>
            </author>
            <author initials="Q." surname="Wang">
              <organization/>
            </author>
            <date year="2016"/>
          </front>
          <seriesInfo name="CRYPTO" value="2016"/>
        </reference>
        <reference anchor="LRW2002" target="https://www.cs.berkeley.edu/~daw/papers/tweak-crypto02.pdf">
          <front>
            <title>Tweakable Block Ciphers</title>
            <author initials="M." surname="Liskov">
              <organization/>
            </author>
            <author initials="R." surname="Rivest">
              <organization/>
            </author>
            <author initials="D." surname="Wagner">
              <organization/>
            </author>
            <date year="2002"/>
          </front>
          <seriesInfo name="Fast Software Encryption" value="2002"/>
        </reference>
        <reference anchor="BRW2005" target="https://www.cs.ucdavis.edu/~rogaway/papers/subset.pdf">
          <front>
            <title>Format-Preserving Encryption</title>
            <author initials="M." surname="Bellare">
              <organization/>
            </author>
            <author initials="P." surname="Rogaway">
              <organization/>
            </author>
            <author initials="D." surname="Wagner">
              <organization/>
            </author>
            <date year="2005"/>
          </front>
          <seriesInfo name="CRYPTO" value="2005"/>
        </reference>
        <reference anchor="KIASU-BC" target="https://eprint.iacr.org/2014/831">
          <front>
            <title>Tweaks and Keys for Block Ciphers: the TWEAKEY Framework</title>
            <author initials="J." surname="Jean">
              <organization/>
            </author>
            <author initials="I." surname="Nikolić">
              <organization/>
            </author>
            <author initials="T." surname="Peyrin">
              <organization/>
            </author>
            <date year="2014"/>
          </front>
          <seriesInfo name="Cryptology ePrint Archive" value="Paper 2014/831"/>
        </reference>
        <reference anchor="XTS-AES">
          <front>
            <title>The XTS-AES Mode for Disk Encryption</title>
            <author initials="J." surname="Black">
              <organization/>
            </author>
            <author initials="E." surname="Dawson">
              <organization/>
            </author>
            <author initials="S." surname="Gueron">
              <organization/>
            </author>
            <author initials="P." surname="Rogaway">
              <organization/>
            </author>
            <date year="2010"/>
          </front>
          <seriesInfo name="IEEE" value="1619-2007"/>
        </reference>
        <reference anchor="IPCRYPT2" target="https://github.com/jedisct1/ipcrypt2">
          <front>
            <title>ipcrypt2: IP address encryption/obfuscation tool</title>
            <author initials="F." surname="Denis">
              <organization/>
            </author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="RSSAC040" target="https://www.icann.org/en/system/files/files/rssac-040-09mar21-en.pdf">
          <front>
            <title>RSSAC040: Recommendations on Anonymization Processes for Source IP Addresses Submitted for Future Analysis</title>
            <author initials="" surname="ICANN RSSAC">
              <organization/>
            </author>
            <date year="2021" month="March" day="09"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 898?>

<section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This appendix provides test vectors for all three variants of ipcrypt. Each test vector includes the key, input IP address, and encrypted output. For non-deterministic variants (<tt>ipcrypt-nd</tt> and <tt>ipcrypt-ndx</tt>), the tweak value is also included.</t>
      <t>Implementations MUST verify their correctness against these test vectors before deployment.</t>
      <section anchor="ipcrypt-deterministic-test-vectors">
        <name>ipcrypt-deterministic Test Vectors</name>
        <artwork><![CDATA[
# Test vector 1
Key:          0123456789abcdeffedcba9876543210
Input IP:     0.0.0.0
Encrypted IP: bde9:6789:d353:824c:d7c6:f58a:6bd2:26eb

# Test vector 2
Key:          1032547698badcfeefcdab8967452301
Input IP:     255.255.255.255
Encrypted IP: aed2:92f6:ea23:58c3:48fd:8b8:74e8:45d8

# Test vector 3
Key:          2b7e151628aed2a6abf7158809cf4f3c
Input IP:     192.0.2.1
Encrypted IP: 1dbd:c1b9:fff1:7586:7d0b:67b4:e76e:4777
]]></artwork>
      </section>
      <section anchor="ipcrypt-nd-test-vectors">
        <name>ipcrypt-nd Test Vectors</name>
        <artwork><![CDATA[
# Test vector 1
Key:          0123456789abcdeffedcba9876543210
Input IP:     0.0.0.0
Tweak:        08e0c289bff23b7c
Output:       08e0c289bff23b7cb349aadfe3bcef56221c384c7c217b16

# Test vector 2
Key:          1032547698badcfeefcdab8967452301
Input IP:     192.0.2.1
Tweak:        21bd1834bc088cd2
Output:       21bd1834bc088cd2e5e1fe55f95876e639faae2594a0caad

# Test vector 3
Key:          2b7e151628aed2a6abf7158809cf4f3c
Input IP:     2001:db8::1
Tweak:        b4ecbe30b70898d7
Output:       b4ecbe30b70898d7553ac8974d1b4250eafc4b0aa1f80c96
]]></artwork>
      </section>
      <section anchor="ipcrypt-ndx-test-vectors">
        <name>ipcrypt-ndx Test Vectors</name>
        <artwork><![CDATA[
# Test vector 1
Key:          0123456789abcdeffedcba98765432101032547698badcfeefcdab8967452301
Input IP:     0.0.0.0
Tweak:        21bd1834bc088cd2b4ecbe30b70898d7
Output:       21bd1834bc088cd2b4ecbe30b70898d782db0d4125fdace61db35b8339f20ee5

# Test vector 2
Key:          1032547698badcfeefcdab89674523010123456789abcdeffedcba9876543210
Input IP:     192.0.2.1
Tweak:        08e0c289bff23b7cb4ecbe30b70898d7
Output:       08e0c289bff23b7cb4ecbe30b70898d7766a533392a69edf1ad0d3ce362ba98a

# Test vector 3
Key:          2b7e151628aed2a6abf7158809cf4f3c3c4fcf098815f7aba6d2ae2816157e2b
Input IP:     2001:db8::1
Tweak:        21bd1834bc088cd2b4ecbe30b70898d7
Output:       21bd1834bc088cd2b4ecbe30b70898d76089c7e05ae30c2d10ca149870a263e4
]]></artwork>
        <t>For non-deterministic variants (<tt>ipcrypt-nd</tt> and <tt>ipcrypt-ndx</tt>), the tweak values shown are examples. In practice, tweaks MUST be uniformly random for each encryption operation.</t>
      </section>
    </section>
    <section numbered="false" anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not require any IANA actions.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author gratefully acknowledges the contributions and insightful comments from members of the IETF and the broader cryptographic community that have helped shape this specification. Special thanks to Tobias Fiebig for his thorough review of this draft.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9196XbbVprgfz7FbeWcadJFUtxEUax2n5FlOVF5U5tyUhmf
lIPlkkQZBFgAKImVuM78m+X3zBvNk9STzLfcDSBIyalUTfc4iSMBd/3uty8X
nU6nUURFLKfi6LUslmmYi3maiatrcR6GmcxzcZkE2XZdRGkivCQUb/35Jg88
/P2o4fl+Jm+hb7SmRkeNMA0SbwXDhZk3LzqhTKK8o952eqcN6CkXabadiiiZ
p41onU1FkW3yYtDrnfUGjXzjr6I8h9FvtmuJrUK5lvBXUjQ+ye1dmoVTcZUU
Mktk0XmOkzS8DSw8mzaE6Aie/OhF5iWfxHOc/QieC5FmCy+J/kzrxvdeXsRb
GCjo8nu58qJ4Kuah/M+93rwLgzdCWCo0HfQGJ0cN2OSwkRcAgY9enCbwYivz
Rr7ysuLjnzZpIXN+so6m4kORBm2Rp1mRyXkOP21X+MMPjUaSZitYwq3Exb64
up51+menU1qAPoXz8NZLAhm6cJ/hvF4Wiub55azFC7abxj8dABSs4M3V7EY9
oS3DE9qxF8NWc5hiU0iRzs2AOR3pjQyWSRqniy315X3DefQ7/X5nMKaHucwi
meOZ6Slx+VNx/f6ZgD3wFrxsIYupWBbFOp8eHye38Xrj5104hKK7SG+P8Qd8
cox9j3GxXfypCwN01+EcBsFnndl1Z9LrdYaTr8ugeSeDdLUCZKA9EZ4+i9Pg
k7iI1kuZiddpKHPc3tu1zNRJu0j9gqDfuQa0ltltlCwcGP+jgNofd3rDPRDF
iaZidi3U7r8QqLO1DCIvvt74ccQEmjOMZ9ddNaKC8otzmKgEWnpyEEDiNvLE
DKBTyASwExBR3NxJ75Pnx7J0DAcg+X1XPE+X5We/64pvvJ1HL6NVCWyDfqd3
1ukP9kDuAhdJwBbyOouSQpxnwRLpTLyTa1gzDXHc75/2a4Eq19ipG3lB1oUT
PnZbX11eXnau++P+WRlk+NxSJuIXr2KReetlFIjrDLhCQKAD5HjuFZ6AHwlS
nbewAeBhIfRPM28hgVPdRoHMD8AOpyuT5ynAo9Of7AEJtp8KXHYH29ZuO9cY
242klLRz/OEYewEMRv3jRgPHdJjW88u3v/9+1nl2UQbGc5neb3N8LM7FN9Fi
Ccx1JoNNJr8cS+D4fye9pLL9rngTfUrj6P/8t/KLm664lls4vjKZjb4cU649
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
+L+A54YUAKcAAA==

-->

</rfc>
