rfc9576.original.xml | rfc9576.xml | |||
---|---|---|---|---|
<?xml version='1.0' encoding='utf-8'?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc [ | <!DOCTYPE rfc [ | |||
<!ENTITY nbsp " "> | <!ENTITY nbsp " "> | |||
<!ENTITY zwsp "​"> | <!ENTITY zwsp "​"> | |||
<!ENTITY nbhy "‑"> | <!ENTITY nbhy "‑"> | |||
<!ENTITY wj "⁠"> | <!ENTITY wj "⁠"> | |||
]> | ]> | |||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | ||||
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.11 (Ruby 3.1. | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" | |||
2) --> | ipr="trust200902" | |||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | docName="draft-ietf-privacypass-architecture-16" | |||
-ietf-privacypass-architecture-16" category="info" tocInclude="true" sortRefs="t | number="9576" | |||
rue" symRefs="true" version="3"> | category="info" | |||
<!-- xml2rfc v2v3 conversion 3.12.10 --> | tocInclude="true" | |||
submissionType="IETF" | ||||
consensus="true" | ||||
obsoletes="" | ||||
updates="" | ||||
sortRefs="true" | ||||
symRefs="true" | ||||
version="3" | ||||
xml:lang="en"> | ||||
<front> | <front> | |||
<title abbrev="Privacy Pass Architecture">The Privacy Pass Architecture</tit le> | <title abbrev="Privacy Pass Architecture">The Privacy Pass Architecture</tit le> | |||
<seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-architecture -16"/> | <seriesInfo name="RFC" value="9576"/> | |||
<author initials="A." surname="Davidson" fullname="Alex Davidson"> | <author initials="A." surname="Davidson" fullname="Alex Davidson"> | |||
<organization>LIP</organization> | <organization>NOVA LINCS, Universidade NOVA de Lisboa</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<city>Lisbon</city> | <street>Largo da Torre</street> | |||
<city>Caparica</city> | ||||
<country>Portugal</country> | <country>Portugal</country> | |||
</postal> | </postal> | |||
<email>alex.davidson92@gmail.com</email> | <email>alex.davidson92@gmail.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="J." surname="Iyengar" fullname="Jana Iyengar"> | <author initials="J." surname="Iyengar" fullname="Jana Iyengar"> | |||
<organization>Fastly</organization> | <organization>Fastly</organization> | |||
<address> | <address> | |||
<email>jri@fastly.com</email> | <email>jri@fastly.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="C. A." surname="Wood" fullname="Christopher A. Wood"> | <author initials="C. A." surname="Wood" fullname="Christopher A. Wood"> | |||
<organization>Cloudflare</organization> | <organization>Cloudflare</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>101 Townsend St</street> | <street>101 Townsend St</street> | |||
<city>San Francisco</city> | <city>San Francisco</city> | |||
<region>CA</region> | ||||
<code>94107</code> | ||||
<country>United States of America</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<email>caw@heapingbits.net</email> | <email>caw@heapingbits.net</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date year="2023" month="September" day="25"/> | ||||
<keyword>Internet-Draft</keyword> | <date year="2024" month="June"/> | |||
<area>sec</area> | ||||
<workgroup>privacypass</workgroup> | ||||
<abstract> | <abstract> | |||
<t>This document specifies the Privacy Pass architecture and requirements for | <t>This document specifies the Privacy Pass architecture and requirements for | |||
its constituent protocols used for authorization based on privacy-preserving | its constituent protocols used for authorization based on privacy-preserving | |||
authentication mechanisms. It describes the conceptual model of Privacy Pass | authentication mechanisms. It describes the conceptual model of Privacy Pass | |||
and its protocols, its security and privacy goals, practical deployment models, | and its protocols, its security and privacy goals, practical deployment models, | |||
and recommendations for each deployment model that helps ensure the desired | and recommendations for each deployment model, to help ensure that the desired | |||
security and privacy goals are fulfilled.</t> | security and privacy goals are fulfilled.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="introduction"> | <section anchor="introduction"> | |||
<name>Introduction</name> | <name>Introduction</name> | |||
<t>Privacy Pass is an architecture for authorization based on privacy-pres erving | <t>Privacy Pass is an architecture for authorization based on privacy-pres erving | |||
authentication mechanisms. In other words, relying parties authenticate clients | authentication mechanisms. In other words, relying parties authenticate Clients | |||
in a privacy-preserving way, i.e., without learning any unique, per-client | in a privacy-preserving way, i.e., without learning any unique, per-Client | |||
information through the authentication protocol, and then make authorization | information through the authentication protocol, and then make authorization | |||
decisions on the basis of that authentication succeeding or failing. Possible | decisions on the basis of that authentication succeeding or failing. Possible | |||
authorization decisions might be to provide clients with read access to a | authorization decisions might be to provide Clients with read access to a | |||
particular resource or write access to a particular resource.</t> | particular resource or write access to a particular resource.</t> | |||
<t>Typical approaches for authorizing clients, such as through the use of | <t>Typical approaches for authorizing Clients, such as through the use of | |||
long-term | long-term | |||
state (cookies), are not privacy-friendly since they allow servers to track | state (cookies), are not privacy friendly, since they allow servers to track | |||
clients across sessions and interactions. Privacy Pass takes a different | Clients across sessions and interactions. Privacy Pass takes a different | |||
approach: instead of presenting linkable state-carrying information to servers, | approach: instead of presenting linkable state-carrying information to servers, | |||
e.g., a cookie indicating whether or not the client is an authorized user or | e.g., a cookie indicating whether or not the Client is an authorized user or | |||
has completed some prior challenge, clients present unlinkable proofs that | has completed some prior challenge, Clients present unlinkable proofs that | |||
attest to this information. These proofs, or tokens, are private in the sense | attest to this information. These proofs, or tokens, are private in the sense | |||
that a given token cannot be linked to the protocol interaction where that | that a given token cannot be linked to the protocol interaction where that | |||
token was initially issued.</t> | token was initially issued.</t> | |||
<t>At a high level, the Privacy Pass architecture consists of two protocol s: | <t>At a high level, the Privacy Pass architecture consists of two protocol s: | |||
redemption and issuance. The redemption protocol, described in | redemption and issuance. The redemption protocol, described in | |||
<xref target="AUTHSCHEME"/>, runs between Clients and | <xref target="RFC9577"/>, runs between Clients and | |||
Origins (servers). It allows Origins to challenge Clients to present tokens | Origins (servers). It allows Origins to challenge Clients to present tokens | |||
for consumption. Origins verify the token to authenticate the Client -- without | for consumption. Origins verify the token to authenticate the Client -- without | |||
learning any specific information about the Client -- and then make an authoriza tion | learning any specific information about the Client -- and then make an authoriza tion | |||
decision on the basis of the token verifying successfully or not. Depending | decision on the basis of the token verifying successfully or not. Depending | |||
on the type of token, e.g., whether or not it can be cached, the Client | on the type of token, e.g., whether or not it can be cached, the Client | |||
either presents a previously obtained token or invokes an issuance protocol, | either presents a previously obtained token or invokes an issuance protocol, | |||
such as <xref target="ISSUANCE"/>, to acquire a token to | e.g., the protocols described in <xref target="RFC9578"/>, to acquire a token to | |||
present as authorization.</t> | present as authorization.</t> | |||
<t>This document describes requirements for both redemption and issuance | <t>This document describes requirements for both redemption and issuance | |||
protocols and how they interact. It also provides recommendations on how | protocols and how they interact. It also provides recommendations on how | |||
the architecture should be deployed to ensure the privacy of clients and | the architecture should be deployed to ensure the privacy of Clients and | |||
the security of all participating entities.</t> | the security of all participating entities.</t> | |||
</section> | </section> | |||
<section anchor="terminology"> | <section anchor="terminology"> | |||
<name>Terminology</name> | <name>Terminology</name> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and | "<bcp14>SHOULD NOT</bcp14>", | |||
only when, they | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
appear in all capitals, as shown here.</t> | "<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> | ||||
<t>The following terms are used throughout this document:</t> | <t>The following terms are used throughout this document:</t> | |||
<dl> | <dl> | |||
<dt>Client:</dt> | <dt>Client:</dt> | |||
<dd> | <dd> | |||
<t>An entity that seeks authorization to an Origin. Using <xref target | <t>An entity that seeks authorization to an Origin. Using terminology | |||
="RFC9334"/> terminology, | from <xref target="RFC9334"/>, | |||
Clients implement the RATS Attester role.</t> | Clients implement the Remote ATtestation procedureS (RATS) Attester role.</t> | |||
</dd> | </dd> | |||
<dt>Token:</dt> | <dt>Token:</dt> | |||
<dd> | <dd> | |||
<t>A cryptographic authentication message used for authorization decis ions, | <t>A cryptographic authentication message used for authorization decis ions, | |||
produced as output from an issuance mechanism or protocol.</t> | produced as output from an issuance mechanism or protocol.</t> | |||
</dd> | </dd> | |||
<dt>Origin:</dt> | <dt>Origin:</dt> | |||
<dd> | <dd> | |||
<t>An entity that consumes tokens presented by Clients and uses them t o make authorization decisions.</t> | <t>An entity that consumes tokens presented by Clients and uses them t o make authorization decisions.</t> | |||
</dd> | </dd> | |||
skipping to change at line 140 ¶ | skipping to change at line 164 ¶ | |||
<t>An entity that issues tokens to Clients for properties | <t>An entity that issues tokens to Clients for properties | |||
attested to by the Attester.</t> | attested to by the Attester.</t> | |||
</dd> | </dd> | |||
<dt>Issuance:</dt> | <dt>Issuance:</dt> | |||
<dd> | <dd> | |||
<t>The mechanism by which an Issuer produces tokens for Clients.</t> | <t>The mechanism by which an Issuer produces tokens for Clients.</t> | |||
</dd> | </dd> | |||
<dt>Attester:</dt> | <dt>Attester:</dt> | |||
<dd> | <dd> | |||
<t>An entity that attests to properties of Clients for the | <t>An entity that attests to properties of Clients for the | |||
purposes of token issuance. Using <xref target="RFC9334"/> terminology, Attester | purposes of token issuance. Using terminology from <xref target="RFC9334"/>, Att | |||
s implement | esters implement the RATS Verifier role.</t> | |||
the RATS Verifier role.</t> | ||||
</dd> | </dd> | |||
<dt>Attestation procedure:</dt> | <dt>Attestation procedure:</dt> | |||
<dd> | <dd> | |||
<t>The procedure by which an Attester determines whether or not a Clie nt | <t>The procedure by which an Attester determines whether or not a Clie nt | |||
has the specific set of properties that are necessary for token issuance.</t> | has the specific set of properties that are necessary for token issuance.</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>The trust relationships between each of the entities in this list is fu rther | <t>The trust relationships between each of the entities in this list are f urther | |||
elaborated upon in <xref target="privacy-and-trust"/>.</t> | elaborated upon in <xref target="privacy-and-trust"/>.</t> | |||
</section> | </section> | |||
<section anchor="architecture"> | <section anchor="architecture"> | |||
<name>Architecture</name> | <name>Architecture</name> | |||
<t>The Privacy Pass architecture consists of four logical entities -- | <t>The Privacy Pass architecture consists of four logical entities -- | |||
Client, Origin, Issuer, and Attester -- that work in concert | Client, Origin, Issuer, and Attester -- that work in concert | |||
for token redemption and issuance. This section presents an overview | for token redemption and issuance. This section presents an overview | |||
of Privacy Pass, a high-level description of the threat model and | of Privacy Pass, a high-level description of the threat model and | |||
privacy goals of the architecture, and the goals and requirements of | privacy goals of the architecture, and the goals and requirements of | |||
the redemption and issuance protocols. Deployment variations for the | the redemption and issuance protocols. Deployment variations for the | |||
Origin, Issuer, and Attester in this architecture, including | Origin, Issuer, and Attester in this architecture, including | |||
considerations for implementing these entities, are further discussed | considerations for implementing these entities, are further discussed | |||
in <xref target="deployment"/>.</t> | in <xref target="deployment"/>.</t> | |||
<section anchor="overview"> | <section anchor="overview"> | |||
<name>Overview</name> | <name>Overview</name> | |||
<t>This section describes the typical interaction flow for Privacy Pass. </t> | <t>This section describes the typical interaction flow for Privacy Pass, as shown in <xref target="fig-overview"/>.</t> | |||
<ol spacing="normal" type="1"><li>A Client interacts with an Origin by s ending a request or otherwise | <ol spacing="normal" type="1"><li>A Client interacts with an Origin by s ending a request or otherwise | |||
interacting with the Origin in a way that triggers a response containing | interacting with the Origin in a way that triggers a response containing | |||
a token challenge. The token challenge indicates a specific Issuer to use.</li> | a token challenge. The token challenge indicates a specific Issuer to use.</li> | |||
<li>If the Client already has a token available that satisfies the tok en | <li>If the Client already has a token available that satisfies the tok en | |||
challenge, e.g., because the Client has a cache of previously issued tokens, | challenge, e.g., because the Client has a cache of previously issued tokens, | |||
it can skip to <xref format="none" target="step-redemption">step 6</xref> and re deem its | it can skip to <xref format="none" target="step-redemption">step 6</xref> and re deem its | |||
token; see <xref target="hoarding"/> for security considerations of cached token s.</li> | token; see <xref target="hoarding"/> for security considerations regarding cache d tokens.</li> | |||
<li>If the Client does not have a token available and decides it wants to | <li>If the Client does not have a token available and decides it wants to | |||
obtain one (or more) bound to the token challenge, it then invokes the | obtain one (or more) bound to the token challenge, it then invokes the | |||
issuance protocol. As a prerequisite to the issuance protocol, the Client | issuance protocol. As a prerequisite to the issuance protocol, the Client | |||
runs the deployment-specific attestation process that is required for the | runs the deployment-specific attestation process that is required for the | |||
designated Issuer. Client attestation can be done via proof of solving a | designated Issuer. Client attestation can be done via proof of solving a | |||
CAPTCHA, checking device or hardware attestation validity, etc.; see | CAPTCHA, checking device or hardware attestation validity, etc.; see | |||
<xref target="attester"/> for more details.</li> | <xref target="attester"/> for more details.</li> | |||
<li>If the attestation process completes successfully, the client crea tes a | <li>If the attestation process completes successfully, the Client crea tes a | |||
token request to send to the designated Issuer (generally via the Attester, | token request to send to the designated Issuer (generally via the Attester, | |||
though it is not required to be sent through the Attester). | though it is not required to be sent through the Attester). | |||
The Attester and Issuer might be functions on the same server, depending on the | The Attester and Issuer might be functions on the same server, depending on the | |||
deployment model (see <xref target="deployment"/>). Depending on the attestation process, it | deployment model (see <xref target="deployment"/>). Depending on the attestation process, it | |||
is possible for attestation to run alongside the issuance protocol, e.g., where | is possible for attestation to run alongside the issuance protocol, e.g., where | |||
Clients send necessary attestation information to the Attester along with their | Clients send necessary attestation information to the Attester along with their | |||
token request. If the attestation process fails, the Client receives an error | token request. If the attestation process fails, the Client receives an error | |||
and issuance aborts without a token.</li> | and issuance aborts without a token.</li> | |||
<li>The Issuer generates a token response based on the token request, which | <li>The Issuer generates a token response based on the token request, which | |||
is returned to the Client (generally via the Attester). Upon receiving the | is returned to the Client (generally via the Attester). Upon receiving the | |||
token response, the Client computes a token from the token challenge and token | token response, the Client computes a token from the token challenge and token | |||
response. This token can be validated by anyone with the per-Issuer key, but | response. This token can be validated by anyone with the per-Issuer key but | |||
cannot be linked to the content of the token request or token response.</li> | cannot be linked to the content of the token request or token response.</li> | |||
<li> | <li> | |||
<t anchor="step-redemption">If the Client has a token, it includes i t in a subsequent request to | <t anchor="step-redemption">If the Client has a token, it includes i t in a subsequent request to | |||
the Origin, as authorization. This token is sent only once in reaction to a | the Origin, as authorization. This token is sent only once in reaction to a | |||
challenge; Clients do not send tokens more than once, even if they receive | challenge; Clients do not send tokens more than once, even if they receive | |||
duplicate or redundant challenges. The Origin | duplicate or redundant challenges. The Origin | |||
validates that the token was generated by the expected Issuer and has not | validates that the token was generated by the expected Issuer and has not | |||
already been redeemed for the corresponding token challenge. If the Client | already been redeemed for the corresponding token challenge. If the Client | |||
does not have a token, perhaps because issuance failed, the client does not | does not have a token, perhaps because issuance failed, the Client does not | |||
reply to the Origin's challenge with a new request.</t> | reply to the Origin's challenge with a new request.</t> | |||
</li> | </li> | |||
</ol> | </ol> | |||
<figure anchor="fig-overview"> | <figure anchor="fig-overview"> | |||
<name>Privacy pass redemption and issuance protocol interaction</name> | <name>Privacy Pass Redemption and Issuance Protocol Interaction</name> | |||
<artset> | <artset> | |||
<artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version= "1.1" height="224" width="520" viewBox="0 0 520 224" class="diagram" text-anchor ="middle" font-family="monospace" font-size="13px" stroke-linecap="round"> | <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version= "1.1" viewBox="0 0 520 224" class="diagram" text-anchor="middle" font-family="mo nospace" font-size="13px" stroke-linecap="round"> | |||
<path d="M 8,32 L 8,64" fill="none" stroke="black"/> | <path d="M 8,32 L 8,64" fill="none" stroke="black"/> | |||
<path d="M 40,64 L 40,208" fill="none" stroke="black"/> | <path d="M 40,64 L 40,208" fill="none" stroke="black"/> | |||
<path d="M 80,32 L 80,64" fill="none" stroke="black"/> | <path d="M 80,32 L 80,64" fill="none" stroke="black"/> | |||
<path d="M 184,32 L 184,64" fill="none" stroke="black"/> | <path d="M 184,32 L 184,64" fill="none" stroke="black"/> | |||
<path d="M 216,64 L 216,208" fill="none" stroke="black"/> | <path d="M 216,64 L 216,208" fill="none" stroke="black"/> | |||
<path d="M 256,32 L 256,64" fill="none" stroke="black"/> | <path d="M 256,32 L 256,64" fill="none" stroke="black"/> | |||
<path d="M 336,32 L 336,64" fill="none" stroke="black"/> | <path d="M 336,32 L 336,64" fill="none" stroke="black"/> | |||
<path d="M 376,64 L 376,144" fill="none" stroke="black"/> | <path d="M 376,64 L 376,144" fill="none" stroke="black"/> | |||
<path d="M 376,192 L 376,208" fill="none" stroke="black"/> | <path d="M 376,192 L 376,208" fill="none" stroke="black"/> | |||
<path d="M 424,32 L 424,64" fill="none" stroke="black"/> | <path d="M 424,32 L 424,64" fill="none" stroke="black"/> | |||
skipping to change at line 288 ¶ | skipping to change at line 312 ¶ | |||
]]></artwork> | ]]></artwork> | |||
</artset> | </artset> | |||
</figure> | </figure> | |||
</section> | </section> | |||
<section anchor="use-cases"> | <section anchor="use-cases"> | |||
<name>Use Cases</name> | <name>Use Cases</name> | |||
<t>Use cases for Privacy Pass are broad and depend greatly on the deploy ment model | <t>Use cases for Privacy Pass are broad and depend greatly on the deploy ment model | |||
as discussed in <xref target="deployment"/>. The initial motivating use case for Privacy Pass | as discussed in <xref target="deployment"/>. The initial motivating use case for Privacy Pass | |||
<xref target="PrivacyPassCloudflare"/> was to help rate-limit malicious or other wise abusive | <xref target="PrivacyPassCloudflare"/> was to help rate-limit malicious or other wise abusive | |||
traffic from services such as Tor <xref target="DMS2004"/>. The generalized and evolved | traffic from services such as Tor <xref target="DMS2004"/>. The generalized and evolved | |||
architecture described in this document also work for this use case. However, | architecture described in this document also works for this use case. However, | |||
for added clarity, some more possible use cases are described below.</t> | for added clarity, some more possible use cases are described below.</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Low-quality, anti-fraud signal for open Internet services. Tokens can attest that | <li>Low-quality, anti-fraud signal for open Internet services. Tokens can attest that | |||
the Client behind the user agent is likely not a bot attempting to perform some | the Client behind the user agent is likely not a bot attempting to perform some | |||
form of automated attack such as credential stuffing. Example attestation proced ures | form of automated attack such as credential stuffing. Example attestation proced ures | |||
for this use case might be solving some form of CAPTCHA or presenting evidence o f a | for this use case might be solving some form of CAPTCHA or presenting evidence o f a | |||
valid, unlocked device in good standing.</li> | valid, unlocked device in good standing.</li> | |||
<li>Privacy-preserving authentication for proprietary services. Tokens can attest that | <li>Privacy-preserving authentication for proprietary services. Tokens can attest that | |||
the Client is a valid subscriber for a proprietary service, such as a deployment of | the Client is a valid subscriber for a proprietary service, such as a deployment of | |||
Oblivious HTTP <xref target="OHTTP"/>.</li> | Oblivious HTTP <xref target="RFC9458"/>.</li> | |||
</ul> | </ul> | |||
</section> | </section> | |||
<section anchor="privacy-and-trust"> | <section anchor="privacy-and-trust"> | |||
<name>Privacy Goals and Threat Model</name> | <name>Privacy Goals and Threat Model</name> | |||
<t>The end-to-end flow for Privacy Pass described in <xref target="overv iew"/> involves three | <t>The end-to-end flow for Privacy Pass described in <xref target="overv iew"/> involves three | |||
different types of contexts:</t> | different types of contexts:</t> | |||
<dl> | <dl> | |||
<dt>Redemption context:</dt> | <dt>Redemption context:</dt> | |||
<dd> | <dd> | |||
<t>The interactions and set of information shared | <t>The interactions and set of information shared | |||
between the Client and Origin, i.e., the information that is provided or | between the Client and Origin, i.e., the information that is provided or | |||
otherwise available to the Origin during redemption that might be used | otherwise available to the Origin during redemption that might be used | |||
to identify a Client and construct a token challenge. This context includes all | to identify a Client and construct a token challenge. This context includes all | |||
information associated with redemption, such as the timestamp of the event, | information associated with redemption, such as the timestamp of the event, | |||
Client-visible information (including the IP address), and the Origin name.</t> | Client-visible information (including the IP address), and the Origin name.</t> | |||
</dd> | </dd> | |||
<dt>Issuance context:</dt> | <dt>Issuance context:</dt> | |||
<dd> | <dd> | |||
<t>The interactions and set of information shared between the Client , Attester, | <t>The interactions and set of information shared between the Client , Attester, | |||
and Issuer, i.e., the information that is provided or otherwise available | and Issuer, i.e., the information that is provided or otherwise available | |||
to Attester and Issuer during issuance that might be used to identify a Client. | to the Attester and Issuer during issuance that might be used to identify a Clie nt. | |||
This context includes all information associated with issuance, such as the | This context includes all information associated with issuance, such as the | |||
timestamp of the event, any Client-visible information (including the IP | timestamp of the event, any Client-visible information (including the IP | |||
address), and the Origin name (if revealed during issuance). This does not | address), and the Origin name (if revealed during issuance). This does not | |||
include the token challenge in its entirety, as that is kept secret from the | include the token challenge in its entirety, as that is kept secret from the | |||
Issuer during the issuance protocol.</t> | Issuer during the issuance protocol.</t> | |||
</dd> | </dd> | |||
<dt>Attestation context:</dt> | <dt>Attestation context:</dt> | |||
<dd> | <dd> | |||
<t>The interactions and set of information shared between | <t>The interactions and set of information shared between | |||
the Client and Attester only, for the purposes of attesting the validity of | the Client and Attester only, for the purposes of attesting the validity of | |||
the Client, that is provided or otherwise available during attestation that | the Client, that is provided or otherwise available during attestation that | |||
might be used to identify the Client. This context includes all information | might be used to identify the Client. This context includes all information | |||
associated with attestation, such as the timestamp of the event and any | associated with attestation, such as the timestamp of the event and any | |||
Client-visible information, including information needed for the attestation | Client-visible information, including information needed for the attestation | |||
procedure to complete.</t> | procedure to complete.</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>The privacy goals of Privacy Pass assume a threat model in which Orig ins trust | <t>The privacy goals of Privacy Pass assume a threat model in which Orig ins trust | |||
specific Issuers to produce tokens, and Issuers in turn trust one or more | specific Issuers to produce tokens, and Issuers in turn trust one or more | |||
Attesters to correctly run the attestation procedure with Clients. This | Attesters to correctly run the attestation procedure with Clients. This | |||
arrangement ensures that tokens which validate for a given Issuer were only | arrangement ensures that tokens that validate for a given Issuer were only | |||
issued to a Client that successfully completed attestation with an Attester | issued to a Client that successfully completed attestation with an Attester | |||
that the Issuer trusts. Moreover, this arrangement means that if an Origin | that the Issuer trusts. Moreover, this arrangement means that if an Origin | |||
accepts tokens issued by an Issuer that trusts multiple Attesters, then a | accepts tokens issued by an Issuer that trusts multiple Attesters, then a | |||
Client can use any one of these Attesters to issue and redeem tokens for the | Client can use any one of these Attesters to issue and redeem tokens for the | |||
Origin. Whether or not these different entities in the architecture collude | Origin. Whether or not these different entities in the architecture collude | |||
for learning redemption, issuance, or attestation contexts, as well as the | for learning redemption, issuance, or attestation contexts, as well as the | |||
necessary preconditions for context unlinkability, depends on the deployment | necessary preconditions for context unlinkability, depends on the deployment | |||
model; see <xref target="deployment"/> for more details.</t> | model; see <xref target="deployment"/> for more details.</t> | |||
<t>The mechanisms for establishing trust between each entity in this arr angement | <t>The mechanisms for establishing trust between each entity in this arr angement | |||
are deployment-specific. For example, in settings where Clients interact with | are deployment specific. For example, in settings where Clients interact with | |||
Issuers through an Attester, Attesters and Issuers might use | Issuers through an Attester, Attesters and Issuers might use | |||
mutually authenticated TLS to authenticate one another. In settings where | mutually authenticated TLS to authenticate one another. In settings where | |||
Clients do not communicate with Issuers through an Attester, the Attesters | Clients do not communicate with Issuers through an Attester, the Attesters | |||
might convey this trust via a digital signature that Issuers can verify.</t> | might convey this trust via a digital signature that Issuers can verify.</t> | |||
<t>Clients explicitly trust Attesters to perform attestation correctly a nd in a | <t>Clients explicitly trust Attesters to perform attestation correctly a nd in a | |||
way that does not violate their privacy. In particular, this means that Attester s | way that does not violate their privacy. In particular, this means that Attester s | |||
which may be privy to private information about Clients are trusted to not discl ose | that may be privy to private information about Clients are trusted to not disclo se | |||
this information to non-colluding parties. Colluding parties are assumed to have | this information to non-colluding parties. Colluding parties are assumed to have | |||
access to the same information; see <xref target="deployment"/> for more about d ifferent | access to the same information; see <xref target="deployment"/> for more about d ifferent | |||
deployment models and non-collusion assumptions. However, Clients assume Issuers and | deployment models and non-collusion assumptions. However, Clients assume that Is suers and | |||
Origins are malicious.</t> | Origins are malicious.</t> | |||
<t>Given this threat model, the privacy goals of Privacy Pass are orient ed around | <t>Given this threat model, the privacy goals of Privacy Pass are orient ed around | |||
unlinkability based on redemption, issuance, and attestation contexts, as | unlinkability based on redemption, issuance, and attestation contexts, as | |||
described below.</t> | described below.</t> | |||
<ol spacing="normal" type="1"><li>Origin-Client unlinkability. This mean s that given two redemption contexts, | <ol spacing="normal" type="1"><li>Origin-Client unlinkability. This mean s that given two redemption contexts, | |||
the Origin cannot determine if both redemption contexts correspond to the same | the Origin cannot determine if both redemption contexts correspond to the same | |||
Client or two different Clients. Informally, this means that a Client in a | Client or two different Clients. Informally, this means that a Client in a | |||
redemption context is indistinguishable from any other Client that might use | redemption context is indistinguishable from any other Client that might use | |||
the same redemption context. The set of Clients that share the same redemption | the same redemption context. The set of Clients that share the same redemption | |||
context is referred to as a redemption anonymity set.</li> | context is referred to as a redemption anonymity set.</li> | |||
skipping to change at line 387 ¶ | skipping to change at line 411 ¶ | |||
the Attester cannot determine if both contexts correspond to the same Origin | the Attester cannot determine if both contexts correspond to the same Origin | |||
or two different Origins. The set of Origins that share the same attestation | or two different Origins. The set of Origins that share the same attestation | |||
context is referred to as an attestation anonymity set.</li> | context is referred to as an attestation anonymity set.</li> | |||
<li>Redemption context unlinkability. Given two redemption contexts, t he Origin | <li>Redemption context unlinkability. Given two redemption contexts, t he Origin | |||
cannot determine which issuance and attestation contexts each redemption | cannot determine which issuance and attestation contexts each redemption | |||
corresponds to, even with the collaboration of the Issuer and Attester (should | corresponds to, even with the collaboration of the Issuer and Attester (should | |||
these be different parties). This means that any information that may be learned | these be different parties). This means that any information that may be learned | |||
about the Client during the issuance and attestation flows cannot be used by the | about the Client during the issuance and attestation flows cannot be used by the | |||
Origin to compromise Client privacy.</li> | Origin to compromise Client privacy.</li> | |||
</ol> | </ol> | |||
<t>These unlinkability properties ensure that only the Client is able to correlate | <t>These unlinkability properties ensure that only the Clients are able to correlate | |||
information that might be used to identify them with activity on the Origin. | information that might be used to identify them with activity on the Origin. | |||
The Attester, Issuer, and Origin only receive the information necessary to perfo rm | The Attester, Issuer, and Origin only receive the information necessary to perfo rm | |||
their respective functions.</t> | their respective functions.</t> | |||
<t>The manner in which these unlinkability properties are achieved depen ds on the | <t>The manner in which these unlinkability properties are achieved depen ds on the | |||
deployment model, type of attestation, and issuance protocol details. For exampl e, | deployment model, type of attestation, and issuance protocol details. For exampl e, | |||
as discussed in <xref target="deployment"/>, in some cases it is necessary to us e an anonymization | as discussed in <xref target="deployment"/>, in some cases it is necessary to us e an anonymization | |||
service such as Tor <xref target="DMS2004"/> which hides Clients IP addresses. I | service that hides Client IP addresses, such as Tor <xref target="DMS2004"/>. In | |||
n general, | general, | |||
anonymization services ensures that all Clients which use the service are indist | anonymization services ensure that all Clients that use the service are indistin | |||
inguishable | guishable | |||
from one another, though in practice there may be small distinguishing features | from one another, though in practice there may be small distinguishing features | |||
(TLS fingerprints, HTTP headers, etc). Moreover, Clients generally trust these s ervices | (TLS fingerprints, HTTP headers, etc.). Moreover, Clients generally trust these services | |||
to not disclose private Client information (such as IP addresses) to untrusted p arties. | to not disclose private Client information (such as IP addresses) to untrusted p arties. | |||
Failure to use an anonymization service when interacting with Attesters, Issuers , or | Failure to use an anonymization service when interacting with Attesters, Issuers , or | |||
Origins can allow the set of possible Clients to be partitioned by the Client's IP address, | Origins can allow the set of possible Clients to be partitioned by the Client's IP address | |||
and can therefore lead to unlinkability violations. Similarly, malicious Origins | and can therefore lead to unlinkability violations. Similarly, malicious Origins | |||
may attempt to link two redemption contexts together by using Client-specific | may attempt to link two redemption contexts together by using Client-specific | |||
Issuer public keys. See <xref target="deployment-considerations"/> and <xref tar get="privacy"/> for more | Issuer Public Keys. See Sections <xref target="deployment-considerations" f ormat="counter"/> and <xref target="privacy" format="counter"/> for more | |||
information.</t> | information.</t> | |||
<t>The remainder of this section describes the functional properties and security | <t>Sections <xref target="redemption" format="counter"/> and <xref targe t="issuance-protocol" format="counter"/> describe the functional properties and security | |||
requirements of the redemption and issuance protocols in more detail. <xref targ et="flow"/> | requirements of the redemption and issuance protocols in more detail. <xref targ et="flow"/> | |||
describes how information flows between Issuer, Origin, Client, and Attester | describes how information flows between the Issuer, Origin, Client, and Attester | |||
through these protocols.</t> | through these protocols.</t> | |||
</section> | </section> | |||
<section anchor="redemption"> | <section anchor="redemption"> | |||
<name>Redemption Protocol</name> | <name>Redemption Protocol</name> | |||
<t>The Privacy Pass redemption protocol, described in | <t>The Privacy Pass redemption protocol, described in | |||
<xref target="AUTHSCHEME"/>, is an authorization protocol | <xref target="RFC9577"/>, is an authorization protocol | |||
wherein Clients present tokens to Origins for authorization. Normally, | wherein Clients present tokens to Origins for authorization. Normally, | |||
redemption is preceded by a challenge, wherein the Origin challenges | redemption is preceded by a challenge, wherein the Origin challenges | |||
Clients for a token with a TokenChallenge (<xref section="2.1" sectionFormat="co | Clients for a token with a TokenChallenge (<xref section="2.1" sectionFormat="co | |||
mma" target="AUTHSCHEME"/>) and, | mma" target="RFC9577"/>) and, | |||
if possible, Clients present a valid Token (<xref section="2.2" sectionFormat="c | if possible, Clients present a valid token (<xref section="2.2" sectionFormat="c | |||
omma" target="AUTHSCHEME"/>) | omma" target="RFC9577"/>) | |||
in reaction to the challenge. This interaction is shown below.</t> | in reaction to the challenge. This interaction is shown below.</t> | |||
<figure anchor="fig-redemption"> | <figure anchor="fig-redemption"> | |||
<name>Challenge and redemption protocol interaction</name> | <name>Challenge and Redemption Protocol Interaction</name> | |||
<artset> | <artset> | |||
<artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version= "1.1" height="176" width="432" viewBox="0 0 432 176" class="diagram" text-anchor ="middle" font-family="monospace" font-size="13px" stroke-linecap="round"> | <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version= "1.1" viewBox="0 0 432 176" class="diagram" text-anchor="middle" font-family="mo nospace" font-size="13px" stroke-linecap="round"> | |||
<path d="M 8,32 L 8,64" fill="none" stroke="black"/> | <path d="M 8,32 L 8,64" fill="none" stroke="black"/> | |||
<path d="M 40,64 L 40,160" fill="none" stroke="black"/> | <path d="M 40,64 L 40,160" fill="none" stroke="black"/> | |||
<path d="M 80,32 L 80,64" fill="none" stroke="black"/> | <path d="M 80,32 L 80,64" fill="none" stroke="black"/> | |||
<path d="M 184,32 L 184,64" fill="none" stroke="black"/> | <path d="M 184,32 L 184,64" fill="none" stroke="black"/> | |||
<path d="M 216,64 L 216,160" fill="none" stroke="black"/> | <path d="M 216,64 L 216,160" fill="none" stroke="black"/> | |||
<path d="M 256,32 L 256,64" fill="none" stroke="black"/> | <path d="M 256,32 L 256,64" fill="none" stroke="black"/> | |||
<path d="M 8,32 L 80,32" 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 184,32 L 256,32" fill="none" stroke="black"/> | |||
<path d="M 8,64 L 80,64" 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 184,64 L 256,64" fill="none" stroke="black"/> | |||
skipping to change at line 473 ¶ | skipping to change at line 498 ¶ | |||
| | | | | | |||
|<----- Request ------+ | |<----- Request ------+ | |||
+-- TokenChallenge -->| | +-- TokenChallenge -->| | |||
| | <== Issuance protocol ==> | | | <== Issuance protocol ==> | |||
|<-- Request+Token ---+ | |<-- Request+Token ---+ | |||
| | | | | | |||
]]></artwork> | ]]></artwork> | |||
</artset> | </artset> | |||
</figure> | </figure> | |||
<t>Alternatively, when configured to do so, Clients may opportunisticall y present | <t>Alternatively, when configured to do so, Clients may opportunisticall y present | |||
Token values to Origins without a corresponding TokenChallenge.</t> | token values to Origins without a corresponding TokenChallenge.</t> | |||
<t>The structure and semantics of the TokenChallenge and Token messages | <t>The structure and semantics of the TokenChallenge and token messages | |||
depend | depend | |||
on the issuance protocol and token type being used; see <xref target="AUTHSCHEME | on the issuance protocol and token type being used; see <xref target="RFC9577"/> | |||
"/> for | for | |||
more information.</t> | more information.</t> | |||
<t>The challenge provides the client with the information necessary to o btain | <t>The challenge provides the Client with the information necessary to o btain | |||
tokens that the server might subsequently accept in the redemption context. | tokens that the server might subsequently accept in the redemption context. | |||
There are a number of ways in which the token may vary based on this challenge, | There are a number of ways in which the token may vary based on this challenge, | |||
including:</t> | including the following:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Issuance protocol. The challenge identifies the type of issuance p rotocol | <li>Issuance protocol. The challenge identifies the type of issuance p rotocol | |||
required for producing the token. Different issuance protocols have different | required for producing the token. Different issuance protocols have different | |||
security properties, e.g., some issuance protocols may produce tokens that | security properties, e.g., some issuance protocols may produce tokens that | |||
are publicly verifiable, whereas others may not have this property.</li> | are publicly verifiable, whereas others may not have this property.</li> | |||
<li>Issuer identity. Token challenges identify which Issuers are trust ed for a | <li>Issuer identity. Token challenges identify which Issuers are trust ed for a | |||
given issuance protocol. As described in <xref target="privacy-and-trust"/>, the choice | given issuance protocol. As described in <xref target="privacy-and-trust"/>, the choice | |||
of Issuer determines the type of Attesters and attestation procedures possible | of Issuer determines the type of Attesters and attestation procedures possible | |||
for a token from the specified Issuer, but the Origin does not learn exactly | for a token from the specified Issuer, but the Origin does not learn exactly | |||
which Attester was used for a given token issuance event.</li> | which Attester was used for a given token issuance event.</li> | |||
<li>Redemption context. Challenges can be bound to a given redemption context, | <li>Redemption context. Challenges can be bound to a given redemption context, | |||
which influences a client's ability to pre-fetch and cache tokens. For | which influences a Client's ability to pre-fetch and cache tokens. For | |||
example, an empty redemption context always allows tokens to be issued and | example, an empty redemption context always allows tokens to be issued and | |||
redeemed non-interactively, whereas a fresh and random redemption context | redeemed non-interactively, whereas a fresh and random redemption context | |||
means that the redeemed token must be issued only after the client receives | means that the redeemed token must be issued only after the Client receives | |||
the challenge. See <xref section="2.1.1" sectionFormat="of" target="AUTHSCHEME"/ | the challenge. See <xref section="2.1.1" sectionFormat="of" target="RFC9577"/> f | |||
> for more details.</li> | or more details.</li> | |||
<li>Per-Origin or cross-Origin. Challenges can be constrained to the O rigin for | <li>Per-Origin or cross-Origin. Challenges can be constrained to the O rigin for | |||
which the challenge originated (referred to as per-Origin tokens), or | which the challenge originated (referred to as per-Origin tokens) or | |||
can be used across multiple Origins (referred to as cross-Origin tokens). | can be used across multiple Origins (referred to as cross-Origin tokens). | |||
The set of Origins for which a cross-Origin token is applicable is referred | The set of Origins for which a cross-Origin token is applicable is referred | |||
to as the cross-Origin set. Opting into this set is done by explicitly agreeing | to as the cross-Origin set. Opting into this set is done by explicitly agreeing | |||
on the contents of the set. Every Origin in a cross-Origin set, by opting in, | on the contents of the set. Every Origin in a cross-Origin set, by opting in, | |||
agrees to admit tokens for any other Origin in the set. See | agrees to admit tokens for any other Origin in the set. See | |||
<xref section="2.1.1" sectionFormat="of" target="AUTHSCHEME"/> for more informat ion on how this set is created.</li> | <xref section="2.1.1" sectionFormat="of" target="RFC9577"/> for more information on how this set is created.</li> | |||
</ul> | </ul> | |||
<t>Origins that admit cross-Origin tokens bear some risk of allowing tok ens | <t>Origins that admit cross-Origin tokens bear some risk of allowing tok ens | |||
issued for one Origin to be spent in an interaction with another Origin. | issued for one Origin to be spent in an interaction with another Origin. | |||
In particular, cross-Origin tokens issued based on a challenge for | In particular, cross-Origin tokens issued based on a challenge for | |||
one Origin can be redeemed at another Origin in the cross-Origin set, | one Origin can be redeemed at another Origin in the cross-Origin set, | |||
which can make it difficult to regulate token consumption. Depending on the | which can make it difficult to regulate token consumption. Depending on the | |||
use case, Origins may need to maintain state to track redeemed tokens. For | use case, Origins may need to maintain state to track redeemed tokens. For | |||
example, Origins that accept cross-Origin tokens across shared redemption | example, Origins that accept cross-Origin tokens across shared redemption | |||
contexts SHOULD track which tokens have been redeemed already in those | contexts <bcp14>SHOULD</bcp14> track which tokens have already been redeemed in those | |||
redemption contexts, since these tokens can be issued and then spent multiple | redemption contexts, since these tokens can be issued and then spent multiple | |||
times for any such challenge. Note that Clients which redeem the | times for any such challenge. Note that Clients that redeem the | |||
same token to multiple Origins do risk those Origins being able to link | same token to multiple Origins do risk those Origins being able to link | |||
Client activity together, which can disincentivize this behavior. See | Client activity together, which can disincentivize this behavior. See | |||
<xref section="2.1.1" sectionFormat="of" target="AUTHSCHEME"/> for discussion.</ t> | <xref section="2.1.1" sectionFormat="of" target="RFC9577"/> for discussion.</t> | |||
<t>How Clients respond to token challenges can have privacy implications . | <t>How Clients respond to token challenges can have privacy implications . | |||
For example, if an Origin allows the Client to choose an Issuer, then the choice | For example, if an Origin allows the Client to choose an Issuer, then the choice | |||
of Issuer can reveal information about the Client used to partition anonymity | of Issuer can reveal information about the Client used to partition anonymity | |||
sets; see <xref target="rotation-and-consistency"/> for more information about t hese privacy | sets; see <xref target="rotation-and-consistency"/> for more information about t hese privacy | |||
considerations.</t> | considerations.</t> | |||
</section> | </section> | |||
<section anchor="issuance-protocol"> | <section anchor="issuance-protocol"> | |||
<name>Issuance Protocol</name> | <name>Issuance Protocol</name> | |||
<t>The Privacy Pass issuance protocol, described in <xref target="ISSUAN | <t>The Privacy Pass issuance protocols, such as those described in <xref | |||
CE"/>, is a two-message | target="RFC9578"/>, are two-message | |||
protocol that takes as input a TokenChallenge from the redemption protocol | protocols that take as input a TokenChallenge from the redemption protocol | |||
(<xref section="2.1" sectionFormat="comma" target="AUTHSCHEME"/>) and produces a | (<xref section="2.1" sectionFormat="comma" target="RFC9577"/>) and produce a tok | |||
Token | en | |||
(<xref section="2.2" sectionFormat="comma" target="AUTHSCHEME"/>), as shown in < | (<xref section="2.2" sectionFormat="comma" target="RFC9577"/>), as shown in <xre | |||
xref target="fig-overview"/>.</t> | f target="fig-overview"/>.</t> | |||
<t>The structure and semantics of the TokenRequest and TokenResponse mes sages | <t>The structure and semantics of the TokenRequest and TokenResponse mes sages | |||
depend on the issuance protocol and token type being used; see <xref target="ISS UANCE"/> | depend on the issuance protocol and token type being used; see <xref target="RFC 9578"/> | |||
for more information.</t> | for more information.</t> | |||
<t>Clients interact with the Attester and Issuer to produce a token for | <t>Clients interact with the Attester and Issuer to produce a token for | |||
a challenge. The context in which an Attester vouches for a Client during | a challenge. The context in which an Attester vouches for a Client during | |||
issuance is referred to as the attestation context. This context includes all | issuance is referred to as the attestation context. This context includes all | |||
information associated with the issuance event, such as the timestamp of the | information associated with the issuance event, such as the timestamp of the | |||
event and Client-visible information, including the IP address or other | event and Client-visible information, including the IP address or other | |||
information specific to the type of attestation done.</t> | information specific to the type of attestation done.</t> | |||
<t>Each issuance protocol may be different, e.g., in the number and type s of | <t>Each issuance protocol may be different, e.g., in the number and type s of | |||
participants, underlying cryptographic constructions used when issuing tokens, | participants, underlying cryptographic constructions used when issuing tokens, | |||
and even privacy properties.</t> | and even privacy properties.</t> | |||
<t>Clients initiate the issuance protocol using the token challenge, a r andomly | <t>Clients initiate the issuance protocol using the token challenge, a r andomly | |||
generated nonce, and public key for the Issuer, all of which are the Client's | generated nonce, and a public key for the Issuer, all of which are the Client's | |||
private input to the protocol and ultimately bound to an output Token; | private input to the protocol and ultimately bound to an output token; | |||
see <xref section="2.2" sectionFormat="of" target="AUTHSCHEME"/> for details. Fu | see <xref section="2.2" sectionFormat="of" target="RFC9577"/> for details. Futur | |||
ture specifications | e specifications | |||
may change or extend the Client's input to the issuance protocol to produce | may change or extend the Client's input to the issuance protocol to produce | |||
Tokens with a different structure.</t> | tokens with a different structure.</t> | |||
<t>Token properties vary based on the issuance protocol. Important prope rties | <t>Token properties vary based on the issuance protocol. Important prope rties | |||
supported in this architecture are described below.</t> | supported in this architecture are described below.</t> | |||
<ol spacing="normal" type="1"><li>Public verifiability. This means the T | <ol spacing="normal" type="1"><li>Public verifiability. This means that | |||
oken can be verified using the Issuer | the token can be verified using the Issuer | |||
public key. A Token that does not have public verifiability can only be verified | Public Key. A token that does not have public verifiability can only be verified | |||
using the Issuer secret key.</li> | using the Issuer secret key.</li> | |||
<li>Public metadata. This means that the Token can be cryptographicall y bound to | <li>Public metadata. This means that the token can be cryptographicall y bound to | |||
arbitrary public information. See <xref target="metadata-privacy"/> for privacy considerations | arbitrary public information. See <xref target="metadata-privacy"/> for privacy considerations | |||
of public metadata.</li> | regarding public metadata.</li> | |||
<li>Private metadata. This means that the Token can be cryptographical | <li>Private metadata. This means that the token can be cryptographical | |||
ly bound to | ly bound to | |||
arbitrary private information, i.e., information that the Client does not observ e | arbitrary private information, i.e., information that the Client does not observ e | |||
during Token issuance or redemption. See <xref target="metadata-privacy"/> for p | during token issuance or redemption. See <xref target="metadata-privacy"/> for p | |||
rivacy | rivacy | |||
considerations of private metadata.</li> | considerations regarding private metadata.</li> | |||
</ol> | </ol> | |||
<t>The issuance protocol itself can be any interactive protocol between Client, | <t>The issuance protocol itself can be any interactive protocol between the Client, | |||
Issuer, or other parties that produces a valid token bound to the Client's | Issuer, or other parties that produces a valid token bound to the Client's | |||
private input, subject to the following security requirements.</t> | private input, subject to the following security requirements.</t> | |||
<ol spacing="normal" type="1"><li>Unconditional input secrecy. The issua nce protocol MUST NOT reveal anything | <ol spacing="normal" type="1"><li>Unconditional input secrecy. The issua nce protocol <bcp14>MUST NOT</bcp14> reveal anything | |||
about the Client's private input, including the challenge and nonce, to the | about the Client's private input, including the challenge and nonce, to the | |||
Attester or Issuer, regardless of the hardness assumptions of the underlying | Attester or Issuer, regardless of the hardness assumptions of the underlying | |||
cryptographic protocol(s). This property is sometimes also referred to as | cryptographic protocol(s). This property is sometimes also referred to as | |||
blindness.</li> | blindness.</li> | |||
<li>One-more forgery security. The issuance protocol MUST NOT allow ma licious | <li>One-more forgery security. The issuance protocol <bcp14>MUST NOT</ bcp14> allow malicious | |||
Clients or Attesters (acting as Clients) to forge tokens offline or otherwise | Clients or Attesters (acting as Clients) to forge tokens offline or otherwise | |||
without interacting with the Issuer directly.</li> | without interacting with the Issuer directly.</li> | |||
<li>Concurrent security. The issuance protocol MUST be safe to run con | <li>Concurrent security. The issuance protocol <bcp14>MUST</bcp14> be | |||
currently | safe to run concurrently | |||
with arbitrarily many Clients, Attesters and Issuers.</li> | with arbitrarily many Clients, Attesters, and Issuers.</li> | |||
</ol> | </ol> | |||
<t>See <xref target="extensions"/> for requirements on new issuance prot ocol variants and | <t>See <xref target="extensions"/> for requirements on new issuance prot ocol variants and | |||
related extensions.</t> | related extensions.</t> | |||
<t>In the sections below, we describe the Attester and Issuer roles in m ore | <t>In the sections below, we describe the Attester and Issuer roles in m ore | |||
detail.</t> | detail.</t> | |||
<section anchor="attester"> | <section anchor="attester"> | |||
<name>Attester Role</name> | <name>Attester Role</name> | |||
<t>In Privacy Pass, attestation is the process by which an Attester be ars | <t>In Privacy Pass, attestation is the process by which an Attester be ars | |||
witness to, confirms, or authenticates a Client so as to verify properties | witness to, confirms, or authenticates a Client so as to verify properties | |||
about the Client that are required for Issuance. Issuers trust Attesters | about the Client that are required for issuance. Issuers trust Attesters | |||
to perform attestation correctly, i.e., to implement attestation procedures | to perform attestation correctly, i.e., to implement attestation procedures | |||
in a way that are not subverted or bypassed by malicious Clients.</t> | in such a way that those procedures are not subverted or bypassed by malicious C lients.</t> | |||
<t><xref target="RFC9334"/> describes an architecture for attestation procedures. Using | <t><xref target="RFC9334"/> describes an architecture for attestation procedures. Using | |||
that architecture as a conceptual basis, Clients are RATS attesters that | that architecture as a conceptual basis, Clients are RATS Attesters that | |||
produce attestation evidence, and Attesters are RATS verifiers that | produce attestation evidence, and Attesters are RATS Verifiers that | |||
appraise the validity of attestation evidence.</t> | appraise the validity of attestation evidence.</t> | |||
<t>The type of attestation procedure is a deployment-specific option a nd outside | <t>The type of attestation procedure is a deployment-specific option a nd outside | |||
the scope of the issuance protocol. Example attestation procedures are below.</t > | the scope of the issuance protocol. Example attestation procedures are below.</t > | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Solving a CAPTCHA. Clients that solve CAPTCHA challenges can be attested to | <li>Solving a CAPTCHA. Clients that solve CAPTCHA challenges can be attested to | |||
have this capability for the purpose of being ruled out as a bot or otherwise | have this capability for the purpose of being ruled out as a bot or otherwise | |||
automated Client.</li> | automated Client.</li> | |||
<li>Presenting evidence of Client device validity. Some Clients run on trusted | <li>Presenting evidence of Client device validity. Some Clients run on trusted | |||
hardware that are capable of producing device-level attestation evidence.</li> | hardware that is capable of producing device-level attestation evidence.</li> | |||
<li>Proving properties about Client state. Clients can be associated | <li>Proving properties about Client state. Clients can be associated | |||
with state | with state, | |||
and the Attester can verify this state. Examples of state include the | and the Attester can verify this state. Examples of state include the | |||
Client's geographic region and whether the Client has a valid | Client's geographic region and whether the Client has a valid | |||
application-layer account.</li> | application-layer account.</li> | |||
</ul> | </ul> | |||
<t>Attesters may support different types of attestation procedures.</t > | <t>Attesters may support different types of attestation procedures.</t > | |||
<t>Each attestation procedure has different security properties. For | <t>Each attestation procedure has different security properties. For | |||
example, attesting to having a valid account is different from attesting to | example, attesting to having a valid account is different from attesting to | |||
running on trusted hardware. Supporting multiple attestation procedures is | running on trusted hardware. Supporting multiple attestation procedures is | |||
an important step towards ensuring equitable access for Clients; see <xref targe t="discrimination"/>.</t> | an important step towards ensuring equitable access for Clients; see <xref targe t="discrimination"/>.</t> | |||
<t>The role of the Attester in the issuance protocol and its impact on privacy | <t>The role of the Attester in the issuance protocol and its impact on privacy | |||
depends on the type of attestation procedure, issuance protocol, and deployment | depend on the type of attestation procedure, issuance protocol, and deployment | |||
model. For instance, increasing the number of required attestation procedures | model. For instance, increasing the number of required attestation procedures | |||
could decrease the overall anonymity set size. As an example, the number of Clie nts | could decrease the overall anonymity set size. As an example, the number of Clie nts | |||
that have solved a CAPTCHA in the past day, that have a valid account, and that | that have solved a CAPTCHA in the past day, that have a valid account, and that | |||
are running on a trusted device is less than the number of Clients that have | are running on a trusted device is less than the number of Clients that have | |||
solved a CAPTCHA in the past day. See <xref target="rotation-and-consistency"/> for more discussion | solved a CAPTCHA in the past day. See <xref target="rotation-and-consistency"/> for more discussion | |||
of how the variety of attestation procedures can negatively impact Client privac y.</t> | of how the variety of attestation procedures can negatively impact Client privac y.</t> | |||
<t>Depending on the issuance protocol, the Issuer might learn | <t>Depending on the issuance protocol, the Issuer might learn | |||
information about the Origin. To ensure Issuer-Client unlinkability, the Issuer | information about the Origin. To ensure Issuer-Client unlinkability, the Issuer | |||
should be unable to link that information to a specific Client. For such | should be unable to link that information to a specific Client. For such | |||
issuance protocols where the Attester has access to Client-specific | issuance protocols where the Attester has access to Client-specific | |||
information, such as is the case for attestation procedures that involve | information, such as is the case for attestation procedures that involve | |||
Client-specific information (such as application-layer account information) | Client-specific information (such as application-layer account information) | |||
or for deployment models where the Attester learns Client-specific information | or for deployment models where the Attester learns Client-specific information | |||
(such as Client IP addresses), Clients trust the Attester to not share any | (such as Client IP addresses), Clients trust the Attester to not share any | |||
Client-specific information with the Issuer. In deployments where the Attester | Client-specific information with the Issuer. In deployments where the Attester | |||
does not learn Client-specific information, or where the Attester and Issuer are | does not learn Client-specific information or where the Attester and Issuer are | |||
operated by the same entity (such as in the Joint Attester and Issuer model | operated by the same entity (such as in the Joint Attester and Issuer model | |||
described in <xref target="deploy-joint-issuer"/>), the Client does not need to explicitly | described in <xref target="deploy-joint-issuer"/>), the Client does not need to explicitly | |||
trust the Attester in this regard.</t> | trust the Attester in this regard.</t> | |||
<t>Issuers trust Attesters to correctly and reliably perform attestati on. However, | <t>Issuers trust Attesters to correctly and reliably perform attestati on. However, | |||
certain types of attestation can vary in value over time, e.g., if the | certain types of attestation procedures can vary in value over time, e.g., if th e | |||
attestation procedure is compromised. Broken | attestation procedure is compromised. Broken | |||
attestation procedures are considered exceptional events and require | attestation procedures are considered exceptional events and require | |||
configuration changes to address the underlying cause. For example, if | configuration changes to address the underlying cause. For example, if | |||
an attestation procedure is compromised or subverted because of a zero-day | an attestation procedure is compromised or subverted because of a zero-day | |||
exploit on devices that implement the attestation procedure, then the | exploit on devices that implement the attestation procedure, then the | |||
corresponding attestation procedure should be untrusted until the exploit is | corresponding attestation procedure should be untrusted until the exploit is | |||
patched. Addressing changes in attestation quality is therefore a | patched. Addressing changes in attestation quality is therefore a | |||
deployment-specific task. In Split Attester and Issuer deployments (see | deployment-specific task. In Split Origin, Attester, and Issuer deployments (see | |||
<xref target="deploy-split"/>), Issuers can choose to remove compromised Atteste rs from | <xref target="deploy-split"/>), Issuers can choose to remove compromised Atteste rs from | |||
their trusted set until the compromise is patched.</t> | their trusted set until the compromise is patched.</t> | |||
<t>From the perspective of an Origin, tokens produced by an Issuer wit h at least | <t>From the perspective of an Origin, tokens produced by an Issuer wit h at least | |||
one compromised Attester cannot be trusted assuming the Origin does not know | one compromised Attester cannot be trusted, assuming that the Origin does not kn ow | |||
which attestation procedure was used for issuance. This is because the Origin | which attestation procedure was used for issuance. This is because the Origin | |||
cannot distinguish between tokens that were issued via compromised Attesters | cannot distinguish between tokens that were issued via compromised Attesters | |||
and tokens that were issued via uncompromised Attesters absent some | and tokens that were issued via uncompromised Attesters, absent some | |||
distinguishing information in the tokens themselves or from the Issuer. As a | distinguishing information in the tokens themselves or from the Issuer. As a | |||
result, until the attestation procedure is fixed, the Issuer cannot be trusted | result, until the attestation procedure is fixed, the Issuer cannot be trusted | |||
by Origins. Moreover, as a consequence, any tokens issued by an Issuer with a | by Origins. Moreover, as a consequence, any tokens issued by an Issuer with a | |||
compromised attester may no longer be trusted by Origins, even if those tokens | compromised Attester may no longer be trusted by Origins, even if those tokens | |||
were issued to Clients interacting with an uncompromised Attester.</t> | were issued to Clients interacting with an uncompromised Attester.</t> | |||
</section> | </section> | |||
<section anchor="issuer-role"> | <section anchor="issuer-role"> | |||
<name>Issuer Role</name> | <name>Issuer Role</name> | |||
<t>In Privacy Pass, the Issuer is responsible for completing the issua nce protocol | <t>In Privacy Pass, the Issuer is responsible for completing the issua nce protocol | |||
for Clients that complete attestation through a trusted Attester. As described | for Clients that complete attestation through a trusted Attester. As described | |||
in <xref target="attester"/>, Issuers explicitly trust Attesters to correctly an d reliably | in <xref target="attester"/>, Issuers explicitly trust Attesters to correctly an d reliably | |||
perform attestation. Origins explicitly trust Issuers to only issue tokens | perform attestation. Origins explicitly trust Issuers to only issue tokens | |||
from trusted Attesters. Clients do not explicitly trust Issuers.</t> | from trusted Attesters. Clients do not explicitly trust Issuers.</t> | |||
<t>Depending on the deployment model case, issuance may require some f orm of | <t>Depending on the deployment model case, issuance may require some f orm of | |||
Client anonymization service, similar to an IP-hiding proxy, so that Issuers | Client anonymization service, similar to an IP-hiding proxy, so that Issuers | |||
cannot learn information about Clients. This can be provided by an explicit | cannot learn information about Clients. This can be provided by an explicit | |||
participant in the issuance protocol, or it can be provided via external means, | participant in the issuance protocol, or it can be provided via external means, | |||
such as through the use of an IP-hiding proxy service like Tor <xref target="DMS 2004"/>. | such as through the use of an IP-hiding proxy service like Tor <xref target="DMS 2004"/>. | |||
In general, Clients SHOULD minimize or remove identifying | In general, Clients <bcp14>SHOULD</bcp14> minimize or remove identifying | |||
information where possible when invoking the issuance protocol.</t> | information where possible when invoking the issuance protocol.</t> | |||
<t>Issuers are uniquely identifiable by all Clients with a consistent | <t>Issuers are uniquely identifiable by all Clients with a consistent | |||
identifier. In a web context, this identifier might be the Issuer host name. | identifier. In a web context, this identifier might be the Issuer hostname. | |||
Issuers maintain one or more configurations, including issuance key pairs, for | Issuers maintain one or more configurations, including issuance key pairs, for | |||
use in the issuance protocol. Each configuration is assumed to have a unique | use in the issuance protocol. Each configuration is assumed to have a unique | |||
and canonical identifier, sometimes referred to as a key identifier or key ID. | and canonical identifier, sometimes referred to as a key identifier or key ID. | |||
Issuers can rotate these configurations as needed to mitigate risk of compromise ; | Issuers can rotate these configurations as needed to mitigate the risk of compro mise; | |||
see <xref target="rotation-and-consistency"/> for more considerations around con figuration | see <xref target="rotation-and-consistency"/> for more considerations around con figuration | |||
rotation. The Issuer public key for each active configuration is made available | rotation. The Issuer Public Key for each active configuration is made available | |||
to Origins and Clients for use in the issuance and redemption protocols.</t> | to Origins and Clients for use in the issuance and redemption protocols.</t> | |||
</section> | </section> | |||
<section anchor="metadata"> | <section anchor="metadata"> | |||
<name>Issuance Metadata</name> | <name>Issuance Metadata</name> | |||
<t>Certain instantiations of the issuance protocol may permit public o r private | <t>Certain instantiations of the issuance protocol may permit public o r private | |||
metadata to be cryptographically bound to a token. As an example, one | metadata to be cryptographically bound to a token. As an example, one | |||
trivial way to include public metadata is to assign a unique Issuer | trivial way to include public metadata is to assign a unique Issuer | |||
public key for each value of metadata, such that N keys yields | Public Key for each value of metadata, such that N keys yield | |||
log<sub>2</sub>(N) bits of metadata. Metadata may be public or private.</t> | log<sub>2</sub>(N) bits of metadata. Metadata may be public or private.</t> | |||
<t>Public metadata is that which clients can observe as part of the to | <t>Public metadata is metadata that Clients can observe as part of the | |||
ken | token | |||
issuance flow. Public metadata can either be transparent or opaque. For | issuance flow. Public metadata can be either transparent or opaque. For | |||
example, transparent public metadata is a value that the client either | example, transparent public metadata is a value that either the Client | |||
generates itself, or the Issuer provides during the issuance flow and | generates itself or the Issuer provides during the issuance flow and that the | |||
the client can check for correctness. Opaque public metadata is metadata | Client can check for correctness. Opaque public metadata is metadata | |||
the client can see but cannot check for correctness. As an example, the | the Client can see but cannot check for correctness. As an example, the | |||
opaque public metadata might be a "fraud detection signal", computed on | opaque public metadata might be a "fraud detection signal", computed on | |||
behalf of the Issuer, during token issuance. Generally speaking, Clients | behalf of the Issuer, during token issuance. Generally speaking, Clients | |||
cannot determine if this value is generated in a way that permits tracking.</t> | cannot determine if this value is generated in a way that permits tracking.</t> | |||
<t>Private metadata is that which Clients cannot observe as part of th | <t>Private metadata is metadata that Clients cannot observe as part of | |||
e token | the token | |||
issuance flow. Such instantiations can be built on the Private Metadata Bit | issuance flow. Such instantiations can be built on the private metadata bit | |||
construction from Kreuter et al. <xref target="KLOR20"/> | construction from Kreuter et al. <xref target="KLOR20"/> | |||
or the attribute-based VOPRF from Huang et al. <xref target="HIJK21"/>.</t> | or the attribute-based Verifiable Oblivious Pseudorandom Function (VOPRF) from H | |||
uang et al. <xref target="HIJK21"/>.</t> | ||||
<t>Metadata can be arbitrarily long or bounded in length. The amount o f permitted | <t>Metadata can be arbitrarily long or bounded in length. The amount o f permitted | |||
metadata may be determined by application or by the underlying cryptographic | metadata may be determined by an application or by the underlying cryptographic | |||
protocol. The total amount of metadata bits included in a token is the sum of | protocol. The total amount of metadata bits included in a token is the sum of | |||
public and private metadata bits. Every bit of metadata can be used to | public and private metadata bits. Every bit of metadata can be used to | |||
partition the Client issuance or redemption anonymity sets; see | partition the Client issuance or redemption anonymity sets; see | |||
<xref target="metadata-privacy"/> for more information.</t> | <xref target="metadata-privacy"/> for more information.</t> | |||
</section> | </section> | |||
<section anchor="extensions"> | <section anchor="extensions"> | |||
<name>Future Issuance Protocol Requirements</name> | <name>Future Issuance Protocol Requirements</name> | |||
<t>The Privacy Pass architecture and ecosystem are both intended to be receptive | <t>The Privacy Pass architecture and ecosystem are both intended to be receptive | |||
to extensions that expand the current set of functionalities through new | to extensions that expand the current set of functionalities through new | |||
issuance protocols. Each new issuance protocol and extension MUST adhere | issuance protocols. Each new issuance protocol and extension <bcp14>MUST</bcp14> adhere | |||
to the following requirements:</t> | to the following requirements:</t> | |||
<ol spacing="normal" type="1"><li>Include a detailed analysis of the p rivacy impacts of the extension, why | <ol spacing="normal" type="1"><li>Include a detailed analysis of the p rivacy impacts of the extension, why | |||
these impacts are justified, and guidelines on how to use the protocol | these impacts are justified, and guidelines on how to use the protocol | |||
to mitigate or minimize negative deployment or privacy consequences | to mitigate or minimize negative deployment or privacy consequences | |||
discussed in <xref target="deployment-considerations"/> and <xref target="privac y"/>, respectively.</li> | discussed in Sections <xref target="deployment-considerations" format="coun ter"/> and <xref target="privacy" format="counter"/>, respectively.</li> | |||
<li>Adhere to the guidelines specified in <xref target="issuer-role" /> for managing Issuer | <li>Adhere to the guidelines specified in <xref target="issuer-role" /> for managing Issuer | |||
public key data.</li> | Public Key data.</li> | |||
<li>Clearly specify how to interpret and validate TokenChallenge and | <li>Clearly specify how to interpret and validate TokenChallenge and | |||
Token | token | |||
messages that are exchanged during the redemption protocol.</li> | messages that are exchanged during the redemption protocol.</li> | |||
</ol> | </ol> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="flow"> | <section anchor="flow"> | |||
<name>Information Flow</name> | <name>Information Flow</name> | |||
<t>The end-to-end process of redemption and issuance protocols involves information | <t>The end-to-end process of redemption and issuance protocols involves information | |||
flowing between Issuer, Origin, Client, and Attester. That information can | flowing between the Issuer, Origin, Client, and Attester. That information can | |||
have implications on the privacy goals that Privacy Pass aims to provide | have implications on the privacy goals that Privacy Pass aims to provide | |||
as outlined in <xref target="privacy-and-trust"/>. In this section, we describe the flow | as outlined in <xref target="privacy-and-trust"/>. In this section, we describe the flow | |||
of information between each party. How this information affects the privacy | of information between each party. How this information affects the privacy | |||
goals in particular deployment models is further discussed in <xref target="depl oyment"/>.</t> | goals in particular deployment models is further discussed in <xref target="depl oyment"/>.</t> | |||
<section anchor="challenge-flow"> | <section anchor="challenge-flow"> | |||
<name>Token Challenge Flow</name> | <name>Token Challenge Flow</name> | |||
<t>To use Privacy Pass, Origins choose an Issuer from which they are w illing to | <t>To use Privacy Pass, Origins choose an Issuer from which they are w illing to | |||
accept tokens. Origins then construct a token challenge using this specified | accept tokens. Origins then construct a token challenge using this specified | |||
Issuer and information from the redemption context it shares with the Client. | Issuer and information from the redemption context it shares with the Client. | |||
This token challenge is then delivered to a Client. The token challenge conveys | This token challenge is then delivered to a Client. The token challenge conveys | |||
skipping to change at line 771 ¶ | skipping to change at line 796 ¶ | |||
presented with multiple issuance protocol options, then the choice of which | presented with multiple issuance protocol options, then the choice of which | |||
issuance protocol to use can contribute information about the Client's | issuance protocol to use can contribute information about the Client's | |||
capabilities.</li> | capabilities.</li> | |||
<li>Issuer configuration. Information about the Issuer configuration , such as | <li>Issuer configuration. Information about the Issuer configuration , such as | |||
its identity or the public key used to validate tokens it creates, can be | its identity or the public key used to validate tokens it creates, can be | |||
revealed during issuance and contribute to the attestation or issuance | revealed during issuance and contribute to the attestation or issuance | |||
contexts.</li> | contexts.</li> | |||
<li>Attestation information. The issuance protocol can contribute in formation to | <li>Attestation information. The issuance protocol can contribute in formation to | |||
the attestation or issuance contexts based on what attestation procedure the | the attestation or issuance contexts based on what attestation procedure the | |||
Issuer uses to trust a token request. In particular, a token request that is | Issuer uses to trust a token request. In particular, a token request that is | |||
validated by a given Attester means that the Client which generated the token | validated by a given Attester means that the Client that generated the token | |||
request must be capable of the completing the designated attestation procedure.< | request must be capable of completing the designated attestation procedure.</li> | |||
/li> | ||||
<li>Origin information. The issuance protocol can contribute informa tion about | <li>Origin information. The issuance protocol can contribute informa tion about | |||
the Origin that challenged the Client in <xref target="challenge-flow"/>. In par ticular, | the Origin that challenged the Client; see <xref target="challenge-flow"/>. In p articular, | |||
a token request designated for a specific Issuer might imply that the resulting | a token request designated for a specific Issuer might imply that the resulting | |||
token is for an Origin that trusts the specified Issuer. However, this is not | token is for an Origin that trusts the specified Issuer. However, this is not | |||
always true, as some token requests can correspond to cross-Origin tokens, | always true, as some token requests can correspond to cross-Origin tokens, | |||
i.e., they are tokens that would be accepted at any Origin that accepts the | i.e., they are tokens that would be accepted at any Origin that accepts the | |||
cross-Origin token.</li> | cross-Origin token.</li> | |||
</ul> | </ul> | |||
<t>Moreover, a token may contribute information to the issuance attest ation or | <t>Moreover, a token may contribute information to the issuance attest ation or | |||
contexts as described below.</t> | contexts as described below.</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Origin information. The issuance protocol can contribute informa tion about | <li>Origin information. The issuance protocol can contribute informa tion about | |||
skipping to change at line 798 ¶ | skipping to change at line 823 ¶ | |||
transitively through the Attester, that response can reveal information to the | transitively through the Attester, that response can reveal information to the | |||
Attester.</li> | Attester.</li> | |||
<li>Token. The token produced by the issuance protocol can contain i nformation | <li>Token. The token produced by the issuance protocol can contain i nformation | |||
from the issuance context. In particular, depending on the issuance protocol, | from the issuance context. In particular, depending on the issuance protocol, | |||
tokens can contain public or private metadata, and Issuers can choose that | tokens can contain public or private metadata, and Issuers can choose that | |||
metadata on the basis of information in the issuance context.</li> | metadata on the basis of information in the issuance context.</li> | |||
</ul> | </ul> | |||
<t>Exceptional cases in the issuance protocol, such as when either the | <t>Exceptional cases in the issuance protocol, such as when either the | |||
Attester or Issuer aborts the protocol, can contribute information to the | Attester or Issuer aborts the protocol, can contribute information to the | |||
attestation or issuance contexts. The extent to which information in this | attestation or issuance contexts. The extent to which information in this | |||
context harms the Issuer-Client or Attester-Origin unlinkability goals in | context harms the Issuer-Client or Attester-Origin unlinkability goals as discus | |||
<xref target="privacy-and-trust"/> depends on deployment model; see <xref target | sed in | |||
="deployment"/>. | <xref target="privacy-and-trust"/> depends on the deployment model; see <xref ta | |||
rget="deployment"/>. | ||||
Clients can choose whether or not to contribute information to these contexts | Clients can choose whether or not to contribute information to these contexts | |||
based on local policy or preference.</t> | based on local policy or preference.</t> | |||
</section> | </section> | |||
<section anchor="redemption-flow"> | <section anchor="redemption-flow"> | |||
<name>Token Redemption Flow</name> | <name>Token Redemption Flow</name> | |||
<t>Clients send tokens to Origins during the redemption protocol. Any information | <t>Clients send tokens to Origins during the redemption protocol. Any information | |||
that is added to the token during issuance can therefore be sent to the Origin. | that is added to the token during issuance can therefore be sent to the Origin. | |||
Information can either be explicitly passed in a token, or it can be implicit | Information can be either (1) explicitly passed in a token or (2) impl icit | |||
in the way the Client responds to a token challenge. For example, if a Client | in the way the Client responds to a token challenge. For example, if a Client | |||
fails to complete issuance, and consequently fails to redeem a token for | fails to complete issuance and consequently fails to redeem a token for | |||
a token challenge, this can reveal information to the Origin that | a token challenge, this can reveal information to the Origin that | |||
it might not otherwise have access to. However, an Origin cannot necessarily | it might not otherwise have access to. However, an Origin cannot necessarily | |||
distinguish between a Client that fails to complete issuance and one that | distinguish between a Client that fails to complete issuance and one that | |||
ignores the token challenge altogether.</t> | ignores the token challenge altogether.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="deployment"> | <section anchor="deployment"> | |||
<name>Deployment Models</name> | <name>Deployment Models</name> | |||
<t>The Origin, Attester, and Issuer portrayed in <xref target="fig-overvie w"/> can be | <t>The Origin, Attester, and Issuer portrayed in <xref target="fig-overvie w"/> can be | |||
instantiated and deployed in a number of ways. The deployment model directly | instantiated and deployed in a number of ways. The deployment model directly | |||
influences the manner in which attestation, issuance, and redemption contexts | influences the manner in which attestation, issuance, and redemption contexts | |||
are separated to achieve Origin-Client, Issuer-Client, and Attester-Origin | are separated to achieve Origin-Client, Issuer-Client, and Attester-Origin | |||
unlinkability.</t> | unlinkability.</t> | |||
<t>This section covers some expected deployment models and their correspon ding | <t>This section covers some expected deployment models and their correspon ding | |||
security and privacy considerations. Each deployment model is described in | security and privacy considerations. Each deployment model is described in | |||
terms of the trust relationships and communication patterns between Client, | terms of the trust relationships and communication patterns between the Client, | |||
Attester, Issuer, and Origin. Entities drawn within the same bounding box are | Attester, Issuer, and Origin. Entities drawn within the same bounding box are | |||
assumed to be operated by the same party and are therefore able to collude. | assumed to be operated by the same party and are therefore able to collude. | |||
Collusion can enable linking of attestation, issuance, and redemption contexts. | Collusion can enable linking of attestation, issuance, and redemption contexts. | |||
Entities not drawn within the same bounding box are assumed to not | Entities not drawn within the same bounding box (i.e., operated by separate part | |||
collude, meaning that entities operated by separate parties that do not collude. | ies) are assumed to not collude. Mechanisms for enforcing non-collusion are out | |||
Mechanisms for enforcing non-collusion are out of scope for this architecture.</ | of scope for this architecture.</t> | |||
t> | ||||
<section anchor="deploy-shared"> | <section anchor="deploy-shared"> | |||
<name>Shared Origin, Attester, Issuer</name> | <name>Shared Origin, Attester, Issuer</name> | |||
<t>In this model, the Origin, Attester, and Issuer are all operated by t he same | <t>In this model, the Origin, Attester, and Issuer are all operated by t he same | |||
entity, as shown in <xref target="fig-deploy-shared"/>.</t> | entity, as shown in <xref target="fig-deploy-shared"/>.</t> | |||
<figure anchor="fig-deploy-shared"> | <figure anchor="fig-deploy-shared"> | |||
<name>Shared Deployment Model</name> | <name>Shared Deployment Model</name> | |||
<artset> | <artset> | |||
<artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version= "1.1" height="256" width="528" viewBox="0 0 528 256" class="diagram" text-anchor ="middle" font-family="monospace" font-size="13px" stroke-linecap="round"> | <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version= "1.1" viewBox="0 0 528 256" class="diagram" text-anchor="middle" font-family="mo nospace" font-size="13px" stroke-linecap="round"> | |||
<path d="M 8,48 L 8,80" fill="none" stroke="black"/> | <path d="M 8,48 L 8,80" fill="none" stroke="black"/> | |||
<path d="M 40,80 L 40,240" fill="none" stroke="black"/> | <path d="M 40,80 L 40,240" fill="none" stroke="black"/> | |||
<path d="M 80,48 L 80,80" fill="none" stroke="black"/> | <path d="M 80,48 L 80,80" fill="none" stroke="black"/> | |||
<path d="M 144,32 L 144,80" fill="none" stroke="black"/> | <path d="M 144,32 L 144,80" fill="none" stroke="black"/> | |||
<path d="M 168,48 L 168,80" fill="none" stroke="black"/> | <path d="M 168,48 L 168,80" fill="none" stroke="black"/> | |||
<path d="M 216,80 L 216,104" fill="none" stroke="black"/> | <path d="M 216,80 L 216,104" fill="none" stroke="black"/> | |||
<path d="M 216,120 L 216,160" fill="none" stroke="black"/> | <path d="M 216,120 L 216,160" fill="none" stroke="black"/> | |||
<path d="M 256,48 L 256,80" fill="none" stroke="black"/> | <path d="M 256,48 L 256,80" fill="none" stroke="black"/> | |||
<path d="M 304,48 L 304,80" fill="none" stroke="black"/> | <path d="M 304,48 L 304,80" fill="none" stroke="black"/> | |||
<path d="M 344,80 L 344,96" fill="none" stroke="black"/> | <path d="M 344,80 L 344,96" fill="none" stroke="black"/> | |||
skipping to change at line 932 ¶ | skipping to change at line 956 ¶ | |||
</figure> | </figure> | |||
<t>This model represents the initial deployment of Privacy Pass, as desc ribed in | <t>This model represents the initial deployment of Privacy Pass, as desc ribed in | |||
<xref target="PrivacyPassCloudflare"/>. In this model, the Attester, Issuer, and Origin | <xref target="PrivacyPassCloudflare"/>. In this model, the Attester, Issuer, and Origin | |||
share the attestation, issuance, and redemption contexts. As a result, | share the attestation, issuance, and redemption contexts. As a result, | |||
attestation mechanisms that can uniquely identify a Client, e.g., requiring | attestation mechanisms that can uniquely identify a Client, e.g., requiring | |||
that Clients authenticate with some type of application-layer account, are | that Clients authenticate with some type of application-layer account, are | |||
not appropriate, as they could lead to unlinkability violations.</t> | not appropriate, as they could lead to unlinkability violations.</t> | |||
<t>Origin-Client, Issuer-Client, and Attester-Origin unlinkability requi res that | <t>Origin-Client, Issuer-Client, and Attester-Origin unlinkability requi res that | |||
issuance and redemption events be separated over time, such as through the use | issuance and redemption events be separated over time, such as through the use | |||
of tokens that correspond to token challenges with an empty redemption context | of tokens that correspond to token challenges with an empty redemption context | |||
(see <xref target="redemption"/>), or be separated over space, such as through t he use of an | (see <xref target="redemption"/>), or that they be separated over space, such as through the use of an | |||
anonymizing service when connecting to the Origin.</t> | anonymizing service when connecting to the Origin.</t> | |||
</section> | </section> | |||
<section anchor="deploy-joint-issuer"> | <section anchor="deploy-joint-issuer"> | |||
<name>Joint Attester and Issuer</name> | <name>Joint Attester and Issuer</name> | |||
<t>In this model, the Attester and Issuer are operated by the same entit | <t>In this model, the Attester and Issuer are operated by the same entit | |||
y | y, | |||
that is separate from the Origin. The Origin trusts the joint Attester | separate from the Origin. The Origin trusts the joint Attester | |||
and Issuer to perform attestation and issue Tokens. Clients interact | and Issuer to perform attestation and issue tokens. Clients interact | |||
with the joint Attester and Issuer for attestation and issuance. This | with the joint Attester and Issuer for attestation and issuance. This | |||
arrangement is shown in <xref target="fig-deploy-joint-issuer"/>.</t> | arrangement is shown in <xref target="fig-deploy-joint-issuer"/>.</t> | |||
<figure anchor="fig-deploy-joint-issuer"> | <figure anchor="fig-deploy-joint-issuer"> | |||
<name>Joint Attester and Issuer Deployment Model</name> | <name>Joint Attester and Issuer Deployment Model</name> | |||
<artset> | <artset> | |||
<artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version= "1.1" height="256" width="520" viewBox="0 0 520 256" class="diagram" text-anchor ="middle" font-family="monospace" font-size="13px" stroke-linecap="round"> | <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version= "1.1" viewBox="0 0 520 256" class="diagram" text-anchor="middle" font-family="mo nospace" font-size="13px" stroke-linecap="round"> | |||
<path d="M 8,48 L 8,80" fill="none" stroke="black"/> | <path d="M 8,48 L 8,80" fill="none" stroke="black"/> | |||
<path d="M 40,80 L 40,240" fill="none" stroke="black"/> | <path d="M 40,80 L 40,240" fill="none" stroke="black"/> | |||
<path d="M 80,48 L 80,80" fill="none" stroke="black"/> | <path d="M 80,48 L 80,80" fill="none" stroke="black"/> | |||
<path d="M 160,32 L 160,80" fill="none" stroke="black"/> | <path d="M 160,32 L 160,80" fill="none" stroke="black"/> | |||
<path d="M 184,48 L 184,80" fill="none" stroke="black"/> | <path d="M 184,48 L 184,80" fill="none" stroke="black"/> | |||
<path d="M 232,80 L 232,104" fill="none" stroke="black"/> | <path d="M 232,80 L 232,104" fill="none" stroke="black"/> | |||
<path d="M 232,120 L 232,160" fill="none" stroke="black"/> | <path d="M 232,120 L 232,160" fill="none" stroke="black"/> | |||
<path d="M 272,48 L 272,80" fill="none" stroke="black"/> | <path d="M 272,48 L 272,80" fill="none" stroke="black"/> | |||
<path d="M 320,48 L 320,80" fill="none" stroke="black"/> | <path d="M 320,48 L 320,80" fill="none" stroke="black"/> | |||
<path d="M 360,80 L 360,96" fill="none" stroke="black"/> | <path d="M 360,80 L 360,96" fill="none" stroke="black"/> | |||
skipping to change at line 1029 ¶ | skipping to change at line 1054 ¶ | |||
+------------- TokenRequest ----------->| | | +------------- TokenRequest ----------->| | | |||
|<----------- TokenResponse ------------+ | | |<----------- TokenResponse ------------+ | | |||
| | | | | | |||
+----------------------- Token -----------------------> | +----------------------- Token -----------------------> | |||
| | | | | | |||
]]></artwork> | ]]></artwork> | |||
</artset> | </artset> | |||
</figure> | </figure> | |||
<t>This model is useful if an Origin wants to offload attestation and is suance to | <t>This model is useful if an Origin wants to offload attestation and is suance to | |||
a trusted entity. In this model, the Attester and Issuer share an attestation | a trusted entity. In this model, the Attester and Issuer share an attestation | |||
and issuance context for the Client, which is separate from the Origin's | and issuance context for the Client, separate from the Origin's | |||
redemption context.</t> | redemption context.</t> | |||
<t>Similar to the Shared Origin, Attester, Issuer model, Issuer-Client a | <t>Similar to the shared Origin, Attester, Issuer model, Issuer-Client a | |||
nd | nd | |||
Origin-Client unlinkability in this model requires issuance and redemption | Origin-Client unlinkability in this model requires that issuance and redemption | |||
events, respectively, be separated over time or space. Attester-Origin | events, respectively, be separated over time or space. Attester-Origin | |||
unlinkability requires that the Attester and Issuer do not learn the Origin | unlinkability requires that the Attester and Issuer do not learn the Origin | |||
for a particular token request. For this reason, issuance protocols that | for a particular token request. For this reason, issuance protocols that | |||
require the Issuer to learn information about the Origin, such as that which | require the Issuer to learn information about the Origin, such as the issuance p | |||
is described in <xref target="RATE-LIMITED"/>, are not | rotocol described in <xref target="I-D.ietf-privacypass-rate-limit-tokens"/>, ar | |||
appropriate since they could lead to Attester-Origin unlinkability violations | e not | |||
appropriate, since they could lead to Attester-Origin unlinkability violations | ||||
through the Origin name.</t> | through the Origin name.</t> | |||
</section> | </section> | |||
<section anchor="deploy-joint-origin"> | <section anchor="deploy-joint-origin"> | |||
<name>Joint Origin and Issuer</name> | <name>Joint Origin and Issuer</name> | |||
<t>In this model, the Origin and Issuer are operated by the same entity, separate | <t>In this model, the Origin and Issuer are operated by the same entity, separate | |||
from the Attester, as shown in the figure below. The Issuer accepts token | from the Attester, as shown in <xref target="fig-deploy-joint-origin"/>. The Iss uer accepts token | |||
requests that come from trusted Attesters. Since the Attester and Issuer are | requests that come from trusted Attesters. Since the Attester and Issuer are | |||
separate entities, this model requires some mechanism by which Issuers | separate entities, this model requires some mechanism by which Issuers | |||
establish trust in the Attester (as described in <xref target="privacy-and-trust "/>). | establish trust in the Attester (as described in <xref target="privacy-and-trust "/>). | |||
For example, in settings where the Attester is a Client-trusted service that | For example, in settings where the Attester is a Client-trusted service that | |||
directly communicates with the Issuer, one way to establish this trust is via | directly communicates with the Issuer, one way to establish this trust is via | |||
mutually-authenticated TLS. However, alternative authentication mechanisms are | mutually authenticated TLS. However, alternative authentication mechanisms are | |||
possible. This arrangement is shown in <xref target="fig-deploy-joint-origin"/>. | possible. In this model, the Origin and Issuer are operated by the same entity, | |||
</t> | separate from the Attester, as shown in the figure below.</t> | |||
<figure anchor="fig-deploy-joint-origin"> | <figure anchor="fig-deploy-joint-origin"> | |||
<name>Joint Origin and Issuer Deployment Model</name> | <name>Joint Origin and Issuer Deployment Model</name> | |||
<artset> | <artset> | |||
<artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version= "1.1" height="256" width="528" viewBox="0 0 528 256" class="diagram" text-anchor ="middle" font-family="monospace" font-size="13px" stroke-linecap="round"> | <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version= "1.1" viewBox="0 0 528 256" class="diagram" text-anchor="middle" font-family="mo nospace" font-size="13px" stroke-linecap="round"> | |||
<path d="M 8,48 L 8,80" fill="none" stroke="black"/> | <path d="M 8,48 L 8,80" fill="none" stroke="black"/> | |||
<path d="M 40,80 L 40,240" fill="none" stroke="black"/> | <path d="M 40,80 L 40,240" fill="none" stroke="black"/> | |||
<path d="M 80,48 L 80,80" fill="none" stroke="black"/> | <path d="M 80,48 L 80,80" fill="none" stroke="black"/> | |||
<path d="M 168,48 L 168,80" fill="none" stroke="black"/> | <path d="M 168,48 L 168,80" fill="none" stroke="black"/> | |||
<path d="M 216,80 L 216,104" fill="none" stroke="black"/> | <path d="M 216,80 L 216,104" fill="none" stroke="black"/> | |||
<path d="M 216,120 L 216,160" fill="none" stroke="black"/> | <path d="M 216,120 L 216,160" fill="none" stroke="black"/> | |||
<path d="M 256,48 L 256,80" fill="none" stroke="black"/> | <path d="M 256,48 L 256,80" fill="none" stroke="black"/> | |||
<path d="M 280,32 L 280,80" fill="none" stroke="black"/> | <path d="M 280,32 L 280,80" fill="none" stroke="black"/> | |||
<path d="M 304,48 L 304,80" fill="none" stroke="black"/> | <path d="M 304,48 L 304,80" fill="none" stroke="black"/> | |||
<path d="M 344,80 L 344,96" fill="none" stroke="black"/> | <path d="M 344,80 L 344,96" fill="none" stroke="black"/> | |||
skipping to change at line 1141 ¶ | skipping to change at line 1166 ¶ | |||
| | | | | | |||
+--------------------- Token -----------------------> | +--------------------- Token -----------------------> | |||
| | | | | | |||
]]></artwork> | ]]></artwork> | |||
</artset> | </artset> | |||
</figure> | </figure> | |||
<t>This model is useful for Origins that require Client-identifying atte station, | <t>This model is useful for Origins that require Client-identifying atte station, | |||
e.g., through the use of application-layer account information, but do not | e.g., through the use of application-layer account information, but do not | |||
otherwise want to learn information about individual Clients beyond what is | otherwise want to learn information about individual Clients beyond what is | |||
observed during the token redemption, such as Client IP addresses.</t> | observed during the token redemption, such as Client IP addresses.</t> | |||
<t>In this model, attestation contexts are separate from issuer and rede mption | <t>In this model, attestation contexts are separate from Issuer and rede mption | |||
contexts. As a result, any type of attestation is suitable in this model.</t> | contexts. As a result, any type of attestation is suitable in this model.</t> | |||
<t>Moreover, any type of token challenge is suitable assuming there is m | <t>Moreover, assuming that there is more than one Origin involved, any t | |||
ore than | ype of token challenge is suitable, since no single party will have access to th | |||
one Origin involved, since no single party will have access to the identifying | e identifying | |||
Client information and unique Origin information. Issuers that produce tokens | Client information and unique Origin information. Issuers that produce tokens | |||
for a single Origin are not suitable in this model since an Attester can | for a single Origin are not suitable in this model, since an Attester can | |||
infer the Origin from a token request, as described in <xref target="issue-flow" />. However, | infer the Origin from a token request, as described in <xref target="issue-flow" />. However, | |||
since the issuance protocol provides input secrecy, the Attester does not learn | since the issuance protocol provides input secrecy, the Attester does not learn | |||
details about the corresponding token challenge, such as whether the token | details about the corresponding token challenge, such as whether the token | |||
challenge is per-Origin or cross-Origin.</t> | challenge is per Origin or across Origins.</t> | |||
</section> | </section> | |||
<section anchor="deploy-split"> | <section anchor="deploy-split"> | |||
<name>Split Origin, Attester, Issuer</name> | <name>Split Origin, Attester, Issuer</name> | |||
<t>In this model, the Origin, Attester, and Issuer are all operated by d ifferent | <t>In this model, the Origin, Attester, and Issuer are all operated by d ifferent | |||
entities. As with the joint Origin and Issuer model, the Issuer accepts token | entities. As with the Joint Origin and Issuer model (<xref | |||
target="deploy-joint-origin"/>), the Issuer accepts token | ||||
requests that come from trusted Attesters, and the details of that trust | requests that come from trusted Attesters, and the details of that trust | |||
establishment depend on the issuance protocol and relationship between | establishment depend on the issuance protocol and relationship between the | |||
Attester and Issuer; see <xref target="privacy-and-trust"/>. This arrangement is shown | Attester and Issuer; see <xref target="privacy-and-trust"/>. This arrangement is shown | |||
in <xref target="fig-overview"/>.</t> | in <xref target="fig-overview"/>.</t> | |||
<t>This is the most general deployment model, and is necessary for some | <t>This is the most general deployment model and is necessary for some | |||
types of issuance protocols where the Attester plays a role in token | types of issuance protocols where the Attester plays a role in token | |||
issuance; see <xref target="RATE-LIMITED"/> for one such type of issuance protoc ol.</t> | issuance; see <xref target="I-D.ietf-privacypass-rate-limit-tokens"/> for one su ch type of issuance protocol.</t> | |||
<t>In this model, the Attester, Issuer, and Origin have a separate view | <t>In this model, the Attester, Issuer, and Origin have a separate view | |||
of the Client: the Attester sees potentially sensitive Client identifying | of the Client: the Attester sees potentially sensitive Client-identifying | |||
information, such as account identifiers or IP addresses, the Issuer | information, such as account identifiers or IP addresses; the Issuer | |||
sees only the information necessary for issuance, and the Origin sees | sees only the information necessary for issuance; and the Origin sees | |||
token challenges, corresponding tokens, and Client source information, | token challenges, corresponding tokens, and Client source information, | |||
such as their IP address. As a result, attestation, issuance, and redemption | such as their IP address. As a result, attestation, issuance, and redemption | |||
contexts are separate, and therefore any type of token challenge is suitable in | contexts are separate, and therefore any type of token challenge is suitable in | |||
this model as long as there is more than a single Origin.</t> | this model as long as there is more than a single Origin.</t> | |||
<t>As in the Joint Origin and Issuer model in <xref target="deploy-joint -origin"/>, and as | <t>As with the Joint Origin and Issuer model (<xref target="deploy-joint -origin"/>), and as | |||
described in <xref target="issue-flow"/>, if the Issuer produces tokens for a si ngle Origin, | described in <xref target="issue-flow"/>, if the Issuer produces tokens for a si ngle Origin, | |||
then per-Origin tokens are not appropriate since the Attester can infer the | then per-Origin tokens are not appropriate, since the Attester can infer the | |||
Origin from a token request.</t> | Origin from a token request.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="deployment-considerations"> | <section anchor="deployment-considerations"> | |||
<name>Deployment Considerations</name> | <name>Deployment Considerations</name> | |||
<t><xref target="deployment"/> discusses deployment models that are possib le in practice. | <t><xref target="deployment"/> discusses deployment models that are possib le in practice. | |||
Beyond possible implications on security and privacy properties of the | Beyond possible implications on security and privacy properties of the | |||
resulting system, Privacy Pass deployments can impact the overall ecosystem | resulting system, Privacy Pass deployments can impact the overall ecosystem | |||
in two important ways: (1) discriminatory treatment of Clients and the gated | in two important ways: (1) discriminatory treatment of Clients and the gate | |||
access to otherwise open services, and (2) centralization. This section | d | |||
access to otherwise open services and (2) centralization. This section | ||||
describes considerations relevant to these topics.</t> | describes considerations relevant to these topics.</t> | |||
<section anchor="discrimination"> | <section anchor="discrimination"> | |||
<name>Discriminatory Treatment</name> | <name>Discriminatory Treatment</name> | |||
<t>Origins can use tokens as a signal for distinguishing between Clients | <t>Origins can use tokens as a signal for distinguishing between (1)&nbs p;Clients | |||
that are capable of completing attestation with one Attester trusted by the | that are capable of completing attestation with one Attester trusted by the | |||
Origin's chosen Issuer, and Clients that are not capable of doing the same. A | Origin's chosen Issuer and (2) Clients that are not capable of doing the sa me. A | |||
consequence of this is that Privacy Pass could enable discriminatory treatment | consequence of this is that Privacy Pass could enable discriminatory treatment | |||
of Clients based on Attestation support. For example, an Origin could only | of Clients based on attestation support. For example, an Origin could only | |||
authorize Clients that successfully authenticate with a token, prohibiting acces s | authorize Clients that successfully authenticate with a token, prohibiting acces s | |||
to all other Clients.</t> | to all other Clients.</t> | |||
<t>The type of attestation procedures supported for a particular deploym ent depends | <t>The types of attestation procedures supported for a particular deploy ment depend | |||
greatly on the use case. For example, consider a proprietary deployment of Priva cy Pass | greatly on the use case. For example, consider a proprietary deployment of Priva cy Pass | |||
that authorizes clients to access a resource such as an anonymization service. I n this | that authorizes Clients to access a resource such as an anonymization service. I n this | |||
context, it is reasonable to support specific types of attestation procedures th at | context, it is reasonable to support specific types of attestation procedures th at | |||
demonstrate Clients can access the resource, such as with an account or specific | demonstrate that Clients can access the resource, such as with an account or spe cific | |||
type of device. However, in open deployments of Privacy Pass that are used to | type of device. However, in open deployments of Privacy Pass that are used to | |||
safeguard access to otherwise open or publicly accessible resources, diversity | safeguard access to otherwise open or publicly accessible resources, diversity | |||
in attestation procedures is critically important so as to not discriminate agai nst | in attestation procedures is critically important so as to not discriminate agai nst | |||
Clients that choose certain software, hardware, or identity providers.</t> | Clients that choose certain software, hardware, or identity providers.</t> | |||
<t>In principle, Issuers should strive to mitigate discriminatory behavi or by | <t>In principle, Issuers should strive to mitigate discriminatory behavi or by | |||
providing equitable access to all Clients. This can be done by working with a | providing equitable access to all Clients. This can be done by working with a | |||
set of Attesters that are suitable for all Clients. In practice, this may requir e | set of Attesters that are suitable for all Clients. In practice, this may requir e | |||
tradeoffs in what type of attestation Issuers are willing to trust so as to | trade-offs in what type of attestation Issuers are willing to trust so as to | |||
enable more widespread support. In other words, trusting a variety of Attesters | enable more widespread support. In other words, trusting a variety of Attesters | |||
with a diverse set of attestation procedures would presumably increase support | with a diverse set of attestation procedures would presumably increase support | |||
among Clients, though most likely at the expense of decreasing the overall value | among Clients, though most likely at the expense of decreasing the overall value | |||
of tokens issued by the Issuer.</t> | of tokens issued by the Issuer.</t> | |||
<t>For example, to disallow discriminatory behavior between Clients with and | <t>For example, to disallow discriminatory behavior between Clients with and | |||
without device attestation support, an Issuer may wish to support Attesters | without device attestation support, an Issuer may wish to support Attesters | |||
that support CAPTCHA-based attestation. This means that the overall attestation | that support CAPTCHA-based attestation. This means that the overall attestation | |||
value of a Privacy Pass token is bound by the difficulty in spoofing or | value of a Privacy Pass token is bound by the difficulty in spoofing or | |||
bypassing either one of these attestation procedures.</t> | bypassing either one of these attestation procedures.</t> | |||
</section> | </section> | |||
<section anchor="centralization"> | <section anchor="centralization"> | |||
<name>Centralization</name> | <name>Centralization</name> | |||
<t>A consequence of limiting the number of participants (Attesters or Is suers) in | <t>A consequence of limiting the number of participants (Attesters or Is suers) in | |||
Privacy Pass deployments for meaningful privacy is that it forces concentrated | Privacy Pass deployments for meaningful privacy is that it forces concentrated | |||
centralization amongst those participants. | centralization among those participants. | |||
<xref target="CENTRALIZATION"/> discusses | <xref target="RFC9518"/> discusses | |||
several ways in which this might be mitigated. For example, a multi-stakeholder | several ways in which this might be mitigated. For example, a multi-stakeholder | |||
governance model could be established to determine what candidate participants | governance model could be established to determine what candidate participants | |||
are fit to operate as participants in a Privacy Pass deployment. This is | are fit to operate as participants in a Privacy Pass deployment. This is | |||
precisely the system used to control the Web's trust model.</t> | precisely the system used to control the Web's trust model.</t> | |||
<t>Alternatively, Privacy Pass deployments might mitigate this problem t hrough | <t>Alternatively, Privacy Pass deployments might mitigate this problem t hrough | |||
implementation. For example, rather than centralize the role of attestation | implementation. For example, rather than centralize the role of attestation | |||
in one or few entities, attestation could be a distributed function performed | in one or a few entities, attestation could be a distributed function performed | |||
by a quorum of many parties, provided that neither Issuers nor Origins learn | by a quorum of many parties, provided that neither Issuers nor Origins learn | |||
which Attester implementations were chosen. As a result, Clients could have | which Attester implementations were chosen. As a result, Clients could have | |||
more opportunities to switch between attestation participants.</t> | more opportunities to switch between attestation participants.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="privacy"> | <section anchor="privacy"> | |||
<name>Privacy Considerations</name> | <name>Privacy Considerations</name> | |||
<t>The previous section discusses the impact of deployment details on | <t>The previous section discusses the impact of deployment details on | |||
Origin-Client, Issuer-Client, and Attester-Origin unlinkability. | Origin-Client, Issuer-Client, and Attester-Origin unlinkability. | |||
The value these properties affords to end users depends on | The value these properties afford to end users depends on | |||
the size of anonymity sets in which Clients or Origins are | the size of anonymity sets in which Clients or Origins are | |||
unlinkable. For example, consider two different deployments, one wherein | unlinkable. For example, consider two different deployments, one wherein | |||
there exists a redemption anonymity set of size two and another | there exists a redemption anonymity set of size two and another | |||
wherein there redemption anonymity set of size 2<sup>32</sup>. Although | wherein there exists a redemption anonymity set of size 2<sup>32</sup>. Although | |||
Origin-Client unlinkability guarantees that the Origin cannot link any two | Origin-Client unlinkability guarantees that the Origin cannot link any two | |||
requests to the same Client based on these contexts, respectively, the | requests to the same Client based on these contexts, respectively, the | |||
probability of determining the "true" Client is higher the smaller these | smaller these sets become, the higher the probability of determining the "true" | |||
sets become.</t> | Client.</t> | |||
<t>In practice, there are a number of ways in which the size of anonymity sets | <t>In practice, there are a number of ways in which the size of anonymity sets | |||
may be reduced or partitioned, though they all center around the concept of | may be reduced or partitioned, though they all center around the concept of | |||
consistency. In particular, by definition, all Clients in an anonymity set | consistency. In particular, by definition, all Clients in an anonymity set | |||
share a consistent view of information needed to run the issuance and | share a consistent view of information needed to run the issuance and | |||
redemption protocols. An example type of information needed to run these | redemption protocols. The Issuer Public Key is an example of the type of informa | |||
protocols is the Issuer public key. When two Clients have inconsistent | tion needed to run these protocols. When two Clients have inconsistent | |||
information, these Clients effectively have different redemption contexts and | information, these Clients effectively have different redemption contexts and | |||
therefore belong in different anonymity sets.</t> | therefore belong in different anonymity sets.</t> | |||
<t>The following sections discuss issues that can influence anonymity set size. | <t>The following subsections discuss issues that can influence anonymity s et size. | |||
For each issue, we discuss mitigations or safeguards to protect against the | For each issue, we discuss mitigations or safeguards to protect against the | |||
underlying problem.</t> | underlying problem.</t> | |||
<section anchor="metadata-privacy"> | <section anchor="metadata-privacy"> | |||
<name>Partitioning by Issuance Metadata</name> | <name>Partitioning by Issuance Metadata</name> | |||
<t>Any public or private metadata bits of information can be used to fur ther | <t>Any public or private metadata bits of information can be used to fur ther | |||
segment the size of the Client's anonymity set. Any Issuer that wanted to | segment the size of the Client anonymity set. Any Issuer that wanted to | |||
track a single Client could add a single metadata bit to Client tokens. For | track a single Client could add a single metadata bit to Client tokens. For | |||
the tracked Client it would set the bit to <tt>1</tt>, and <tt>0</tt> otherwise. Adding | the tracked Client, it would set the bit to <tt>1</tt>, and <tt>0</tt> otherwise . Adding | |||
additional bits provides an exponential increase in tracking granularity | additional bits provides an exponential increase in tracking granularity | |||
similarly to introducing more Issuers (though with more potential targeting).</t > | in a manner similar to introducing more Issuers (though with more potential targ eting).</t> | |||
<t>For this reason, deployments should take the amount of metadata used by an Issuer | <t>For this reason, deployments should take the amount of metadata used by an Issuer | |||
in creating redemption tokens must into account -- together with the bits | in creating tokens, together with the bits of information that Issuers may learn | |||
of information that Issuers may learn about Clients otherwise. Since this | about Clients through other means, into account. Since this | |||
metadata may be useful for practical deployments of Privacy Pass, Issuers | metadata may be useful for practical deployments of Privacy Pass, Issuers | |||
must balance this against the reduction in Client privacy.</t> | must balance this against the reduction in Client privacy.</t> | |||
<t>The number of permitted metadata values often depends on deployment-s pecific | <t>The number of permitted metadata values often depends on deployment-s pecific | |||
details. In general, limiting the amount of metadata permitted helps limit the | details. In general, limiting the amount of metadata permitted helps limit the | |||
extent to which metadata can uniquely identify individual Clients. Failure to | extent to which metadata can uniquely identify individual Clients. Failure to | |||
bound the number of possible metadata values can therefore lead to reduction in | bound the number of possible metadata values can therefore lead to a reduction i n | |||
Client privacy. Most token types do not admit any metadata, so this bound is | Client privacy. Most token types do not admit any metadata, so this bound is | |||
implicitly enforced.</t> | implicitly enforced.</t> | |||
</section> | </section> | |||
<section anchor="rotation-and-consistency"> | <section anchor="rotation-and-consistency"> | |||
<name>Partitioning by Issuance Consistency</name> | <name>Partitioning by Issuance Consistency</name> | |||
<t>Anonymity sets can be partitioned by information used for the issuanc e | <t>Anonymity sets can be partitioned by information used for the issuanc e | |||
protocol, including: metadata, Issuer configuration (keys), and Issuer | protocol, including metadata, Issuer configuration (keys), and Issuer | |||
selection.</t> | selection.</t> | |||
<t>Any issuance metadata bits of information can be used to partition th e Client | <t>Any issuance metadata bits of information can be used to partition th e Client | |||
anonymity set. For example, any Issuer that wanted to track a single Client | anonymity set. For example, any Issuer that wanted to track a single Client | |||
could add a single metadata bit to Client tokens. For the tracked Client it | could add a single metadata bit to Client tokens. For the tracked Client, it | |||
would set the bit to <tt>1</tt>, and <tt>0</tt> otherwise. Adding additional bit s provides an | would set the bit to <tt>1</tt>, and <tt>0</tt> otherwise. Adding additional bit s provides an | |||
exponential increase in tracking granularity similarly to introducing more | exponential increase in tracking granularity in a manner similar to introducing more | |||
Issuers (though with more potential targeting).</t> | Issuers (though with more potential targeting).</t> | |||
<t>The number of active Issuer configurations also contributes to anonym ity set | <t>The number of active Issuer configurations also contributes to anonym ity set | |||
partitioning. In particular, when an Issuer updates their configuration and | partitioning. In particular, when an Issuer updates their configuration and | |||
the corresponding key pair, any Client that invokes the issuance protocol with | the corresponding key pair, any Client that invokes the issuance protocol with | |||
this configuration becomes part of a set of Clients which also ran the | this configuration becomes part of a set of Clients that also ran the | |||
issuance protocol using the same configuration. Issuer configuration updates, | issuance protocol using the same configuration. Issuer configuration updates, | |||
e.g., due to key rotation, are an important part of hedging against long-term | e.g., due to key rotation, are an important part of hedging against long-term | |||
private key compromise. In general, key rotations represent a trade-off between | private key compromise. In general, key rotations represent a trade-off between | |||
Client privacy and Issuer security. Therefore, it is important that key | Client privacy and Issuer security. Therefore, it is important that key | |||
rotations occur on a regular cycle to reduce the harm of an Issuer key | rotations occur on a regular cycle to reduce the harm of an Issuer key | |||
compromise.</t> | compromise.</t> | |||
<t>Lastly, if Clients are willing to issue and redeem tokens from a larg e number | <t>Lastly, if Clients are willing to issue and redeem tokens from a larg e number | |||
of Issuers for a specific Origin, and that Origin accepts tokens from all | of Issuers for a specific Origin and that Origin accepts tokens from all | |||
Issuers, partitioning can occur. As an example, if a Client obtains tokens from | Issuers, partitioning can occur. As an example, if a Client obtains tokens from | |||
many Issuers and an Origin later challenges that Client for a token from each | many Issuers and an Origin later challenges that Client for a token from each | |||
Issuer, the Origin can learn information about the Client. This arrangement | Issuer, the Origin can learn information about the Client. This arrangement | |||
might happen if Clients request tokens from different Issuers, each of which | might happen if Clients request tokens from different Issuers, each of which | |||
have different Attester preferences. Each per-Issuer token that a Client holds | has different Attester preferences. Each per-Issuer token that a Client holds | |||
essentially corresponds to a bit of information about the Client that Origin | essentially corresponds to a bit of information about the Client that the Origin | |||
learns. Therefore, there is an exponential loss in privacy relative to the | learns. Therefore, there is an exponential loss in privacy relative to the | |||
number of Issuers.</t> | number of Issuers.</t> | |||
<t>The fundamental problem here is that the number of possible issuance | <t>The fundamental problem here is that the number of possible issuance | |||
configurations, including the keys in use and the Issuer identities themselves, | configurations, including the keys in use and the Issuer identities themselves, | |||
can partition the Client anonymity set. To mitigate this problem, Clients | can partition the Client anonymity set. To mitigate this problem, Clients | |||
SHOULD bound the number of active issuance configurations per Origin as well as | <bcp14>SHOULD</bcp14> bound the number of active issuance configurations per Ori | |||
across Origins. Moreover, Clients SHOULD employ some form of consistency | gin as well as | |||
across Origins. Moreover, Clients <bcp14>SHOULD</bcp14> employ some form of cons | ||||
istency | ||||
mechanism to ensure that they receive the same configuration information and | mechanism to ensure that they receive the same configuration information and | |||
are not being actively partitioned into smaller anonymity sets. See | are not being actively partitioned into smaller anonymity sets. See | |||
<xref target="CONSISTENCY"/> for possible consistency | <xref target="I-D.ietf-privacypass-key-consistency"/> for possible consistency | |||
mechanisms. Depending on the deployment, the Attester might assist the Client | mechanisms. Depending on the deployment, the Attester might assist the Client | |||
in applying these consistency checks across clients. Failure to apply a | in applying these consistency checks across Clients. Failure to apply a | |||
consistency check can allow Client-specific keys to violate Origin-Client | consistency check can allow Client-specific keys to violate Origin-Client | |||
unlinkability.</t> | unlinkability.</t> | |||
</section> | </section> | |||
<section anchor="partitioning-by-side-channels"> | <section anchor="partitioning-by-side-channels"> | |||
<name>Partitioning by Side-Channels</name> | <name>Partitioning by Side Channels</name> | |||
<t>Side-channel attacks, such as those based on timing correlation, coul d be | <t>Side-channel attacks, such as those based on timing correlation, coul d be | |||
used to reduce anonymity set size. In particular, | used to reduce anonymity set size. In particular, | |||
for interactive tokens that are bound to a Client-specific redemption | for interactive tokens that are bound to a Client-specific redemption | |||
context, the anonymity set of Clients during the issuance protocol consists | context, the anonymity set of Clients during the issuance protocol consists | |||
of those Clients that started issuance between the time of the Origin's | of those Clients that started issuance between the time of the Origin's | |||
challenge and the corresponding token redemption. Depending on the number | challenge and the corresponding token redemption. Depending on the number | |||
of Clients using a particular Issuer during that time window, the set can | of Clients using a particular Issuer during that time window, the set can | |||
be small. Applications should take such side channels into consideration before | be small. Applications should take such side channels into consideration before | |||
choosing a particular deployment model and type of token challenge and | choosing a particular deployment model and type of token challenge and | |||
redemption context.</t> | redemption context.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="security"> | <section anchor="security"> | |||
<name>Security Considerations</name> | <name>Security Considerations</name> | |||
<t>This document describes security and privacy requirements for the Priva cy Pass | <t>This document describes security and privacy requirements for the Priva cy Pass | |||
redemption and issuance protocols. It also describes deployment models built | redemption and issuance protocols. It also describes deployment models built | |||
around non-collusion assumptions and privacy considerations for using Privacy | around non-collusion assumptions and privacy considerations for using Privacy | |||
Pass within those models. Ensuring Client privacy -- separation of attestation | Pass within those models. Ensuring Client privacy -- separation of attestation | |||
and redemption contexts -- requires active work on behalf of the Client, | and redemption contexts -- requires active work on behalf of the Client, | |||
especially in the presence of malicious Issuers and Origins. Implementing | especially in the presence of malicious Issuers and Origins. Implementing the | |||
mitigations discussed in <xref target="deployment"/> and <xref target="privacy"/ | mitigations discussed in Sections <xref target="deployment" format="counter | |||
> is therefore necessary | "/> and <xref target="privacy" format="counter"/> is therefore necessary | |||
to ensure that Privacy Pass offers meaningful privacy improvements to end-users. | to ensure that Privacy Pass offers meaningful privacy improvements to end users. | |||
</t> | </t> | |||
<section anchor="hoarding"> | <section anchor="hoarding"> | |||
<name>Token Caching</name> | <name>Token Caching</name> | |||
<t>Depending on the Origin's token challenge, Clients can request and ca che more | <t>Depending on the Origin's token challenge, Clients can request and ca che more | |||
than one token using an issuance protocol. Cached tokens help improve privacy by | than one token using an issuance protocol. Cached tokens help improve privacy by | |||
separating the time of token issuance from the time of token redemption, and | separating the time of token issuance from the time of token redemption; they | |||
also allow Clients to reduce the overhead of receiving new tokens via the | also allow Clients to reduce the overhead of receiving new tokens via the | |||
issuance protocol.</t> | issuance protocol.</t> | |||
<t>As a consequence, Origins that send token challenges which are compat ible with | <t>As a consequence, Origins that send token challenges that are compati ble with | |||
cached tokens need to take precautions to ensure that tokens are not replayed. | cached tokens need to take precautions to ensure that tokens are not replayed. | |||
This is typically done via keeping track of tokens that are redeemed for the | This is typically done via keeping track of tokens that are redeemed for the | |||
period of time in which cached tokens would be accepted for particular | period of time in which cached tokens would be accepted for particular | |||
challenges.</t> | challenges.</t> | |||
<t>Moreover, since tokens are not intrinsically bound to Clients, it is possible | <t>Moreover, since tokens are not intrinsically bound to Clients, it is possible | |||
for malicious Clients to collude and share tokens in a so-called "hoarding | for malicious Clients to collude and share tokens in a so-called "hoarding | |||
attack." As an example of this attack, many distributed Clients could obtain | attack". As an example of this attack, many distributed Clients could obtain | |||
cacheable tokens and then share them with a single Client to redeem in a way | cacheable tokens and then share them with a single Client to redeem the tokens i | |||
n a way | ||||
that would violate an Origin's attempt to limit tokens to any one particular | that would violate an Origin's attempt to limit tokens to any one particular | |||
Client. In general, mechanisms for mitigating hoarding attacks depend on the | Client. In general, mechanisms for mitigating hoarding attacks depend on the | |||
deployment model and use case. For example, in the Joint Origin and Issuer model , | deployment model and use case. For example, in the Joint Origin and Issuer model , | |||
comparing the issuance and redemption contexts can help detect hoarding attacks, | comparing the issuance and redemption contexts can help detect hoarding attacks, | |||
i.e., if the distribution of redemption contexts is noticeably different from th e | i.e., if the distribution of redemption contexts is noticeably different from th e | |||
distribution of issuance contexts. Rate limiting issuance, either at the Client, | distribution of issuance contexts. Rate-limiting issuance, at either the Client, | |||
Attester, or Issuer, can also help mitigate these attacks.</t> | Attester, or Issuer, can also help mitigate these attacks.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="iana"> | <section anchor="iana"> | |||
<name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
<t>This document has no IANA actions.</t> | <t>This document has no IANA actions.</t> | |||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<displayreference target="RFC9577" to="AUTHSCHEME"/> | ||||
<displayreference target="RFC9578" to="ISSUANCE"/> | ||||
<displayreference target="RFC9458" to="OHTTP"/> | ||||
<displayreference target="I-D.ietf-privacypass-rate-limit-tokens" to="RATE-L | ||||
IMITED"/> | ||||
<displayreference target="RFC9518" to="CENTRALIZATION"/> | ||||
<displayreference target="I-D.ietf-privacypass-key-consistency" to="CONSISTE | ||||
NCY"/> | ||||
<references> | <references> | |||
<name>References</name> | <name>References</name> | |||
<references> | <references> | |||
<name>Normative References</name> | <name>Normative References</name> | |||
<reference anchor="AUTHSCHEME"> | ||||
<front> | ||||
<title>The Privacy Pass HTTP Authentication Scheme</title> | ||||
<author fullname="Tommy Pauly" initials="T." surname="Pauly"> | ||||
<organization>Apple Inc.</organization> | ||||
</author> | ||||
<author fullname="Steven Valdez" initials="S." surname="Valdez"> | ||||
<organization>Google LLC</organization> | ||||
</author> | ||||
<author fullname="Christopher A. Wood" initials="C. A." surname="Woo | ||||
d"> | ||||
<organization>Cloudflare</organization> | ||||
</author> | ||||
<date day="12" month="September" year="2023"/> | ||||
<abstract> | ||||
<t> This document defines an HTTP authentication scheme for Priv | ||||
acy Pass, | ||||
a privacy-preserving authentication mechanism used for authorization. | ||||
The authentication scheme in this document can be used by clients to | ||||
redeem Privacy Pass tokens with an origin. It can also be used by | ||||
origins to challenge clients to present Privacy Pass tokens. | ||||
</t> | <!-- draft-ietf-privacypass-auth-scheme (RFC 9577) --> | |||
</abstract> | <reference anchor="RFC9577" target="https://www.rfc-editor.org/info/rfc9577"> | |||
</front> | <front> | |||
<seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-auth-s | <title>The Privacy Pass HTTP Authentication Scheme</title> | |||
cheme-13"/> | <author initials="T." surname="Pauly" fullname="Tommy Pauly"> | |||
</reference> | <organization>Apple Inc.</organization> | |||
<reference anchor="RFC2119"> | </author> | |||
<front> | <author initials="S." surname="Valdez" fullname="Steven Valdez"> | |||
<title>Key words for use in RFCs to Indicate Requirement Levels</tit | <organization>Google LLC</organization> | |||
le> | </author> | |||
<author fullname="S. Bradner" initials="S." surname="Bradner"/> | <author initials="C. A." surname="Wood" fullname="Christopher A. Wood"> | |||
<date month="March" year="1997"/> | <organization>Cloudflare</organization> | |||
<abstract> | </author> | |||
<t>In many standards track documents several words are used to sig | <date month="June" year="2024"/> | |||
nify the requirements in the specification. These words are often capitalized. T | </front> | |||
his document defines these words as they should be interpreted in IETF documents | <seriesInfo name="RFC" value="9577"/> | |||
. This document specifies an Internet Best Current Practices for the Internet Co | <seriesInfo name="DOI" value="10.17487/RFC9577"/> | |||
mmunity, and requests discussion and suggestions for improvements.</t> | </reference> | |||
</abstract> | ||||
</front> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | |||
<seriesInfo name="BCP" value="14"/> | 119.xml"/> | |||
<seriesInfo name="RFC" value="2119"/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | |||
<seriesInfo name="DOI" value="10.17487/RFC2119"/> | 174.xml"/> | |||
</reference> | ||||
<reference anchor="RFC8174"> | ||||
<front> | ||||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
tle> | ||||
<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 protoco | ||||
l 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> | |||
<references> | <references> | |||
<name>Informative References</name> | <name>Informative References</name> | |||
<reference anchor="PrivacyPassExtension" target="https://github.com/priv | ||||
acypass/challenge-bypass-extension"> | ||||
<front> | ||||
<title>Privacy Pass Browser Extension</title> | ||||
<author> | ||||
<organization/> | ||||
</author> | ||||
<date>n.d.</date> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="PrivacyPassCloudflare" target="https://blog.cloudflar e.com/cloudflare-supports-privacy-pass/"> | <reference anchor="PrivacyPassCloudflare" target="https://blog.cloudflar e.com/cloudflare-supports-privacy-pass/"> | |||
<front> | <front> | |||
<title>Cloudflare Supports Privacy Pass</title> | <title>Cloudflare supports Privacy Pass</title> | |||
<author initials="N." surname="Sullivan"> | <author initials="N." surname="Sullivan"> | |||
<organization>Cloudflare</organization> | <organization>Cloudflare</organization> | |||
</author> | </author> | |||
<date>n.d.</date> | <date month="November" year="2017"/> | |||
</front> | </front> | |||
</reference> | </reference> | |||
<reference anchor="DMS2004" target="https://svn.torproject.org/svn/proje cts/design-paper/tor-design.html"> | <reference anchor="DMS2004" target="https://svn.torproject.org/svn/proje cts/design-paper/tor-design.html"> | |||
<front> | <front> | |||
<title>Tor: The Second-Generation Onion Router</title> | <title>Tor: The Second-Generation Onion Router</title> | |||
<author initials="R." surname="Dingledine"> | <author initials="R." surname="Dingledine"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="N." surname="Mathewson"> | <author initials="N." surname="Mathewson"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="P." surname="Syverson"> | <author initials="P." surname="Syverson"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<date year="2004" month="August"/> | <date year="2004" month="May"/> | |||
</front> | </front> | |||
</reference> | </reference> | |||
<reference anchor="HIJK21" target="https://research.fb.com/privatestats" > | <reference anchor="HIJK21" target="https://research.fb.com/privatestats" > | |||
<front> | <front> | |||
<title>PrivateStats: De-Identified Authenticated Logging at Scale</t itle> | <title>DIT: De-Identified Authenticated Telemetry at Scale</title> | |||
<author initials="S." surname="Huang"> | <author initials="S." surname="Huang"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="S." surname="Iyengar"> | <author initials="S." surname="Iyengar"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="S." surname="Jeyaraman"> | <author initials="S." surname="Jeyaraman"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="S." surname="Kushwah"> | <author initials="S." surname="Kushwah"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="C. K." surname="Lee"> | <author initials="C-K." surname="Lee"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="Z." surname="Luo"> | <author initials="Z." surname="Luo"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="P." surname="Mohassel"> | <author initials="P." surname="Mohassel"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="A." surname="Raghunathan"> | <author initials="A." surname="Raghunathan"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="S." surname="Shaikh"> | <author initials="S." surname="Shaikh"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="Y. C." surname="Sung"> | <author initials="Y-C." surname="Sung"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="A." surname="Zhang"> | <author initials="A." surname="Zhang"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<date year="2021" month="January"/> | <date year="2021" month="January"/> | |||
</front> | </front> | |||
</reference> | </reference> | |||
<reference anchor="ISSUANCE"> | ||||
<front> | ||||
<title>Privacy Pass Issuance Protocol</title> | ||||
<author fullname="Sofia Celi" initials="S." surname="Celi"> | ||||
<organization>Brave Software</organization> | ||||
</author> | ||||
<author fullname="Alex Davidson" initials="A." surname="Davidson"> | ||||
<organization>Brave Software</organization> | ||||
</author> | ||||
<author fullname="Steven Valdez" initials="S." surname="Valdez"> | ||||
<organization>Google LLC</organization> | ||||
</author> | ||||
<author fullname="Christopher A. Wood" initials="C. A." surname="Woo | ||||
d"> | ||||
<organization>Cloudflare</organization> | ||||
</author> | ||||
<date day="14" month="September" year="2023"/> | ||||
<abstract> | ||||
<t> This document specifies two variants of the two-message issu | ||||
ance | ||||
protocol for Privacy Pass tokens: one that produces tokens that are | ||||
privately verifiable using the issuance private key, and another that | ||||
produces tokens that are publicly verifiable using the issuance | ||||
public key. | ||||
</t> | <!-- draft-ietf-privacypass-protocol (RFC 9578) --> | |||
</abstract> | <reference anchor="RFC9578" target="https://www.rfc-editor.org/info/rfc9578"> | |||
</front> | <front> | |||
<seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-protoc | <title>Privacy Pass Issuance Protocols</title> | |||
ol-14"/> | <author initials="S." surname="Celi" fullname="Sofia Celi"> | |||
</reference> | <organization>Brave Software</organization> | |||
<reference anchor="RFC9334"> | </author> | |||
<front> | <author initials="A." surname="Davidson" fullname="Alex Davidson"> | |||
<title>Remote ATtestation procedureS (RATS) Architecture</title> | <organization>Brave Software</organization> | |||
<author fullname="H. Birkholz" initials="H." surname="Birkholz"/> | </author> | |||
<author fullname="D. Thaler" initials="D." surname="Thaler"/> | <author initials="S." surname="Valdez" fullname="Steven Valdez"> | |||
<author fullname="M. Richardson" initials="M." surname="Richardson"/ | <organization>Google LLC</organization> | |||
> | </author> | |||
<author fullname="N. Smith" initials="N." surname="Smith"/> | <author initials="C. A." surname="Wood" fullname="Christopher A. Wood"> | |||
<author fullname="W. Pan" initials="W." surname="Pan"/> | <organization>Cloudflare</organization> | |||
<date month="January" year="2023"/> | </author> | |||
<abstract> | <date month="June" year="2024"/> | |||
<t>In network protocol exchanges, it is often useful for one end o | </front> | |||
f a communication to know whether the other end is in an intended operating stat | <seriesInfo name="RFC" value="9578"/> | |||
e. This document provides an architectural overview of the entities involved tha | <seriesInfo name="DOI" value="10.17487/RFC9578"/> | |||
t make such tests possible through the process of generating, conveying, and eva | </reference> | |||
luating evidentiary Claims. It provides a model that is neutral toward processor | ||||
architectures, the content of Claims, and protocols.</t> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.93 | |||
</abstract> | 34.xml"/> | |||
</front> | ||||
<seriesInfo name="RFC" value="9334"/> | <!-- draft-ietf-ohai-ohttp (RFC 9458; published) --> | |||
<seriesInfo name="DOI" value="10.17487/RFC9334"/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.94 | |||
</reference> | 58.xml"/> | |||
<reference anchor="OHTTP"> | ||||
<front> | ||||
<title>Oblivious HTTP</title> | ||||
<author fullname="Martin Thomson" initials="M." surname="Thomson"> | ||||
<organization>Mozilla</organization> | ||||
</author> | ||||
<author fullname="Christopher A. Wood" initials="C. A." surname="Woo | ||||
d"> | ||||
<organization>Cloudflare</organization> | ||||
</author> | ||||
<date day="25" month="August" year="2023"/> | ||||
<abstract> | ||||
<t> This document describes Oblivious HTTP, a protocol for forwa | ||||
rding | ||||
encrypted HTTP messages. Oblivious HTTP allows a client to make | ||||
multiple requests to an origin server without that server being able | ||||
to link those requests to the client or to identify the requests as | ||||
having come from the same client, while placing only limited trust in | ||||
the nodes used to forward the messages. | ||||
</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-10"/> | ||||
</reference> | ||||
<reference anchor="KLOR20" target="https://doi.org/10.1007/978-3-030-567 84-2_11"> | <reference anchor="KLOR20" target="https://doi.org/10.1007/978-3-030-567 84-2_11"> | |||
<front> | <front> | |||
<title>Anonymous Tokens with Private Metadata Bit</title> | <title>Anonymous Tokens with Private Metadata Bit</title> | |||
<author fullname="Ben Kreuter" surname="Kreuter"/> | <author fullname="Ben Kreuter" surname="Kreuter"/> | |||
<author fullname="Tancrède Lepoint" surname="Lepoint"/> | <author fullname="Tancrède Lepoint" surname="Lepoint"/> | |||
<author fullname="Michele Orrù" surname="Orrù"/> | <author fullname="Michele Orrù" surname="Orrù"/> | |||
<author fullname="Mariana Raykova" surname="Raykova"/> | <author fullname="Mariana Raykova" surname="Raykova"/> | |||
<author> | <author> | |||
<organization>Springer International Publishing</organization> | <organization>Springer International Publishing</organization> | |||
</author> | </author> | |||
<date year="2020"/> | <date year="2020"/> | |||
</front> | </front> | |||
<refcontent>Advances in Cryptology – CRYPTO 2020, pp. 308-336</refcont ent> | <refcontent>Advances in Cryptology - CRYPTO 2020, pp. 308-336</refcont ent> | |||
<seriesInfo name="DOI" value="10.1007/978-3-030-56784-2_11"/> | <seriesInfo name="DOI" value="10.1007/978-3-030-56784-2_11"/> | |||
</reference> | </reference> | |||
<reference anchor="RATE-LIMITED"> | ||||
<front> | ||||
<title>Rate-Limited Token Issuance Protocol</title> | ||||
<author fullname="Scott Hendrickson" initials="S." surname="Hendrick | ||||
son"> | ||||
<organization>Google LLC</organization> | ||||
</author> | ||||
<author fullname="Jana Iyengar" initials="J." surname="Iyengar"> | ||||
<organization>Fastly</organization> | ||||
</author> | ||||
<author fullname="Tommy Pauly" initials="T." surname="Pauly"> | ||||
<organization>Apple Inc.</organization> | ||||
</author> | ||||
<author fullname="Steven Valdez" initials="S." surname="Valdez"> | ||||
<organization>Google LLC</organization> | ||||
</author> | ||||
<author fullname="Christopher A. Wood" initials="C. A." surname="Woo | ||||
d"> | ||||
<organization>Cloudflare</organization> | ||||
</author> | ||||
<date day="6" month="July" year="2022"/> | ||||
<abstract> | ||||
<t> This document specifies a variant of the Privacy Pass issuan | ||||
ce | ||||
protocol that allows for tokens to be rate-limited on a per-origin | ||||
basis. This enables origins to use tokens for use cases that need to | ||||
restrict access from anonymous clients. | ||||
Discussion Venues | ||||
This note is to be removed before publishing as an RFC. | ||||
Source for this draft and an issue tracker can be found at | <!-- draft-ietf-privacypass-rate-limit-tokens (I-D Exists) --> | |||
https://github.com/tfpauly/privacy-proxy. | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-pr | |||
ivacypass-rate-limit-tokens.xml"/> | ||||
</t> | <!-- draft-nottingham-avoiding-internet-centralizations (RFC 9518; published) -- | |||
</abstract> | > | |||
</front> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9 | |||
<seriesInfo name="Internet-Draft" value="draft-privacypass-rate-limit- | 518.xml"/> | |||
tokens-03"/> | ||||
</reference> | ||||
<reference anchor="CENTRALIZATION"> | ||||
<front> | ||||
<title>Centralization, Decentralization, and Internet Standards</tit | ||||
le> | ||||
<author fullname="Mark Nottingham" initials="M." surname="Nottingham | ||||
"> | ||||
</author> | ||||
<date day="14" month="September" year="2023"/> | ||||
<abstract> | ||||
<t> This document discusses aspects of centralization that relat | ||||
e to | ||||
Internet standards efforts. It argues that while standards bodies | ||||
have limited ability to prevent many forms of centralization, they | ||||
can still make contributions that assist decentralization of the | ||||
Internet. | ||||
</t> | <!-- draft-ietf-privacypass-key-consistency (Expired) --> | |||
</abstract> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-pr | |||
</front> | ivacypass-key-consistency.xml"/> | |||
<seriesInfo name="Internet-Draft" value="draft-nottingham-avoiding-int | ||||
ernet-centralization-14"/> | ||||
</reference> | ||||
<reference anchor="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="Woo | ||||
d"> | ||||
<organization>Cloudflare</organization> | ||||
</author> | ||||
<date day="10" month="July" year="2023"/> | ||||
<abstract> | ||||
<t> This document describes the consistency requirements of prot | ||||
ocols | ||||
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-co | ||||
nsistency-01"/> | ||||
</reference> | ||||
</references> | </references> | |||
</references> | </references> | |||
<section anchor="acknowledgements"> | ||||
<section anchor="acknowledgements" numbered="false"> | ||||
<name>Acknowledgements</name> | <name>Acknowledgements</name> | |||
<t>The authors would like to thank Eric Kinnear, Scott Hendrickson, Tommy | <t>The authors would like to thank <contact fullname="Eric Kinnear"/>, <co | |||
Pauly, | ntact fullname="Scott Hendrickson"/>, <contact fullname="Tommy Pauly"/>, | |||
Christopher Patton, Benjamin Schwartz, Martin Thomson, Steven Valdez and other | <contact fullname="Christopher Patton"/>, <contact fullname="Benjamin Schwartz"/ | |||
>, <contact fullname="Martin Thomson"/>, <contact fullname="Steven Valdez"/>, an | ||||
d other | ||||
contributors of the Privacy Pass Working Group for many helpful contributions | contributors of the Privacy Pass Working Group for many helpful contributions | |||
to this document.</t> | to this document.</t> | |||
</section> | </section> | |||
</back> | </back> | |||
<!-- ##markdown-source: | ||||
H4sIAAAAAAAAA+1965bbRnbu/3oKRP5haZmkLXkyF2XsRCPL4x7rdtTtzEqy | ||||
sjJoEmzCIgEOAHablpRnOc9ynuzsa9WuQoHdGk/+RcnydLOJQl127fv+9nw+ | ||||
d0M9bKvHxb2LTVW87urrcnksXpd9Xzzplpt6qJbDoavuufLysquuH09/xa3a | ||||
ZVPuYKhVV66HeV0N6/mev72HL89L8+X5w1+7VTlUj90S/nvVdsfHRd2sW+fq | ||||
ffe4GLpDPzz64ovfffHIva2ON223elycNUPVNdUw/wbHd64fymb1X+W2beCd | ||||
x6p3+/px8R9Du5wVfdsNXbXu4afjDn/4T+fKw7Bpu8eumLsC/tVN/7h4sii+ | ||||
Ka/rVd829CHP/8m2+in+vO2uHhfPz17TL8t6gNk+r/tL+euyPTQDruA1vPZw | ||||
VW7p02pX1tvHRQmDLVYy2O8e/csVfrxYtrtoIn9aFGfHqrkqOzOPP5VNGX1M | ||||
0/i27Ift0b7ix67+lzV9Ohr36QLX+Oe2XZlxn266uh/a/abqor/S8E+37WG1 | ||||
3pZwoPhZD/tYDY+Lh188LC7am6avmlVxPpiNOC+b4tuubJZ1v2zj/fihgfPG | ||||
r8MZ90W7Lp7sqq5elnbyy/LmXzZVua+bq8t66BdwwM41bbcrh/oa6MMhWfjf | ||||
CqU/JL9nPw1V09dt85gGFEKOCPQPXXvTwzL9V/mbZXeFi9oMw75//PnnV/Ww | ||||
OVzi5n1uCPbz5abcbmH3q/klU3BlRjHzCFsWTSR8XJwf9nugjT6aXHYql9v2 | ||||
arH0T9Kcwq/zXgbSizWnidJInr4Lf/ovF/Dm7Ra+2cjH4yP+5sU5XLRfRTO/ | ||||
dwEDFcgQzqtl26zmf6yaqoMjaJviVYP/fdMe4DLeo4foHhc4yPyL30aLuqer | ||||
6q+bxdB2+679Ee7/AmaBH30uv/efr6q+vmpgMfuq+xy+OOcPFptht72XWd2c | ||||
1/cGri/QzbZa1U0V/wmW/qIcNtWNXmH/l9ewKcfrquM/fHf2p+8fPYxXT4c0 | ||||
VEi28P1vqvnZqmqGel0DLT+BeeAvyLZWxfP26gomUJRDcb6Em34ve6Zd1VfI | ||||
/BZrQ2NwI3B8s4Nw3WEXHz3MrVf+V871fFF8dyibq8m/WqaR+/ufqmPZlTtP | ||||
FuNvfH/oNzflJv934CrfL4rnVZX/87/D3w5t/m+w+y/aDRBttc1/ARjSm/Jq | ||||
c2jg9E7M73xT1m8npvdvC5zh+WFqg+AV/77B7XPz+bwoL4HHlUvgOhebui9A | ||||
ih12cMJFv6+WeOZ9MaSS0UqyAoRQ0VV/PdRdhc/1BbArB5wM2GDTA0kdcDCg | ||||
dBBM7bYvDj3QDXxFTrj+ma/VZYmfww/+YiPVdNdAXSS5hObwq7sKGFNT97se | ||||
Dnoo4Kosu/pS5gkvXVb74VBui127qrbIdSOmg9PF2fkZzejXvloeOuDntByZ | ||||
Q3HVlvj3PW4PvH0L79pv2yNtD43ezxwvH8gaPl3RBGkHiqpcbkbfhynCVdlU | ||||
231fACfF7cNJ423vqpWbnkSBXHR92K5r4MirBZ/crl6ttpVzn6Bq0LWrwxJf | ||||
71x0VnCkcK+iE/v77X5TtANKUVRQYKO6antEdrAvuwEJxzwKJ7OtkTxAnhVl | ||||
5j3FTXmEo1hUi1lxA/IIGGyxBbbREH9pjsWhqf96qOA0qm7OYwXRCPMaNl17 | ||||
uNrQfiZT1qOe0b7in4pd+baK98CtgNx7Oj4arcJNqUlq06ElY/aH5bJCvnsF | ||||
MqVYgyiHHxegAfV9fQmHEu9vGHtXX22G4hLOvcV5gVrkd4aWDXtYrooSBoez | ||||
g++UjjZzeQBxBX/r20O3rPCVN0Aolf1ikfkiEMrFcU+kW+7hdUCTVR+dPy5A | ||||
3j/DRW2Kso/2Eu4r7gFomVdzEHk7VDvhxfeXbfsWzvjBjEizaQd/pusOhltt | ||||
j0Vfw13EQYCgt9v2psCjBsGD00WW89bpystlBxsHf+95l+iSorpbEkkDqUU0 | ||||
PcDpwZeKVb1eVx1Sgq4Oteh+wC2EORNxwZHBEuF03pZwLgXNfr4su44oNaKg | ||||
Vic4c9XiCuiwLHiV8LUVHTyS6aYikoc9xEUTz6FV6E2TjYX7dOjpew7YPQy0 | ||||
228rlJl9u6twr2AAr2DNPA3InIHa/ZRhZe26Jyp05YBykzYQmbWZ/gL1lV6/ | ||||
PcP5De1bYDJ8QCJz4QmaMryjrxwTdnEFqmXD3wZ1tMFlAYHi+2G69KrK3yF7 | ||||
LLgXxMFgYvz0TYlzqoca1nWEDekPxKye4Fs2QPlwo68ruIenJQoKDlDQ+e7d | ||||
tIFVP3bAJavdnl5ONAJvAM27osUX5o/hyqt4QIJy797985MfLr47f/rdsxfP | ||||
vjqbf7MYW2lwfvMe7smu+vABWNoByPGyGm4qWN5TJddm5V51Nag+fXFfaOYB | ||||
CSOi877QP8Lm+TP2T9PN51PmE3J4IXHRB579wj8PA9frI20XbzBedMtU8S88 | ||||
bgECQfimi/imyPFlROvlJfLX+OmEOTYT/DHDHnV2PF18MbHHvgeJBXTAVwV0 | ||||
1WoPjAFligwxHPfEXOjpWcGXLrlg9YA0iQS5RO61mplZu6qmr8p29iRYquu6 | ||||
PfT42suhBL14JZOD8ermuiXO0XjKCZTilPsBkZydn//w5OXTCRLRR5A+8ECW | ||||
pPzAy/WMnJ5v2cebuEiVrKC8pCpUcdmSNMjSuwv6FH68Ad5KbFYvp9Bi72VM | ||||
P9JRYER4zJG4tJevBwrarnC/WXlhFmCUFdVL4NyW5j4wVxH9Bf4GVC8Sqd4z | ||||
50SiRbVggRrLBYiSumnB2jvinlTFW5g+qRHFvRc/nF/cm/H/Fi9f0c9vnv2f | ||||
H87ePPsGfz7/7snz5/4HJ984/+7VD8+/CT+FJ5++evHi2ctv+GH4tIg+cvde | ||||
PPm3e6wb3Hv1+uLs1csnz+8xo7RHhVwUduKy4l2GI0ZuXvbOcpjiD09f/7// | ||||
+/BXQET/8Obbp48ePvzdhw/yy28f/uZX8AvQd8NvaxugUv4VTw+FGFxcHAU3 | ||||
b1nu64H0T6AiOJUbODBgt7B7tF/rFlkN7itKZVYQSbcW4c332yzgsXN8ax47 | ||||
MAEaPo4jKzd9Vb1NSJUouxFOtCh+6PFVcDVgIb/78ktcyBCOcOaUudUo5mi/ | ||||
kCDePLk4L56QzIJr2rVb0kjwltAkimV33A/tVVfuN8CgRppm35dX1ZTF4HWq | ||||
GVg3e1J/6TwKWPkeFr/u2l10073miqxALxDMh5eY2RVmyWhYEJtWNgNvuTxa | ||||
WYAzJOtjh5s2Vi3DVHX1QSrga/E4w+QukSZqYEUqBJAzsNCnWdC6nqrK1q6H | ||||
Cl8ArBLmRYM/1bH922QE3vNoW81CYOr6JuVkuoVnKMi77Mve8CPmVf0eFlrl | ||||
38UD9axqNStdEqmvPI+Jl/Cg8JY3niGe2LmniTIVXqN7iuQEB4aUc+j2bc/u | ||||
uZRX83QzlEGaTW/G1TeumbTARkFOB8OzwsZM9JIlud4HeQHS5om1+O1XGvev | ||||
xXfJe0nH4lEzs+U5iOKhc8P12lmPd4NpIKhYt7AAvy7DBGBEzwb+FZWDOrAB | ||||
/rq30ODyHjq/Ef6DaCM8J1lV/GaYaKIuKB3BmzcluwS8AtRXA5sFfg94e9B+ | ||||
qVBdKbsj70W8cma45JNHE5cF6KbeB8WQjH1RhVTMeQmyBV0WjYP1ocOZOhjh | ||||
su3If3YAssbvvXunxhOwkzm96cMHkpNRhMGNYhSTevMa7D8w2q7I9vNTms+d | ||||
XjO+CTN/t5GP+f0FbZC2BgTyW5wfeVW6wYXNOaGI1+RNkXNVxQz0r2s09Ksb | ||||
l3hkZmIbzMk2EI2IR1blcgNGsXpQUNeIXSPyLbsV3tJX70nqo2rXpLBMrCJY | ||||
HKS0qgvnuuxq4+HBG3NyF5UA4pmBUbw9kBZM57USxzKP6W8OCXYy6PTwZuID | ||||
IiIC07dfHnpgq47IJziamG4+KV7pdrvoRGJv2SDOAWvUrdFSx7nYQ4IxHy6A | ||||
oYu1oN8Xn4XXE/C29qzjw6mqOIGxyE10U4PN6V+FtjQ+jPOQp8k1dFMK2xrg | ||||
wytkJ6WXKkiIqNSTX0otVi/uiHMkH6rpTv4CzwmEowJDPJBUeQQK89qaQ+UW | ||||
/TBH4iH6ovK6rLdkkbPOBMfWe/8ofcUZg56NmctqWaIHxQzNQ5IxI04KNVjY | ||||
Xlaz3Ynl07+t9zjT/wCa2he//s/7n+AP80C6D949Ltiy++pe0zbVvQ9C76sK | ||||
NJJ66Nk4/yfU8oBUNm3Z4QEB+8ZT9jp7Qo2o3pPBJfOBXfoy3aVVC6tHrrsp | ||||
r6vMPuE0UPdB+wNWc1OynuHYMgP9tyruwxR2bVc9AHvn0Hh3Q3KK6KNl21RN | ||||
OLx8o+sKFCo2IF32Hj1kMuDY3rN2JFn57InVezT3xFKmgqrvVQtQprLyDIED | ||||
N8TcmcgWnqTMMGLRrnAHruuSnTa45X27JWdo6Z4+eX3x9LsnM9iEavkWP1sB | ||||
obDvbwMneIPcwI55XW7rFRwkkN6wXNBpu3fvRP/o5LRxq1F6wgnhif7Kn2hu | ||||
keqz6iNzfmZ9XkvkzHi33GA1TaPgeQd3tCvF/SsKqaF7ADfA6kUzh16Mqw2e | ||||
ec305beZDTBW6oyTUh99sCAR6TkwEqC80Dte14dm6U1g0g/KXSWeP3QXiY9C | ||||
/upGLvz7fI0sx31gfBs6amZDkYqBaIu9OInZqDHfQxX8gNZf21zhXZyiXO8o | ||||
AZ1AdTja7qDG2GETJ+cQ7RC+yzPiuovP8SR5oNO7t9cIfQxVfc0Olqrr2s5F | ||||
UhXVHhEZaJ0KvwAy/Edm3XJSTBnMsYfIqAhxisAjZKYz1hId3UkQtE1wXcrk | ||||
TlAcnN8PqInx/EX0uvjd0ULxZhzsDMlSyjAu1kNINuhAoiJ5dyvSJN3dUizL | ||||
sjkiX/DCEQMesjVvK7h+l4fBTblpUT7iBCO3nJHD8Zpg63+d8nQj8YjrsrrC | ||||
DJzkc3+47HHAZjC3HQOMQZDPxo4vu2hSR3CS6P9AzRIHBkay9H4HHM7v4T95 | ||||
O2XVEjewpiMxNIyU0kBwNdCVXa/ZHSb0iKOtDvstu0xbDI+sQNaUeJD6kp5J | ||||
kOePD+iRCK8Pu4k+biXRldp01U8gLQx7I69cScwLB1N14rIS1Rl0PC8z4NA6 | ||||
PhHiHyOtJj4gWkxO7lJkbFOSVcJKh794eFPVc7qMRTcO1wErOyoF8Q582hsa | ||||
Zh0PmMuN5wv4GKgdMDqc8Vf3Eo3k3gfn/vu//7soy/76yn02l3+fFeZf5lP/ | ||||
EX4Y/u7eq3743g7wXin2vfnI87X38H9yFu9pBp9lZ/BZZgafmRnwB44Hz/3L | ||||
fWo/e8/P/p7GLMRbUmT2Y/JZmELi14HHv77je/Nz/v1XXxXW/P7qq6/v/Owv | ||||
eG8438h3JLsBazo55/RZEQmeSvRbusmfsUPqzvv8t64XCN3BVfhkXV/N1cbl | ||||
VJqv7qkJhWGDW41Na4XhDQIj7gdY4FOQeb1z+OMSfxzZZmQXXnYtxo1J4UZN | ||||
pLhCzYz4a6LYshrjgDl5G7IY25DEDSWUB08MGD1E7nSQaYxmAbpmNiUMPd4l | ||||
+Z4w7aFArjnf1juQJjvgsEs0fSIDEbSEQ49Me+jKNarfJFopSWDJmigFaS7g | ||||
mXfvJHlL5ysSnoKvuBXVNajTYCJHXpLIXZ+4+DFiQj4PZs1179e7KL5rbypU | ||||
EckJUq5WMMASFkgaN8V0SRR53e7gz6uMXnpZgX2NCRzF8/Zm/tcDTBdHAGFU | ||||
z9ddeVgVpCpvaQotHKXP+/SbsOAr0JP2oBFhDMIWVpBfVptanCAUiC6vJEi9 | ||||
rd9WQBjsLbts2TJBwiThg1IE1UVaE4xIP7NvtN2RyIOvl8u3/iSWSNcN0Uk/ | ||||
HODIMA/i2U8l2g5jvRF9ej0PG29wUNDVBqJN1deLOcSuex/WrzC2hXcIJ+hE | ||||
aM8weN4uUSsSkwkO+qptVwVlzOL8YPdfjzNQkviD+nK7Guyl7viR249+H54P | ||||
aUx0+h1r/LlRQ/JFae9qu4ZRX11ua/IRFN9dXLxGD+wr/CEEJ9tNWcN/hmGv | ||||
3h+9mX/07q8LdqK9IBvm3SdjfyN7Fyv8vZ0jB8k6guLr8+6dcjy45miab69J | ||||
YerA9vTJGRTmZYcCaqc/Df1j68fXT9X1a/M+aObitrVWTA8WMNxrdb9axw08 | ||||
oEooJxORDRUlCrHpLpHRFWZoGO4TnDxWHwL9sUMSMTycxvFEixEOsBiKmlMl | ||||
j94RTTOiVLjusAyhlchrVfe6CUHdhj9H+U2w9+2ypgsoeUI6E5u3A9Oud3jj | ||||
dnvvj75Gf6/YifPrmtmTHfq+d0nSA2evkb3BtaDkHmEhsg2YQG3iFn/72RXj | ||||
s5sZD0Aw3D/iGIvMMeKZ5NwBcp5eCI9Ps8id5sJNnlZx6rT0PdFZuYmzorSN | ||||
jzkvd/K84PtrIJfrqtwiS4wX/kDoz9sDsqSsMYsu2qEnjzQY2ccZr4PP4W21 | ||||
RwkF0mDw1rCLNzvrzUgiQb+YoFzCDPzho7U58zZXFPajr+gM1Y+mMQIlzjsS | ||||
nC428uugdJgmrvCWE8zALtml5GVedhduQBsDRHaCKZg4RbTZTVWtjOlqXuxC | ||||
zA7TnsR3KMGzUcQmVmB7jLMjb7SRnrpJAuEkp1zixNewJoZGQ8abv+gchjt0 | ||||
jcTv0LMiflAfMuU8LTTCl6gxowsu6/OitdF+a9iVjgvUy66E60ECmxNl1GnA | ||||
egKvQh0KogNw0p1ckBvMo0MCdT4GEAQIRxtsQlVIJrRz1FCMLst5x4WGO3AH | ||||
ekxA76qWvJ0SngrT31Vlo3d6HeI6DvNM94MPPcssyVnlR+eYDb6i2B22Q436 | ||||
n9/iGbvvS6ceNHgQVT9kdXQmawl3RYdC77HRDBP6DuG3RfHnUVImjBQUkDgk | ||||
W6VR0y1eMlLrfeKcla6BdyfuWlVniA/eVHBHha8HN+y+owKSOkT49G5rgmfN | ||||
+j9bbf3YXHN0GTR4Y220nEM/SiKQRHSYLiiQ/YYYHF2CKGwtmQIhWOmpwbHl | ||||
MoqILIpvcVxW8ZFRIFdG/tlLRqhPBhLuTaTp/H0Vx70hVZs8YO8u80ygE7c7 | ||||
YE4/0H4ZFaBcPD8f5UQiOZUNsWZKUY8n5xJnImbFHRp+km7QyWlar3EvLB1O | ||||
9Lo68u7x/qJ/GbOTrzCBi+254SCZsn58vAGcMLlwflLVT+imrJEN8VDRdVDT | ||||
LCZC5VucNA1XzEdQvZ8QrIetpIvWnTJj2pyQNC7cwHCAsFDmYLsSPZj0+JG5 | ||||
ruYUp4mlPjmqk7wJZmk4FXQ6bFtKPo4TmPkLzZzvoykjWBRP049oYJYaNDD6 | ||||
QV3IhfdRHTP86RvE0w755KNCD9pdP71edDxJ2O2DdyAsnWWanrZNGcbJe+cH | ||||
HP4fOf+a6McIQKa2WyQnyg3Mtydh0GEI1UWcJYRM8iyNNIEJnubGXouHmps8 | ||||
Fz4evUzUF0NCklp+01rLyb/DGU1VIho+swflT5oCqw8aj7k9bpUtKBzgjYH/ | ||||
e3F9xvQgUcx4qmVIboA7NH5rQeQK5IvM5AD8lLQ9SZE7SiGMFdmBeXl6HI/K | ||||
jivRan0qHkn8TSkZt8mjzkyoq2CJEhgtOVPCOBnb5rhDGoDhF5TjQMR46ugw | ||||
NFPvaqwh8dly2e+7uslsm8m2/Ihdc9ldM7c4GfOWPXOTD+Z2zEw52bAvF54D | ||||
zoVIP3bL8Naf3PSzIX9bslfSRZHbyQtzyy1RlW50S4Q9RbvrVe8MRVrd/+QG | ||||
28Uke/yrRTH2BKWb9MeTTMSYu260Jyy4zAnnuR1rQtEV061DgSJhRR+RRRnA | ||||
OXwmS81E/vwZ3edsescK6aXVSUWSPRjzTLwXI0+HyF5SUNGjndZv5EzsdLVr | ||||
qk0JoWPNyg2atFpucD3RqJWxVV8g9RI+jgWMSaf0VQKlBHcTf6i41WhzUR9x | ||||
42WeMpJ3YuIsh/qaDPTGnH2c+RFn5MniaEoSEx75k4LOHhQtx/oSUgKmz12b | ||||
5BHVtWEzOdOPKW04vUGktoDtAeS0SlT+kcox8+UxkXWfDx2pBRBp5rfEeFhz | ||||
Ryc7xykk3cbuA1toemmlEEg81lOhGNmJDWV9KXcOPsWK60YlVIOePjN2iPNE | ||||
djS6P3QkHt3LB5kLbuxIzDgSM8YcQF7BmUWNFvXSMKSP0f3qUTkozDh4qdYV | ||||
qe+9u4/mBgY4sPyjpvx78shvqnJFNm41LB9Y+1onHVJPWKtnMtHFukQ19oq1 | ||||
l6zG96e7bnf0AZ1Vo5q26s3uW6AJ8cfkTtLv3g1n1iWJmcZ2Fy0WLWCvxVL0 | ||||
g8o6hyAvfPjLVBWgyYAzwleGjAn+wqd2Iez2xXHpTNaomG+xlpNWZ68U2zOs | ||||
eZ+z8EWVLkQUZZIOj1XCWzgKjjElSODvV+xFgBkeKNdd3GNq96o7c38Ae3qJ | ||||
yTj4+sSqmMd5lB84GdMneBujw3I/YScdgoI0K/RkrFlBzeftKhsC69JyF/KP | ||||
cjqnS9Kd6bFb053xYhiPwgLmjULjwwcX3o/FZpYiWaqoS0HZrsZg1HtqxaIz | ||||
qXu9Tbam0JXRB14re3v3SZj6h0wa/F0qP//hIys/43LeuJLckSuhDhWhpytN | ||||
klSol2qDWCuDPMvAe1fiV7PJr/o2ay75xCXvO2C/oiQpccpOkjdy/927sAkz | ||||
BDehVz9aPPzw4QEe0czV4Q7PRqvTgCZnVkyO9ghGc0lKF6lNSczLZp3XWuOm | ||||
luZHJBDdmiB0awLQqQSQUwk8pxJ0TiaVYAbO2UiKf/XV16fSWE7O0qah2Cgl | ||||
J6I8jRISM9clTT55ssWkA0IdQs5KEgI4G4x+EN1+1YLyEGgEOW1L4DyHBsXn | ||||
ksSdUI4UhwH1cNmUvx0hFzROghsXsqGMoRCqYo70wCvR5ee5W3IGFPSm10oV | ||||
Wi8al1Yfj7Uon6zJqtdlJRkvK3UeBXpnPu6IWY75eAiZ+fpbk3vn7YhJ/ZMT | ||||
5J1yE/Xjc5KyKMkhDxN9f+SfV/92xs2A0+pYTyqL5rC7ZBlzUx77SHuV9eNp | ||||
XuNkTMZtbXICZ86Hhx5jLsuIltmKNKFDhRDyhSek2o7OwBVxTj1HdtS04YTh | ||||
4htvRWVEGOVEBk9eESocgqjUFGrSfjNj4PLjmJJmeBCWAsl/zCOmkraSeCXx | ||||
aKw+RRWCR/AZmrR38vbjQrYLzYYVO98lo8Qw9WD38Ml4N6JxqBK/hymx1yBf | ||||
DJFka2SqzCQrdNOCIgiDwZlo0DbU2NkTix31+fweL0Ik0WeUJa3YQiHIfynm | ||||
rKZbqOeaDF60aJYM+sbb4Q1sTC0L9cERkoXfEAp54q6PPQ2L4mnYcsnF9nUo | ||||
Otz4Ns38ROAGA0trlpQKvlSVVtVURnqYr8Es2HAeCFX9SEEN2mowkI+jYNI8 | ||||
vOeYeSEo2nRTBV4iaBmXlcbi0NVUhNxidFV7lu55OFFoCedQ9TyhDv4DZzJ+ | ||||
I4xlXBLKVKqdh1PYcSBJX0+2dbkeqs5yOi0IkNQoowCw2mw0kMVDoq6EwSbx | ||||
rXnxOjjjMJiGsDFzjQKOz5LzbhQFwhLYmvY+sL3AqVr6AkWX7ie+rH14OR/B | ||||
A7KICn0dUaJg2fgQqAcKSQazc9fhMK86433DjZAi2MxjpKnuKb2dgvjBBYfb | ||||
3moqQPQgOt+KV5zzB2TSqrFBLgAqSwId1ASjyquuQmmIHKIRHxhVGnjpSyM+ | ||||
A454jKr50rfOcOBWX4wXiYbmGvAVpoWaEG/wq4ch/bvOCX7tzjRkZS1jX0Rr | ||||
5kKmlYcDUM8DTSlzVHDcZcfyo6v7t4J4IYAMjOoiN4PyOBtPeFLBtDcuc4uo | ||||
wzF8u+iFS8J0udloQF6ltTEfiNTNBIRW/XUmj2Nul0dHJ2FAHIBADmqOmOG8 | ||||
BoYPuDpwmJGlmUW0SeujnOZ9zjyVk8is+H6gGUw1gow2pYBRCRMSHuo5aHx0 | ||||
rBLldkvhpjhxaBxZ6QuBEOGXCpfgZ0mgx3UcWt1B+4ahzayb2qNh9V6nkKMI | ||||
HJyTJJg4lIFwlpi/D+T/MYz0ZTuIxzX2kGnCBGw1ees9ftCIMYEiTyRMc/ef | ||||
svKrLlt0nGiYxvtf1WEitVe0nFVN62zwKz+L5nNZwabVbcd39i43VryWrFB/ | ||||
B1dV12bjGanKhK+n09GQKRZTSzIvOsOinAWT3OKlanBWE25T27LPTFUUOhuj | ||||
LAVVCd/MCXanQZbUqe3dYSEc4uCC9WpmgAZHI5CeJlX9oGQcp/iZf1HvF58U | ||||
l7NrxWvp6ljJuFIy5YaJEqngSOokQYfaXGwsD0wkegMDtaGJsScrL7HRvEKY | ||||
sUjdrd6KgIghA08/gi4JA6RD67AFG5Q3fVcbU50A3sL0xShqaTopwvjbLc2w | ||||
yS535CZlJEqyiRJUbL6rSZLz2jjWZ6bl8yH1MAO7cd0eAoBgHHkKxdjjEGCa | ||||
TGfCuH9L5nO0o5Ixeyrn0YWcx7vlOw5RErTP84wm5bMQtWB9HKshPQoO6llp | ||||
Q5CeBCTi4C1VtUlF+oqNToQi+fPO42lR6OGAjmIG3IxxlHy2OSWdEdNhDz/M | ||||
Iegn7G2nwKYyzGAgR/SFRUDDRDGyeMqD58C4LUsxL8BwCwWTTevzToIf3eeT | ||||
+qjdlpBbhQQ7C6Dwae9C4hFylRShkBCZQMZhtQqorsGeaxQaii7tP7k+sUEe | ||||
5WWRD60dGCBNTp4ZK0UYMN+OLIeCELJXcYAjmuV4A8PNdFJXIs7bECv2TMnD | ||||
LBmvf+qmyeVYF2c79MyVjMSr6EQCpm0qoWJg32zd0sNF8ZrPTb0fudSfSj0a | ||||
Ut/M2D8rQy180i7QAMKL8ENx7hqL9MwraXCyO80bXPoGzUnHN5jJ7+BUV+VQ | ||||
jsPvo8lHl4u8mkpSruwua9ARMdGTh40AOdnG1TfN4wiQ3rlYTqNSsU9mSLMW | ||||
iv+7T3ucwqcFF6PYvM020MNpL8kn6ST94CL2vHCpdaU2wF32IwXFIYSUZO0s | ||||
qTP1k0Nfbde6fk6j8B6Q8LUYzXPmPLqZ8HmfZEirNjoGBz+YzUVoJXnGhFLp | ||||
EvHd9WsBss+7JG2Uji/XD41PGCZ1EnkHkfDyKEWZo3UrTqLqoLDyYUMQOYkC | ||||
+mlfJDOMhV4MWyCcmifvk+Vxm3THwOAru9WWhCTrR4hM0lSa0r/3Z4h/C/LK | ||||
xfJKF3LfZ8Oor5TCQmBjswlE5ZmxbuHgqjT0Rromr5pqTqoSUNRVRdV1vNG3 | ||||
bh1Hsn0A2Us/WG3weN6X8HjpExso8k4vU5uuXa+3NRcZBNAjDXNkwY/U31pz | ||||
Hi8t5Cns/aFj5n+XJaBLoVyTqYblC0v/OMheFidy5WvgA7tQX9RPZF4DLfJt | ||||
9S0fermncVy5IVSA8aQIKkuhQTnZZ1WEsbCETF05oqaQfAFLMsicSV0WAeR8 | ||||
qNpJqBoNnE/C19/Ad4p3n3j4G3phAjtmIVJ61SEohzgLOocenx53s+E04xkH | ||||
xLodoy3bHPQ+qMc9q8CtYvka+TuyDz0cXRQCUattEVLT49Rwd1tquK+haw0+ | ||||
50RpbozBpdjewMlg/gNXPXE3EI5Th5SLAEUYQQSGxIEsDH12EoI1KPjUkU5C | ||||
fvaA8U8gxCbpuhOwwdITNcVtvOljXqe1w3FughlDVAodAyHGy1ryjkyRWHZQ | ||||
xQzMWAWhlKiOi30D4lQbcjSAQlAcck7rst1rpUxOyTtddM0wAb76/FyRprS0 | ||||
ehFydijZE2t5fdn1cuRaN8CWhLWoYa5luVf9LKm1w5mzodsdsBKR4r691KBH | ||||
7LIw1eZad4kV29m6b1VJuNRbDwa0DfTNer/RgXGrOXRGExYILU/mNPGtYLJp | ||||
0JFHFWjC/EHjxFraSpuKY8og2IcZtlc3MDFr6Vu4dLEfbKJvAAJHgcjDyWmT | ||||
eGUvqSndhHG8yL+qvKQFga2EpbiZhv0w9A/tIM5j771n8215RBa8pM5GBmyU | ||||
nbZiRxSZiu+J+y1Gcf5abCht0ds+4+ht4vU15ZtUCcJUzcqaTJmiGn5Izj43 | ||||
TyH+W6O+aYmuKoEstHkR/t37TieuGBYDNshjxdgiyL6hhXFWktJI1AvMfWCA | ||||
PC5ZMUiuvkylRra5w0AU5jypewpFn3KAGGdyystUMygzOohab+m7pNzsJJ+a | ||||
5XyCgjQSFalx9ik2YODaEqBHDDiqdhmyDrx4m5BBS4IgX1X0ODNcdNShUyDK | ||||
Hy/6+ueKQf+a4NuN3yX7yrKE2BRxtlVgfLp/INSAhsujlPoKtlJER1pfXXJt | ||||
nCGb0hOOYk70xVaQApv8lMJr3G1TUtvpLo7h4DtHY1Kg4Ukhq8byytAuspkG | ||||
FHoOFyvNjFLAR0B3E8iKEeweRfFd3jeu0dsLjzJ/omLCju0CVP2hsYEK3tik | ||||
tMygf2qtNVIrOg7HQJJayBhdM2KPvsYszQ2NLGh1R4pa6QFzJrZe5kvwGS4Z | ||||
OJ/9O8mc7dcfYI0Hu7DSarbM8uiM+nRdUdm5f70cTZSDHLQwn+McBpcMZ64g | ||||
MZXn2VUmlhHli4cl5CbvknyRE6OTrp5ZvrEvsIYIZY0FeKMYGmfrhFOQW/qn | ||||
Fuy6POgkQS0l8RNeyvxHfGpOsb+OohM5/4rGQ0Mo3mV2V913bI974PKRoRDX | ||||
uXMm4Bbzl445+8FAHiH4M0Zjs3Kd9BN0JtWS4UfMmtzw3qfNjvhJNTjUnKwW | ||||
2LMQYzkntFj1EZFNiaYAO0vIzx+BPTtNWZSZkp9Wcg3YuR87JgoCzkvrm9cu | ||||
KWKamntBDEUtJYXhw+0qfq66dg6c3OFJtjUJY5YUev2jxgkTglhDkC7OlszP | ||||
zbJHFU7wU72lN+g8QGXZlwMC/YIg5U2hjZCtquOVC16VMDbJ0S9dzogZyv4t | ||||
Xd1zIN389bCX+j7j1crl6PEZuhW2XFpispRqsAMii/Y+UDnqd1K6o+tGZSGs | ||||
3ZQ4obNJlu/ctxqOhNvgS35aEyqeqZfH95uIIBAEiwOZUD9QzkVugqYCS6dH | ||||
3jLVk9IUuLdNeyOpFxOQFDYJLkFirwMcZBjb18mFOpeAx2NyTgmWQrITsKY9 | ||||
u93OxzInnjo0+WMqL3t2kOwQLCqquLHSoDZor9xlo68IZgqFmx6YSgpUBRFp | ||||
FfT0mTnwycu7rn9SYMwQy48Px10eQ2lkKO1RTwTn4LIb4XgKH4OJw9m9UC+F | ||||
ZItSkzVyNHnCCO+20KatTyFxdrNNH4qRoxHhNrLnII4zmSS6zTKuMrM/tSZh | ||||
BAhjgSOZhPhxxr4ppLMKA5gkKDkCuOBX7+cYpbIy4n0Atg484jR6Ql7yuazk | ||||
0yyY0YgGdIZCT4xQon28iByTyffB8hfIialBc9r1CH6ac6b8HiPliLCLAPN8 | ||||
sk6u4GtmK5aRQl/PN/VKXBg/EZ5hYbEqlF+wcjUJ96ABffZveJwkvgW6aBvE | ||||
nrRcSUkLnb/8UMhO0Ivcobin4Fdo25VpWjhemi95QxDEEYikM4WJ/tAkFQzY | ||||
M+zZzxLUIumjOdqU/mD1V9IufSncjcetPwWCZTO8udUlUpdkzZN1c3mMCyE5 | ||||
SuytwMH5HHtWmUvgxJc+ZZk1xPAV04kyXG7gLINgvHkIFs3EM8hJRaRW9RFW | ||||
lC4No/r7ssaiQUw0ITziyfA0eYNiXa3uU4CPopSN0TLBtuHmFX5NMxMsGiEj | ||||
4ITM8ltC0y7OvglLpTSudpBchz5dJg4j8FeYRlcP9RV+VdM/A3PVzIK7WOtJ | ||||
uJMhPOIXOx0nQklPkieogF0inaON3JWrBBLPQ5H4pBj2QuWOaaJiqDeSg773 | ||||
QuKzxbtPNFT7wbmnYjqwW2jQBipTXmwuvcDCg0GXqMHhoXI6rmTRToe4Pbh8 | ||||
6hwCKgYLqr5GuFKKcrTebZrE3UnHRdpB/B5Pe+O8hbD9Yvys/RDiCCBW+pLq | ||||
RYtjXW1Xvdu2V78HS+HrR7//HP/n/ssHBXZ/tw8vwoYq8E66H3ACrzOTJiWM | ||||
MzKNy1lC9ZTHDiw4gogPHhCs5hwlSdDz0muRlBNgvDBGxVgr7b6EjUmcsvY7 | ||||
mY0tZbN8YoEUDPBLXGgBwDF9bmdqiF+rqnKwB4Rbqi0JtU8FWQ/V8q0oLKQJ | ||||
UNi4eEXTz01Sf04HwtuN9SoiFSfGHXslXZt/lefEZXGPIYCx9oazkhgM+N5M | ||||
Ww5gko/DhNrtOgaemPm9SNp2/dHXnoNJU6IM8rJtjJdRS9kxn05tke7jwCBf | ||||
0Z4zpAlS16U5KgktmvCHyRy5EzmeH6jUJmIgWq1zqLeDKks6A39x/gD6hs2G | ||||
Y4Ph+646oNZdYV0N1jj/8/fPX7159MVX37w6Wzz8Av7/i998/rvf/Hb+5fyL | ||||
L7+Y/+Ovf/PbX80f/dfDhx8+uIB7CLoojDLnzKt/ffX6zbc8OnWmD2N/d/an | ||||
7x89JAf+C3ud8LhNTJ7acFDXT/RG0G5jvG3YMNMvd+Tcw9gUbTzaJbuEPfhT | ||||
ZJUreAg5ZjtydVjm6YIsprhli8Bl4aX+VcSkhGEKSfgaFHKTHUj5FAr3bcwt | ||||
VeAQWilyWcfD2zoabKPq86SNbyyfXRQHBnptfzORbJRJp0VRJhl+ozRpqsX1 | ||||
SQ/vPjFJEbf1ZKMcy2XbH0H07zgEixg9aJ81oklQMQZ5sa5JNofR+fqA5qwx | ||||
wZATQvsWYABqSVhiFbipbjI+bVGz8gkbNE99MeeUlCvCyxslL9kMkMeUs3Qm | ||||
ErSUZEkqZii3R9Mg2OTkU98whSPVV2INwVG6iKAOIl/DDfsRTCTK7ePoy9UB | ||||
OP+W6hK1jqf1eCCmjDRS0vDMVYHXIEeEsx0n5IlN31OzjSkElVuRHmYGOUby | ||||
ep6s2PPMe2qWEioi6S3sFp5juE9JFnb0CrdfFJCisCqgTxR8ijbaVrs+H3V/ | ||||
fMtamqOHIp0qmcbRfdW0j5BXP7FXcGXFbkYzlGIDYxF9iyL53SeEJTHCGdek | ||||
GwoM3g5QISDjNi6xFsr8GBAKZHRJlAi4jyNDwxaOqGyJcfhoT+JbX+8UihZV | ||||
E8eNaLfEjic7PBZn4rmXNKhx/hMuzSWAxxF8J/LII7nqixGiYrleV8uht/N3 | ||||
PP/alpRl4kOhXeXJLhHMNjnrM5CRnLbPGZnrufM9jV1LHk4mqbdhYeoLNI9E | ||||
gTf1disheynv0jqwUPollWcTcOs+A7k2d06BXRhB00CbZMpTfLmCRLP6EK6K | ||||
IMJH2NkyN7zw15Uapgb3eQy3zcCi/UTc1Mw5P8UQhjS5Hgr0hR3ZKJxii1qT | ||||
ilpvQjXHtFt074bMhE2wt6AM1H5cAwXTQYe2BwUJ6F3srQYxEGe9srlghE7k | ||||
5g6sgVyyoO/FCMxRVqt0k9NMyzHYv7iRbS5hxMCMj1CJ+g5lOMIVgrVzBOZa | ||||
DVI9KrkQbtSdluOeLbfCCP4oPF3WPdMQdxpi83Qg8K10Omrt9ih3SQxGZS1M | ||||
MW4cXxasAgJPsHFf5qo9ukPjFCe+0C7pz0t+WL+AEcfydQzbFl07+xZmccQa | ||||
6z35cyS1LnI7yNGQxEwPRdWCU1UXnkekvgNnSqOikxg8lEZfUVpKBkZj7AQP | ||||
yx7B3qYhCkvfWkCaBCXThotUhnKKMqZeEGpeyz5T7jEJ7TGJ4MGHn52KS7nX | ||||
pyZfsK76u+4FgdMawO14EIq3MnSDzfSIaj+DMeFCV3e6uT7Fa7wwTsvsR5Wg | ||||
vlJprHSrbjq9JyMO+Sma5WE5Bi4k8ustIgVrJBai73pJ4Mh8E9QR9akYNVIL | ||||
VL2CqPEs3+lzJjaam2ooUUi/E3/F70Z9uEzLcKNCmovsFT6xp6Af3IWOAru5 | ||||
CX3S0yjhEPpYHHqhUYrahO6U2iszrtNP/i5h/t7FzR6FUr2wSEp6hE6ZsQRn | ||||
THCVeAYgeBwmjVVD3SY2ZxqxZleLx+BRAH7JCRBBWnxnjvspR7UlcqxXJtri | ||||
h3Q7XbqdZilcj5p2dxZ5t6PmhgHFBGPDlFyufguurI/mKW0MyKORQNUYqO9B | ||||
VBZsmyIALfBgxXXGra+5lwmLVIwweTPgBDPn+92wzhuF1jWjg7VfRW84RpP3 | ||||
vRowT2SszjlngthFgHs6LT3C9Y7u1K3S43+GmGo2/OtBAQF6I7fDhcyU/Iv1 | ||||
LMluNt0iw8ZqqTmKgc/0/BQ9FQ5eIcWoHIGvXmxbhsY8nuajDuomq5E857Vk | ||||
YeaaHEt+auiJnkcfSOq28GZfsD4fbA2bxpLXk/RUyvgQnTeNUqY6YoNpR+VM | ||||
tFeBzuzLRsEOE1WxLSJsXhC12VFfYnokmZyS0dyde2byyQQWdzJGbcwrHx4Z | ||||
sqVy2vrYuqhmpwXYSJvPK4UX6kQj1dqDUsUrrXsP0A0m66435KZZtqbOLQt2 | ||||
XqjfwGU9GRbMOPUm5DovLNzYVChOmgrj3enDPrgpu6EY2Q3srDBQYGI/BPs5 | ||||
NSJsu2ETOr3FB0ZWs70x2j+KW0cqbADNJuU9MQSub3geG8xnsefKxOdMfokU | ||||
agVHfZJZwZ4ubEvOVM7xHdPQe8xdjVU0pVY7ag1emDZQfm0z1Q8DdqH/skDW | ||||
xPgUI1SBQXNMJnmelYauVlBxCjoN2q+LEwo0m9sI9aAJSKBKgRnr7dHlEubi | ||||
Pk3TK+dyrkbYFKgubafQemnP8K0i6yDNInSS3qcX7J1794m5S+xPVVdnEBIm | ||||
zxLLUTqw4lc54BNV6EN8rfKNZOEdSj0xZiQznlFyknpWnMHFwxWmMOkRonlM | ||||
GhnsJMemNgiVUhrJCIZ63G1hFrO02N0rTC1ujkJFNQZkeYm7Irqb7+idbwUz | ||||
UHpplIbrfKmSj3uN6vslBjPauDqGanQYyfNBEjY3qIoWx9jU+15ukbYuIs6D | ||||
m9o1AYpZ69tPYeLDfLQ31qorbzj3XlHWMOWdnCLkW29/osR4k5QD/CObJk8u | ||||
aYaH7CrDyAL+P3XcAhnge+kQA+MiDjwf0hbWH0kmC+fXQl6+O63HJhmhHi9z | ||||
m5Edxvy9NA3E7HqVImO8AN9WStb4IunGhdyKSguTZkLYyOdAHkAu81xrg1wb | ||||
TuTIyjnjlo2vvFx3ZQ9zBjj7IMXWmNEQ+gqdZBi0MQjBkjlex96DHJpS/FoM | ||||
DwQQ5xFksen2fod/izEK9PukY3wMCj369b0bdYx/n7SM589kD/TXAC2dwZH2 | ||||
c/gseeln0a+f+TmMIZz/IlN8n6z4fe63Ty0a9Yl/Y0Dqj2liH/+uCNhfjbrG | ||||
fzVqQ5998m9+52ejFSUt4/Hf1/nZjp+MG8bbU7x9tqf/jWebvr3I/g0m/wve | ||||
aRG/o5unoN/CJ1L94d4HEXsserpKPKAsqrXne9SEOkVOSKTVZOv3EOA0nOeU | ||||
PHKhx9BHMn/KtxL3ziwynEw/RHZCUS58nGEbOvxqyRLHZTwKgUcYsJ0GuW6b | ||||
PD1aQDtVlzcj4Uk91/d7av8NA0gD3Qq1BHTs3NrsQtFJP0LjSQaTcJNgGkzl | ||||
eEol1aVVu0xR10TKNcaprbcq6T+V4jVqXcIU6LG7L2m0ofXDBwLczcyr35fL | ||||
6YlxLrhvNcMIPKb1CbywqZZaQm6NLBS30+V9XtBGtXxZcTtRZ5hXoFjCeovR | ||||
Kxre6eJrZo2xE1yWP0YTNr20iwmgEM21kIQQU7GgbirnvVQ/Tu5GWuBqMzgy | ||||
nXLrKfUhLow8rUTcqkZk9IbbNYf3SXeJRG24XXF4bxWHXPeJ2/SG97d2pzit | ||||
NnwaSabb9YWP1Rg+QmcYKQ2/RGv4eL3hl2gOJ1SHv5vucFp7+J/THyY0CHv5 | ||||
VI+YZoC3qBY1ReDXh22Mt3tTSmcoxMpqy9Uk16A8H19QVUmvhDtyV601j/oU | ||||
RqOrT1RxalSKatPAScb7aZ+BeEbIrFBVhV++zU6TBcSO2NAoNguA4Gu9VXkT | ||||
cT4hyRn7tI8zEWcTgp3Kl1GQjhpfuhNKxOQBiCWs6UC++JSjdSb9LBO1kXL2 | ||||
srfKn0kDJO1F695M2BsRICaK1KzRG/QETU939ahZxj+/eXLxbP787MXZxbNv | ||||
qGWU7RaFezffwoEPc9Z5MN9T4LKc0fEC7neq5Z1W1ILWZ9tl6RXiGq2gnSiS | ||||
9aRuwl0NTrkCPkIzmXnqCXEg40cwgp1SGCl0JjFBW8IUNZV3PkyqFaJ67cb1 | ||||
lOe6pZPwDf7mhqSl3K0h3d3bBwH2TeseK+2dLj44WZF/6/3yLi1WHqTg46OG | ||||
6dGgdUCPm4f6dVZXie59/prpXT6KI1Kpk5Y4mXWELuVY5lGXvrP6fNRZ3XrF | ||||
QzsoawIl5hXuvJY9SjHoR2h8QqK3anzJv5MKYFb9S5S/9x/rNipS7e/9x7qN | ||||
ilT9e//RbqMwE/knCuH/uo1iipjS/v7XbZS/f7HSNxYNd1b5UMxHDTlUXAtr | ||||
M9XTka/Hsf8lZ8LfBfSIW0mx7uFCvA91zlPaATaPva5XiCmptu9ldWwJKI/T | ||||
tqRgLSp+UM1F1a2gWWQQkhYj4ZtJ1u0LG+xiCViHTO9Mr5LY88UoFBk4N2S+ | ||||
CjsX6ZBxQpB5OpPB7kewgCWMpEElVQh2ZnvNSLXGSrufNC3+cLXVGBHm8yeh | ||||
WHZCmsr6TBNcQnjnctxcfpHHaDD4zR6igVPFeBJK3R7kNLc/MnWLBIuFIvBG | ||||
QU/UjlKEKhgrsyNXqZb2+CQ3D7Hk1cRMEo4vd40S4xPTJ4bAElhcm4AfYwaN | ||||
4uqZYoE0D5rQcqYbcHFwitB+7hCbIoSfv09oKnT7U3WPLkXisxrzMvPOX6aS | ||||
hvQu3XbNAaOvBj2S+OZdmoPYaK9GdF1G29Xkmmx10aQG5qYaoNQes26HUBAC | ||||
hjGKV2sbctO1Ei8WQfl4jLCM2ZbRdvdbamzHyJaapOgd07o8a4pJQRyyGS6v | ||||
n8pEHzPc28IPijPh+S9ujZMwPDOix/H0sRam2LeYgFVzkbWvq1DGlUcJCRfO | ||||
CzEPTkHYRnGRhUkQpFcS+AzHawJfjE8jjpkYTsX1O4k7fpbjD0LYHsr60C3j | ||||
XgEGfQXzIcKcU6l0l2COy8pAP33NIrijiMIsisDEYYpUYl32GZGVSgREuE3Q | ||||
/SaYRwbRT80YnnfZp/B/lv8rMp7BNeBmA7YJXjy3GebBNuNWhF6KZX0PMZqw | ||||
l13uhOxKc4+exkglNgcprYR1Ls728zWEfSabxpeXesAczP4k8CpM2vsDa2Hh | ||||
j0ltZjbpxiAxSw8gn/ddcCn2LK7etEh0S4bwxVou3DlFnvVV3JQrd9MamF/M | ||||
iHpc3H/4oDCwvS228sWiCY2h+hCi3EYsTF65oPgEZRUm77Ga5Aref/SgwLZq | ||||
MBXfR9zmLpkG7QmkDEiS6rr0+YMEHbavl9IS7Jt4whd+wnC+MQRx6IxIAdTQ | ||||
xY7QdRinQpu3WSy3OB2pd/68TaWCqVKwOisJcOTzoZQu4KIF8v2Uqkd7U/hr | ||||
YW0iHHvzTq7nUs8W8CtnKr+ZbFQaprW+7MeTfKWpI3fmyH16qjWEBTY7LewK | ||||
+Yf0FmT0ThvIV/GqgPki8YC1hcWMo8i0T/mE67CpL2veX3oEq/pJiyJVL0D3 | ||||
X5jKrgkAztA1aOTINZdb8oHdFW4HzE6UHe36mCxaSRaHI+YFWhTs5XQOglCR | ||||
bkvvkW4oOZBuFAkfllhe0nqYiBgPzccUVALNCkLGFA+05q0pznmAuDwNcy7e | ||||
umrHXWiHKqqP1IvPRSk0UaOES2xcdQPyzAvSsJ4Pw4caJx2q5PsqxspN9i3c | ||||
BsXYwLYhV4eyWxWTnKjtQstr/hJxYp01cKgVljT3GLNO8EIjbHSwFmptDG8w | ||||
0rVBhiBS6mUCSX9VYlKqi2hecsUVkbZv1wPCtM88YDtnOGuNm5hOnVjfQFrN | ||||
siaaUytRYFJ7RIWqItCI5GZrG0tgPo6HzYK5y83KYuJpZ92btnsboBm19Neg | ||||
FeopeW2G7pod9iwISfVtByhALCJZVe16LVWp5ZC91boFcWm9uIf1XJzwOdKW | ||||
btAM3WO708C+YCbMRmBVK1RV8XEF4feo4wEv1Lc3Q5rxvY4nqIYrnjBD6bAj | ||||
oGIBla/0/a7coV7n29lgo52rDZsvCPKHNMuCHDN6m16uToRMryKeUI9MFgup | ||||
aj4A4ovDI9YF+wV0wu2DJgkmFoF6u1e+L5Bgxpdj6TAziAh4wDfkxA+8KGyr | ||||
SAT+WHDkBZ0ogrbMNQ7z6PomVOrRzMqEg2jdHNdLy+b4RsAUoQQrol1TEm/n | ||||
uFsMXRWuUCAgwbXoIpMNIkA3eRrpO4goEX0AGsmTIpHZFJAbNxywjROL++Ge | ||||
+QKd/gHaC5MqIQGwcEIwujY9mI1iN1MMecm6F08SVbt4ugURKtWBIgOzU1pg | ||||
y5ynz15evHny/Ozfn1ycvXpJ8UbgiLiYTbmbl9ct8Rtu6t5UoHPHm2GUbDdV | ||||
lo4Hr1hjyuVWqf7BFdDzHnu3btrtCuHYkD4axhtlEFKtQ/SODc6gDkBiN5Jp | ||||
t+I6YrtaSudfU6dv9eIoCpg/Iyo5mDgOj2yMpdtLkFJiCQvGktYwU+1Qy/i/ | ||||
f64uP9Wwlzo9n4SQFobEJ8+ed8wLhUH6kwFL3KmT2nnwbrlj0Y7CAtmfhpVO | ||||
emhslWk7D3vvAtTmurox8cvYWax1oKRtc4nUyuNBaZIXgxeXxV8PbUfAXNz6 | ||||
S/LVZwFXlai4kfupUqExDnz2KTIdhUBltOqegZ9ZE0/M/4BdgfOmlhckTlri | ||||
VofGV//3wBGXprbGcofowoBtqic2MkwVgInVWSCSa2pQpVUewRgl/4n0RlnH | ||||
2qt48ZpfmnC5oDko2CE3aA5dgtZrFJkUoUWXdo/bHirpuOkTYc6uE3yzcKtN | ||||
ozoP6gkKgE5iO6lqowkbeuIYipfIMXpJyIdSEfRTjX7QchJxjQoXiKxvWnZ8 | ||||
cE95J+OI1+XWxx/9HkTY118SLub+ayCjLQv0kzkxqL8CWVQ2IyUu4qK2IOQ5 | ||||
ummNW7cNmQ0ysG2k2lvEiTiBBo1PZAI6AyIf5n0qfe5hLfi9ADRRbICRiF+9 | ||||
36HHquOXUOtvRGlvKacjUewUaiStwIrhRvJU4gQZEHadqnzbLrQeZ9hzDbEx | ||||
tDByJ3KxMxIKxQyo1Rpi+hkA21GNL/rgqzWljlOts4EpJqdZPC9J8rbYxeRo | ||||
Tat0A9gutu+KfOXcVjCDSVs88ZibwTF8asw+9Cz3vm/1xpnetH8myI+bgLDO | ||||
QGGNhV+2zl0mH/1yRUBcXNJND4aLl8llV/BSX/9JnkusUfdPxecshnvUX5SZ | ||||
ofA61mRN/ruvz8s1VGIFV7tWVwxKJgOJHGTvW1d461Gxz7BQSQ03uiUGcVKk | ||||
Jit3r5UQyUd0PAkjPA8cHatqp0vDPYhuAutmQCUV1wxu3ZVvt6HXJ7j5P+3j | ||||
neF6Xs0yo7SxspH2d4SBGvy0cuNZ1pWrVfiLnWbh0fo9hhkC6FLUDcfzre9Q | ||||
u2QrCA8I/y5P/+XhX1gA/eWLvwSTnbp4UPPXle8iS7vig4gMxg4cgEIWwaCi | ||||
JHJGcy2ugJ/i1UaTXrDitwKWPPjmeCTCVVu4L8yEQXRa8udKVKQYyu6KvHsP | ||||
xHqK0vussiXGOOqetNQMBOmhTzoroMZE6DQMTumvkxhxO07cYscQjTafF1pg | ||||
G2KEuEcp0J7FwCfri7MHItB7u/OalwaqaQrOapIihLtHYbWRo8b7JxwDu5Tb | ||||
Use214tZu1b6j5p1XcRWkELHhs0kxQRfPrDfaFzDHzpc+UboFiU/MrgypxXe | ||||
uam2+56/T4whRS2IQGDH9TnjBA24MDAfguhp3aUXWWa9GjNIlxvX12s+pt1K | ||||
l2xl8QL9CWz6stdPslvLFa4HNQsD+t3yOfGcgBi0yn57lPpP6jZzigk+DcIW | ||||
sQmmgOSRH0ZqoTZMCFIeh7U07RvFWHnqAiiFh/J/bFaUA5Uq7iOg+QMbnAee | ||||
umXJs2BO7eX1xzDoHOqvS5hx4jKf4MxFljO7v4kzF1nO7P4Gzlyc4MzuYzhz | ||||
cZIzu4/mzDG3kGYCuaMPsDge0Y4aiVgdb29Ie6QvUtVVcGwd9itKYR2kqN5S | ||||
mQdyj6LT2l2CD98CMFCjDbXtRqkVuAccFo7fwtp3gCIv1SjxLjvGLaAO5Mw9 | ||||
MmBvB+9RJJMixWvLXSJZuma9raiZDC1PLz1nlUdtRXWWm2pFkMAqEFBPnKMV | ||||
4hvRv6Wsc21MEbNu+5I+lIFS/51yVc3b9dpnnsTsMCqzsO3JmaNq9CRMmE4G | ||||
3ufC+9olPMedMztQITF8tDwut5XnxKwAIF6NtnLhF+IwZknOPS977nFtQqyx | ||||
Q5tr2zTZAP02El7nsPcWL4FQPqoAenESWDFNS9IWoD4nwOYM6aDbrd6/WWGv | ||||
ArdiwLWPOgRYXML2EqMb0ZhuF/hcLya2TgH7q3e2ttLUrMoyBFMFJ4eqvdNQ | ||||
aWwrn6yeCFi1cVqRYxfZptzvuUOV77qsyHdmZ4IN4/eHTA2PoZjYRyFRyCP5 | ||||
KIoG5kD4ug+SzBQ28e2MW+y0gfkzmpsTeIgg2gj+/Knl2qMW2LCI1H02SaJW | ||||
b9ueYZblynBC17UCIrrAaGUf1IgDnaEkp9rWuxn1Fd65kdFxLKLiRG8efJKa | ||||
kNQcv9dEBNnDgPCKn0qXtRn2iMiK5NQ+umjzTtLQbUI6KeVUNRE2tjTLihs4 | ||||
aX/b0M9IyJ+upOzDXHO2pHcTWASgzUb9sQqjRrlQATL4JrQBqxfB+engsnw9 | ||||
TUx1mmrArc5LNfutSkbWiPqAElMeO/1SOODVy/Oz84tnL5/+G8UC6mpYz20B | ||||
EpxkpqmQp4fs+mD4Ex3GkoRSvtUYu+nthaAQ737PJr33knltlbqhYFIbnc1y | ||||
rKrzw9QJL3mKw+IUSUsbuBLZIjApVUUlwD8jUJ+MZn0O1D1/ukEcom2PlXrw | ||||
65J/RS8zKFe9LQvDCE1wBdaU6kzcYysyWT3wTrVWkVm5/tQJkCXl5ml/vusY | ||||
4JEbRHgc4nQbxrlyfGYjX6rvOJfpjxOw/fgAek5wbPs0uwSUQ2r8og/6FpGo | ||||
CVO94NqID8StjToJjLW2NF0+Q41BCgcMZ44lmzwTLTDUxeFNxfncgJHY3vCW | ||||
4EZgnvaleFtB3O5N5ph1NNCxo1O8EIro+YZGiVSwemT4jvIPRjMaATrRBkxk | ||||
KSbOy1A/+glcfslmGwU1VM/ScotVuzxIrEITv7KpcLZbh7f7olSaW5suAAUP | ||||
rPqGd43z+KgTjxPfcQJuhNUCe7EcJrGxpAEZ7q3Mz1EwzkM4IYXyyxC2qufT | ||||
TzTT+VwTR/HFSWhtAjsEH/IlgXIpMUOjoFO3rZYUUotiAaxT1NoeApVnDkID | ||||
uYG1jyEnq615MXWmYTP00ll/6olOC0XSWqSIGvD6vF+XyK8oqNmiStVn49g7 | ||||
wqffaQYVNuegYBTzUunvgKBrsOHvPtm0ZYd39kOmX6XPyBvVF9jcJ1UMuZHf | ||||
csPZJY5CpASRRw/LzW8ymd00m8rDMqJvSVfhV3V51DJQX66jTCtqkRWqu+O/ | ||||
27IeEux4A6x46hNbBXWPDTqTqJMJKg2E81Xd6DSxfWXWcuSE46SfbFQ8FUAo | ||||
IwgVtko7xnmGhVK/SbRxl9H+aBtxYncYNS8PTHKpvhOnEoNNiHVWq9CdAVia | ||||
JHBRKhMu6G1V7WmDydeSQMCUEvOrdsHrhB1X65Z2iTbcB7LiOY+xjtcavyKe | ||||
G6RNH5UwSc5zvBJ0jsBepl0CfdYQG6yqPDluuKO32Jy2wLpxz4ONgWemhIW+ | ||||
neMLYKr39I44Vi4W92Jrz+eX8p9nHJi3sfw4ZM72IJ+qpCPy+ljONoXHTdpp | ||||
7mccjQjwmrX0cXMGUVrVKm9RfkozQ/Knojl22noIVJwrHr85DLUNrYNhF0Pf | ||||
KasDWtHdUdUrLolxWWk6kTp6lyz9GTkMyrEqNCUQkEcRT+FGfKP5Kki3ZO/7 | ||||
cxOZkxuSccLrZUVZbMG+Vebj0kEyYL9v8Iy8xz2UUUjiRgQZb3EffZrTTFRs | ||||
YGS0PGOwSTIWro40kbMnL5+MtZC6bMqRBrLBxqgtP1Fy4BGxv0GqXsJwONiT | ||||
JfZ8gYvBDoOeTV1O39WbTh15yTgum7fFsw7U3e9r0MbQX3i+bIeh+A5IBD5+ | ||||
S1Gji3a3Q8F22B5n7ummg91r97gLr2EV+IU/VM2PJSju8PDmBgj151nxAum1 | ||||
Aeu93dEY5wP11P7XcruqfmZ8VgoNescmzk5EfyRK/yz5m38EbWev7bmOtKco | ||||
V/3zDN8g4QDdr4X7/5LUI4939AAA | ||||
</rfc> | </rfc> | |||
End of changes. 180 change blocks. | ||||
897 lines changed or deleted | 364 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |