<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="/rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.1) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc docmapping="yes"?>
<?rfc comments="yes"?>

<rfc ipr="none" docName="draft-jfinkhaeuser-caprock-auth-scheme-00" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="CAProck Distributed Authorization Scheme">CAProck Distributed Authorization Scheme</title>

    <author initials="J." surname="Finkhaeuser" fullname="Jens Finkhäuser" asciiFullname="Jens Finkhaeuser">
      <organization abbrev="Interpeer">Interpeer gUG (haftungsbeschraenkt)</organization>
      <address>
        <email>ietf@interpeer.io</email>
        <uri>https://interpeer.io/</uri>
      </address>
    </author>

    <date year="2023" month="June" day="14"/>

    
    <workgroup>The Interpeer Project</workgroup>
    <keyword>capabilities</keyword> <keyword>authorization</keyword> <keyword>authentication</keyword> <keyword>power of attorney</keyword> <keyword>cryptography</keyword> <keyword>remote attestation</keyword>

    <abstract>


<?line 87?>

<t>CAProck is a distributed authorization scheme based on cryptographic capabilities
<xref target="I-D.draft-jfinkhaeuser-caps-for-distributed-auth"/>. This document describes
the schemes additional constraints over the base document, and introduces a
method for dealing with revocation of authorization. The result is a complete
distributed authorization scheme.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://specs.interpeer.org/draft-jfinkhaeuser-caprock-auth-scheme"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-jfinkhaeuser-caprock-auth-scheme/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        The Interpeer Project Working Group mailing list (<eref target="mailto:interpeer@lists.interpeer.org"/>),
        which is archived at <eref target="https://lists.interpeer.org/archives/list/interpeer@lists.interpeer.org/"/>.
        Working Group information can be found at <eref target="https://interpeer.org/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://codeberg.org/interpeer/draft-jfinkhaeuser-caprock-auth-scheme"/>.</t>
    </note>


  </front>

  <middle>


<?line 95?>

<section anchor="sec:intro"><name>Introduction</name>

<t>CAProck addresses distributed authorization by providing a framework for
applications to define and verify their own privilege schemes via cryptographic
capabilities.</t>

<t>Capabilities in essence provide cryptographic verification for an authorization
tuple, and thus confirm a relationship between a subject, a prilege, and an
optional object. The privilege itself is an opaque piece of information for this
scheme; it only has application defined meaning.</t>

<t>As such, CAProck can be viewed as a kind of envelope for distributed
authorization schemes. To do this, however, this document needs to define some
constraints for identifiers used in this scheme.</t>

<t>Not in scope of this document are wire encodings (serialization formats) for
capabilities. This is because different applications may have differing
requirements, making one kind of encoding more suitable than the other.</t>

</section>
<section anchor="sec:intro-conventions"><name>Conventions and Definitions</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

<t>Where applicable, this document uses plural pronouns according to inclusive
language guidelines from <xref target="IPARCH.NIST.IR.8366"/>.</t>

<!-- Common macros -->

<section anchor="sec:terms"><name>Terminology</name>

<t>Most terminology is taken from <xref section="2" sectionFormat="comma" target="I-D.draft-jfinkhaeuser-caps-for-distributed-auth"/>,
in which elements of a cryptographic, distributed authorization scheme are
listed. Below are alternative names for some of those elements as used in
CAProck.</t>

<dl>
  <dt>Claim:</dt>
  <dd>
    <t>In CAProck, authorization tuples are called a <em>claim</em>, because by presenting
them, a claim is made about the relationship of its elements. The tuple consists
of a subject identifier, a predicate, and an object identifier. <iref item="claim" primary="true"/></t>
  </dd>
  <dt>Predicate:</dt>
  <dd>
    <t>Where the overview draft above speaks about <em>privileges</em>, CAProck uses the
more general <em>predicate</em> term. This is terminology from <xref target="RDF"/> to indicate
that a predicate can itself be arbitrarily complex, though for authorization
purposes must describe some permission relationship. <iref item="predicate" primary="true"/></t>
  </dd>
  <dt>Issuer:</dt>
  <dd>
    <t>The grantee role described in the more general document is called the issuer
in CAProck, for consistency with terminology from <xref target="X.509"/>. <iref item="issuer" primary="true"/></t>
  </dd>
</dl>

<t>Furthermore, CAProck defines the following terms:</t>

<dl>
  <dt>Token:</dt>
  <dd>
    <t>A token is a serialized capability, as passed over the network. Specific
serialization formats are out of scope for this document, but two tokens
serialized in different formats but with identical contents <bcp14>MUST</bcp14> be considered
equivalent. <iref item="token" primary="true"/></t>
  </dd>
  <dt>Grant:</dt>
  <dd>
    <t>A grant is a token that makes claims about granting some permissions.
<iref item="grant" primary="true"/></t>
  </dd>
  <dt>Revocation:</dt>
  <dd>
    <t>Conversely, a revocation makes claims about revoking some permissions.
<iref item="revocation" primary="true"/></t>
  </dd>
</dl>

</section>
<section anchor="sec:use-case"><name>Use Case</name>

<t>CAProck was designed with a 0-RTT handshake in mind that establishes
authorization for some resource. This scenario is adequately described in
<xref target="I-D.draft-jfinkhaeuser-caps-for-distributed-auth"/>.</t>

<t>Suffice to add that a 0-RTT handshake over IP requires that authentication
information as well as a caprock token be transmitted in a single packet.
That in turn requires the data to be transmitted, and the encoding used on
the wire, to be as sparse as feasible.</t>

<t>Where possible, CAProck uses compact data representations for this reason.
However, as wire encodings are not in scope for this document, this is mostly
discussed in the abstract.</t>

<t>Furthermore, CAProck is designed with a fully distributed system in mind. The
basic assumption is that an issuer of a capability cannot be used at the time
the capability is to be verified.</t>

</section>
</section>
<section anchor="sec:caprock"><name>CAProck</name>

<t>The basic functionality of CAProck is to provide a cryptographic signature over
a number of claims <iref item="claims"/> with the intent that it can be verified at a
later date, when actions based on those claims are to be performed.</t>

<t>This temporal decouping between the time of signature and time of verification
represents both the greatest strength and weakness of capability based schemes,
as it raises the question for what time period these claims are to be
considered valid. Rare is the case where a privilege should be granted to a
subject for perpetuity, but choose the time period too small, and a claim may
not be usable.</t>

<t>Furthermore, this temporal decoupling introduces the issue of what should
happen when a privilege is granted and the associated capability transmitted,
but subsequently trust in the subject is lost. This loss of trust should
ideally be known to the party that is supposed to execute an action on behalf
of the subject.</t>

<t>The typical approach is to verify via some real-time blocklist query. However,
the design goals for CAProck prohibit such an approach. Note, however, that
systems using CAProck may still employ this method. The requirement is included
to drive the design to broader applicability also in situations where real-time
queries are infeasible.</t>

<t>To these ends, CAProck defines additional metadata beyond that described in
<xref target="I-D.draft-jfinkhaeuser-caps-for-distributed-auth"/>, namely:</t>

<t><list style="symbols">
  <t>A validity timespan (scope)</t>
  <t>An expiry policy</t>
  <t>Grant as well as revocation markers</t>
</list></t>

<t>Furthermore, this document defines a conflict resolution scheme for resolving
multiple capabilities.</t>

<section anchor="sec:caprock-identifiers"><name>Identifiers</name>

<t>Generally speaking, a capability based distributed authorization scheme is
agnostic to the specific contents of identifiers used for the capability
issuer, subject and object. However, such a scheme requires that issuer and
subject identifiers can be uniquely mapped to public keys.</t>

<t>The issuer public key is required to verify the capability signature. At the
same time, accepting and executing an action requires that the capability
subject is authenticated, which typically involves use of its public key as
well.</t>

<t>The space saving concerns suggest that full public keys should only be used
in authentication, while shorter identifiers derived from these keys are
sufficient for use in capabilities. To that end, CAProck defines two kinds
of identifiers for issuers and subjects:</t>

<dl>
  <dt>SHA-3 Identifiers:</dt>
  <dd>
    <t>Identifiers may be SHA-3 hashes (<xref target="NIST.FIPS.202"/>) over DER encoded
(<xref target="X.690"/>) public keys.</t>
  </dd>
  <dt>Raw Identifiers:</dt>
  <dd>
    <t>If the key scheme supports it, identifiers may also be raw public keys.
This identifier <bcp14>MUST NOT</bcp14> be chosen if it is longer than the longest
identifier generated under the SHA-3 scheme for the same key, but <bcp14>SHOULD</bcp14>
be used if the result is shorter than the SHA-3 scheme produces.</t>
  </dd>
</dl>

<texttable title="Identifier Schemes">
      <ttcol align='left'>Algorithm</ttcol>
      <ttcol align='left'>Identifier</ttcol>
      <ttcol align='left'>Preferred Scheme</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>PureEdDSA for curve25519</c>
      <c><spanx style="verb">ed25519</spanx></c>
      <c>raw</c>
      <c><xref target="RFC8410"/>, <xref target="RFC8032"/></c>
      <c>PureEdDSA for curve448</c>
      <c><spanx style="verb">ed448</spanx></c>
      <c>raw</c>
      <c><xref target="RFC8410"/>, <xref target="RFC8032"/></c>
      <c>DSA</c>
      <c><spanx style="verb">dsa</spanx></c>
      <c>SHA-3</c>
      <c><xref target="NIST.FIPS.186-4"/></c>
      <c>RSA</c>
      <c><spanx style="verb">rsa</spanx></c>
      <c>SHA-3</c>
      <c><xref target="NIST.FIPS.186-4"/></c>
      <c>ECDSA</c>
      <c><spanx style="verb">ecdsa</spanx></c>
      <c>SHA-3</c>
      <c><xref target="NIST.FIPS.186-4"/></c>
</texttable>

<section anchor="sec:caprock-identifiers-objects"><name>Object Identifiers</name>

<t>Unlike with issuer and subject identifiers, object identifiers do not require
mapping to public keys, though it may be in the application's interest to also
define object identifiers in this fashion.</t>

<t>CAProck places only a single constraint on object identifiers: that they have
the same length as issuer and subject identifiers. More specifically, object
identifers <bcp14>MUST</bcp14> be between 28 and 64 octets in length, and <bcp14>SHOULD</bcp14>
be one of the sizes yielded by either of the issuer and subject identifier
schemes.</t>

<t>In practice, this constraint suggests to use a default SHA-3 digest size for
identifiers of any kind, unless the use of EdDSA allows shorter issuer or
subject identifiers.</t>

</section>
<section anchor="sec:caprock-identifiers-group"><name>Group Identifiers</name>

<t>As CAProck does not define much about identifiers, it is also agnostic as to
whether any identifier refers to an individual or group. Such definitions are
part of the application concern.</t>

<t>Note, however, that as subject and issuer identifiers must be mappable to a
public key, the use of groups with a CAProck based scheme essentially becomes
a public key management problem.</t>

</section>
</section>
<section anchor="sec:caprock-predicates"><name>Predicates</name>

<t>Predicate formats are outside of the scope of this document. This is to permit
maximum flexibility for the application concern.</t>

<t>However, arbitrary length predicates are in conflict with the space saving
requirements, while short predicates may limit the application in how to apply
them.</t>

<t>CAProck takes a compromise approach here: predicates <bcp14>MUST NOT</bcp14> be larger than
2^16 = 65,536 octets. This limit is far too generous for
0-RTT handshakes, so predicates <bcp14>SHOULD</bcp14> be limited to significantly shorter
lengths, such that an entire capability fits comfortably into an IP packet
with authentication information.</t>

</section>
<section anchor="sec:caprock-claims"><name>Claims</name>

<t>CAProck's capabilities require that one or more claims are provided to create
them, i.e. tuples of subject identifier and predicate, and an optional object
identifier.</t>

<t>Note that a claim that includes an object identifier has a signficantly
different semantic from one that does not.</t>

<t><list style="numbers" type="1">
  <t>Authorization tuples with an object identifier assert that the predicate
describes the relationship between the given subject and object.</t>
  <t>Authorization tuples without an object assert that the predicate describes
an aspect of the subject itself.</t>
</list></t>

<section anchor="sec:caprock-claims-wildcards"><name>Wildcards</name>

<t>Furthermore, in CAProck each claim component may be a wildcard. As predicate
formats are outside of this document's scope, predicates may also <em>contain</em>
a wildcard, but the semantics of that must be defined with the predicate
scheme to use.</t>

<t>Wildcards make more general statements than a claim typically does, and due
to this genericity, implementations <bcp14>MUST</bcp14> take great care with their use.
Broadly speaking:</t>

<t><list style="numbers" type="1">
  <t>A wildcard subject states that the predicate applies to an object for
any subject. Such a statement may imply that authenticating a subject is
no longer of interest, i.e. grant public privileges.</t>
  <t>A wildcard predicate states that all relationships between the given subject
and object are affected. This may e.g. be used to revoke all privileges from
a subject.</t>
  <t>A wildcard object is not the same as omitting an object altogether; instead,
it states that the subject and predicate combination applies to all objects.
Note, though, that the issuer does not have authority over all possible
objects, so this is naturally limited to only those objects the issuer has
authority over.</t>
</list></t>

<t>Combinations of wildcard fields in a single claim may have sense within the
application's privilege scheme, but can also be increasingly confusing, and
thus prone to creating security flaws. For that reason, public privilege schemes
<bcp14>MUST</bcp14> document the semantics for every combination of wildcard elements they
support, and <bcp14>SHOULD</bcp14> limit such combinations to a minimum required amount. Other
combinations of wildcards <bcp14>SHOULD</bcp14> be rejected as invalid.</t>

</section>
</section>
<section anchor="sec:caprock-metadata"><name>Metadata</name>

<t>The most basic data encoded into a CAProck token is mostly described in
<xref target="I-D.draft-jfinkhaeuser-caps-for-distributed-auth"/> and consists of the
following fields:</t>

<t><list style="numbers" type="1">
  <t>An issuer identifier (also see <xref target="sec:caprock-identifiers"/>).</t>
  <t>One or more claims (<xref target="sec:caprock-claims"/>), each consisting of:
  <list style="numbers" type="1">
      <t>A subject identifier (<xref target="sec:caprock-identifiers"/>).</t>
      <t>A predicate (<xref target="sec:caprock-predicates"/>).</t>
      <t>An optional object identifier (<xref target="sec:caprock-identifiers-objects"/>).</t>
    </list></t>
  <t>A validity range (<xref target="sec:caprock-metadata-scope"/>).</t>
  <t>An expiry policy (<xref target="sec:caprock-metadata-exp-policy"/>).</t>
  <t>A signature by the issuer over a serialized version of the previous fields
(<xref target="sec:caprock-metadata-signature"/>).</t>
</list></t>

<t>Please note that the specific encoding or serialization format for the data
affected by the signature is not defined in this document; this is because
alternative encodings are possible. For this reason, documents specifying
such encodings <bcp14>MUST</bcp14> be clear on how this payload data is serialized, and
how the signature is added to the token.</t>

<section anchor="sec:caprock-metadata-scope"><name>Validity Range/Temporal Scope</name>

<t>The validty range or temporal scope for a token is defined by a tuple of
timestamps, much as in <xref target="X.509"/> certificates. In these certificates, the
validity range is defined by rather awkwardly named "not before" and
"not after" fields, CAProck prefers the "from" and "to" fields.</t>

<t>The "from" timestamp <bcp14>MUST</bcp14> be provided, while the "to" timestamp is optional.
Tokens without the "to" timestamp are valid in perpetuity, after the "from"
time has been reached.</t>

<t>The range from "from" to "to" is <em>inclusive</em>, i.e. the token is valid
not before the "from" date, but both at and after the "from" timestamp.
The same logic applies to the "to" timestamp.</t>

<t>The wire encoding specifies how to represent these fields in the token.
However, implementations <bcp14>MUST</bcp14> accept the subset of ISO-8601 time stamp
formats as defined in <xref target="RFC3339"/> as input to either field, in order to
set consistent expectations with the user base.</t>

</section>
<section anchor="sec:caprock-metadata-exp-policy"><name>Expiry Policy</name>

<t>Distributed authorization in general and CAProck in particular are designed
for scenarios in which connectivity is not always given. This can mean that
having a access to a synchronized clock is impossible at the time of validation,
which would imply that evaluating the valdity range timestamps above is
impossible.</t>

<t>To mitigate this, tokens <bcp14>MAY</bcp14> contain an optional expiry policy field. This
field can take the symbolic values of <spanx style="verb">issuer</spanx> and <spanx style="verb">local</spanx>. If omitted, the
value <bcp14>MUST</bcp14> be assumed to be <spanx style="verb">issuer</spanx>. The semantics of each value are as
follows:</t>

<dl>
  <dt>Issuer:</dt>
  <dd>
    <t>If the expiry policy is set to <spanx style="verb">issuer</spanx>, then the valdity scope of the issuer
<bcp14>MUST</bcp14> be respected. An unsynchronize clock may lead to failures, but that is
the issuer's wish.</t>
  </dd>
  <dt>Local:</dt>
  <dd>
    <t>The verifier is permitted to apply local policies for failures. That is, a
CAProck system must now query the application whether to accept or reject a
token.</t>
  </dd>
</dl>

<t>Leaving the possibility to defer to the applications permits resolving clock
conflicts by means outside the ability of CAProck to influence. One such method
might be to simply ask the application user.</t>

<t>As this behaviour is a potential security risk, implementations <bcp14>MAY</bcp14> reject
tokens with <spanx style="verb">local</spanx> expiry policy outright.</t>

</section>
<section anchor="sec:caprock-metadata-signature"><name>Signature</name>

<t>Asymmetric signatures are made over hashes of content; the hash algorithm to
use depends on the key type used for signing.</t>

<t><list style="symbols">
  <t>The EdDSA algorithm defines what signature hash function to use in
<xref target="RFC8032"/>.</t>
  <t>The DSA algorithm requires the selection of a hashing algorithm.
Implementations <bcp14>MUST</bcp14> use one of the SHA-2 or SHA-3 family of hash functions
(see <xref target="NIST.FIPS.180-4"/>).</t>
  <t>The ECDSA algorithm likewise requires the selection of a hashing algorithm.
We also use SHA-2 or SHA-3 here. For ECDSA, <xref target="NIST.FIPS.180-4"/> specifies
that the hash length shall be no less than the ECDSA key bit length.</t>
  <t>The RSA algorithm also requires specification of a signature hash.
Implementations <bcp14>MUST</bcp14> select one of the SHA-3 family of hash functions
(see <xref target="NIST.FIPS.202"/>).</t>
</list></t>

<t>CAProck does not specify which digest sizes to use for SHA-2/SHA-3. However,
wire encodings may restrict the choices here further.</t>

</section>
</section>
<section anchor="sec:caprock-grants-revocations"><name>Grants and Revocations</name>

<t>Capabilities in CAProck either grant privileges or revoke them; these are called
grants or grant tokens and revocations or revocation tokens, respectively.
As each token contains one or more claims, the implication is that each token
either grants all of the claimed privilege or revokes all.</t>

<t>Other metadata (see <xref target="sec:caprock-metadata"/>) applies equally to the entire
set of claims. But individual tokens may contain differing metadata. If the
metadata differs, this can create a set a tokens that make conflicting claims.</t>

<t>Consider the following scenario:</t>

<t><list style="numbers" type="1">
  <t>Grant <spanx style="verb">G1</spanx> contains claims <spanx style="verb">C1</spanx> and <spanx style="verb">C2</spanx> for a period of <spanx style="verb">[S1,E1]</spanx> defined
by a start <spanx style="verb">S1</spanx> and end <spanx style="verb">E1</spanx> timestamp.</t>
  <t>Revocation <spanx style="verb">R1</spanx> revokes claim <spanx style="verb">C1</spanx> for a new, shorter time period <spanx style="verb">[S2,E2]</spanx>
where <spanx style="verb">S2 &gt; S1</spanx> and <spanx style="verb">E2 &lt; E1</spanx>.</t>
</list></t>

<t>In this simple scenario, whether <spanx style="verb">C1</spanx> is granted or revoked already depends on
whether one looks at time period <spanx style="verb">[S1,S2)</spanx>, <spanx style="verb">[S1,E2]</spanx> or <spanx style="verb">(E2,E1]</spanx> - or some
period before <spanx style="verb">S1</spanx> or after <spanx style="verb">E1</spanx>.</t>

<t>If the two tokens are examined in the order listed, that is all there is to it.
However, what should happen if the tokens arrive in reverse order? For this, we
need to define a conflict resolution algorithm
(<xref target="sec:caprock-conflict-resolution"/>).</t>

<t>Things only gain in complexity when more claims are processed, and revocations
are themselves further "revoked" by issuing another grant for a different time
period.</t>

<section anchor="sec:caprock-conflict-resolution"><name>Conflict Resolution</name>

<t>While privileges encoded in predicates are arbitrarily complex, whether a token
represents a grant or revocation is essentially a binary value. It is therefore
possible to view a set of grants and revocatons for a given claim as a bit
stream, in which only the latest bit has any significance. The question then is
how to bring order into this token set.</t>

<t>To this end, CAProck introduces a simple counter. This is represented by an
unsigned 64 bit integer value. The only requirement on the counter is that
tokens issued earlier have smaller values than tokens issued at a later date.
The counter value is scoped to the issuer that issues the token; therefore, no
synchronization of counters between issuers is required.</t>

<t>In order to query the validity of a claim, then, a time point must be provided,
and the following algorithm <bcp14>MUST</bcp14> be used:</t>

<t><list style="numbers" type="1">
  <t>Start with the state that the claim is invalid.</t>
  <t>Assume a token store containing only tokens with valid cryptographic
signatures.</t>
  <t>From the token store, pick all tokens pertaining to the claim being queried.
Note that this may include claims containing wildcards.</t>
  <t>Order the picked tokens by the counter value from lowest value to highest
value, essentially ordering by age of the token.</t>
  <t>Process each token in order, and compare it's validity range to the given
time point:
  <list style="numbers" type="1">
      <t>Discard tokens for which the time point does not lie in the validity
range.
      <list style="numbers" type="1">
          <t>If the token expiry policy is <spanx style="verb">local</spanx>, consult the local policy whether
to discard it. See section <xref target="sec:caprock-metadata-exp-policy"/> for
details.</t>
        </list></t>
      <t>If the time point lies in the validity range, set the current state to
valid for grants, and invalid for revocations.</t>
    </list></t>
  <t>When all tokens are processed, the current state is the final state of
processing. If that state is invalid, reject the claim.</t>
  <t>For valid end states, process the claim by application specified rules for
the predicate. The information contained here may still make the claim invalid,
but this is beyond the scope of CAProck.</t>
</list></t>

<t>Note that CAProck explicitly does not introduce timestamps for ordering tokens.
This is due to several considerations.</t>

<t>First, using a counter permits an implementation to update the value more
sparsely. Between issuing two tokens, a lot of time may pass, which would
increment a timestamp by a significant number. By contrast, a counter may use
the value space more efficiently by being incremented only by one each time.</t>

<t>Second, the extra information a timestamp imparts is not necessary for
deconflicting tokens. However, it is possible to infer information from it
that may best be hidden, namely when the token was issued. This permits for
analysis on the time periods an issuer was active, and may imply further
communications between the issuer and subject.</t>

<t>Finally, using timestamps introduces a hard dependency on a valid understanding
of the current time for validation. In early boot processes or handshakes for
reading a clock, such a dependency cannot necessarily be fulfilled.</t>

<section anchor="sec:caprock-conflict-state-compression"><name>State Compression</name>

<t>The above algorithm makes it possible to compress state. First, any expired
tokens can be discarded, as they are no longer consulted at all. They have the
same semantics as a revocation for the claim.</t>

<t>Furthermore, subsequent tokens that completely overrule a prior token make it
unnecessary to keep storing the prior token.</t>

<t>Implementations are not required to perform any state compression, and <bcp14>MAY</bcp14>
find additional means to compress state. However, such compressions <bcp14>MUST NOT</bcp14>
affect the results as would be achieved by the above algorithm.</t>

</section>
</section>
</section>
<section anchor="sec:caprock-confidentiality"><name>Confidentiality</name>

<t>All of the data fields described here are required for a party validating
a capability or a set thereof; therefore, CAProck cannot provide
confidentiality for this data itself.</t>

<t>However, individual permissions may well be in need of protection. If any
subject is issued a privilege, this should not be visibly to any party other
than the issuer, the verifier, and most likely the subject itself.</t>

<t>Implementations <bcp14>SHOULD</bcp14> therefore transport capability tokens in such a way
that confidentiality is preserved. This leaves room for potentially replacing
the cryptographic signature with an authenticated encryption method. Such a
scheme, however, should be considered an extension to CAProck and defined in
a separate document.</t>

</section>
<section anchor="sec:caprock-delegation"><name>Delegation</name>

<t>Delegation of authority comes in two distinct flavors in a distributed
authorization system. CAProck addreses the set of scenarios in which a
subject wishes to perform an action (on an object), and presents its
authorization to do so.</t>

<t>The other set of scenarios involves delegating the authority to grant
priveleges. This is not explicitly addressed in CAProck, though the following
may provide some guidance.</t>

<t>First, a predicate that states a subject may itself create subgrants is likely
more complex than predicates permitting other actions. At minimum, such a
predicate should provide limits on which subgrants may be issued; such limits
may include a list of permitted predicates, different time slots for the
subgranted privilege, and a limit on whether grants or revocations or both
may be issued. Effectively, such a predicate might contain the same information
as a CAProck token, or even more.</t>

<t>Second, a subgrant may also be issued to grant further subgrants. If this is
the case, there is likely need for bounding such subsubgrants to a certain
depth, otherwise it is likely that subjects receive grants that the original
issuer never intended to issue grants to.</t>

</section>
</section>
<section anchor="sec:considerations"><name>Related Considerations</name>

<section anchor="sec:human-rights-considerations"><name>Human Rights Considerations</name>

<t><xref target="I-D.draft-jfinkhaeuser-caps-for-distributed-auth"/> contains a list of
objectives derived from <xref target="RFC8280"/>, each with a statement on how these
concerns are addressed. This section lists any modifications or additions
to that list that is specific to CAProck.</t>

<section anchor="sec:hro-in-scope"><name>In Scope</name>

<dl>
  <dt>Content agnosticism:</dt>
  <dd>
    <t>Where the base document is entirely content agnostic, CAProck restricts
this to content agnosticism about predicates. Without such a restriction,
CAProck would not be able to add signficant semantics to the base document.</t>
  </dd>
  <dt>Localization:</dt>
  <dd>
    <t>This document refers to time in <xref target="RFC3339"/> timestamps in order to provide
timestamps unambiguous in any locale.</t>
  </dd>
</dl>

</section>
<section anchor="sec:hro-out-of-scope"><name>Out of Scope</name>

<dl>
  <dt>Confidentiality:</dt>
  <dd>
    <t>Confidentiality remains out of scope, but see
<xref target="sec:caprock-confidentiality"/> for some additional considerations.</t>
  </dd>
</dl>

</section>
</section>
<section anchor="sec:protocol-considerations"><name>Protocol Considerations</name>

<t>There are no additional protocol considerations for this document.</t>

</section>
<section anchor="sec:security-considerations"><name>Security Considerations</name>

<t>This document does not specify a network protocol. In fact, it deliberately
requires no specific protocol for transmitting capabilities. As such, much of
<xref target="BCP72"/> does not apply.</t>

<t>Similar to <xref target="sec:human-rights-considerations"/>, below we list changes to
the base document at <xref target="I-D.draft-jfinkhaeuser-caps-for-distributed-auth"/>.</t>

<section anchor="sec:security-considerations-confidentiality"><name>Confidentiality</name>

<t>As above, confidentiality is out of scope, but see <xref target="sec:caprock-confidentiality"/>.</t>

</section>
<section anchor="sec:security-considerations-message-deletion"><name>Message Deletion</name>

<t>Deletion of individual tokens in a ordered stream relating to the same claim
may result in the wrong verification state at the end of the algorithm
presented in <xref target="sec:caprock-conflict-resolution"/>. Mitigation against this
boils down to knowing that the full set of tokens has been communicated
that an issuer generated for a given claim.</t>

<t>It is possible to use CAProck in this fashion, but this document assumes
other uses are equally valid. To provide mitigation against message deletion,
follow the steps below:</t>

<t><list style="numbers" type="1">
  <t>Start issuer counters at some fixed value, e.g. 0, and strictly increment
the counter by one for each token issued.</t>
  <t>Only provide exactly one claim per token.</t>
  <t>Communicate the last counter issued as part of the token transmission.
Validate this by means out of scope for this document.</t>
</list></t>

<t>Given the above information, a recipient of a token set can be certain that they
know the full set of tokens, <em>at the point in time when the token set was sent</em>.
If the transmission of the token set is synchronous, this corresponds to the
point in time at which a claim is checked for validity.</t>

<t>However, these additional assumptions counter some of the gains for distributed
systems, to the point where a traditional, centralized authorization scheme may
be the better choice. It therefore depends strongly on the threat model and
application requirements whether to use centralized authorization, distributed
authorization, or a mixed model as outlined above.</t>

</section>
</section>
<section anchor="sec:IANA"><name>IANA Considerations</name>

<t>This document has no IANA actions.</t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="BCP72">
  <front>
    <title>Guidelines for Writing RFC Text on Security Considerations</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <author fullname="B. Korver" initials="B." surname="Korver"/>
    <date month="July" year="2003"/>
    <abstract>
      <t>All RFCs are required to have a Security Considerations section. Historically, such sections have been relatively weak. This document provides guidelines to RFC authors on how to write a good Security Considerations section. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="72"/>
  <seriesInfo name="RFC" value="3552"/>
  <seriesInfo name="DOI" value="10.17487/RFC3552"/>
</reference>
<reference anchor="NIST.FIPS.202">
  <front>
    <title>SHA-3 standard :: permutation-based hash and extendable-output functions</title>
    <author>
      <organization/>
    </author>
    <date year="2015"/>
  </front>
  <seriesInfo name="DOI" value="10.6028/nist.fips.202"/>
<refcontent>National Institute of Standards and Technology (U.S.)</refcontent></reference>
<reference anchor="NIST.FIPS.180-4">
  <front>
    <title>Secure hash standard</title>
    <author>
      <organization/>
    </author>
    <date year="2015"/>
  </front>
  <seriesInfo name="DOI" value="10.6028/nist.fips.180-4"/>
<refcontent>National Institute of Standards and Technology (U.S.)</refcontent></reference>
<reference anchor="NIST.FIPS.186-4">
  <front>
    <title>Digital signature standard (DSS)</title>
    <author>
      <organization/>
    </author>
    <date year="2013"/>
  </front>
  <seriesInfo name="DOI" value="10.6028/nist.fips.186-4"/>
<refcontent>National Institute of Standards and Technology (U.S.)</refcontent></reference>
<reference anchor="X.690">
  <front>
    <title>Information Technology - ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
    <author>
      <organization>International Telecommunications Union</organization>
    </author>
    <date year="1994"/>
  </front>
  <seriesInfo name="ITU-T" value="Recommendation X.690"/>
</reference>

<reference anchor="I-D.draft-jfinkhaeuser-caps-for-distributed-auth">
   <front>
      <title>Capabilities for Distributed Authorization</title>
      <author fullname="Jens Finkhäuser" initials="J." surname="Finkhäuser">
         <organization>Interpeer gUG (haftungsbeschraenkt)</organization>
      </author>
      <author fullname="Sergio Penna ISEP" initials="S. P." surname="ISEP">
         <organization>Instituto Superior de Engenharia do Porto</organization>
      </author>
      <date day="1" month="June" year="2023"/>
      <abstract>
	 <t>   Authorization is often the last remaining centralized function in a
   distributed system.  Advances in compute capabilities of miniaturized
   CPUs make alternative cryptographic approaches feasible that did not
   find such use when first envisioned.  This document describes the
   elements of such cryptographically backed distributed authorization
   schemes as a reference for implementations.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-jfinkhaeuser-caps-for-distributed-auth-01"/>
   
</reference>
<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="IPARCH.NIST.IR.8366" target="https://specs.interpeer.org/archive/NIST.IR.8366.pdf">
  <front>
    <title>Guidance for NIST staff on using inclusive language in documentary standards</title>
    <author fullname="Kathryn Miller" surname="Miller">
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <author fullname="David Alderman" surname="Alderman">
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <author fullname="Lisa Carnahan" surname="Carnahan">
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <author fullname="Lily Chen" surname="Chen">
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <author fullname="Jim Foti" surname="Foti">
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <author fullname="Barbara Goldstein" surname="Goldstein">
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <author fullname="Mike Hogan" surname="Hogan">
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <author fullname="Jennifer Marshall" surname="Marshall">
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <author fullname="Karen K Reczek" surname="Reczek">
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <author fullname="Nathalie Rioux" surname="Rioux">
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <author fullname="Mary F Theofanos" surname="Theofanos">
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <author fullname="David Wollman" surname="Wollman">
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <author>
      <organization>National Institute of Standards and Technology (U.S.)</organization>
      <address>
        <postal>
          <country>US</country>
          <city>Gaithersburg</city>
        </postal>
      </address>
    </author>
    <date day="29" month="April" year="2021"/>
    <abstract>
      <t>This document provides guidance to NIST staff regarding the use of inclusive language in documentary standards and documents which support the realization and dissemination of physical standards; Standards Developing Organizations' (SDOs) policies and procedures; and standards development participation. The document is intended to be used as guidance by NIST standards participants seeking to be impactful in addressing these issues.</t>
    </abstract>
  </front>
  <seriesInfo name="NIST IR (Interagency/Internal Reports)" value="8366"/>
  <seriesInfo name="DOI" value="10.6028/NIST.IR.8366"/>
  <annotation>
    Archived copy; this document has been withdrawn by NIST due to
    <eref target="https://www.federalregister.gov/d/2025-01953">Executive Order (E.O.) 14151</eref>
    of the President of the United States of America.
  </annotation>
</reference>
<reference anchor="RFC8410">
  <front>
    <title>Algorithm Identifiers for Ed25519, Ed448, X25519, and X448 for Use in the Internet X.509 Public Key Infrastructure</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <author fullname="J. Schaad" initials="J." surname="Schaad"/>
    <date month="August" year="2018"/>
    <abstract>
      <t>This document specifies algorithm identifiers and ASN.1 encoding formats for elliptic curve constructs using the curve25519 and curve448 curves. The signature algorithms covered are Ed25519 and Ed448. The key agreement algorithms covered are X25519 and X448. The encoding for public key, private key, and Edwards-curve Digital Signature Algorithm (EdDSA) structures is provided.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8410"/>
  <seriesInfo name="DOI" value="10.17487/RFC8410"/>
</reference>
<reference anchor="RFC8032">
  <front>
    <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
    <date month="January" year="2017"/>
    <abstract>
      <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8032"/>
  <seriesInfo name="DOI" value="10.17487/RFC8032"/>
</reference>
<reference anchor="RFC3339">
  <front>
    <title>Date and Time on the Internet: Timestamps</title>
    <author fullname="G. Klyne" initials="G." surname="Klyne"/>
    <author fullname="C. Newman" initials="C." surname="Newman"/>
    <date month="July" year="2002"/>
    <abstract>
      <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3339"/>
  <seriesInfo name="DOI" value="10.17487/RFC3339"/>
</reference>
<reference anchor="RFC8280">
  <front>
    <title>Research into Human Rights Protocol Considerations</title>
    <author fullname="N. ten Oever" initials="N." surname="ten Oever"/>
    <author fullname="C. Cath" initials="C." surname="Cath"/>
    <date month="October" year="2017"/>
    <abstract>
      <t>This document aims to propose guidelines for human rights considerations, similar to the work done on the guidelines for privacy considerations (RFC 6973). The other parts of this document explain the background of the guidelines and how they were developed.</t>
      <t>This document is the first milestone in a longer-term research effort. It has been reviewed by the Human Rights Protocol Considerations (HRPC) Research Group and also by individuals from outside the research group.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8280"/>
  <seriesInfo name="DOI" value="10.17487/RFC8280"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">




<reference anchor="I-D.draft-knodel-terminology-10">
   <front>
      <title>Terminology, Power, and Inclusive Language in Internet-Drafts and RFCs</title>
      <author fullname="Mallory Knodel" initials="M." surname="Knodel">
         <organization>Center for Democracy &amp; Technology</organization>
      </author>
      <author fullname="Niels ten Oever" initials="N." surname="ten Oever">
         <organization>University of Amsterdam</organization>
      </author>
      <date day="11" month="July" year="2022"/>
      <abstract>
	 <t>   This document argues for more inclusive language conventions
   sometimes used by RFC authors and the RFC Production Centre in
   Internet-Drafts that are work in progress, and in new RFCs that may
   be published in any of the RFC series, in order to foster greater
   knowledge transfer and improve diversity of participation in the
   IETF.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-knodel-terminology-10"/>
   
</reference>

<reference anchor="ISOC-FOUNDATION" target="https://www.isocfoundation.org/">
  <front>
    <title>Internet Society Foundation</title>
    <author >
      <organization>Internet Society Foundation</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


<reference anchor="X.509">
  <front>
    <title>Information technology - Open Systems Interconnection - The Directory:
Public-key and attribute certificate frameworks</title>
    <author>
      <organization>International Telecommunications Union</organization>
    </author>
    <date month="March" year="2000"/>
  </front>
  <seriesInfo name="ITU-T" value="Recommendation X.509"/>
  <seriesInfo name="ISO" value="Standard 9594-8"/>
</reference>

<reference anchor="RDF" target="https://www.w3.org/TR/rdf11-concepts/">
  <front>
    <title>RDF 1.1 Concepts and Abstract Syntax</title>
    <author >
      <organization>RDF Working Group of the World Wide Web Consortium (W3C)</organization>
    </author>
    <date year="2014" month="February" day="25"/>
  </front>
</reference>


    </references>

</references>


<?line 669?>

<section numbered="false" anchor="sec:ack"><name>Acknowledgments</name>

<t>Jens Finkhäuser's authorship of this document was performed as part of work
undertaken under a grant agreement with the Internet Society Foundation
<xref target="ISOC-FOUNDATION"/>.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA61963IbR5Lu/3qKGvqHJQUAiZSslWmPZ2lKsrVhWTqkvLZj
YmbZ6C4APWx0Y/pCCivrXfbHeZKzL7b5ZWZdGgDt8exRTIxJoLsqKysvX16q
OJ1OzSeffGI+sa/q3rW166fP22zR29dZe100t7V959abKuudwUMXrs7Wzvar
srOLsnJ20TZrW+CNad8UzXTbDC0emW7apm/yppqtC9s3dul62/VZ27tiRuPI
HDzWomnXWW9pwCMZ50s/xlfTL2+b9nrZNsOGfuaPaLijGZPysmltWZd9mVW2
c/2wmVh60TZ1tbW1czyrK8qeiKVJyrbr7bxq8mvbLOhXVxUdCHmDx4/6sq/c
Eb/W4b25s/kqq5eu+MIWrnK9s0fZfN66myNbLjBPa/kdkN2tmrbHWGf11jY0
W2vzhphZ9zbPaowFMlwxsfOh56Gz1i2GytZNj8nKum+bYsjpubZtWibrsgFn
mEp7W1YVXqNF2mzoG+JWmWcV0V0MbVkvZfWgi+beWhrcDrWSL6x63tSfEofr
vBoKWsn00aMjS9w7mmJfu57WVCuXKt5fUPBdNndVF76hTbL/wPboiEJER5sw
39JYGKFvmop5S2snDtEP+DQf2haMunFtVzb1F7QWIrBocox2hGmte5+RADpZ
yTsIXq8SiRk6e91mawjqtF3kp3bV95vu9OHDZdmvhvksb9YP82zePEyfonF+
JknB5rSORsod00J0lK0wQTfZboTYzBblgn4ApSKu4NA5szgwjgilPccqsDh6
Jl8F1pF835u9X1e8oJ9efzexrs9ns9l9LIq0z+RNQTt5aod+MX1mWLRO7dH5
2dsWEvu87Pq2JOkhhp4NPclb+Z8kBDTTZb5yxCgjwvm7XlEmn+q2/m1R1ter
zBFP22mebTDKlMRtNe34BRIakxPTl027PSWxWDSmG+brssOK++3G4cPCbRz9
X92bctPiAzIpG+daU9Cbp/bk0cnj6aOn0+MnhmxBXfxHVjU1fb51ndmUp2ZK
nMvp/ztSKOJ8hx+3a/2J6F1nmw2xiX6hfV3TNJ0lkXjz/A3t47q5ceFjY+ph
PXftqSGePDbyEP2H9LKjPRq6U9u3g7M//fQTayG25dOE/E/pWRLh7NSeXbw4
M0HMT0kAnVhKLMsSr//m8t5cuy09U5waS6Rlm2xeVmSYaFX0e5Zy338AWcvD
J5vmlgYju5T1fUM2eMvjtNtN3yzbbLPi37FEknl6hBRMXjUyNqY1lrhNy/q3
mX0ZN5I+JUNTyT7/G61cvvzv/6tfZl1eli8PPBFeb1qSyrjg5Q/f2Hsrkpeh
XnZzR6LRZq6+7u9jMJXB8DR9ptuTFQVpBDGFrBX93LqOWGMdPiIpcf3iX4Oo
zMqGviLDFnU5/e4hbS0rVHnjaN326/O3/3Jyai9enj/+7LMT+uD7V5fvZi9f
vb2ckbSd2udvXs2OH82ePjp59nD01ejR42ePpk/uepi/3Hn86a89/pQf/2n2
9PNHxI13P8x+op9mx59//sQYKE5C/qvp85no33XdkKeZ0krXZd1UzXI7PX7E
j1y+OZ++fPPD98/P3r168z0+stZbCO+0yWHkxMctecWhLlg6jvjBICH8j3fz
t18iP03+Om7A7e3trOyafBGem9FID3mRnz36XBdJPxFjyUxYe/H85ZhO+sAe
z47teVPnbkN6S9pvz+Zko7Kc6NjWffZe5vaW4vjJ9NHJ9OSzu1aBEX8kvYRI
fQPdhP7A3tKHVWF/LMnT/ejmmBHmpBzW9t6Pj8/v37nA28e8qHcXD9ticXw8
zZVUkjgznZLaKrXGeBtLrgieIRrakapbsZt2nsEP0u+JQpf52Ex8+PCHKAm7
lribkshMk3nYLH/8OBNvSHZxgNEjoNLl9AQNBzbI7B3UrQQ5hJJg/WgJJewm
WcuW2QXywhgT3pcASOhts3a0poItZOEy1uBb8q1kjm4asWBsuNKVz9hKkpIP
VS9MIru8AYoyv8WtmfB6XRZF5Yz5818X5fu1+8upffnqp9cvjMBUJo5f+vBJ
5/JTpvdj3Be1MET+3dPNt+Tcm5uyYJNEMJYMIMw8FmrIzVRqnhmyFI62xDFv
iG3lYgvOlWSxCR5v2vKGvP8ycvymzMZ7bdK9phWeJ78CYIFWkjUlyO0ICs+o
1PA2EGwZ+xRCf5WTrSPQ02GfCe+uaVmtq2QVq3JDELK/dY5etuS44bboFZAP
4uXtrDbNRoWl4UdkK+May75z1YI3lfZ9k/2dnOimdEQ8CUGwbUooogQjXPmC
3hRovsro3chf5S25B5fVtBfEnjOC1EO+mli/n4qib0p3i32EQJHaF5jS1Teu
ajZO5DPutjkkXB2thjazYcImdkVel5g7kWgmqFEIAnTXO4LiJlUdTFUCJdC2
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
AA==

-->

</rfc>

