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

<t>This document specifies methods for encrypting and obfuscating IP addresses, providing both deterministic format‑preserving and non‑deterministic constructions. These methods address privacy concerns raised in <xref target="RFC6973"/> and <xref target="RFC7258"/> regarding pervasive monitoring and data collection.</t>
      <t>The methods apply uniformly to both IPv4 and IPv6 addresses by converting them into a 16‑byte representation. Two generic constructions are defined—one using a 128‑bit block cipher and the other using a 128‑bit tweakable block cipher—along with three concrete instantiations:</t>
      <ul spacing="normal">
        <li>
          <t><strong><tt>ipcrypt-deterministic</tt>:</strong> Deterministic encryption using AES128 (applied as a single‑block operation).</t>
        </li>
        <li>
          <t><strong><tt>ipcrypt-nd</tt>:</strong> Non‑deterministic encryption using the KIASU‑BC tweakable block cipher with an 8‑byte tweak.</t>
        </li>
        <li>
          <t><strong><tt>ipcrypt-ndx</tt>:</strong> Non‑deterministic encryption using the AES‑XEX tweakable block cipher with a 16‑byte tweak.</t>
        </li>
      </ul>
      <t>Deterministic mode produces a 16‑byte ciphertext (enabling format preservation), while non‑deterministic modes prepend a randomly sampled tweak (which MUST be uniformly random when generated, as specified in <xref target="RFC4086"/>) to produce larger ciphertexts that resist correlation attacks.</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 111?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document specifies a standard for the encryption and obfuscation of IP addresses for both operational use and privacy preservation. The objective is to enable network operators, researchers, and privacy advocates to share or analyze data while protecting sensitive address information, addressing concerns raised in <xref target="RFC7624"/> regarding confidentiality in the face of pervasive surveillance.</t>
      <section anchor="use-cases-and-motivations">
        <name>Use Cases and Motivations</name>
        <t>The main motivations include:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Privacy Protection:</strong> Encrypting IP addresses prevents the disclosure of user-specific information when data is logged or measured, as discussed in <xref target="RFC6973"/>.</t>
          </li>
          <li>
            <t><strong>Format Preservation:</strong> Ensuring that the encrypted output remains a valid IP address allows network devices to process the data without modification.</t>
          </li>
          <li>
            <t><strong>Mitigation of Correlation Attacks:</strong> Deterministic encryption reveals repeated inputs; non‑deterministic modes use a random tweak to obscure linkability while keeping the underlying input confidential.</t>
          </li>
        </ul>
      </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-16byte-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:</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-16byte-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>
        <t>(For additional illustration, see Appendix B.)</t>
      </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</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</t>
            </li>
            <li>
              <t>Accepts a key, a tweak, and a message</t>
            </li>
            <li>
              <t>The tweak is typically randomly sampled (and 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></t>
        </li>
        <li>
          <t><strong>DEOXYS-BC</strong></t>
        </li>
        <li>
          <t><strong>KIASU-BC</strong></t>
        </li>
        <li>
          <t><strong>AES-XEX</strong></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.</t>
      <section anchor="specific-instantiation-ipcrypt-deterministic">
        <name>Specific Instantiation: ipcrypt-deterministic</name>
        <t>This instantiation employs AES128 in a single‑block operation. Since AES128 is a permutation, every distinct 16‑byte input maps to a unique 16‑byte ciphertext, preserving the IP address format.</t>
        <section anchor="operation-flow-diagram">
          <name>Operation Flow Diagram</name>
          <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>
      <section anchor="format-preservation">
        <name>Format Preservation</name>
        <ul spacing="normal">
          <li>
            <t>If the 16‑byte ciphertext begins with an IPv4‑mapped prefix, it <strong>MUST</strong> be rendered as a dotted‑decimal IPv4 address.</t>
          </li>
          <li>
            <t>Otherwise, it is interpreted as an IPv6 address.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><strong>Note:</strong>
To ensure IPv4 format preservation, implementers <strong>MUST</strong> consider using cycle‑walking or an FPE mode if required.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="nondeterministic-encryption">
      <name>Non‑Deterministic Encryption</name>
      <t>Non‑deterministic encryption leverages a tweakable block cipher together with a random tweak.</t>
      <t>Although the tweak is generated uniformly at random (and thus may occasionally collide per birthday bounds), such collisions are benign when they occur with different inputs. An (input, tweak) collision reveals that the same input was encrypted with the same tweak but does not disclose the input’s value.</t>
      <t>The usage limits discussed below apply per cryptographic key; rotating keys can extend secure usage beyond these bounds.</t>
      <t>This document defines two 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‑XEX 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 <strong>MUST be uniformly random</strong>. Reusing the same randomly generated tweak on different inputs is acceptable from a confidentiality standpoint.</t>
      <section anchor="ipcrypt-nd-kiasubc">
        <name>ipcrypt-nd (KIASU‑BC)</name>
        <ul spacing="normal">
          <li>
            <t><strong>Tweak:</strong> 8 bytes (64 bits).</t>
          </li>
          <li>
            <t><strong>Output:</strong> 24 bytes total (8‑byte tweak concatenated with a 16‑byte ciphertext).</t>
          </li>
        </ul>
        <section anchor="usage-considerations">
          <name>Usage Considerations</name>
          <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.</t>
          <t>If an (input, tweak) collision occurs, it indicates that the same input was processed with that tweak without revealing the input’s value. These collision bounds apply per cryptographic key; by rotating keys regularly, secure usage can be extended well beyond these bounds.</t>
          <t>Ultimately, the effective security is determined by the underlying block cipher’s strength (≈2^128 for AES‑128).</t>
        </section>
      </section>
      <section anchor="ipcrypt-ndx-aesxex">
        <name>ipcrypt-ndx (AES‑XEX)</name>
        <ul spacing="normal">
          <li>
            <t><strong>Tweak:</strong> 16 bytes (128 bits).</t>
          </li>
          <li>
            <t><strong>Output:</strong> 32 bytes total (16‑byte tweak concatenated with a 16‑byte ciphertext).</t>
          </li>
        </ul>
        <section anchor="usage-considerations-1">
          <name>Usage Considerations</name>
          <t>Independent sampling of a 16‑byte tweak results in an expected collision after about 2^(128/2) = 2^64 operations.</t>
          <t>As with ipcrypt-nd, an (input, tweak) collision reveals repetition without compromising the input value.</t>
          <t>These limits are per key; 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>
      <section anchor="comparison-of-modes">
        <name>Comparison of Modes</name>
        <ul spacing="normal">
          <li>
            <t><strong>Deterministic (<tt>ipcrypt-deterministic</tt>):</strong>
Produces a 16‑byte output; preserves format but reveals repeated inputs.</t>
          </li>
          <li>
            <t><strong>Non‑Deterministic:</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t><strong><tt>ipcrypt-nd</tt> (KIASU‑BC):</strong> Produces a 24‑byte output using an 8‑byte tweak; (input, tweak) collisions reveal repeated inputs (with the same tweak) but not their values.</t>
              </li>
              <li>
                <t><strong><tt>ipcrypt-ndx</tt> (AES‑XEX):</strong> Produces a 32‑byte output using a 16‑byte tweak; supports higher secure operation counts per key.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <ul spacing="normal">
        <li>
          <t><strong>Deterministic Mode:</strong>
AES‑128’s permutation behavior ensures distinct inputs yield distinct outputs; however, repeated inputs result in identical ciphertexts, thereby revealing repetition.</t>
        </li>
        <li>
          <t><strong>Non‑Deterministic Mode:</strong>
The inclusion of a random tweak ensures that encrypting the same input generally produces different outputs.  </t>
          <t>
In cases where an (input, tweak) collision occurs, an attacker learns only that the same input was processed with that tweak, not the value of the input itself. Security is determined by the underlying block cipher (≈2^128 for AES‑128) on a per-key basis.  </t>
          <t>
Key rotation is recommended to extend secure usage beyond the per-key collision bounds.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not require any IANA actions.</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="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="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="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="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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <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="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="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" target="https://web.cs.ucdavis.edu/~rogaway/papers/xts.pdf">
          <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>
      </references>
    </references>
    <?line 313?>

<section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author gratefully acknowledges the contributions and insightful comments from members of the IETF independent stream community and the broader cryptographic community that have helped shape this specification.</t>
    </section>
    <section anchor="appendices">
      <name>Appendices</name>
      <section anchor="appendix-a-pseudocode-and-examples">
        <name>Appendix A. Pseudocode and Examples</name>
        <t>This appendix provides detailed pseudocode for key operations described in this document.</t>
        <section anchor="ipv4-address-conversion">
          <name>IPv4 Address Conversion</name>
          <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) & 0xFF)
    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(ip_address, key):
    bytes16 = convertTo16Bytes(ip_address)
    ciphertext = AES128_encrypt(key, bytes16)
    encrypted_ip = Bytes16ToIP(ciphertext)
    return encrypted_ip
]]></sourcecode>
        </section>
        <section anchor="nondeterministic-encryption-using-kiasubc-ipcrypt-nd">
          <name>Non‑Deterministic Encryption using KIASU‑BC (ipcrypt-nd)</name>
          <sourcecode type="pseudocode"><![CDATA[
function ipcrypt_nd(ip_address, key):
    bytes16 = convertTo16Bytes(ip_address)
    // Generate an 8-byte random tweak (MUST be uniformly random)
    tweak = random_bytes(8)
    ciphertext = KIASU_BC_encrypt(key, tweak, bytes16)
    result = concatenate(tweak, ciphertext)  // 8 bytes || 16 bytes = 24 bytes total
    return result
]]></sourcecode>
        </section>
        <section anchor="nondeterministic-encryption-using-aesxex-ipcrypt-ndx">
          <name>Non‑Deterministic Encryption using AES‑XEX (ipcrypt-ndx)</name>
          <sourcecode type="pseudocode"><![CDATA[
function ipcrypt_ndx(ip_address, key):
    bytes16 = convertTo16Bytes(ip_address)
    // Generate a 16-byte random tweak (MUST be uniformly random)
    tweak = random_bytes(16)
    ciphertext = AES_XEX_encrypt(key, tweak, bytes16)
    result = concatenate(tweak, ciphertext)  // 16 bytes || 16 bytes = 32 bytes total
    return result
]]></sourcecode>
        </section>
      </section>
      <section anchor="appendix-b-diagrams">
        <name>Appendix B. Diagrams</name>
        <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
       [AES128 Single-Block Encrypt]
                |
                v
        16-Byte Ciphertext
                |
                v
        [Convert to IP Format]
                |
                v
         Encrypted IP Address
]]></artwork>
        </section>
        <section anchor="nondeterministic-encryption-flow-ipcrypt-nd">
          <name>Non‑Deterministic Encryption Flow (ipcrypt-nd)</name>
          <artwork><![CDATA[
              IP Address
                  |
                  v
      [Convert to 16 Bytes] ---> 16-Byte Representation
                  |
                  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="nondeterministic-encryption-flow-ipcrypt-ndx">
          <name>Non‑Deterministic Encryption Flow (ipcrypt-ndx)</name>
          <artwork><![CDATA[
              IP Address
                  |
                  v
      [Convert to 16 Bytes] ---> 16-Byte Representation
                  |
                  v
    [Generate Random 16-Byte Tweak]
                  |
                  v
       [AES-XEX Tweakable Encrypt]
                  |
                  v
         16-Byte Ciphertext
                  |
                  v
    [Concatenate Tweak || Ciphertext]
                  |
                  v
         32-Byte Output (`ipcrypt-ndx`)
]]></artwork>
        </section>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
SAAA

-->

</rfc>
