<?xml version="1.0" encoding="US-ASCII"?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc1123 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.1123.xml'>
<!ENTITY rfc2119 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
<!ENTITY rfc4690 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4690.xml'>
<!ENTITY rfc5890 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5890.xml'>
<!ENTITY rfc5891 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5891.xml'>
<!ENTITY rfc5892 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5892.xml'>
<!ENTITY rfc5893 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5893.xml'>
<!ENTITY rfc5894 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5894.xml'>
<!ENTITY rfc5895 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5895.xml'>
<!ENTITY rfc6365 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.6365.xml'>
]>


<rfc number="6912" category="info" ipr="trust200902" submissionType="IAB" consensus="yes">

  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
  <?rfc toc="yes" ?>
  <?rfc symrefs="yes" ?>
  <?rfc sortrefs="yes" ?>
  <?rfc strict="yes" ?>
  <?rfc compact="yes" ?>
  <?rfc subcompact="no" ?>
  <?rfc tocompact="yes" ?>
  <?rfc comments="yes" ?>
  <?rfc inline="yes" ?>
  <?rfc rfcedstyle="yes"?>
  <front>
    <title abbrev="DNS Zone Code Point Principles">Principles for
    Unicode Code Point Inclusion in Labels in the DNS</title>
    <author initials="A." surname="Sullivan" fullname="Andrew Sullivan">
      <organization>Dyn, Inc.</organization>
      <address>
        <postal>
          <street>150 Dow St</street>
          <city>Manchester</city>
          <region>NH</region>
          <code>03101</code>
          <country>USA</country>
        </postal>
        <email>asullivan@dyn.com</email>
      </address>
    </author>
    <author initials="D." surname="Thaler" fullname="Dave Thaler">
      <organization>Microsoft</organization>
      <address>
        <postal>
          <street>One Microsoft Way</street>
          <city>Redmond</city>
          <region>WA</region>
          <code>98052</code>
          <country>USA</country>
        </postal>
        <email>dthaler@microsoft.com</email>
      </address>
    </author>
    <author fullname="John C Klensin" initials="J." surname="Klensin" >
      <address>
        <postal>
          <street>1770 Massachusetts Ave, Ste 322</street>
          <city>Cambridge</city> <region>MA</region>
          <code>02140</code>
          <country>USA</country>
        </postal>
        <phone>+1 617 491 5735</phone>
        <email>john-ietf@jck.com</email>
      </address>
    </author>
    <author initials="O." surname="Kolkman" fullname="Olaf Kolkman">
      <organization>NLnet Labs</organization>
      <address>
        <postal>
          <street>Science Park 400</street>
          <city>Amsterdam</city>
          <code>1098 XH</code>
          <country>The Netherlands</country>
        </postal>
        <email>olaf@NLnetLabs.nl</email>
      </address>
    </author>

    <date month="March" year="2013"/>

    <abstract>
      <t>
        Internationalized Domain Names in Applications (IDNA)
        makes available to DNS zone administrators a very wide
        range of Unicode code points.  Most operators of zones should
        probably not permit registration of U&nbhy;labels using the entire
        range.  This is especially true of zones that accept
        registrations across organizational boundaries, such as
        top-level domains and, most importantly, the root.  It is
        unfortunately not possible to generate algorithms to determine
        whether permitting a code point presents a low risk.  This
        memo presents a set of principles that can be used to guide
        the decision of whether a Unicode code point may be wisely
        included in the repertoire of permissible code points in a
        U-label in a zone.
      </t>
    </abstract>
  </front>
  <middle>
    <section title="Introduction">
      <t> Operators of a DNS zone need to set policies around what Unicode
          code points are allowed in labels in that zone.  Typically
          there are a number of important goals to consider when constructing
          such policies.  These include, for instance, avoiding possible
          visual confusability between two labels, avoiding possible 
          confusion between Fully Qualified Domain Names (FQDNs) and IP 
          address literals, accessibility to the disabled (see 
          "Web Content Accessibility Guidelines (WCAG) 2.0" <xref target="WCAG20" /> for
          some discussion in a web context), and other usability issues.
      </t>
      <t> This document provides a set of principles that zone operators
          can use to construct their code point policies in order to
          improve usability and clarity and thereby reduce confusion.
      </t>

      <section title="Terminology" anchor="terms">
        <t>This document uses the following terms.</t>

        <t><list style="hanging">

        <t>A-label: an LDH label that starts with "xn--"
           and meets all the IDNA requirements, with additional
           restrictions as explained in Section 2.3.2.1 of
           the IDNA Definitions document <xref target="RFC5890" />.
        </t>

        <t>Character: a member of a set of elements used for the 
           organization, control, or representation of data.  See
           Section 2 of the Internationalization Terminology document <xref target="RFC6365" /> for more details.
        </t>

        <t>Language: a way that humans communicate.  The use of language
           occurs in many forms, the most common of which are speech,
           writing, and signing. See
           Section 2 of RFC 6365 for more details.
        </t>

        <t>LDH label: a string consisting of ASCII letters, digits,
           and the hyphen, with additional restrictions as explained
           in Section 2.3.1 of RFC 5890.
        </t>

        <t>Public zone: in this document, a DNS zone that accepts
           registration requests from organizations outside the zone
           administrator's own organization.  (Whether the zone performs
           delegation is a separate question.  What is important is 
           the diversity of the registration-requesting community.)
           Note that under this definition, the root zone is a public
           zone, though one that has a unique function in the DNS.
        </t>

        <t>Rendering: the display of a string of text.  See
           Section 5 of RFC 6365 for more details.
        </t>

        <t>Script: a set of graphic characters used for the written
           form of one or more languages.  See
           Section 2 of RFC 6365 for more details.
        </t>

        <t>U-label: a string of Unicode characters that meets all
           the IDNA requirements and includes at least one non-ASCII
           character, with additional restrictions as explained
           in Section 2.3.2.1 of RFC 5890.
        </t>

        <t>Writing system: a set of rules for using one or more scripts
           to write a particular language.  See
           Section 2 of RFC 6365 for more details.
        </t>
        </list></t>

        <t>This memo does not propose a protocol standard, and the use
           of words such as "should" follow the ordinary English meaning,
           and not that laid out in <xref target="RFC2119" />.
        </t>
      </section>
    </section>

    <section title="Background">
      <t>In recent communications <xref target="IABCOMM1" /> 
      <xref target="IABCOMM2" />, the IAB has emphasized the
      importance of conservatism in allocating labels conforming to
      IDNA2008 <xref target="RFC5890" /> <xref target="RFC5891" />
      <xref target="RFC5892" /> <xref target="RFC5893" /> <xref
      target="RFC5894" /> <xref target="RFC5895" /> in DNS zones,
      and especially in the root zone.  Traditional LDH labels 
      in the root zone used only alphabetic
      characters (i.e., ASCII a-z, which under the DNS also match A-Z).
      Matters are more
      complicated with U-labels, however.  The IAB communications
      recommended that U-labels permit only code points with a
      General_Category (gc) of Ll (Lowercase_Letter), Lo
      (Other_Letter), or Lm (Modifier_Letter), but noted that for
      practical considerations other code points might be permitted on
      a case-by-case basis.
      </t>

      <t>
      The IAB recommendations do, however, leave some issues open
      that need to be addressed. It is not clear that all code points
      permitted under IDNA2008 that have a General_Category of Lo or Lm
      are appropriate for a zone such as the root zone.
      To take but one example, the code point U+02BC
      (MODIFIER LETTER APOSTROPHE) has a General_Category of Lm.  In
      practically every rendering (and we are unaware of an
      exception), U+02BC is indistinguishable from U+2019 (RIGHT SINGLE
      QUOTATION MARK), which has a General_Category of Pf
      (Final_Punctuation).  U+02BC will also be read by large numbers
      of people as being the same character as U+0027 (APOSTROPHE),
      which has a General_Category of Po (Other_Punctuation), and some
      computer systems may treat U+02BC as U+0027.  U+02BC is PROTOCOL
      VALID (PVALID) under IDNA2008 (see the IDNA Code Points document <xref target="RFC5892" />),
      whereas both other code points are DISALLOWED.  So, to begin
      with, it is plain that not every code point with a
      General_Category of Ll, Lo, or Lm is consistent with the type of
      conservatism principle discussed in <xref
      target="conservatism"/> below or the previous IAB recommendations.</t>

      <t>To make matters worse, some languages are dependent on code
      points with General_Category Mc (Spacing_Mark) or
      General_Category Mn (Nonspacing_Mark).  This dependency is
      particularly common in Indic languages, though not exclusive to
      them.  (At the risk of vastly oversimplifying, the overarching
      issue is mostly the interaction of complex writing systems and
      the way Unicode works.)  To restrict users of those languages
      to only code points with General_Category of Ll, Lo, or Lm
      would be extremely limiting.  While DNS labels are not words, or
      sentences, or phrases (as noted in the next steps for IDN <xref target="RFC4690" />),
      they are intended to support useful mnemonics.  Mnemonics that
      diverge wildly from the usual conventions are poor ones, because
      in not following the usual conventions they are not easy to
      remember.  Also, wide divergence from usual conventions, if not
      well-justified (and especially in a shared namespace like the
      root), invites political controversy.</t>

      <t>Many of the issues above turn out to be relevant to all
      public zones. Moreover, the overall
      issue of developing a policy for code point permission is common
      to all zones that accept A-labels or U-labels for registration.
      As Section 4.3 of the IDNA Protocol document <xref target="RFC5891" />
      says, every registry at every level of the DNS is "expected to establish
      policies about label registrations".
      </t>

      <t>For reasons of sound management, it is not desirable to
      decide whether to permit a given code point only when an
      application containing that code point is pending.  That
      approach reduces predictability and is bound to appear subject
      to special pleas.  It is better instead to produce the
      rules governing acceptance of code points in advance.</t>
      
      <t>As is evident from the foregoing discussion about the Letter
      and Mark categories, it is simply not possible to make code
      point decisions algorithmically.  If it were possible to develop
      such an algorithm, it would already exist: the DNS is hardly
      unique in needing to impose restrictions on code points while
      accommodating many different linguistic communities.
      Nevertheless, new guidelines can be made by starting from
      overarching principles. These guidelines act more as meta-rules,
      leading to the establishment of other rules about the inclusion
      and exclusion of particular code points in labels in a given
      zone, always based on the list of code points permitted by
      IDNA.</t>

    <section title="More-Restrictive Rules Going Up the DNS Tree">

      <t>A set of principles derived from the above ideas follows in
         Sections <xref target="allzones" format="counter"/> 
         through <xref target="root" format="counter"/> below.
         Such principles fall
         into three categories.  Some principles apply to every DNS
         zone.  Some additional principles apply to all public zones,
         including the root zone.  Finally, other principles apply
         only to the root zone.  This means that zones higher in the
         DNS tree tend to have more restrictive rules (since
         additional principles apply), and zones lower in the DNS tree
         tend to have less restrictive rules, since they are used
         within a more narrow context.  In general, the relevant
         context for a principle is that of the zone, not that of a
         given subset of the user community; for the root zone, for
         example, the context is "the entire Internet population".
      </t>
    </section>
   
  </section>

  <section title="Principles Applicable to All Zones"
             anchor="allzones">
      
    <section title="Longevity Principle" anchor="longevity">
      <t>Unicode properties of a code point ought to be stable
      across the versions of Unicode that users of the zone are
      likely to have installed.  Because it is possible for the
      properties of a code point to change between Unicode versions,
      a good way to predict such stability is to ensure that a code
      point has in fact been stable for multiple successive versions
      of Unicode.  This principle is related to the Stability
      Principle in <xref target="stability" />.</t>
      
      <t>The more diverse the community using the zone, the greater
      the importance of following this principle.  The policy for a
      leaf zone in the DNS might only require stability across two
      Unicode versions, whereas a more public zone might require
      stability across four or more releases before the code point's
      properties are considered long-lived and stable.</t>
    </section>
    
    <section title="Least Astonishment Principle"
             anchor="leastastonishment">
      <t>Every zone administrator should be sensitive to the likely
      use of a code point to be permitted, particularly taking into
      account the population likely to use the zone.  Zone
      administrators should especially consider whether a candidate
      code point could present difficulty if the code point is
      encountered outside the usual linguistic circumstances.  By the
      same token, the failure to support a code point that is normal
      in some linguistic circumstances could be very surprising for
      users likely to encounter the names in that circumstance.</t>
    </section>

    <section title="Contextual Safety Principle" anchor="contextsafe">
      <t>Every zone administrator should be sensitive to ways in which
      a code point that is permitted could be used in support of
      malicious activity.  This is not a completely new problem: the
      digit 1 and the lowercase letter l are, for instance, easily
      confused in many contexts.  The very large repertoire of code
      points in Unicode (even just the subset permitted for IDNs)
      makes the problem somewhat worse, just because of the scale.</t>
    </section>
  </section>
  
    <section title="Principles Applicable to All Public Zones"
             anchor="PublicPrinciples"> 

      <section title="Conservatism Principle" anchor="conservatism">
        <t>Public zones are, by definition, zones that are shared by
        different groups of people.  Therefore, any decision to permit
        a code point in a public zone (including the root) should be
        as conservative as practicable.  Doubts should always be
        resolved in favor of rejecting a code point for inclusion
        rather than in favor of including it, in order to minimize
        risk.</t>
      </section>
    
      <section title="Inclusion Principle" anchor="inclusion">
        <t>Just as IDNA2008 starts from the principle that the Unicode
        range is excluded, and then adds code points according to
        derived properties of the code points, so a public zone should
        only permit inclusion of a code point if it is known to be
        "safe" in terms of usability and confusability within the
        context of that zone.  
        The default treatment of a code point should be that it
        is excluded.  
      </t>
      </section>

      <section title="Simplicity Principle" anchor="simplicity">
        <t>The rules for determining whether a code point is to be
           included should be simple enough that they are readily
           understood by someone with a moderate background in the DNS and
           Unicode issues.  This principle does not mean that a completely
           naive person needs to be able to understand the rationale for
           including a code point, but it does mean that if the
           reason for inclusion of a very peculiar code point, even a safe
           one, is too difficult to understand, the code point
           would not be permitted.
        </t>

        <t>The meaning of "simple" or "readily understood" is 
           context-dependent.  For instance, the root zone has to serve everyone in
           the world; for practical purposes, this means that the reasons
           for including a code point need to be comprehensible even to
           people who cannot use the script where the code point is found.
           In a zone that permits a constrained subset of Unicode characters
           (for instance, only those needed to write a single alphabetic
           language) and
           that supports a clearly delineated linguistic community (for
           instance, the speakers of a single language with well-understood
           written conventions), more complicated rules might be
           acceptable.  Compare this principle with the Least Astonishment
           Principle in <xref target="leastastonishment" />.
        </t>
      </section>

      <section title="Predictability Principle" anchor="predictability">
        <t>The rules for determining whether a code point is to be
        included should be predictable enough that those with the
        requisite understanding of DNS, IDNA, and Unicode will
        usually reach the same conclusion.  This is not a requirement
        for algorithmic treatment of code points; as previously noted,
        that is not possible.  Rather, it is to say that the consistent
        application of professional judgment is likely to yield the same
        results; combined with the principle in <xref target="conservatism"
        />, when results are not predictable, the anomalous code point
        would not be permitted.</t>

        <t>Just as in <xref target="simplicity" />, this principle
        tends to cause more restriction the more diverse the community
        using the zone; it is most restrictive for the root zone.
        This is because what is predictable within a given language
        community is possibly very surprising across languages.</t>
      </section>

      <section title="Stability Principle" anchor="stability">
        <t>Once a code point is permitted, it is at least very hard to
        stop permitting that code point.  In public zones (including
        the root), the list of code points to be permitted should
        change very slowly, if at all, and usually only in the
        direction of permitting an addition as time and experience
        indicate that inclusion of such a code point is both safe and
        consistent with these principles.</t>
      </section>

    </section>

    <section title="Principle Specific to the Root Zone"
            anchor="root"> 

      <section title="Letter Principle" anchor="letters">
        <t>"Requirements for Internet Hosts - Application and Support" <xref
target="RFC1123" /> notes that top-level
        labels "will be alphabetic". In the absence of widespread
        agreement about the force of that note, prudence suggests that
        U-labels in the root zone should exclude code points that are
        not normally used to write words, or that are in some cases
        normally used for purposes other than writing words.  This is
        not the same as using Unicode's General_Category to include
        only letters.  It is a restriction that expands the possible
        class of included code points beyond the Unicode letters, but
        only expands so far as to include the things that are normally
        used to create words.  Under this principle, code points with
        (for example) General_Category Mn (Nonspacing_Mark) might be
        included -- but only those that are used to write words and
        not (for instance) musical symbols.  In addition, such marks
        should only be used within a label in ways that they would be
        used when making a word: combinations that would be nonsense
        when used in a word should also be rejected when tried in DNS
        labels.  This principle should be applied as narrowly as
        possible; as the next steps for IDN document <xref target="RFC4690" /> says, "While DNS labels
        may conveniently be used to express words in many
        circumstances, the goal is not to express words (or sentences
        or phrases), but to permit the creation of unambiguous labels
        with good mnemonic value".
        </t>
      </section>
    </section>

    <section title="Confusion and Context" anchor="confusion">
      <t>While many discussions of confusion have focused on
      characters, e.g., whether two characters are confusable with
      each other (and under what circumstances), a focus on characters
      alone could lead to the prohibition of very large numbers of
      labels, including many that present little risk.  Instead, the
      focus should be on whether one label is confusable with another.
      For example, if a label contains several characters that are
      distinct to a particular script, and all of its characters are
      from that script, it is inherently not confusable with a label
      from any other script no matter what other characters might
      appear in it.  Another label that lacks those distinguishing
      characters might be a problem.  The notion extends from labels
      to domain names, in the sense that distinguishing characters
      used in a higher-level label may set expectations with respect
      to the characters in the lower-level labels.  This expectation
      might be regarded as a benefit, but it is also a problem, since
      there is no technical way to require consistent policies in
      delegated namespaces.</t>
    </section>

    <section title="Conclusion">

      <t>The principles outlined in this document can be applied when
         considering any range of Unicode code points for possible
         inclusion in a DNS zone.  It is worth observing that doing
         anything (especially in light of <xref target="stability" />)
         implicitly disadvantages communities with a writing system not
         yet well understood and not represented in the technical and
         policy communities involved in the discussion.  That
         disadvantage is to be guarded against as much as practical, but
         is effectively impossible to prevent (while still taking action)
         in light of imperfect human knowledge.
      </t>
    </section>

    <section title="Security Considerations">
      <t>The principles outlined in this memo are intended to improve
         usability and clarity and thereby reduce confusion among different
         labels.
         While these principles may contribute to reduction of risk, they
         are not sufficient to provide a comprehensive
         internationalization policy for zone management.
     </t>
     <t>Additional discussion of security considerations can
        be found in the Unicode Security Considerations <xref target="UTR36" />.
     </t>
    </section>

    <section title="Acknowledgements">
      <t>The authors thank the participants in the IAB
      Internationalization program for the discussion of the ideas
      in this memo, particularly Marc Blanchet.  In addition, Stephane
      Bortzmeyer, Paul Hoffman, Daniel Kalchev, Panagiotis
      Papaspiliopoulos, and Vaggelis Segredakis made specific
      comments.</t>
    </section>

    <section title="IAB Members at the Time of Approval">
        <figure>
            <artwork>
Bernard Aboba
Jari Arkko
Marc Blanchet
Ross Callon
Alissa Cooper
Spencer Dawkins
Joel Halpern
Russ Housley
David Kessens
Danny McPherson
Jon Peterson
Dave Thaler
Hannes Tschofenig
            </artwork> </figure>
    </section>

  </middle>
  <back>
    <references title="Informative References">

<reference anchor="IABCOMM1" target="http://www.iab.org/documents/correspondence-reports-documents/201/">
<front>
<title>IAB Statement: 'The interpretation of rules in the ICANN gTLD Applicant Guidebook'</title>
<author>
<organization>Internet Architecture Board</organization>
<address>
<email>iab@iab.org</email></address></author>
<date year='2012' month='February' /></front>
</reference>

<reference anchor="IABCOMM2" target="http://www.iab.org/documents/correspondence-reports-documents/201/">
<front>
<title>Response to ICANN questions concerning 'The interpretation of rules in the ICANN gTLD Applicant Guidebook'</title>
<author>
<organization>Internet Architecture Board</organization>
<address>
<email>iab@iab.org</email></address></author>
<date year='2012' month='March' /></front>
</reference>

&rfc1123;

&rfc2119;

<!-- Modified so "Karp, C., and IAB" vice "Karp, C., IAB" is shown -->
<reference anchor='RFC4690'>
<front>
<title>Review and Recommendations for Internationalized Domain Names (IDNs)</title>
<author initials='J.' surname='Klensin' fullname='J. Klensin'>
<organization /></author>
<author initials='P.' surname='Faltstrom' fullname='P. Faltstrom'>
<organization /></author>
<author initials='C.' surname='Karp' fullname='C. Karp'>
<organization /></author>
<author>
<organization>and IAB</organization></author>
<date year='2006' month='September' />
</front>
<seriesInfo name='RFC' value='4690' />
</reference>

&rfc5890;

&rfc5891;

&rfc5892;

&rfc5893;

&rfc5894;

&rfc5895;

&rfc6365;

<reference anchor='UTR36'>
<front>
<title>Unicode Security Considerations</title>
<author initials='M.' surname='Davis' fullname='M. Davis'>
<organization /></author>
<author initials='M.' surname='Suignard' fullname='M. Suignard'>
<organization /></author>
<date year='2012' month='July' />
<abstract><t>
Because Unicode contains such a large number of characters and incorporates 
the varied writing systems of the world, incorrect usage can expose programs 
or systems to possible security attacks. This is especially important as more 
and more products are internationalized. This document describes some of the 
security considerations that programmers, system analysts, standards 
developers, and users should take into account, and provides specific 
recommendations to reduce the risk of problems.
</t></abstract>
</front>

<seriesInfo name='Unicode Technical Report' value='#36' />
<format type='HTML' target='http://www.unicode.org/reports/tr36/' />
</reference>

<reference anchor='WCAG20' target='http://www.w3.org/TR/2008/REC-WCAG20-20081211/'>
<front>
<title>Web Content Accessibility Guidelines (WCAG) 2.0</title>

<author><organization>W3C</organization></author>
<date year='2008' month='December' day='11' />
</front>
<seriesInfo name="W3C" value="Recommendation"/>
</reference>

    </references>
  </back>
</rfc>
