<?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.34 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-rescorla-anonymous-webbotauth-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title abbrev="Anonymous Bot Authentication">Anonymous Bot Authentication: Authorization and Rate Limiting for Web Agents</title>
    <seriesInfo name="Internet-Draft" value="draft-rescorla-anonymous-webbotauth-01"/>
    <author fullname="Eric Rescorla">
      <organization>Independent</organization>
      <address>
        <email>ekr@rtfm.com</email>
      </address>
    </author>
    <author fullname="Richard L. Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <date year="2026" month="July" day="19"/>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 66?>

<t>Automated agents ("bots") represent a large fraction of the traffic to
many Web sites. In some cases, this traffic is desired, in others
undesired, and in yet others, desired as long as it remains within
certain rate limits. This memo describes Anonymous Bot Authentication (ABA), a
system that allows Web site operators to distinguish wanted from
unwanted traffic, while not tying a given request to a specific
sender.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ekr.github.io/draft-rescorla-anonymous-webbotauth/draft-rescorla-anonymous-webbotauth.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-rescorla-anonymous-webbotauth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ekr/draft-rescorla-anonymous-webbotauth"/>.</t>
    </note>
  </front>
  <middle>
    <?line 77?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>DISCLAIMER: This is a work-in-progress draft and has not yet
seen significant security analysis. It is being published
at an early stage for discussion purposes.</t>
      <t>Automated agents ("bots") represent a large fraction of the traffic
to many Web sites. For example, Wikimedia reports that about 35% of
its traffic is from bots <xref target="PCMag-Wikipedia"/> and Cloudflare reports
that over 50% of traffic is automated <xref target="Cloudflare-2025"/>. High
traffic loads--even when from otherwise desired bots--can have
negative impacts on sites in terms of performance, stability,
and operational costs.</t>
      <t>In addition, there may be certain types of bot traffic that sites wish
to heavily restrict or block entirely. For example:</t>
      <ul spacing="normal">
        <li>
          <t>Volumetric traffic intended to create a DoS
attack on the site.</t>
        </li>
        <li>
          <t>Non-volumetric traffic intended to attack the site.</t>
        </li>
        <li>
          <t>Scraping for specific purposes such as training AI agents.</t>
        </li>
      </ul>
      <t><xref target="I-D.nottingham-webbotauth-use-cases"/> provides a more complete
list of potential use cases.</t>
      <t>In response to this approach, there have been proposals to authenticate
automated clients. Sites can use behavioral analysis to determine when traffic
from a given endpoint appears bot-like (e.g., is high volume, has low latency
between requests, appears to be retrieving the entire site, etc.) and restrict
access by those endpoints unless they authenticate and the resulting identity is
acceptable to the site. <xref target="I-D.meunier-webbotauth-httpsig-protocol"/> describes one such
architecture, where identities are rooted in the DNS and bots use digital
signatures to tie their activity to a given identity.</t>
      <t>While directly identifying each bot allows the site to precisely
monitor bots' behavior and restrict or block bots that it believes
are misbehaving, it also has potential negative effects on the
open Web, including:</t>
      <ul spacing="normal">
        <li>
          <t>Allowing sites to precisely discriminate against specific
bots, even when those bots are acting in the public interest.
For example:
          </t>
          <ul spacing="normal">
            <li>
              <t>Government sites might block bots which are tracking
law enforcement activity.</t>
            </li>
            <li>
              <t>Employment or housing sites might block bots which are
monitoring for discriminatory behavior.</t>
            </li>
            <li>
              <t>Shopping sites might block bots used for price comparison.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Preventing users and groups from being able to anonymously
retrieve Web content using automated tools.</t>
        </li>
      </ul>
      <t>In many use cases, it is possible to resolve this tension using anonymous
credentials.  When a bot presents an anonymous credential, the Web site learns
that the bot is part of some set of authorized bots -- say those whose operators
have agreed to good behavior -- and not the specific identity of the bot or the
bot operator.</t>
      <t>This document describes an approach for using anonymous credentials to
authenticate bots to websites.  In addition to laying out how the system works,
we describe the trade-offs between anonymity and fine-grained abuse mitigation.</t>
    </section>
    <section anchor="architectural-overview">
      <name>Architectural Overview</name>
      <t>The overall structure of ABA is shown in <xref target="fig-architecture-overview"/>.</t>
      <figure anchor="fig-architecture-overview">
        <name>Architectural Overview</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="208" width="416" viewBox="0 0 416 208" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 80,64 L 248,64" fill="none" stroke="black"/>
              <path d="M 8,80 L 96,80" fill="none" stroke="black"/>
              <path d="M 192,96 L 248,96" fill="none" stroke="black"/>
              <path d="M 80,112 L 112,112" fill="none" stroke="black"/>
              <path d="M 184,144 L 408,144" fill="none" stroke="black"/>
              <path d="M 8,192 L 344,192" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="416,144 404,138.4 404,149.6" fill="black" transform="rotate(0,408,144)"/>
              <polygon class="arrowhead" points="256,96 244,90.4 244,101.6" fill="black" transform="rotate(0,248,96)"/>
              <polygon class="arrowhead" points="256,64 244,58.4 244,69.6" fill="black" transform="rotate(0,248,64)"/>
              <polygon class="arrowhead" points="88,112 76,106.4 76,117.6" fill="black" transform="rotate(180,80,112)"/>
              <polygon class="arrowhead" points="16,192 4,186.4 4,197.6" fill="black" transform="rotate(180,8,192)"/>
              <polygon class="arrowhead" points="16,80 4,74.4 4,85.6" fill="black" transform="rotate(180,8,80)"/>
              <g class="text">
                <text x="24" y="36">Alice</text>
                <text x="128" y="36">Bob</text>
                <text x="252" y="36">Anchor</text>
                <text x="396" y="36">Site</text>
                <text x="36" y="68">Register</text>
                <text x="180" y="84">Endorsement[Alice]</text>
                <text x="148" y="100">Register</text>
                <text x="188" y="116">Endorsement[Bob]</text>
                <text x="32" y="148">Request</text>
                <text x="72" y="148">+</text>
                <text x="128" y="148">Endorsement</text>
                <text x="252" y="164">Site</text>
                <text x="292" y="164">only</text>
                <text x="336" y="164">knows</text>
                <text x="388" y="164">Anchor</text>
                <text x="296" y="180">not</text>
                <text x="336" y="180">Alice</text>
                <text x="372" y="180">or</text>
                <text x="400" y="180">Bob</text>
                <text x="380" y="196">Response</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
Alice         Bob           Anchor             Site

Register --------------------->
<----------- Endorsement[Alice]
              Register ------->
         <---- Endorsement[Bob]

Request + Endorsement ---------------------------->
                             Site only knows Anchor
                                   not Alice or Bob
<------------------------------------------Response
]]></artwork>
        </artset>
      </figure>
      <t>Note: we are borrowing terms here from MoLE <xref target="I-D.jms-mole-architecture"/>.</t>
      <t>Prior to contacting the site, Alice and Bob both register with a
credential Anchor, which is responsible for evaluating
whether they comply with the Anchor's policies.
They each are issued an anonymous credential, which
they can use to authenticate to the server.  What makes the credential</t>
      <t>anonymous is that the site only learns that someone with a credential
from the Anchor is authenticating, not whether it's Alice or Bob. This
prevents the site from discriminating <em>between</em> customers of the
same anchor, although it can discriminate between anchors.</t>
      <t>As a result, while it is possible to distinguish authenticated from
unauthenticated bots, it is not possible to use the authentication
method to either (1) selectively block individual bots(2)
determine which bots are accessing which resources or (3) link
multiple visits by the same bot. It may still be
possible to identify bots via other mechanisms such as IP address or
fingerprinting.</t>
      <t>In some cases it may be sufficient merely to identify the anchor, for
instance if the anchor performs some vetting to ensure policy
compliance. However, in some cases this may be insufficient, as
discussed below.</t>
      <section anchor="trade-offs">
        <name>Trade-offs</name>
        <t>Assuring the anonymity of bot requests means imposes some limits on how this
authentication mechanism can be used to counter abuse.  These trade-offs are
discussed in detail in <xref target="use-case-analysis"/>, and the below bullets provide a
summary:</t>
        <ul spacing="normal">
          <li>
            <t>ABA supports:
            </t>
            <ul spacing="normal">
              <li>
                <t>Rate-limiting of requests by a a single bot</t>
              </li>
              <li>
                <t>Providing separate content to bots vs. humans</t>
              </li>
              <li>
                <t>Conditioning access based on a bot meeting certain criteria</t>
              </li>
              <li>
                <t>Conditioning access based on participation in some scheme or protocol</t>
              </li>
              <li>
                <t>Classifying human vs. bot traffic</t>
              </li>
              <li>
                <t>IP address mobility and sharing of IP addresses</t>
              </li>
              <li>
                <t>Unlinkability between authenticated requests by the same client</t>
              </li>
            </ul>
          </li>
          <li>
            <t>ABA does not support:
            </t>
            <ul spacing="normal">
              <li>
                <t>Allow lists / deny lists</t>
              </li>
              <li>
                <t>Auditing bot behavior</t>
              </li>
              <li>
                <t>Authenticating site services</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Essentially, abuse controls that rely on knowing the identity of the abusive
party are incompatible with anonymous authentication.</t>
      </section>
      <section anchor="rate-limiting">
        <name>Rate Limiting</name>
        <t>In some cases it may be desirable to limit any individual agent to a
specific number of requests. For example, a given Anchor may have a
large number of subscribers but only a few may access a given site. In
this case, overall rate limits for an anchor will not be effective,
but individual rate limits are.</t>
      </section>
    </section>
    <section anchor="concrete-implementation-with-mole">
      <name>Concrete Implementation With MoLE</name>
      <t>This section describes how to implement ABA using mechanisms from MoLE
<xref target="I-D.jms-mole-architecture"/>. The MoLE architecture has three
entities, as shown in <xref target="fig-mole-model"/>, reproduced from Section 4
of <xref target="I-D.jms-mole-architecture"/>.</t>
      <figure anchor="fig-mole-model">
        <name>MoLE Architecture</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="400" width="480" viewBox="0 0 480 400" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
              <path d="M 40,64 L 40,144" fill="none" stroke="black"/>
              <path d="M 40,176 L 40,368" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
              <path d="M 176,224 L 176,304" fill="none" stroke="black"/>
              <path d="M 184,32 L 184,64" fill="none" stroke="black"/>
              <path d="M 216,64 L 216,144" fill="none" stroke="black"/>
              <path d="M 216,176 L 216,208" fill="none" stroke="black"/>
              <path d="M 216,240 L 216,312" fill="none" stroke="black"/>
              <path d="M 216,328 L 216,368" fill="none" stroke="black"/>
              <path d="M 256,32 L 256,64" fill="none" stroke="black"/>
              <path d="M 376,32 L 376,64" fill="none" stroke="black"/>
              <path d="M 424,64 L 424,144" fill="none" stroke="black"/>
              <path d="M 424,176 L 424,216" fill="none" stroke="black"/>
              <path d="M 424,232 L 424,312" fill="none" stroke="black"/>
              <path d="M 424,328 L 424,368" fill="none" stroke="black"/>
              <path d="M 464,240 L 464,304" fill="none" stroke="black"/>
              <path d="M 472,32 L 472,64" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 184,32 L 256,32" fill="none" stroke="black"/>
              <path d="M 376,32 L 472,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
              <path d="M 184,64 L 256,64" fill="none" stroke="black"/>
              <path d="M 376,64 L 472,64" fill="none" stroke="black"/>
              <path d="M 48,96 Q 50,92.8 52,96 Q 54,99.2 56,96 Q 58,92.8 60,96 Q 62,99.2 64,96 Q 66,92.8 68,96 Q 70,99.2 72,96 " fill="none" stroke="black"/>
              <path d="M 184,96 Q 186,92.8 188,96 Q 190,99.2 192,96 Q 194,92.8 196,96 Q 198,99.2 200,96 Q 202,92.8 204,96 Q 206,99.2 208,96 " fill="none" stroke="black"/>
              <path d="M 40,126 L 72,126" fill="none" stroke="black"/>
              <path d="M 40,130 L 72,130" fill="none" stroke="black"/>
              <path d="M 184,126 L 208,126" fill="none" stroke="black"/>
              <path d="M 184,130 L 208,130" fill="none" stroke="black"/>
              <path d="M 16,160 Q 18,156.8 20,160 Q 22,163.2 24,160 Q 26,156.8 28,160 Q 30,163.2 32,160 Q 34,156.8 36,160 Q 38,163.2 40,160 Q 42,156.8 44,160 Q 46,163.2 48,160 Q 50,156.8 52,160 Q 54,163.2 56,160 Q 58,156.8 60,160 Q 62,163.2 64,160 Q 66,156.8 68,160 Q 70,163.2 72,160 Q 74,156.8 76,160 Q 78,163.2 80,160 Q 82,156.8 84,160 Q 86,163.2 88,160 Q 90,156.8 92,160 Q 94,163.2 96,160 Q 98,156.8 100,160 Q 102,163.2 104,160 Q 106,156.8 108,160 Q 110,163.2 112,160 Q 114,156.8 116,160 Q 118,163.2 120,160 Q 122,156.8 124,160 Q 126,163.2 128,160 Q 130,156.8 132,160 Q 134,163.2 136,160 Q 138,156.8 140,160 Q 142,163.2 144,160 Q 146,156.8 148,160 Q 150,163.2 152,160 Q 154,156.8 156,160 Q 158,163.2 160,160 Q 162,156.8 164,160 Q 166,163.2 168,160 Q 170,156.8 172,160 Q 174,163.2 176,160 Q 178,156.8 180,160 Q 182,163.2 184,160 Q 186,156.8 188,160 Q 190,163.2 192,160 Q 194,156.8 196,160 Q 198,163.2 200,160 Q 202,156.8 204,160 Q 206,163.2 208,160 Q 210,156.8 212,160 Q 214,163.2 216,160 Q 218,156.8 220,160 Q 222,163.2 224,160 Q 226,156.8 228,160 Q 230,163.2 232,160 Q 234,156.8 236,160 Q 238,163.2 240,160 Q 242,156.8 244,160 Q 246,163.2 248,160 Q 250,156.8 252,160 Q 254,163.2 256,160 Q 258,156.8 260,160 Q 262,163.2 264,160 Q 266,156.8 268,160 Q 270,163.2 272,160 Q 274,156.8 276,160 Q 278,163.2 280,160 Q 282,156.8 284,160 Q 286,163.2 288,160 Q 290,156.8 292,160 Q 294,163.2 296,160 Q 298,156.8 300,160 Q 302,163.2 304,160 Q 306,156.8 308,160 Q 310,163.2 312,160 Q 314,156.8 316,160 Q 318,163.2 320,160 Q 322,156.8 324,160 Q 326,163.2 328,160 Q 330,156.8 332,160 Q 334,163.2 336,160 Q 338,156.8 340,160 Q 342,163.2 344,160 Q 346,156.8 348,160 Q 350,163.2 352,160 Q 354,156.8 356,160 Q 358,163.2 360,160 Q 362,156.8 364,160 Q 366,163.2 368,160 Q 370,156.8 372,160 Q 374,163.2 376,160 Q 378,156.8 380,160 Q 382,163.2 384,160 Q 386,156.8 388,160 Q 390,163.2 392,160 Q 394,156.8 396,160 Q 398,163.2 400,160 Q 402,156.8 404,160 Q 406,163.2 408,160 Q 410,156.8 412,160 Q 414,163.2 416,160 Q 418,156.8 420,160 Q 422,163.2 424,160 Q 426,156.8 428,160 Q 430,163.2 432,160 Q 434,156.8 436,160 Q 438,163.2 440,160 Q 442,156.8 444,160 Q 446,163.2 448,160 " fill="none" stroke="black"/>
              <path d="M 224,192 Q 226,188.8 228,192 Q 230,195.2 232,192 Q 234,188.8 236,192 Q 238,195.2 240,192 Q 242,188.8 244,192 Q 246,195.2 248,192 Q 250,188.8 252,192 Q 254,195.2 256,192 Q 258,188.8 260,192 Q 262,195.2 264,192 " fill="none" stroke="black"/>
              <path d="M 376,192 Q 378,188.8 380,192 Q 382,195.2 384,192 Q 386,188.8 388,192 Q 390,195.2 392,192 Q 394,188.8 396,192 Q 398,195.2 400,192 Q 402,188.8 404,192 Q 406,195.2 408,192 Q 410,188.8 412,192 Q 414,195.2 416,192 " fill="none" stroke="black"/>
              <path d="M 176,224 L 208,224" fill="none" stroke="black"/>
              <path d="M 320,224 L 448,224" fill="none" stroke="black"/>
              <path d="M 216,256 L 264,256" fill="none" stroke="black"/>
              <path d="M 376,256 L 416,256" fill="none" stroke="black"/>
              <path d="M 224,288 L 264,288" fill="none" stroke="black"/>
              <path d="M 368,288 L 424,288" fill="none" stroke="black"/>
              <path d="M 192,320 L 448,320" fill="none" stroke="black"/>
              <path d="M 216,350 L 264,350" fill="none" stroke="black"/>
              <path d="M 216,354 L 264,354" fill="none" stroke="black"/>
              <path d="M 384,350 L 416,350" fill="none" stroke="black"/>
              <path d="M 384,354 L 416,354" fill="none" stroke="black"/>
              <path d="M 448,224 C 456.83064,224 464,231.16936 464,240" fill="none" stroke="black"/>
              <path d="M 192,320 C 183.16936,320 176,312.83064 176,304" fill="none" stroke="black"/>
              <path d="M 448,320 C 456.83064,320 464,312.83064 464,304" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="424,352 412,346.4 412,357.6" fill="black" transform="rotate(0,416,352)"/>
              <polygon class="arrowhead" points="424,256 412,250.4 412,261.6" fill="black" transform="rotate(0,416,256)"/>
              <polygon class="arrowhead" points="424,192 412,186.4 412,197.6" fill="black" transform="rotate(0,416,192)"/>
              <polygon class="arrowhead" points="232,288 220,282.4 220,293.6" fill="black" transform="rotate(180,224,288)"/>
              <polygon class="arrowhead" points="232,192 220,186.4 220,197.6" fill="black" transform="rotate(180,224,192)"/>
              <polygon class="arrowhead" points="216,128 204,122.4 204,133.6" fill="black" transform="rotate(0,208,128)"/>
              <polygon class="arrowhead" points="216,96 204,90.4 204,101.6" fill="black" transform="rotate(0,208,96)"/>
              <polygon class="arrowhead" points="56,96 44,90.4 44,101.6" fill="black" transform="rotate(180,48,96)"/>
              <g class="text">
                <text x="44" y="52">Anchor</text>
                <text x="220" y="52">Client</text>
                <text x="424" y="52">Moderator</text>
                <text x="128" y="100">Interaction</text>
                <text x="128" y="132">Endorsement</text>
                <text x="320" y="196">Interaction</text>
                <text x="232" y="228">(If</text>
                <text x="280" y="228">needed)</text>
                <text x="320" y="260">Endorsement</text>
                <text x="316" y="292">Credential</text>
                <text x="324" y="356">Presentation</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
   +--------+            +--------+              +-----------+
   | Anchor |            | Client |              | Moderator |
   +---+----+            +---+----+              +-----+-----+
       |                     |                         |
       |<~~~ Interaction ~~~>|                         |
       |                     |                         |
       +==== Endorsement ===>|                         |
       |                     |                         |
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       |                     |                         |
       |                     |<~~~~~ Interaction ~~~~~>|
       |                     |                         |
       |                +---- (If needed) -----------------.
       |                |    |                         |    |
       |                |    +------ Endorsement ----->|    |
       |                |    |                         |    |
       |                |    |<----- Credential -------+    |
       |                |    |                         |    |
       |                 `---------------------------------'
       |                     |                         |
       |                     +====== Presentation ====>|
       |                     |                         |
]]></artwork>
        </artset>
      </figure>
      <t>In this model, the Client interacts with an Anchor, which is
responsible for determining whether the client conforms to the
required policy. The Anchor provides an Endorsement which can then
be redeemed by the client with the Moderator for a Credential, which
can then be presented to the Moderator at a future time in order
to provide anonymous authentication. The Moderator can be
operated directly by the Site or can be separate from the
Site but cooperating with it.</t>
      <t>MoLE supports a number of different types of Endorsement
and Credential. For concreteness, this document describes the
use of Longfellow-based Endorsements and ACT-based Credentials
(Sections 4.2 and 5.1 of <xref target="I-D.jms-mole-protocols"/> respectively).
Other Endorsement and Credentials may have somewhat different
operational properties, and are covered briefly in <xref target="other-endorsement-structures"/>.</t>
      <t>When a new Client is deployed, it first must register with some set of
Anchors. These Anchors will require the bot to demonstrate that it
complies with their policies, for instance that it is a registered
corporation, holds a domain name or an IP address block, etc.
Once the Anchor is satisfied, it issues a Endorsement to
the Client in the form of a CWT <xref target="RFC8392"/> signed by the Anchor. This
Endorsement can be used to authenticate to an arbitrary number of Moderators.</t>
      <t>When a client contacts a new site for which it does not yet
have a Credential, the client uses the Endorsement to authenticate
to the Moderator and request a Credential. This authentication is
performed anonymously using a zero-knowledge proof that it has
a valid Endorsement  so that the Moderator only learns the following
information:</t>
      <ol spacing="normal" type="1"><li>
          <t>This Client has been authenticated by the Anchor.</t>
        </li>
        <li>
          <t>This Client has not authenticated to the Moderator previously
using this Endorsement within a given time window.</t>
        </li>
      </ol>
      <t>Assuming that the Client's proof verifies correctly and the Anchor is
acceptable, the Moderator issues a Credential. Each credential is
associated with a usage limit, which may be Anchor-dependent. For
instance, if the Anchor has a policy designed for high traffic bots,
the Moderator might use usage rate limit, whereas if the policy is
designed for low traffic bots, the Moderator might use a lower usage
limit. Note that the choice of usage limit is entirely up to the
Moderator, but because all Clients authenticated by a given Anchor are
within the same anonymity set, it cannot use different per-Client
usage limits to multiple Clients attested to by the same Anchor.</t>
      <t>Once the Client has a Credential it can use it to authenticate
to the Moderator repeatedly.</t>
      <section anchor="auth-Moderator">
        <name>Providing Endorsement to the Moderator</name>
        <t>The protocol for Endorsement to the Moderator is designed to meet
the following requirements:</t>
        <ul spacing="normal">
          <li>
            <t>A Endorsement can be used with an arbitrary number of Moderators.</t>
          </li>
          <li>
            <t>A Endorsement can only be used once with a single Moderator within
a given time window</t>
          </li>
          <li>
            <t>Endorsement presentations are unlinkable, both between
Moderator and Anchor and between Moderators.</t>
          </li>
        </ul>
        <t>These requirements can be met by using a signed credential (in this
case, a CWT <xref target="RFC8392"/>), along with a generic circuit-based
zero-knowledge proof system (in this case Longfellow-ZK
<xref target="I-D.google-cfrg-libzk"/>).  The interaction between the Anchor and
the Client just yields an ordinary CWT and then the Client proves in
zero-knowledge that they have a valid Endorsement from a given Anchor.</t>
        <t>In order to prevent replay, the proof also includes an Moderator-specific
nullifier tied to the Moderator's domain name and the current time
window. While the proof itself varies between presentations, the
nullifier remains the same and therefore can be used to detect replay.</t>
        <t>Because we are using a generic ZK system it should also be
possible to use it to conceal the  Anchor if desired: for
example if there are multiple Anchors who follow equivalent
vetting procedures, then the Moderator does not need to know which
Anchor the Client used; the ZKP can be designed to prove
that the Client has a Endorsement from one of a set of Anchors
within the same equivalence class; of course, the Moderator will
need to use the same usage limit for all such Anchors.</t>
        <t>Note: The Longfellow nullifier mechanism in MoLE does not appear
to include the Moderator's identity, thus potentially precluding
Endorsement reuse.
[[https://github.com/Moderation-of-unLinkable-Endorsements/internet-drafts/issues/28]]</t>
      </section>
      <section anchor="alternate-cryptographic-approaches">
        <name>Alternate Cryptographic Approaches</name>
        <t>This section considers a number of alternate cryptographic
approaches and explains the choice of primitives in this
section.</t>
        <section anchor="only-generic-zero-knowledge-proofs">
          <name>Only Generic Zero-Knowledge Proofs</name>
          <t>In principle, it is possible to omit the use of Credentials
and instead have the Client authenticate each transaction
directly to the Site. However, even efficient generic ZKP systems
like Longfellow-ZK have far higher computational and bandwidth
costs than more limited systems such as Credential mechanisms
provided in MoLE.
Using a generic ZKP system to demonstrate ownership of
an attested Endorsement to the Moderator and then using that
single interaction to obtain a Credential makes it possible
to amortize the generic proof over a large number of subsequent
interactions.</t>
        </section>
        <section anchor="other-endorsement-structures">
          <name>Other Endorsement Structures</name>
          <t>MoLE also includes an Endorsement mechanism called Issuer-Hiding Anonymous
Token (IHAT). IHAT uses single-show Endorsements, so the Client needs a
fresh Endorsement for each Moderator. This is more
computationally efficient than a generic ZKP and allows the Anchor
to have more tight control of the rate at which the Client makes
requests, but may be challenging in settings where the bot has to
contact many sites, as with crawlers. Endorsement mechanisms that support late
binding of the Endorsement to a specific Moderator allow the Client to use one
Anchor-issued Endorsement across multiple Moderators, while still letting each
Moderator enforce its own redemption and rate-limit policy.</t>
        </section>
      </section>
    </section>
    <section anchor="issuance-models">
      <name>Issuance Models</name>
      <t>Anonymous credentials are compatible with a variety of issuance
models, as discussed in this section.</t>
      <section anchor="independent-anchors">
        <name>Independent Anchors</name>
        <t>Much like millions of websites rely on a much smaller number of independent
WebPKI certificate authorities, it is possible to have a system of independent
Anchors that are broadly relied upon by many websites.  Each anchor could
publish the policy that it uses to issue credentials (e.g., verifying corporate
existence, subject pays $100, etc.). Sites can then select which anchors have
policies they are willing to accept. It is also possible to have multiple
Anchors who conform to a common set of policies, as in the WebPKI, where each
CA has to meet the same requirements, but site operators have the choice of
which CA to use.</t>
      </section>
      <section anchor="server-as-anchor">
        <name>Server as Anchor</name>
        <t>It is also possible for a server to act as their own Anchor. This is
not likely to be practical for small sites, as bots will simply opt
not to authenticate to those sites at all. However, a large CDN which
hosts many sites might opt to operate its own Anchor, and it could
be practical for bots to register with such an Anchor. Note that
this approach makes it possible for the Anchor to refuse
service to individual Clients, but not to selectively do so for
individual customers unless it uses separate Moderators for each
of those customers.</t>
        <t>The ZKP element of ABA ensures that clients remain anonymous even in this case,
since the client's redemption of an Endorsement is not linkable to its issuance.</t>
      </section>
      <section anchor="number-of-anchors">
        <name>Number of Anchors</name>
        <t>In general, it is desirable for bots to be able to acquire
a relatively small number of credentials and have high confidence that
those credentials will be compatible with most if not all of the
sites that the bot wishes to contact. This can be most straightforwardly
accomplished if there is only a small number of anchors, but it can
also work if there are a larger number of anchors but sites converge
on a relatively small number of policies (expressed as which anchors
they support) such that a bot can acquire a set of credentials that
covers all of those policies. The least desirable outcome is if
bots routinely are prompted to provide credentials for a new anchor.</t>
      </section>
    </section>
    <section anchor="relationship-to-browser-authentication">
      <name>Relationship to Browser Authentication</name>
      <t>There is significant overlap with existing work on anonymous
authentication happening in the PrivacyPass WG and in the W3C
AntiFraud Community Group. While that work is directed towards
access control for users, the same cryptographic techniques
can be used to authenticate bots. A good description of
the vision and requirements can be found at <xref target="PACT-Issue"/>,
and the MoLE effort that has grown out of it.</t>
    </section>
    <section anchor="use-case-analysis">
      <name>Use Case Analysis</name>
      <t><xref target="I-D.nottingham-webbotauth-use-cases"/> describes a set of
use cases for web bot authentication. The architecture described
in this document address some but not all of these use cases.
This is intentional rather than a deficiency; the objective is
to address use cases which are compatible with limiting the
negative impact of bots while avoiding making it trivial for
sites to discriminate against individual bots. The remainder
of this section addresses each use case individually.</t>
      <section anchor="site-use-cases">
        <name>Site Use Cases</name>
        <section anchor="mitigating-volumetric-abuse-by-bots">
          <name>Mitigating Volumetric Abuse by Bots</name>
          <t>This document directly addresses the topic of volumetric abuse,
because bots can be authenticated and authenticated bots can be
restricted to specific bandwidth limits. Once a bot has exceeded
its limit, it can be blocked.</t>
        </section>
        <section anchor="controlling-access-by-bots">
          <name>Controlling Access by Bots</name>
          <t><xref target="I-D.nottingham-webbotauth-use-cases"/>
provides the following example applications of controlling
access:</t>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>Only allow access by bots on an allow list;</t>
                </li>
                <li>
                  <t>Disallow access to bots on an explicit deny list;</t>
                </li>
                <li>
                  <t>Condition access upon meeting some criteria (e.g., non-profit,
certification by a third party);</t>
                </li>
                <li>
                  <t>Condition access upon participation in some scheme or protocol
(e.g., payment for access);</t>
                </li>
              </ul>
              <t>Note that the first two imply some notion of bots being tied to a
  real-world identity, whereas the remaining do not necessarily require
  it.</t>
            </li>
          </ul>
          <t>ABA can be used for the second two use cases and can be used for some
versions of the first two use cases. However, the more fine-grained
controls are used (e.g., by having many Anchors with different
policies) the worse the privacy and scalability properties of the
system become.n</t>
        </section>
        <section anchor="providing-different-content-to-bots">
          <name>Providing Different Content to Bots</name>
          <t>The architecture in this document may be usable to provide different
content to bots generally than humans depending on the structure of anchors
(e.g., does a given anchor issue to both bots and to humans) and
whether techniques are used to conceal which anchor is in use.
However, they are not generally useful to provide different content
to specific bots.</t>
        </section>
        <section anchor="auditing-bot-behavior">
          <name>Auditing Bot Behavior</name>
          <t>This use case is not addressed by this document.</t>
        </section>
        <section anchor="classifying-traffic">
          <name>Classifying Traffic</name>
          <t>Because this use case does not depend on determining which bot is which,
but only which traffic is human versus bot, the architecture in this
document may be able to address this use case, depending on the
ultimate deployment model.</t>
        </section>
        <section anchor="authenticating-site-services">
          <name>Authenticating Site Services</name>
          <t>This use case is not addressed by this document.</t>
        </section>
      </section>
      <section anchor="bot-use-cases">
        <name>Bot Use Cases</name>
        <section anchor="ip-address-mobility">
          <name>IP Address Mobility</name>
          <t>ABA provides authentication for bots independent of IP address.
Because ABA authentication is at the Anchor rather than the Client
level, it is not possible to use ABA to build bot-specific reputations
based on observed bot activity; instead the Anchor is responsible
for assessing bots and then providing that information to sites.</t>
        </section>
        <section anchor="sharing-ip-addresses">
          <name>Sharing IP Addresses</name>
          <t>Because ABA provides authentication independent of IP address, it
allows sites to discriminate between unauthenticated users of
an IP address and those which are ABA-authenticated, thus reducing
the negative reputational side effects of misuse by unauthenticated
users sharing the same IP address.</t>
        </section>
        <section anchor="robotstxt-alignment">
          <name>Robots.txt Alignment</name>
          <t>This use case is not addressed by this document.</t>
        </section>
        <section anchor="conveying-contextual-information">
          <name>Conveying Contextual Information</name>
          <t>Because different Anchors can have different policies and Anchors
can have multiple policies, ABA allows for limited conveyance of
contextual information. While in principle this information can
be arbitrarily fine-grained, coarse-grained information ensures
a larger anonymity set (see <xref target="number-of-anchors"/>).</t>
        </section>
      </section>
    </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="security-considerations">
      <name>Security Considerations</name>
      <t>The precise security and privacy details of a system of this type
depend on the detailed cryptographic mechanism being deployed. However, it
is possible to make some general observations.</t>
      <section anchor="anonymity-set">
        <name>Anonymity Set</name>
        <t>The anonymity set for a given transaction is the set of credentials
associated with a given Anchor, or, if Anchor hiding is used, the set
of credentials associated with the set of anchors. However, it is
still possible to learn information about the client by manipulating
the Anchor set. For example, a site acting as an Anchor could use
different keys for each user or a site could use different Anchor
subsets to identify which of a set of Anchors was in use.
Transparency/consistency mechanisms like
<xref target="I-D.ietf-privacypass-key-consistency"/> may be useful in detecting
this form of attack.</t>
      </section>
      <section anchor="credential-misuse">
        <name>Credential Misuse</name>
        <t>Because clients are anonymous, some forms of misuse are harder to
manage. For example:</t>
        <ul spacing="normal">
          <li>
            <t>Two clients can collude to exceed rate limits if they are
interacting with disjoint sites.</t>
          </li>
          <li>
            <t>If registration standards are low and registration is cheap
a bot can obtain multiple credentials.</t>
          </li>
          <li>
            <t>Patterns of misuse (e.g., credential stuffing) become harder
to detect.</t>
          </li>
        </ul>
        <t>Note that existing mechanisms, such as IP address, will continue
to be usable, but the techniques described in this document
may not add to the server's ability to address these issues.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no 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="I-D.jms-mole-architecture">
          <front>
            <title>Moderation of unLinkable Endorsements (MoLE) Architecture</title>
            <author fullname="Samuel Schlesinger" initials="S." surname="Schlesinger">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Dennis Jackson" initials="D." surname="Jackson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   Moderation of unLinkable Endorsements (MoLE) is an architecture that
   lets a party performing access control (a Moderator) bootstrap trust
   in a client from a third party (an Anchor) that already has a trust
   relationship with that client, and then adjust that trust over time
   in response to the client's behaviour, for example by dynamically
   rate-limiting access.

   MoLE targets open deployments, in which independent parties may be
   responsible for access control and for vouching for clients, whilst
   maintaining strong privacy protections for clients.  These
   protections are designed to hold even if participants in the
   ecosystem collude or otherwise misbehave.

   This document specifies the roles, the information flows between
   them, the privacy and security requirements, and deployment
   considerations.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-jms-mole-architecture-00"/>
        </reference>
        <reference anchor="I-D.jms-mole-protocols">
          <front>
            <title>MoLE Protocols</title>
            <author fullname="Samuel Schlesinger" initials="S." surname="Schlesinger">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Dennis Jackson" initials="D." surname="Jackson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This document defines protocols that instantiate the MoLE
   architecture: two endorsement protocols, by which a Client proves to
   a Moderator that it holds an Endorsement from a trusted Anchor
   without revealing which one, and three credential protocols, by which
   a Moderator issues, verifies, and updates per-Client state without
   being able to link presentations.  It also establishes the registries
   that identify these protocols.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-jms-mole-protocols-00"/>
        </reference>
        <reference anchor="RFC8392">
          <front>
            <title>CBOR Web Token (CWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>CBOR Web Token (CWT) is a compact means of representing claims to be transferred between two parties. The claims in a CWT are encoded in the Concise Binary Object Representation (CBOR), and CBOR Object Signing and Encryption (COSE) is used for added application-layer security protection. A claim is a piece of information asserted about a subject and is represented as a name/value pair consisting of a claim name and a claim value. CWT is derived from JSON Web Token (JWT) but uses CBOR rather than JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8392"/>
          <seriesInfo name="DOI" value="10.17487/RFC8392"/>
        </reference>
        <reference anchor="I-D.google-cfrg-libzk">
          <front>
            <title>The Longfellow Zero-knowledge Scheme</title>
            <author fullname="Matteo Frigo" initials="M." surname="Frigo">
              <organization>Google</organization>
            </author>
            <author fullname="abhi shelat" initials="A." surname="shelat">
              <organization>Google</organization>
            </author>
            <date day="2" month="September" year="2025"/>
            <abstract>
              <t>   This document defines an algorithm for generating and verifying a
   succinct non-interactive zero-knowledge argument that for a given
   input x and a circuit C, there exists a witness w, such that C(x,w)
   evaluates to 0.  The technique here combines the MPC-in-the-head
   approach for constructing ZK arguments described in Ligero [ligero]
   with a verifiable computation protocol based on sumcheck for proving
   that C(x,w)=0.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-google-cfrg-libzk-01"/>
        </reference>
        <reference anchor="RFC2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="PCMag-Wikipedia" target="https://www.pcmag.com/news/wikipedia-faces-flood-of-ai-bots-that-are-eating-bandwidth-raising-costs">
          <front>
            <title>Wikipedia Faces Flood of AI Bots That Are 'Eating Bandwidth,' Raising Costs</title>
            <author initials="L." surname="Kan" fullname="Lawrence Kan">
              <organization>PCMag</organization>
            </author>
            <date year="2024" month="February" day="14"/>
          </front>
        </reference>
        <reference anchor="Cloudflare-2025" target="https://radar.cloudflare.com/year-in-review/2025">
          <front>
            <title>Cloudflare 2025 Year in Review</title>
            <author>
              <organization>Cloudflare</organization>
            </author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="PACT-Issue" target="https://github.com/antifraudcg/proposals/issues/22">
          <front>
            <title>Private Access Control Tokens</title>
            <author initials="D." surname="Jackson" fullname="Dennis Jackson">
              <organization/>
            </author>
            <date year="2025" month="December" day="02"/>
          </front>
        </reference>
        <reference anchor="I-D.nottingham-webbotauth-use-cases">
          <front>
            <title>Use Cases for Authentication of Web Bots</title>
            <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
         </author>
            <date day="1" month="April" year="2026"/>
            <abstract>
              <t>   This draft outlines use cases for authentication for bot clients on
   the Web, to help inform discussions regarding the scope and intent of
   the WebBotAuth Working Group.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-nottingham-webbotauth-use-cases-02"/>
        </reference>
        <reference anchor="I-D.meunier-webbotauth-httpsig-protocol">
          <front>
            <title>HTTP Message Signatures for automated traffic</title>
            <author fullname="Thibault Meunier" initials="T." surname="Meunier">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Sandor Major" initials="S." surname="Major">
              <organization>Google</organization>
            </author>
            <date day="26" month="June" year="2026"/>
            <abstract>
              <t>   This document describes an architecture for identifying automated
   traffic using [HTTP-MESSAGE-SIGNATURES].  The goal is to allow
   automated HTTP clients to cryptographically sign outbound requests,
   allowing HTTP servers to verify their identity with confidence.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-meunier-webbotauth-httpsig-protocol-00"/>
        </reference>
        <reference anchor="I-D.ietf-privacypass-key-consistency">
          <front>
            <title>Key Consistency and Discovery</title>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Matthew Finkel" initials="M." surname="Finkel">
              <organization>The Tor Project</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   This document describes the consistency requirements of protocols
   such as Privacy Pass, Oblivious DoH, and Oblivious HTTP for user
   privacy.  It presents definitions for consistency and then surveys
   mechanisms for providing consistency in varying threat models.  In
   concludes with discussion of open problems in this area.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-key-consistency-01"/>
        </reference>
      </references>
    </references>
    <?line 622?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document benefited from helpful comments from Dennis Jackson
and Thibault Meunier.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAG4WXWoAA7Vc6ZIbx5H+X09RO9wNkRIAipQUa49l2cMhJc2KxyyHWobt
UHgLjQLQZqMb28eMYJJ+ln2WfbLNLzPraAA8QrYnFOIM0F1HVh5fXjWdTk1f
9pU/tSdndVPvNs3Q2QdNb8+Gfu3rvixcXzb1Kf/dtOVf+U/r6oV97npvH5eb
si/rlV02rX3p5/ZsRW91J8bN562//sCwJ4b+9aum3Z3asl42xiyaonYbWs6i
dct+2vquaNrKTV0YZXrj5/OmdzTO9PN7phvmm7LraKx+t6XXLh69+NbaW9ZV
XUOTl/XCbz39r+5PJvbEL8qeNuEq/HFx9oD+oWWfXDx/8e2JqYfN3LenZkFL
OjVFU3e+7obu1Pbt4A1t5QtD47beETGePzqjP26a9tWqbYbtqX35nX1Jf4ES
3+ET88rv6OvFqbFTW/ufe0t08S3vGh8NdUkb41+7rWtfVXhzUXZ9W86H3i9s
5Rcr35prXw+0mlvWxonwh2x2PCN9vHFlhUd+7392m23lZ0WzweeuLdandt33
2+707t3sy7s0HA1d9uthTuTyr9q7H0H4E3qnIip1Pb0TR33VzmSgWdl8zCgf
88xs3W+qE2Mccx+ISVNbuxyqStjk5FFbFva5jnHC3zbtytXKqcQRiQX4Wy9E
wl5/3/bLDchwcmTg52Wxdu3CPp7ZB66tfXds8POSJh4N21bz35fb61n3My27
btoNPXlNJ2jA3/Evay/Pn7jV9GX5qtwSV7pTHiSIYvzYfusK39lvq6ZZ2GZp
zy4gRZ19sXYkS623nzxyLH4PSCJvykW/nnxCgll2+Oy86XpddaQf/0z1X0tC
R/x9Qlv8wdUn8VOlwGN30/q68OMviQD0HS9fPmR5sfc/v//l9PP703tfyk5c
u/I5e9zc3My2xcatmO1qf9PdvQm7nC6xy+kSu5w2y6krp3T+3bSnXU5J4qae
Nzmdh01OW9nitAhbPK+aYbGs8DCt5KsxOdOXWOZX9g/etbR1Ypvr0t+8n0Ky
3TTC3p6/Or7b1i1cOyviW7zpHU07LWvieEx7F29jtMuz8xfTi64b/HjVl215
DRV7VhBxOjrNum+byr5oXpFe+phjfTiz/+GKV11zeLQPfV2X3fjrtKfpvft0
lMd3piKO/TjS48vWDYtidXfbNtumI617t8ROurv37xP/z2YzY6bTqXVz0myu
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
cSivNltD6F3INN1CinqXXCM8RlrwFIuwcaLKA1WvWm8S+DEw0x9/CMxC+qlb
N0O1EBIdCamLBgu5CCwn2tllKEI/5eC6phrUArUydVSvEV2vG9UwFgJE5wyt
HBLWRK/CLwD0J4l5knRmgfT94Lmi+ZzbQJ3f8Ad//OEykCxXecyOZg9pqD4/
YD3Uh4QkjE1JmAOTFHeFgkdkRH/DiYhmaLsDNAJXIyYCRgmM3KKyo42aMtQZ
nMWyDikpgtAmIbeJg1K2vKwl6hypJzXUksZhmThg9ZCAxIKHrNiWFDWKZaWa
doT9W4/cu/nTn460HunIxOfoFxvqx6qHp7kfe5dVT+37KfeipNakX/30k2bT
KjwAzHPe7rZ9s2rdlo7enmnlIdKto0A+ukJpJ+3YY3dxmCIfxrg4DAub/5mE
KYhggjrblrMr19pRAV2u07H1vmWfwZp9FyQNau6HqOYuoQ461looDClKTs0d
FuM0OHbMqwGA3KmX9ifJsbCyzFh35HFx4RXZ4roTfW5iUER12xVnT2MZCOfF
fKxFScriUrVFZ7h0f2RSZAlLJ+jVt1wWNvTB52cbGvoADbeTQNfX0unA7I38
oAwfC2kyLJXSLEZjQovAzzPz44FeC0vd99ebG3qiW5db+P2AKQHkvRchRRMW
PBnXG8UkuZ3Egc25uGIEA6UurUy1URA4t0Ge+K9yamHdYiW4aSi0OY0z4nBA
SUtmk3aB2w7CM1cxVqJhqwPjlz+d19RUxKSWWxvbqaSsUyuc4UZGe/vi+7MX
hBXwj3jUQo8pZ/tycZ6I1xpZE1qOZjdLWth6rF1RKQBejYSfxU41sIkZsRSx
b+JRZqXx+XNkKTUmaKkoOo/AqMx2PTs5WoURSiyYTVyIiGYL52M0qQEF7kto
flqDZvVKa/47MWKd9muE0BHn9xqjsQwpROdCZ07zMc4rWkcaAqGoo2cTqhQl
/sjNMWaOjK4UyxwLaqTi7oyd2UJkW1OjQ5ZNredUKwpG4b6ibVCpEwx5gsKh
mFDq5io14TjK5O6FHgXLtV03NceXN9t4LUEb66RC2JpbGGkZHDTDOBXKyo6W
JjjtlhqVwQjMktqZUscxHI8Xgo/qwPrMXIj3lTWgRxNvnkAxsfLb0FbZo6DR
Q8F6LOFxRCV6sNuALdpMhrOLDcxLP7/84YLrsbirsvehwl9Co4fWQCGxara9
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
Kjoz/w9go5ZrD2IAAA==

-->

</rfc>
