<?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-08" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title abbrev="ipcrypt">Methods for IP Address Encryption and Obfuscation</title>
    <seriesInfo name="Internet-Draft" value="draft-denis-ipcrypt-08"/>
    <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 requires protection, yet common techniques such as 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 such as 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.</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 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>Efficiency and Compactness: 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 addresses in real-time rather than requiring expensive batch operations.</t>
          </li>
          <li>
            <t>High Usage Limits: 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 operationally complex key rotation schemes at much lower thresholds.</t>
          </li>
          <li>
            <t>Format Preservation (Deterministic): 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>Interoperability: 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>Privacy Protection: 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>Correlation Attack Resistance: 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>Privacy-Preserving Analytics: 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>Seamless Third-Party Integration: 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>IP Address: An IPv4 or IPv6 address as defined in <xref target="RFC4291"/>.</t>
        </li>
        <li>
          <t>16-Byte Representation: A fixed-length representation used for both IPv4 (via IPv4-mapped IPv6) and IPv6 addresses.</t>
        </li>
        <li>
          <t>Tweak: A non-secret, additional input to a tweakable block cipher that further randomizes the output.</t>
        </li>
        <li>
          <t>Deterministic Encryption: Encryption that always produces the same ciphertext for a given input and key.</t>
        </li>
        <li>
          <t>Non-Deterministic Encryption: Encryption that produces different ciphertexts for the same input due to the inclusion of a randomly sampled tweak.</t>
        </li>
        <li>
          <t>(Input, Tweak) Collision: 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>128-bit Block Cipher Construction:
          </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>128-bit Tweakable Block Cipher (TBC) Construction:
          </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>SKINNY (see <xref target="SKINNY"/>)</t>
        </li>
        <li>
          <t>DEOXYS-BC (see <xref target="DEOXYS-BC"/>)</t>
        </li>
        <li>
          <t>KIASU-BC (see <xref target="implementing-kiasu-bc"/> for implementation details)</t>
        </li>
        <li>
          <t>AES-XTS (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>Duplicate IP addresses need to be detected 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)
- Stronger privacy guarantees than deterministic encryption provides are required
- 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><tt>ipcrypt-nd</tt>: 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><tt>ipcrypt-ndx</tt>: 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 specific privacy requirements and operational constraints:</t>
          <ul spacing="normal">
            <li>
              <t>Deterministic (<tt>ipcrypt-deterministic</tt>):
              </t>
              <ul spacing="normal">
                <li>
                  <t>Output size: 16 bytes (most compact)</t>
                </li>
                <li>
                  <t>Privacy: Same IP always produces same ciphertext (allows correlation)</t>
                </li>
                <li>
                  <t>Use case: When duplicate identification is needed or when format preservation is critical</t>
                </li>
                <li>
                  <t>Performance: Fastest (single AES operation)</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Non-Deterministic <tt>ipcrypt-nd</tt> (KIASU-BC):
              </t>
              <ul spacing="normal">
                <li>
                  <t>Output size: 24 bytes (16-byte ciphertext + 8-byte tweak)</t>
                </li>
                <li>
                  <t>Privacy: Same IP produces different ciphertexts (prevents most correlation)</t>
                </li>
                <li>
                  <t>Use case: General privacy protection with reasonable storage overhead</t>
                </li>
                <li>
                  <t>Collision resistance: Approximately 4 billion operations per key</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Non-Deterministic <tt>ipcrypt-ndx</tt> (AES-XTS):
              </t>
              <ul spacing="normal">
                <li>
                  <t>Output size: 32 bytes (16-byte ciphertext + 16-byte tweak)</t>
                </li>
                <li>
                  <t>Privacy: Same IP produces different ciphertexts (prevents correlation)</t>
                </li>
                <li>
                  <t>Use case: Maximum privacy protection when storage permits</t>
                </li>
                <li>
                  <t>Collision resistance: 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>Monotonic Counter: 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>UUIDs: 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>What these methods protect against:</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>What these methods do NOT protect against:</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>SubBytes: Apply the AES S-box to each byte of the state</t>
            </li>
            <li>
              <t>ShiftRows: Rotate each row of the state matrix</t>
            </li>
            <li>
              <t>MixColumns: Mix the columns of the state matrix (except in the final round)</t>
            </li>
            <li>
              <t>AddRoundKey: 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>Key Expansion:
              </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>Tweak Processing:
              </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>Encryption Process:
              </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 draft document reviewers 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:
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
oGrY06UAAA==

-->

</rfc>
