<?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.30 (Ruby 3.4.7) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-lamps-macaddress-on-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>Media Access Control (MAC) Addresses in X.509 Certificates</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-macaddress-on-01"/>
    <author initials="R." surname="Housley" fullname="Russ Housley">
      <organization abbrev="Vigil Security">Vigil Security, LLC</organization>
      <address>
        <email>housley@vigilsec.com</email>
      </address>
    </author>
    <author initials="C." surname="Bonnell" fullname="Corey Bonnell">
      <organization abbrev="DigiCert">DigiCert, Inc.</organization>
      <address>
        <email>corey.bonnell@digicert.com</email>
      </address>
    </author>
    <author initials="J." surname="Mandel" fullname="Joe Mandel">
      <organization abbrev="AKAYLA">AKAYLA, Inc.</organization>
      <address>
        <email>joe@akayla.com</email>
      </address>
    </author>
    <author initials="T." surname="Okubo" fullname="Tomofumi Okubo">
      <organization abbrev="Penguin Securities">Penguin Securities Pte. Ltd.</organization>
      <address>
        <email>tomofumi.okubo+ietf@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="January" day="06"/>
    <area>Security</area>
    <workgroup>Limited Additional Mechanisms for PKIX and SMIME</workgroup>
    <keyword>MACsec</keyword>
    <keyword>802.1AE</keyword>
    <keyword>X.509</keyword>
    <keyword>SubjectAltName</keyword>
    <abstract>
      <?line 57?>

<t>This document defines a new otherName for inclusion in the X.509 Subject Alternative Name (SAN) and Issuer Alternative Name (IAN) extensions to carry an IEEE Media Access Control (MAC) address. The new name form makes it possible to bind a layer‑2 interface identifier to a public key certificate. Additionally, this document defines how constraints on this name form can be encoded and processed in the X.509 Name Constraints extension.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://CBonnell.github.io/draft-housley-lamps-macaddress-on/draft-ietf-lamps-macaddress-on.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-lamps-macaddress-on/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Limited Additional Mechanisms for PKIX and SMIME Working Group mailing list (<eref target="mailto:spasm@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/spasm/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/spasm/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/CBonnell/draft-housley-lamps-macaddress-on"/>.</t>
    </note>
  </front>
  <middle>
    <?line 61?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Deployments that use X.509 certificates to identify a device by a Media Access Control (MAC) address need a standard way to encode it in the Subject Alternative Name (SAN) extension defined in <xref target="RFC5280"/>. This document defines a new otherName form "MACAddress". The name form carries either a 48‑bit IEEE 802 MAC address (EUI‑48) or a 64‑bit extended identifier (EUI‑64) in an OCTET STRING. Additionally, the name form also can convey constraints on EUI-48 or EUI-64 values when included in the Name Constraints extension defined in <xref target="RFC5280"/>. The new name form enables certificate‑based authentication at layer 2 and facilitates secure provisioning in Internet‑of‑Things and automotive networks.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="macaddress-othername">
      <name>MACAddress otherName</name>
      <t>The new name form is identified by the object identifier (OID) id‑on‑MACAddress (TBD1). The name form has variants to convey a EUI-48 as an OCTET STRING comprising of 6 octets, or a EUI-64 as an OCTET STRING comprising of 8 octets. Constraints on EUI-48 and EUI-64 values are conveyed as OCTET STRINGs whose lengths are twice the octet length of the identifiers. The first set of N octets (where N is the length of the address octets) define the bit pattern of the constraint that the address must match, and the second set of N octets defines the bit mask that defines the set of significant bits in the bit pattern.</t>
      <t>The following sub-sections describe how to encode EUI-48 and EUI-64 values and their corresponding constraints.</t>
      <section anchor="encoding-a-macaddress-as-an-alternative-name">
        <name>Encoding a MACAddress as an alternative name</name>
        <t>When the name form is included in a Subject Alternative Name or Issuer Alternate Name extension, the syntax consists of exactly six or eight octets. Values are encoded with the most significant octet encoded first ("big-endian" or "left-to-right" encoding). No text representation is permitted in the certificate, as human‑readable forms such as "00‑24‑98‑7B‑19‑02" or "0024.987B.1902" are used only in management interfaces. When a device natively possesses a 48‑bit MAC identifier, the CA <bcp14>MUST</bcp14> encode it using a 6‑octet OCTET STRING as the MACAddress value. When the device’s factory identifier is a 64‑bit EUI‑64 or when no canonical 48‑bit form exists, the CA <bcp14>MUST</bcp14> encode it using an 8‑octet OCTET STRING as the MACAddress value.</t>
      </section>
      <section anchor="encoding-a-macaddress-constraint">
        <name>Encoding a MACAddress constraint</name>
        <t>When the name form is included in the Name Constraints extension, the syntax consists of an OCTET STRING that is twice as long as the OCTET STRING representation of the address type being constrained. Within the OCTET STRING, two elements are encoded:</t>
        <ol spacing="normal" type="1"><li>
            <t>The first set of N octets (where N is 6 for an EUI-48 constraint or 8 for an EUI-64 constraint) contains the "value bit pattern". This bit pattern encodes the bits that the masked address must contain to be considered a match.</t>
          </li>
          <li>
            <t>The second set of N octets encodes the "mask bit pattern" of the constraint. Each bit that is asserted in the mask bit pattern indicates that the bit in the same position in the address is constrained by the first set of N octets.</t>
          </li>
        </ol>
        <t>The bit patterns encoded in both the value bit pattern and mask bit pattern are encoded with the most significant bit encoded first ("big-endian" or "left-to-right" encoding).</t>
        <t>If a bit is not asserted in the mask bit pattern, then the CA <bcp14>MUST NOT</bcp14> assert the corresponding bit in the value bit pattern. This rule ensures that a canonical encoding is used for a given mask bit pattern and value bit pattern.</t>
      </section>
      <section anchor="generation-and-validation-rules">
        <name>Generation and Validation Rules</name>
        <t>A certificate <bcp14>MAY</bcp14> include one or more MACAddress otherName values if and only if the subject device owns (or is expected to own) the corresponding MAC address for the certificate lifetime. MAC addresses <bcp14>SHOULD NOT</bcp14> appear in more than one valid certificate issued by the same Certification Authority (CA) at the same time, unless different layer‑2 interfaces share a public key.</t>
        <t>A Relying party that matches a presented MAC address to a certificate <bcp14>SHALL</bcp14> perform a byte‑for‑byte comparison of the OCTET STRING contents. Canonicalization, case folding, or removal of delimiter characters <bcp14>MUST NOT</bcp14> be performed.</t>
        <t>Wildcards are not supported.</t>
        <t>Self‑signed certificates that carry a MACAddress otherName <bcp14>SHOULD</bcp14> include the address of one of the device’s physical ports.</t>
      </section>
      <section anchor="name-constraints-processing">
        <name>Name Constraints Processing</name>
        <t>The MACAddress otherName follows the general rules for otherName constraints in RFC 5280, Section 4.2.1.10. A name constraints extension <bcp14>MAY</bcp14> impose permittedSubtrees and excludedSubtrees on id‑on‑MACAddress.</t>
        <t>In the pseudo-code below, 'mask' is shorthand for the bit string formed from the mask portion of a constraint (e.g., the second set of N octets in the constraint, where N is 6 for an EUI-48 constraint or 8 for an EUI-64 constraint).
Similarly, 'value' refers to the bit string formed from the first set of N octets in the constraint.</t>
        <section anchor="matching-rule">
          <name>Matching Rule</name>
          <t>To determine if a name matches a given constraint, the certificate-consuming application performs the following algorithm:</t>
          <ol spacing="normal" type="1"><li>
              <t>If the name is 6 octets (representing an EUI-48 value) and the constraint is 16 octets (representing an EUI-64 constraint), then the name does not match the constraint.</t>
            </li>
            <li>
              <t>If the name is 8 octets (representing an EUI-64 value) and the constraint is 12 octets (representing an EUI-48 constraint), then the name does not match the constraint.</t>
            </li>
            <li>
              <t>Extract the value bit pattern from the upper (big-endian) N octets of the constraint, where N is "6" for EUI-48 identifiers and "8" for EUI-64 identifiers.</t>
            </li>
            <li>
              <t>Extract the mask bit pattern from the lower (big-endian) N octets of the constraint, where N is "6" for EUI-48 identifiers and "8" for EUI-64 identifiers.</t>
            </li>
            <li>
              <t>Perform an exclusive OR (XOR) operation with the value bit string extracted in step 3 and the octets of the name value.</t>
            </li>
            <li>
              <t>Perform a bitwise AND operation with the bit string calculated in step 5 and the mask bit pattern.</t>
            </li>
            <li>
              <t>If the result of step 6 is a bit string consisting of entirely zeros, then the name matches the constraint. Conversely, if the result of the operation is a bit string with at least one bit asserted, then the name does not match the constraint.</t>
            </li>
          </ol>
          <t>The algorithm can be alternatively expressed as:</t>
          <t><tt>
// Returns true if 'name' matches 'constraint'
boolean nameMatchesConstraint (name, constraint) {
   return (2 * length (name) == length (constraint) &amp;&amp;
           ((constraint.value ^ name) &amp;
            constraint.mask) == 0) ;
}
</tt></t>
          <t>Implementations are not required to implement this algorithm, but <bcp14>MUST</bcp14> calculate an identical result to this algorithm for a given set of inputs.</t>
        </section>
        <section anchor="othernamemacaddress-path-validation-processing">
          <name>OtherName.MACAddress Path Validation Processing</name>
          <t>This section describes the Path Validation Processing specific to OtherName.MACAddress constraints.</t>
          <t>The following is a utility function used to determine whether or not
a given constraint is completely contained within another constraint.</t>
          <artwork><![CDATA[
// Returns true if 'child' is a logical subset of 'parent'
// Both 'child' and 'parent' are OtherName.MACAddress
// constraints.
// Used to calculate both UNION and INTERSECTION sets for
// OtherName.MACAddress constraints.
boolean childIncludedInParent (constraint child, constraint parent)
  return (
     // if the lengths are the same
     child.length == parent.length &&
     // and if there are no bits set in the pst.mask that
     //    aren't also set in the rst.mask
     // e.g. we can add mask bits to the current set, we can't remove them
     (child.mask | parent.mask) == child.mask &&
     // and if the rst.value has at least all the bits set that
     //   were set (and live) in the pst.value
     // e.g. we can't change the values of the live bits from the superior constraint
     (child.value & parent.mask) == (parent.value & parent.mask)
    );
}
]]></artwork>
          <section anchor="initialization">
            <name>Initialization</name>
            <t>Per sections 6.1.1 (h) and (i) of <xref target="RFC5280"/>, we need to specify NameConstraint.MACAddress set values for both the initial-permitted-subtrees and for initial-excluded-subtrees:</t>
            <artwork><![CDATA[
initial-permitted-subtrees{} += { 000000000000000000000000H,
                                  00000000000000000000000000000000H }
initial-excluded-subtrees{} += { };
]]></artwork>
          </section>
          <section anchor="intersection-operation">
            <name>Intersection Operation</name>
            <t>See Section 6.1.4 (g) (1) of <xref target="RFC5280"/>.  The intersection of the set of OtherName.MACAddress current permitted_subtrees with each certificate in the path is as follows:</t>
            <artwork><![CDATA[
// This logic can be used for both MACAddress and iPAddress OtherName types
// Initialize -
permitted_subtrees{} (0) = initial-permitted-subtrees;

// Foreach certificate i = (1..n) in the path {
set prevSubtrees{}  =
   { the set of OtherName.MACAddress.permitted_subtrees
     from the permitted_subtree (i-1) variable};
tempPermittedSubtrees {} = {};
tempRequestedSubtrees {} =
   { the set of OtherName.MACAddress.permitted_subtrees from
     the NameConstraintExtenson in the current certificate };

// rst => one of the requested subtrees (from the cert)
// pst -> one of the current permitted subtrees
foreach ( constraint rst in tempRequestedSubtrees) {
    foreach ( constraint pst in prevSubtrees) {
          if (childIncludedInParent (rst, pst) {
                tempPermitedSubtree += rst;
                break;
          }
     }
 }

permitted_subtrees{} (i) = tempPermittedSubtree;
// } end for each cert on path

]]></artwork>
          </section>
          <section anchor="union-operation">
            <name>Union Operation</name>
            <t>See Section 6.1.4 (g) (2) of <xref target="RFC5280"/>.  The union of the set of OtherName.MACAddress current excluded_subtrees with each certificate in the path is as follows:</t>
            <artwork><![CDATA[
// Initialize
excluded_subtrees{} (0) = initial-excluded-subtrees;

// Foreach certificate i = (1..n) in the path {
tempExcludedSubtrees {} =
  { the set of OtherName.MACAddress.excluded_subtrees from
    excluded_subtrees (i-1) };
tempRequestedSubtrees {} =
  { the set of OtherName.MACAddress.excluded_subtrees from
    the current certificate };

// note that the ordering of the loop here differs
// from the 'intersection' operation.
foreach (constraint rst in tempRequestedSubtrees) {
  boolean matches = false;
  foreach (constraint est in tempExcludedSubtrees) {
      // If I find a constraint in the current excluded
      // constraints that 'covers' the requested subtree,
      // I do no need to add the requested subtree
      // to the set of excluded subtrees.
      if (childIncludedInParent (rst, est)) {
        matches = true;
        break;
     }
   }
   if (!matches) {
      tempExcludedSubtrees += rst;
   }
}
// } end foreach certificate in the path
excluded_subtrees{} (i) = tempExcludedSubtrees;
]]></artwork>
            <t># Security Considerations</t>
            <t>The binding of a MAC address to a certificate is only as strong as the CA’s validation process. CAs <bcp14>MUST</bcp14> verify that the subscriber legitimately controls or owns the asserted MAC address.</t>
            <t>Some systems dynamically assign or share MAC addresses. Such practices can undermine the uniqueness and accountability that this name form aims to provide.</t>
            <t>Unlike IP addresses, MAC addresses are not typically routed across layer 3 boundaries. Relying parties in different broadcast domains <bcp14>SHOULD NOT</bcp14> assume uniqueness beyond their local network.</t>
          </section>
        </section>
      </section>
      <section anchor="privacy-considerations">
        <name>Privacy Considerations</name>
        <t>A MAC address can uniquely identify a physical device and by extension, its user. Certificates that embed unchanging MAC addresses facilitate long‑term device tracking. Deployments that use the MACAddress name <bcp14>SHOULD</bcp14> consider rotating addresses, using temporary certificates, or employing MAC Address Randomization where feasible.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to make the following assignments in the “SMI Security for PKIX Module Identifier” (1.3.6.1.5.5.7.0) registry:</t>
      <artwork><![CDATA[
    +=========+====================================+===============+
    | Decimal | Description                        | References    |
    +=========+====================================+===============+
    | TBD0    | id-mod-mac-address-other-name-2025 | This document |
    +---------+------------------------------------+---------------+
]]></artwork>
      <t>IANA is requested to make the following assignment in the “SMI Security for PKIX Other Name Forms” (1.3.6.1.5.5.7.8) registry:</t>
      <artwork><![CDATA[
    +=========+=================================+===============+
    | Decimal | Description                     | References    |
    +=========+=================================+===============+
    | TBD1    | id-on-MACAddress                | This document |
    +---------+---------------------------------+---------------+
]]></artwork>
    </section>
    <section anchor="asn1-module">
      <name>ASN.1 Module</name>
      <t>This Appendix contains the ASN.1 Module for the MAC Address; it follows the conventions established by <xref target="RFC5912"/>.</t>
      <artwork><![CDATA[
MACAddressOtherName-2025
  { iso(1) identified-organization(3) dod(6) internet(1)
    security(5) mechanisms(5) pkix(7) id-mod(0)
    id-mod-mac-address-other-name-2025(TBD0) }

DEFINITIONS IMPLICIT TAGS ::=
BEGIN

IMPORTS
  OTHER-NAME FROM PKIX1Implicit-2009
    { iso(1) identified-organization(3) dod(6) internet(1)
      security(5) mechanisms(5) pkix(7) id-mod(0)
      id-mod-pkix1-implicit-02(59) }

 id-pkix FROM PKIX1Explicit-2009
   { iso(1) identified-organization(3) dod(6) internet(1)
     security(5) mechanisms(5) pkix(7) id-mod(0)
     id-mod-pkix1-explicit-02(51) } ;

-- id-pkix 8 is the otherName arc
id-on  OBJECT IDENTIFIER ::= { id-pkix 8 }

-- OID for this name form
id-on-MACAddress OBJECT IDENTIFIER ::= { id-on TBD1 }

-- Contents of the otherName field
MACAddressOtherNames OTHER-NAME ::= { on-MACAddress, ... }

on-MACAddress OTHER-NAME ::= {
MACAddress IDENTIFIED BY id-on-MACAddress }

MACAddress ::= OCTET STRING (SIZE (6 | 8 | 12 | 16))

END
]]></artwork>
    </section>
    <section anchor="mac-address-othername-examples">
      <name>MAC Address otherName Examples</name>
      <section anchor="eui-48-identifier">
        <name>EUI-48 identifier</name>
        <t>The following is a human‑readable summary of the Subject Alternative
Name extension from a certificate containing a single MACAddress
otherName with value 00‑24‑98‑7B‑19‑02:</t>
        <artwork><![CDATA[
  SEQUENCE {
    otherName [0] {
      OBJECT IDENTIFIER id-on-MACAddress
      [0] OCTET STRING '0024987B1902'H
    }
  }
]]></artwork>
      </section>
      <section anchor="eui-64-identifier">
        <name>EUI-64 identifier</name>
        <t>An EUI‑64 example (AC‑DE‑48‑00‑11‑22‑33‑44):</t>
        <artwork><![CDATA[
  [0] OCTET STRING 'ACDE480011223344'H
]]></artwork>
      </section>
      <section anchor="eui-48-constraint-for-universal-unicast-addresses">
        <name>EUI-48 constraint for universal, unicast addresses</name>
        <t>The first octet of a MAC address contains two flag bits. IEEE bit numbering has bit '0' as the least significant bit of the octet.</t>
        <ul spacing="normal">
          <li>
            <t>I/G bit (bit 0) – 0 = unicast, 1 = multicast.  Multicast prefixes are never OUIs.</t>
          </li>
          <li>
            <t>U/L bit (bit 1) – 0 = universal (IEEE‑assigned), 1 = local.</t>
          </li>
        </ul>
        <t>These flags let the implementations exclude multicast and local addresses but still cannot prove that a 24‑bit value is an IEEE‑registered OUI. 36‑bit CIDs share the same first 24 bits and enterprises <bcp14>MAY</bcp14> deploy pseudo‑OUIs. CAs <bcp14>MUST</bcp14> include only addresses the subscriber legitimately controls (registered OUI or CID).  Before issuing a certificate that contains a MACAddress or a name constraint based on such a permitted set of addresses, the CA <bcp14>MUST</bcp14> verify that control: for example, by consulting the IEEE registry or reviewing manufacturer documentation.</t>
        <t>The following constraint definition constrains EUI-48 values to only
those are universal and unicast; locally assigned or multicast values will not match the
constraint.</t>
        <artwork><![CDATA[
  [0] OCTET STRING '020000000000030000000000'H

]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC5280">
        <front>
          <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
          <author fullname="D. Cooper" initials="D." surname="Cooper"/>
          <author fullname="S. Santesson" initials="S." surname="Santesson"/>
          <author fullname="S. Farrell" initials="S." surname="Farrell"/>
          <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
          <author fullname="R. Housley" initials="R." surname="Housley"/>
          <author fullname="W. Polk" initials="W." surname="Polk"/>
          <date month="May" year="2008"/>
          <abstract>
            <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5280"/>
        <seriesInfo name="DOI" value="10.17487/RFC5280"/>
      </reference>
      <reference anchor="RFC5912">
        <front>
          <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
          <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
          <author fullname="J. Schaad" initials="J." surname="Schaad"/>
          <date month="June" year="2010"/>
          <abstract>
            <t>The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5912"/>
        <seriesInfo name="DOI" value="10.17487/RFC5912"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <?line 379?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>We thank the participants on the LAMPS Working Group mailing list for their insightful feedback and comments. In particular, the authors extend sincere appreciation to David von Oheimb, John Mattsson, and Michael StJohns for their reviews and suggestions, which greatly improved the quality of this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
