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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc comments="yes"?>

<rfc docName="draft-birk-pep-03" category="std">

  <front>
    <title abbrev="pretty Easy privacy (pEp)">pretty Easy privacy (pEp): Privacy by Default</title>

    <author initials="H." surname="Marques" fullname="Hernani Marques">
      <organization>pEp Foundation</organization>
      <address>
        <postal>
          <street>Oberer Graben 4</street>
          <city>CH-8400 Winterthur</city>
          <country>Switzerland</country>
        </postal>
        <email>hernani.marques@pep.foundation</email>
        <uri>https://pep.foundation/</uri>
      </address>
    </author>
    <author initials="B." surname="Hoeneisen" fullname="Bernie Hoeneisen">
      <organization abbrev="Ucom.ch">Ucom Standards Track Solutions GmbH</organization>
      <address>
        <postal>
          <street></street>
          <city>CH-8046 Zuerich</city>
          <country>Switzerland</country>
        </postal>
        <phone>+41 44 500 52 44</phone>
        <email>bernie@ietf.hoeneisen.ch (bernhard.hoeneisen AT ucom.ch)</email>
        <uri>https://ucom.ch/</uri>
      </address>
    </author>

    <date year="2019" month="March" day="07"/>

    
    
    

    <abstract>


<t>The pretty Easy privacy (pEp) protocols describe a set of conventions for
the automation of operations traditionally seen as barriers to the 
use and deployment of secure end-to-end interpersonal messaging. These include,
but are not limited to, key management, key discovery, and private key handling 
(including peer-to-peer synchronization of private keys and other user data 
across devices). pEp also introduces means to verify communication peers and 
proposes a trust-rating system to denote secure types of communications and 
signal the privacy level available on a per-user and per-message level. 
Significantly, the pEp protocols build on already available security formats
and message transports (e.g., PGP/MIME), and are written with the intent to
be interoperable with already widely-deployed systems in order to facilitate
and ease adoption and implementation.
This document outlines the general design choices and principles of pEp.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>Secure and private communications are vital for many different
reasons, and there are particular properties that privacy-preserving
protocols need to fulfill in order to best serve users. In particular,
<xref target="RFC8280"/> has identified and documented important principles such as
data minimization, the end-to-end principle, and interoperability as
integral properties for access to the Internet for human rights
purposes.  While (partial) implementations of these concepts are
already available, today’s applications widely lack privacy support
that ordinary users can easily handle. The pretty Easy privacy (pEp)
protocols generally conform with the principles outlined in
<xref target="RFC8280"/> as a matter of course, and as such can be used to
facilitate the adoption and correct usage of secure and private
communications technology.</t>

<t>The pretty Easy privacy (pEp) protocols are propositions to the
Internet community to create software for peers to automatically
encrypt, anonymize (where possible), and verify their daily written
digital communications. This is achieved by building upon already
existing standards and tools and automating each step a user needs to 
carry out in order to engage in secure end-to-end encrypted
communications. Significantly, the pEp protocols describe how do to this 
without dependence on centralized infrastructures.</t>

<t>In particular, pEp proposes automatation of key management, key discovery
and synchronization of secret key material by an in-band
peer-to-peer approach.</t>

<t>To mitigate man-in-the-middle attacks (MITM) by an active adversary,
and as the only manual step users carry out in the course of the
protocols, the proposed Trustwords <xref target="I-D.birk-pep-trustwords"/>
mechanism uses natural language representations of two peers’
fingerprints for users to verify their trust in a paired communication
channel.</t>

<t>[[ Note: The pEp initiators learned from the CryptoParty movement, from
  which the project emerged, that while step-by-step guides can be helpful
  for some users to engage in secure end-to-end
  communications, for the vast majority of users, it is both more effective and
  more convenient to have these step-by-step procedures put into
  actual code (as such, following a protocol) and thus automating
  the initial configuration and whole usage of cryptographic tools.]]</t>

<t>The privacy-by-default principles that pEp introduces are in
accordance with the perspective outlined in <xref target="RFC7435"/>, aiming to provide
opportunistic security in the sense of “some protection most of the
time”. This is done, however, with the subtle but important difference 
that when privacy is weighed against security, the choice defaults to privacy. 
Therefore, data minimization is a primary goal in pEp (e.g., hiding subject 
lines and headers unnecessary for email transport inside the encrypted
payload of a message).</t>

<t>The pEp propositions are focused on (but not limited to) written
digital communications and cover asynchronous (offline) types of
communications like email as well as synchronous (online) types such
as chat.</t>

<t>pEp’s goal is to bridge different standardized and widely-used 
communications channels such that users can reach
communications partners in the most privacy-enhancing way possible.</t>

<section anchor="relationship-to-other-pep-documents" title="Relationship to other pEp documents">

<t>While this document describes the general concept of pEp, other
documents build on top of this. These documents define other parts of
the pEp environment as follows:</t>

<t><list style="numbers">
  <t>pEp enhanced applications (e.g., pEp Email <xref target="I-D.marques-pep-email"/>).</t>
  <t>Helper functions for interaction with peers (e.g., pEp Handshake
<xref target="I-D.marques-pep-handshake"/>) that assist the user with handling and
understanding cryptographic parts that he/she needs to be aware of.</t>
  <t>Helper functions for interactions between a user’s own devices
(e.g., pEp Key Sync <xref target="E-D.birk-pep-keysync"/>) that assist the user to
run pEp applications on different devices (such as computer, mobile
phone or tables) at the same time.</t>
</list></t>

<t>In addition, there are documents that do not directly depend on this
one, but provide generic functions needed in pEp, e.g., IANA Registration 
of Trustword Lists <xref target="I-D.birk-pep-trustwords"/>.</t>

<t>[[At this stage it is not yet clear to us how many of our
  implementation details should be part of new RFCs and at which
  places we can safely refer to already existing RFCs to make clear on
  which RFCs we already rely.]]</t>

</section>
</section>
<section anchor="terms" title="Terms">
<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”,
“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this
document are to be interpreted as described in <xref target="RFC2119"/>.</t>

<t><list style="symbols">
  <t>pEp Handshake: The process when Alice – e.g., in-person or via phone –
contacts Bob to verify Trustwords (or by fallback: fingerprints) is
called pEp Handshake. <xref target="I-D.marques-pep-handshake"/></t>
  <t>Trustwords: A scalar-to-word representation of 16-bit numbers (0 to
65535) to natural language words. When doing a Handshake, peers are
shown combined Trustwords of both public keys involved to ease the
comparison. <xref target="I-D.birk-pep-trustwords"/></t>
  <t>Trust on First Use (TOFU): cf. <xref target="RFC7435"/></t>
  <t>Man-in-the-middle attack (MITM): cf. <xref target="RFC4949"/></t>
</list></t>

</section>
<section anchor="protocols-core-design-principles" title="Protocol’s Core Design Principles">

<section anchor="privacy-by-default" title="Privacy by Default">

<t>The pEp protocols are to intended specifically to ensure privacy. 
There exist cases in the secure communications ecosystem,
however, where achieving privacy is in direct contradiction to security though. For instance,
in PGP’s Web of Trust, relations between people and trust levels are
exposed to the public. Additionally, the privacy of queries 
is not ensured in such a
model when obtaining keys from remote locations. Within the pEp protocols, when 
security and privacy goals are not in conflict, then the protocols are
designed to maximize both security and privacy.
However, where they contradict each other, privacy goals are chosen as the 
default over security considerations. However, in implementing these protocols, it is always the case that users SHOULD have the choice to override the 
default by corresponding options.</t>

<t>In pEp messaging (e.g., when using HTML) content SHALL NOT be obtained
from remote locations as this constitutes a privacy breach.</t>

</section>
<section anchor="data-minimization" title="Data Minimization">

<t>Another important design goal is data minimization, which includes
data spareness and hiding all technically concealable information when possible.</t>

</section>
<section anchor="interoperability" title="Interoperability">

<t>The pEp propositions seek to be interoperable with already-widespread 
message formats and cryptographic protocols and implementations. 
Seamless communication between users
of software which implements pEp and and users of other messaging tools for
end-to-end encryption is a design goal.</t>

<t>Therefore, pEp abides by the following guidelines:</t>

<t><list style="symbols">
  <t>pEp is conservative (strict) in requirements for pEp implementations and
how they interact with pEp or other (messaging) implementations.</t>
  <t>pEp is liberal in accepting input from non-pEp implementations
(e.g., it will not produce, but will support the decryption of, PGP/INLINE 
formats).</t>
  <t>Where pEp requires divergence from an RFC for privacy reasons (e.g.,
from OpenPGP propositions as defined in <xref target="RFC4880"/>, options SHOULD
be implemented to empower the user to override pEp’s defaults.</t>
</list></t>

</section>
<section anchor="peer-to-peer-p2p" title="Peer-to-Peer (P2P)">

<t>Messaging and verification processes in pEp are designed to work 
in a peer-to-peer (P2P) manner, without the involvement of intermediaries.</t>

<t>This means there MUST NOT be any pEp-specific central services
whatsoever needed for pEp implementations, both in the case of 
verification of peers and for the actual encryption.</t>

<t>However, implementers of pEp MAY provide options for interoperation with
providers of centralized infrastructures (e.g., to enable users to
communicate with their peers on platforms with vendor lock-in).</t>

<t>Trust provided by global Certificate Authorities (e.g., commercial
X.509 CAs) SHALL NOT be signaled as trustworthy
(cf. <xref target="I-D.marques-pep-rating"/>) to users of pEp (e.g., when
interoperating with peers using S/MIME) by default.</t>

</section>
<section anchor="user-experience-ux" title="User Experience (UX)">

<t>Implementers of pEp MUST take special care not to confuse users with
technical terms, especially those of cryptography (e.g., “keys”,
“certificates” or “fingerprints”), unless users explicitly ask for
such terms; i.e., advanced settings MAY be available, and in some cases
further options may even be required. However, those SHALL NOT be
unnecessarily exposed to users of pEp implementations at first
glance.</t>

<t>The authors believe widespread adoption of end-to-end cryptography is
much less of a problem if the users are not confronted with the need to 
understand cryptography; that is to say, a central goal of pEp 
of the pEp protocol is that users can just rely on the principles of 
Privacy by Default.</t>

<t>As a consequence, this means that users must not wait for cryptographic
tasks (e.g., key generation or public key retrieval) to finish before
being able to have their respective message clients ready to
communicate. The end result of this is that pEp implementers MUST ensure that 
the ability to draft, send and receive messages is always preserved –
even if that means a message is sent out unencrypted, thus being in
accordance with the Opportunistic Security approach outlined in
<xref target="RFC7435"/>.</t>

<t>In turn, pEp implementers MUST ensure that a discernible privacy status is clearly
visible to the user – on a per-contact as well as per-message level – so
that users easily understand which level of privacy messages are
about to be sent with or were received with, respectively.</t>

<t>[[Note: We are aware of the fact that usually UX requirements are
  not part of RFCs.  However, in order to encourage massive adoption of
  secure end-to-end encryption while at the same time avoiding putting
  users at risk, we believe certain straightforward
  signaling requirements for users to be a good idea, just as
  is currently done for already-popular instant messaging
  services.]]</t>

</section>
</section>
<section anchor="specific-elements-in-pep" title="Specific Elements in pEp">

<section anchor="pep-identity-system" title="pEp identity system">

<t>In pEp, users MUST have the ability to have multiple different identities.</t>

<t>pEp users MUST have the option to choose different identities. This
allows an Internet user to decide how to reveal himself/herself to the world
and is an important element in order to achieve privacy.</t>

<t>These different identities MUST NOT be externally correlatable with each other by
default. On the other hand, combining different identities when such information is known MUST be
supported (alias support).</t>

<!--
{::  include ../shared/ascii-arts/pep_id_system.mkd}

\[\[ TODO: Verify figure \[\]


## Terms

\[\[ TODO: Adjust Terms to figure, formulate more understandable,
     maybe leave out some details of data model that are specific to
     implementation. \[\]

-->

</section>
<section anchor="identifiers" title="Identifiers">

<section anchor="key" title="Key">

<t>A key is an OpenPGP-compatible asymmetric key pair. Other formats and
temporary symmetrical keys can be generated by Key Mapping.</t>

<t>Keys in pEp are identified by the full fingerprint (fpr) of the public key.</t>

</section>
<section anchor="user" title="User">

<!-- \[\[ TODO: user or person? KB: User. Person is an internal DB term. \]\] -->

<t>A user is a real world human being or a group of human beings. If it is a 
single human being, it can be called person.</t>

<t>A user is identified by a user ID (user_id). The user_id SHOULD be a UUID, it
MAY be an arbitrary unique string.</t>

<t>The own user can have a user_id like all other users. If it doesn’t, then it 
has PEP_OWN_USERID “pEp_own_userId” as user_id.</t>

<t>A user can have a default key. (cf. <xref target="key"/>)</t>

</section>
<section anchor="identity" title="Identity">

<t>An identity is a (possibly pseudonymous) representation of a user 
encapsulating how this user appears in the network.</t>

<t>An identity is defined by the mapping of user_id to address.
If no user_id is known, it is guessed by mapping of username and
address.</t>

<t>An identity can have a temporary user_id as a placeholder until a
real user_id is known.</t>

<t>An identity can have a default key. (cf. <xref target="key"/>)</t>

<t>[[ Note: This is the reason why in current pEp implementations for
     each (email) account a different key pair is created, which allows a
     user to retain different identities. ]]</t>

<t>In <xref target="pep-identity"/> you can find how a pEp identity is defined in
the reference implementation of the pEp Engine.</t>

</section>
<section anchor="address" title="Address">

<t>An address is a network address, e.g., an SMTP address or another URI.</t>

<t>[[ Note: It might be necessary to introduce further addressing schemes
  through IETF contributions or IANA registrations, e.g., implementing pEp
  to bridge to popular messaging services with no URIs defined. ]]</t>

</section>
</section>
<section anchor="example-difference-between-pep-and-openpgp" title="Example: Difference between pEp and OpenPGP">

<texttable>
      <ttcol align='left'>pEp</ttcol>
      <ttcol align='left'>OpenPGP</ttcol>
      <ttcol align='left'>Comments</ttcol>
      <c>user_id</c>
      <c>(no concept)</c>
      <c>ID for a person, i.e. a contact</c>
      <c>username + address</c>
      <c>uid</c>
      <c>comparable only for email</c>
      <c>fpr</c>
      <c>fingerprint</c>
      <c>used as key ID in pEp</c>
      <c>(no concept)</c>
      <c>Key ID</c>
      <c>does not exist in pEp</c>
</texttable>

<!--
## Formats

## Other specifics...
-->

</section>
</section>
<section anchor="key-management" title="Key Management">

<t>In order to achieve the goal of widespread adoption of secure
communications, key management in pEp MUST be automated.</t>

<section anchor="key-generation" title="Key Generation">

<t>A pEp implementation MUST ensure that cryptographic keys for every
identity configured are available. If a corresponding key pair for the
identity of a user is found and said identity fulfills the
requirements (e.g., for email, as set out in
<xref target="I-D.marques-pep-email"/>), said key pair MUST be reused. Otherwise a
new key pair MUST be generated. This may be carried out instantly upon
its configuration.</t>

<t>On devices with limited processing power (e.g., mobile devices) the key
generation may take more time than a user is willing to wait. If this
is the case, users SHOULD NOT be stopped from communicating, i.e., the
key generation process SHOULD be carried out in the background.</t>

</section>
<section anchor="private-keys" title="Private Keys">

<section anchor="storage" title="Storage">

<t>Private keys in pEp implementations MUST always be held on the end
user’s device(s): pEp implementers MUST NOT rely on private keys
stored in centralized remote locations. This applies even for key
storages where the private keys are protected with sufficiently long
passphrases. It is considered a violation of pEp’s P2P design
principle to rely on centralized infrastructures
(cf. <xref target="peer-to-peer-p2p"/>). This also applies for pEp implementations
created for applications not residing on a user’s device (e.g.,
web-based MUAs). In such cases, pEp implementations MUST be done in a
way such that the locally-held private key can neither be directly accessed 
nor leaked to the outside world.</t>

<t>[[ Note: It is particularly important that browser add-ons implementing pEp
  functionality do not obtain their cryptographic code from a
  centralized (cloud) service, as this must be considered a
  centralized attack vector allowing for backdoors, negatively
  impacting privacy. ]]</t>

<t>Cf. <xref target="private-key-synchronization"/> for a means to synchronize
private keys among different devices of the same network address in a 
secure manner.</t>

</section>
<section anchor="passphrase" title="Passphrase">

<t>Passphrases to protect a user’s private key MUST be supported by pEp
implementations, but MUST NOT be enforced by default. That is, if a
pEp implementation finds a suitable (i.e., secure enough) cryptographic
setup, which uses passphrases, pEp implementations MUST provide a way
to unlock the key. However, if a new key pair is generated for a given
identity, no passphrase MUST be put in place. The authors assume that
the enforcement of secure (i.e., unique and long enough) passphrases
would massively reduce the number of pEp users (by hassling them),
while providing little to no additional privacy for the common
cases of passive monitoring being carried out by corporations or
state-level actors.</t>

<!-- TODO: explain in more detail -->

</section>
<section anchor="private-key-export-import" title="Private Key Export / Import">

<t>A private key can be exported from one device for import onto
another device.  When pEp’s Key Sync (cf. <xref target="private-key-synchronization"/>) is 
not available or not desired to be used, this is largely a manual process.</t>

</section>
</section>
<section anchor="public-key-distribution" title="Public Key Distribution">

<t>As the key is available (cf. <xref target="public-key-distribution"/>) implementers
of pEp are REQUIRED to ensure that the identity’s public key is
attached to every outgoing message. However, this MAY be omitted if
the peer has previously received a message encrypted with the public key
of the sender.</t>

<t>The sender’s public key SHOULD be sent encrypted whenever possible,
i.e., when a public key of the receiving peer is available.
If no encryption key of the recipient is available, the sender’s
public key MAY be sent unencrypted. In either case, this approach
ensures that messaging clients (e.g., MUAs that at least implement
OpenPGP) do not need to have pEp implemented to see a user’s public
key. Such peers thus have the chance to (automatically) import the
sender’s public key.</t>

<t>If there is already a known public key from the sender of a message
and it is still valid and not expired, new keys MUST not be used for
future communication unless they are signed by the previous key (to
avoid a MITM attack). Messages MUST always be encrypted with the
receiving peer’s oldest public key, as long as it is valid and not
expired.</t>

<t>Implementers of pEp SHALL prevent the display of public keys attached to
messages (e.g, in email) to the user in order to prevent
user confusion by files they are potentially unaware of how to handle.</t>

<t>Metadata (e.g., email headers) MUST NOT be added to announce a user’s
public key. This is considered unnecessary information leakage as it
may affect user privacy, which depends also on a country’s data
retention laws. Furthermore, this affects interoperability to existing
users (e.g., in the OpenPGP field) that have no notion of such header
fields and thus lose the ability to import any such keys distributed
this way. It SHOULD, though, be supported to obtain other users’
public keys by extracting them from respective header fields of
received messages (in case such approaches get widespread).</t>

<t>Keyservers or generally intermediate approaches to obtain a peer’s
public key SHALL NOT be used by default. On the other hand, the user
MAY be provided with the option to opt-in for remote locations to
obtain keys, considering the widespread adoption of such approaches
for key distribution.</t>

<t>Keys generated or obtained by pEp clients MUST NOT be uploaded to any
(intermediate) keystore locations without the user’s explicit consent.</t>

</section>
<section anchor="key-reset" title="Key Reset">

<t>[[ TODO: This section will explain how to deal with keys no longer
valid, e.g. if leaked ]]</t>

</section>
</section>
<section anchor="trust-management" title="Trust Management">

<t>The following example roughly describes a pEp scenario with a typical
initial message flow to demonstrate key exchange and basic trust
management:</t>

<t><list style="numbers">
  <t>Alice – knowing nothing of Bob – sends a message to Bob. As Alice
has no public key from Bob, this message is sent out
unencrypted. However, Alice’s public key is automatically attached.</t>
  <t>Bob can just reply to Alice and – as he received her public key –
his messaging client is now able to encrypt the message. At this
point the rating for Alice changes to “encrypted” in Bob’s
messaging client, which (UX-wise) can be displayed using yellow
color (cf. <xref target="trust-rating"/>).</t>
  <t>Alice receives Bob’s key. As of now Alice is also able to send
secure messages to Bob. The rating for Bob changes to “encrypted”
(with yellow color) in Alice’s messaging client
(cf. <xref target="trust-rating"/>).</t>
  <t>If Alice and Bob want to prevent man-in-the-middle (MITM) attacks,
they can engage in a pEp Handshake comparing their so-called
Trustwords (cf. <xref target="handshake"/>) and confirm this process if those
match. After doing so, their identity rating changes to “encrypted
and authenticated” (cf. <xref target="trust-rating"/>), which (UX-wise) can be
displayed using a green color.</t>
</list></t>

<t>As color code changes for an identity, it is also applied to future
messages to/from this identity.</t>

<figure><artwork><![CDATA[
          -----                                       -----
          | A |                                       | B |
          -----                                       -----
            |                                           |
+------------------------+                 +------------------------+
| auto-generate key pair |                 | auto-generate key pair |
|    (if no key yet)     |                 |    (if no key yet)     |
+------------------------+                 +------------------------+
            |                                           |
+-----------------------+                   +-----------------------+
| Privacy Status for B: |                   | Privacy Status for A: |
|     *Unencrypted*     |                   |     *Unencrypted*     |
+-----------------------+                   +-----------------------+
            |                                           |
            |   A sends message to B (Public Key        |
            |   attached) / optionally signed, but      |
            |               NOT ENCRYPTED               |
            +------------------------------------------>|
            |                                           |
            |                               +-----------------------+
            |                               | Privacy Status for A: |
            |                               |      *Encrypted*      |
            |                               +-----------------------+
            |                                           |
            |      B sends message to A (Public Key     |
            |      attached) / signed and ENCRYPTED     |
            |<------------------------------------------+
            |                                           |
+-----------------------+                               |
| Privacy Status for B: |                               |
|      *Encrypted*      |                               |
+-----------------------+                               |
            |                                           |
            |   A and B sucessfully compare their       |
            |   Trustwords over an alternative channel  |
            |   (e.g., phone line)                      |
            |<-- -- -- -- -- -- -- -- -- -- -- -- -- -->|
            |                                           |
+-----------------------+                   +-----------------------+
| Privacy Status for B: |                   | Privacy Status for A: |
|       *Trusted*       |                   |       *Trusted*       |
+-----------------------+                   +-----------------------+
            |                                           |


]]></artwork></figure>

<section anchor="privacy-status" title="Privacy Status">

<t>For end-users, the most important component of pEp, which MUST be made
visible on a per-recipient and per-message level, is the Privacy
Status.</t>

<t>By colors, symbols and texts a user SHALL immediately understand how
private</t>

<t><list style="symbols">
  <t>a communication channel with a given peer was or ought to be and</t>
  <t>a given message was or ought to be.</t>
</list></t>

</section>
<section anchor="handshake" title="Handshake">

<t>To establishing trust between peers and to upgrade Privacy Status, pEp
defines a handshake, which is specified in
<xref target="I-D.marques-pep-handshake"/>.</t>

<t>In pEp, Trustwords <xref target="I-D.birk-pep-trustwords"/> are used for users to
compare the authenticity of peers in order to mitigate MITM attacks.</t>

<t>By default, Trustwords MUST be used to represent two peers’
fingerprints of their public keys in pEp implementations.</t>

<t>In order to retain compatibility with peers not using pEp
implementations (e.g., Mail User Agents (MUAs) with OpenPGP
implementations without Trustwords), it is REQUIRED that pEp
implementers give the user the choice to show both peers’ fingerprints
instead of just their common Trustwords.</t>

</section>
<section anchor="trust-rating" title="Trust Rating">

<t>pEp includes a Trust Rating system defining Rating and Color Codes to
express the Privacy Status of a peer or message
<xref target="I-D.marques-pep-rating"/>. The ratings are labeled, e.g., as “Unencrypted”,
“Encrypted”, “Trusted”, “Under Attack”, etc. The Privacy Status in
its most general form is expressed with traffic lights semantics (and
respective symbols and texts), whereas the three colors yellow, green
and red can be applied for any peer or message – like this
immediately indicating how secure and trustworthy (and thus private) a
communication was or ought to be considered.</t>

<!-- In cases no (special) Privacy Status can be inferred for peers or
messages, no color (or the gray color) MUST be shown and respective
texts -\- being "unknown" or "unreliable" -\- MUST be shown.  -->

<t>The pEp Trust Rating system with all its states and respective
representations to be followed is outlined in
<xref target="I-D.marques-pep-rating"/>.</t>

<t>Note: An example for the rating of communication types, the definition of
the data structure by the pEp Engine reference implementation
is provided in <xref target="pep-communication-type"/>.</t>

</section>
<section anchor="trust-revoke" title="Trust Revoke">

<t>[[ TODO: This section will explain how to deal with the situation
     when a peer can no longer be trusted, e.g., if a peer’s device is
     compromised. ]]</t>

</section>
</section>
<section anchor="synchronization" title="Synchronization">

<t>An important feature of pEp is to assist the user to run pEp applications
on different devices, such as computer, mobile phone or tables, at the
same time. Therefore state needs to be synchronized among the different
devices.</t>

<section anchor="private-key-synchronization" title="Private Key Synchronization">

<t>A decentralized proposition – the pEp Key Synchronization
protocol. <xref target="E-D.birk-pep-keysync"/> – defines how pEp users can distribute
their private keys among different devices in a secure and trusted
manner: this allows Internet users to read their messages across their
different devices, when sharing a common address (e.g., the same email
account).</t>

</section>
<section anchor="trust-synchronization" title="Trust Synchronization">

<t>[[ TODO: This section will explain how trust and other related state
is synchronized among different devices in a secure manner. ]]</t>

</section>
</section>
<section anchor="interoperability-1" title="Interoperability">

<t>pEp aims to be interoperable with existing applications designed to
enable privacy, e.g., OpenPGP and S/MIME in email.</t>

</section>
<section anchor="options-in-pep" title="Options in pEp">

<t>In this section a non-exhaustive selection of options is provided.</t>

<section anchor="option-passive-mode" title="Option “Passive Mode”">

<t>By default the sender attaches its public key to any outgoing message
(cf. <xref target="public-key-distribution"/>). For situations where a sender wants
to ensure that it only attaches a public key to an Internet user which
has a pEp implementation, a Passive Mode MUST be available.</t>

</section>
<section anchor="option-disable-protection" title="Option “Disable Protection”">

<t>Using this option, protection can be disabled generally or selectively.
Implementers of pEp MUST provide an option “Disable Protection” to
allow a user to disable encryption and signing for:</t>

<t><list style="numbers">
  <t>all communication</t>
  <t>specific contacts</t>
  <t>specific messages</t>
</list></t>

<t>The public key still attached, unless the option “Passive Mode”
(cf. <xref target="option-passive-mode"/>) is activated at the same time.</t>

</section>
<section anchor="option-extra-keys" title="Option “Extra Keys”">

<t>For internal environments there may be a need to centrally decrypt
persons’ messages for archiving or other legal purposes (e.g., in the
contexts of public offices and enterprises) by authorized personnel.
Therefore, pEp implementers MAY provide an “Extra Keys” option where a
message gets encrypted with at least one additional public key. The
corresponding secret key(s) are intended to be held (safely and
securely), e.g., by CISO staff or other authorized personnel for such an
organization.</t>

<t>The Extra Keys feature MUST NOT be activated by default for any
network address and is intended to be an option only for
organizational identities and their corresponding network addresses
and accounts – not for addresses used for private purposes. That is,
the Extra Keys feature is a feature which SHOULD NOT apply to all
identities a user might posses, even if activated.</t>

</section>
<section anchor="option-blacklist-keys" title="Option “Blacklist Keys”">

<t>An option “Blacklist Keys” MUST be provided for an advanced user to be
able to disable keys which the user does not want to be used anymore
for any new communications. However, the keys SHALL NOT be deleted. It
MUST still be possible to verify and decipher past communications.</t>

</section>
</section>
<section anchor="security-considerations" title="Security Considerations">

<t>By attaching the sender’s public key to outgoing messages, Trust on
First Use (TOFU) is established. However, this is prone to MITM
attacks.  Cryptographic key subversion is considered Pervasive
Monitoring (PM) according to <xref target="RFC7258"/>. Those attacks can be
mitigated, if the involved users compare their common Trustwords. This
possibility MUST be made easily accessible to pEp users in the user
interface implementation. If for compatibility reasons (e.g., with
OpenPGP users) no Trustwords can be used, then a comparatively easy way
to verify the respective public key fingerprints MUST be implemented.</t>

<t>As the use of passphrases for private keys is not advised, devices
themselves SHOULD use encryption.</t>

</section>
<section anchor="privacy-considerations" title="Privacy Considerations">

<t>[[ TODO ]]</t>

</section>
<section anchor="implementation-status" title="Implementation Status">

<section anchor="introduction-1" title="Introduction">

<t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of this
Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/>.
The description of implementations in this section is intended to
assist the IETF in its decision processes in progressing drafts to
RFCs. Please note that the listing of any individual implementation
here does not imply endorsement by the IETF. Furthermore, no effort
has been spent to verify the information presented here that was
supplied by IETF contributors.  This is not intended as, and must not
be construed to be, a catalog of available implementations or their
features. Readers are advised to note that other implementations may
exist.</t>

<t>According to <xref target="RFC7942"/>, “[…] this will allow reviewers and
working groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented protocols
more mature. It is up to the individual working groups to use this
information as they see fit.”</t>

</section>
<section anchor="current-software-implementing-pep" title="Current software implementing pEp">

<t>The following software implementing the pEp protocols (to varying
degrees) already exists:</t>

<t><list style="symbols">
  <t>pEp for Outlook as add-on for Microsoft Outlook, release <xref target="SRC.pepforoutlook"/></t>
  <t>pEp for Android (based on a fork of the K9 MUA), release <xref target="SRC.pepforandroid"/></t>
  <t>Enigmail/pEp as add-on for Mozilla Thunderbird, release <xref target="SRC.enigmailpep"/></t>
  <t>pEp for iOS (implemented in a new MUA), beta <xref target="SRC.pepforios"/></t>
</list></t>

<t>pEp for Android, iOS and Outlook are provided by pEp Security, a commercial
entity specializing in end-user software implementing pEp while Enigmail/pEp
is pursued as community project, supported by the pEp Foundation.</t>

<t>All software is available as Free Software and published also in source form.</t>

</section>
<section anchor="reference-implementation-of-peps-core" title="Reference implementation of pEp’s core">

<t>The pEp Foundation provides a reference implementation of pEp’s core
principles and functionalities, which go beyond the documentation
status of this Internet-Draft. <xref target="SRC.pepcore"/></t>

<t>pEp’s reference implementation is composed of pEp Engine and pEp
Adapters (or bindings), alongside with some libraries which pEp Engine
relies on to function on certain platforms (like a NetPGP fork we
maintain for the iOS platform).</t>

<t>The pEp engine is a Free Software library encapsulating
implementations of:</t>

<t><list style="symbols">
  <t>Key Management</t>
</list></t>

<t><list style='empty'>
  <t>Key Management in pEp engine is based on GnuPG key chains (NetPGP
  on iOS).  Keys are stored in an OpenPGP compatible format and
  can be used for different crypto implementations.</t>
</list></t>

<t><list style="symbols">
  <t>Trust Rating</t>
</list></t>

<t><list style='empty'>
  <t>pEp engine is sporting a two phase trust rating system. In phase
  one there is a rating based on channel, crypto and key security
  named “comm_types”. In phase 2 these are mapped to user
  representable values which have attached colors to present them
  in traffic light semantics.</t>
</list></t>

<t><list style="symbols">
  <t>Abstract Crypto API</t>
</list></t>

<t><list style='empty'>
  <t>The Abstract Crypto API is providing functions to encrypt and
  decrypt data or full messages without requiring an application
  programmer to understand the different formats and standards.</t>
</list></t>

<t><list style="symbols">
  <t>Message Transports</t>
</list></t>

<t><list style='empty'>
  <t>pEp engine will support a growing list of Message Transports to
  support any widespread text messaging system including email,
  SMS, XMPP and many more.</t>
</list></t>

<t>pEp engine is written in C99 programming language. It is not meant to be used in
application code directly. Instead, pEp engine is coming together with
a list of software adapters for a variety of programming languages and
development environments, which are:</t>

<t><list style="symbols">
  <t>pEp COM Server Adapter</t>
  <t>pEp JNI Adapter</t>
  <t>pEp JSON Adapter</t>
  <t>pEp ObjC (and Swift) Adapter</t>
  <t>pEp Python Adapter</t>
  <t>pEp Qt Adapter</t>
</list></t>

</section>
<section anchor="abstract-crypto-api-examples" title="Abstract Crypto API examples">

<t>A selection of code excerpts from the pEp Engine reference
implementation (encrypt message, decrypt message, and obtain
trustwords) can be found in <xref target="abstract-crypto-api-examples-1"/>.</t>

</section>
</section>
<section anchor="notes" title="Notes">

<t>The pEp logo and “pretty Easy privacy” are registered trademarks owned
by the non-profit pEp Foundation based in Switzerland.</t>

<t>Primarily, we want to ensure the following:</t>

<t><list style="symbols">
  <t>Software using the trademarks MUST be backdoor-free.</t>
  <t>Software using the trademarks MUST be accompanied by a serious (detailed) 
code audit carried out by a reputable third-party, for any proper release.</t>
</list></t>

<t>The pEp Foundation will help to support any community-run
(non-commercial) project with the latter, be it organizationally or
financially.</t>

<t>Through this, the foundation wants to make sure that software using
the pEp trademarks is as safe as possible from a security and privacy
point of view.</t>

</section>
<section anchor="acknowledgments" title="Acknowledgments">

<t>The authors would like to thank the following people who have provided
significant contributions to the development of this document:
Volker Birk, Krista Bennett, and S. Shelburn.</t>

<t>Furthermore, the authors would like to thank the following people who
who provided helpful comments and suggestions for this document:
Alexey Melnikov, Ben Campbell, Brian Trammell, Bron Gondwana, Daniel
Kahn Gillmor, Enrico Tomae, Eric Rescorla, Gabriele Lenzini,
Hans-Peter Dittler, Iraklis Symeonidis, Mirja Kuehlewind, Neal Walfield, 
Pete Resnick, Russ Housley, and Stephen Farrel.</t>

<t>This work was initially created by pEp Foundation, and then reviewed and
extended with funding by the Internet Society’s Beyond the Net Programme on
standardizing pEp. <xref target="ISOC.bnet"/></t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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="RFC4949" target='https://www.rfc-editor.org/info/rfc4949'>
<front>
<title>Internet Security Glossary, Version 2</title>
<author initials='R.' surname='Shirey' fullname='R. Shirey'><organization /></author>
<date year='2007' month='August' />
<abstract><t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='FYI' value='36'/>
<seriesInfo name='RFC' value='4949'/>
<seriesInfo name='DOI' value='10.17487/RFC4949'/>
</reference>



<reference  anchor="RFC7435" target='https://www.rfc-editor.org/info/rfc7435'>
<front>
<title>Opportunistic Security: Some Protection Most of the Time</title>
<author initials='V.' surname='Dukhovni' fullname='V. Dukhovni'><organization /></author>
<date year='2014' month='December' />
<abstract><t>This document defines the concept &quot;Opportunistic Security&quot; in the context of communications protocols.  Protocol designs based on Opportunistic Security use encryption even when authentication is not available, and use authentication when possible, thereby removing barriers to the widespread use of encryption on the Internet.</t></abstract>
</front>
<seriesInfo name='RFC' value='7435'/>
<seriesInfo name='DOI' value='10.17487/RFC7435'/>
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC4880" target='https://www.rfc-editor.org/info/rfc4880'>
<front>
<title>OpenPGP Message Format</title>
<author initials='J.' surname='Callas' fullname='J. Callas'><organization /></author>
<author initials='L.' surname='Donnerhacke' fullname='L. Donnerhacke'><organization /></author>
<author initials='H.' surname='Finney' fullname='H. Finney'><organization /></author>
<author initials='D.' surname='Shaw' fullname='D. Shaw'><organization /></author>
<author initials='R.' surname='Thayer' fullname='R. Thayer'><organization /></author>
<date year='2007' month='November' />
<abstract><t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format.  It is not a step-by-step cookbook for writing an application.  It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network.  It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t><t>OpenPGP software uses a combination of strong public-key and symmetric cryptography to provide security services for electronic communications and data storage.  These services include confidentiality, key management, authentication, and digital signatures.  This document specifies the message formats used in OpenPGP.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4880'/>
<seriesInfo name='DOI' value='10.17487/RFC4880'/>
</reference>



<reference  anchor="RFC7258" target='https://www.rfc-editor.org/info/rfc7258'>
<front>
<title>Pervasive Monitoring Is an Attack</title>
<author initials='S.' surname='Farrell' fullname='S. Farrell'><organization /></author>
<author initials='H.' surname='Tschofenig' fullname='H. Tschofenig'><organization /></author>
<date year='2014' month='May' />
<abstract><t>Pervasive monitoring is a technical attack that should be mitigated in the design of IETF protocols, where possible.</t></abstract>
</front>
<seriesInfo name='BCP' value='188'/>
<seriesInfo name='RFC' value='7258'/>
<seriesInfo name='DOI' value='10.17487/RFC7258'/>
</reference>



<reference  anchor="RFC7942" target='https://www.rfc-editor.org/info/rfc7942'>
<front>
<title>Improving Awareness of Running Code: The Implementation Status Section</title>
<author initials='Y.' surname='Sheffer' fullname='Y. Sheffer'><organization /></author>
<author initials='A.' surname='Farrel' fullname='A. Farrel'><organization /></author>
<date year='2016' month='July' />
<abstract><t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section.  This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t><t>This process is not mandatory.  Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications.  This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t></abstract>
</front>
<seriesInfo name='BCP' value='205'/>
<seriesInfo name='RFC' value='7942'/>
<seriesInfo name='DOI' value='10.17487/RFC7942'/>
</reference>



<reference  anchor="RFC8280" target='https://www.rfc-editor.org/info/rfc8280'>
<front>
<title>Research into Human Rights Protocol Considerations</title>
<author initials='N.' surname='ten Oever' fullname='N. ten Oever'><organization /></author>
<author initials='C.' surname='Cath' fullname='C. Cath'><organization /></author>
<date year='2017' month='October' />
<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>



<reference anchor="I-D.marques-pep-email">
<front>
<title>pretty Easy privacy (pEp): Email Formats and Protocols</title>

<author initials='H' surname='Marques' fullname='Hernani Marques'>
    <organization />
</author>

<date month='October' day='23' year='2018' />

<abstract><t>The pretty Easy privacy (pEp) propositions for email are based upon already existing email and encryption formats (i.e., PGP/MIME) and designed to allow for easy implementable and interoperable opportunistic encryption: this ranging from key distribution to mechanisms of subject encryption.  The goal of pEp for email is to automatize operations in order to make email encryption usable by a wider range of Internet users, to achieve wide application of confidentiality and privacy practices in the real world.  This document defines basic operations of pEp's approach towards email and two PGP/MIME formats (pEp Email Format 1 and 2) to provide certain security guarantees.  The proposed operations and formats are targeted to Opportunistic Security scenarios and are already implemented in several applications of pretty Easy privacy (pEp).</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-marques-pep-email-02' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-marques-pep-email-02.txt' />
</reference>



<reference anchor="I-D.birk-pep-trustwords">
<front>
<title>IANA Registration of Trustword Lists: Guide, Template and IANA Considerations</title>

<author initials='V' surname='Birk' fullname='Volker Birk'>
    <organization />
</author>

<author initials='H' surname='Marques' fullname='Hernani Marques'>
    <organization />
</author>

<author initials='B' surname='Hoeneisen' fullname='Bernie Hoeneisen'>
    <organization />
</author>

<date month='June' day='26' year='2018' />

<abstract><t>This document specifies the IANA Registration Guidelines for Trustwords, describes corresponding registration procedures, and provides a guideline for creating Trustword list specifications.  Trustwords are common words in a natural language (e.g., English) to which the hexadecimal strings are mapped to.  This makes verification processes (e.g., comparison of fingerprints), more practical and less prone to misunderstandings.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-birk-pep-trustwords-02' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-birk-pep-trustwords-02.txt' />
</reference>



<reference anchor="I-D.marques-pep-rating">
<front>
<title>pretty Easy privacy (pEp): Mapping of Privacy Rating</title>

<author initials='H' surname='Marques' fullname='Hernani Marques'>
    <organization />
</author>

<author initials='B' surname='Hoeneisen' fullname='Bernie Hoeneisen'>
    <organization />
</author>

<date month='July' day='2' year='2018' />

<abstract><t>In many Opportunistic Security scenarios end-to-end encryption is automatized for Internet users.  In addition, it is often required to provide the users with easy means to carry out authentication.  Depending on several factors, each communication channel to different peers may have a different Privacy Status, e.g., unencrypted, encrypted and encrypted as well as authenticated.  Even each message from/to a single peer may have a different Privacy Status.  To display the actual Privacy Status to the user, this document defines a Privacy Rating scheme and its mapping to a traffic-light semantics.  A Privacy Status is defined on a per-message basis as well as on a per-identity basis.  The traffic-light semantics (as color rating) allows for a clear and easily understandable presentation to the user in order to optimize the User Experience (UX).  This rating system is most beneficial to Opportunistic Security scenarios and is already implemented in several applications of pretty Easy privacy (pEp).</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-marques-pep-rating-00' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-marques-pep-rating-00.txt' />
</reference>



<reference anchor="I-D.marques-pep-handshake">
<front>
<title>pretty Easy privacy (pEp): Contact and Channel Authentication through Handshake</title>

<author initials='H' surname='Marques' fullname='Hernani Marques'>
    <organization />
</author>

<author initials='B' surname='Hoeneisen' fullname='Bernie Hoeneisen'>
    <organization />
</author>

<date month='October' day='23' year='2018' />

<abstract><t>In interpersonal messaging end-to-end encryption means for public key distribution and verification of its authenticity are needed; the latter to prevent man-in-the-middle (MITM) attacks.  This document proposes a new method to easily verify a public key is authentic by a Handshake process that allows users to easily authenticate their communication channel.  The new method is targeted to Opportunistic Security scenarios and is already implemented in several applications of pretty Easy privacy (pEp).</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-marques-pep-handshake-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-marques-pep-handshake-01.txt' />
</reference>


<reference anchor="SRC.pepcore" target="https://pep.foundation/dev/">
  <front>
    <title>Core source code and reference implementation of pEp (engine and adapters)</title>
    <author >
      <organization></organization>
    </author>
    <date year="2018" month="July"/>
  </front>
</reference>
<reference anchor="E-D.birk-pep-keysync" target="https://pep.foundation/dev/repos/internet-drafts/file/tip/pep-keysync/draft-birk-pep-keysync-NN.txt">
  <front>
    <title>pretty Easy privacy (pEp): Key Synchronization Protocol</title>
    <author initials="V." surname="Birk" fullname="Volker Birk">
      <organization></organization>
    </author>
    <author initials="H." surname="Marques" fullname="Hernani Marques">
      <organization></organization>
    </author>
    <date year="2018" month="June"/>
  </front>
<annotation>Early draft</annotation></reference>
<reference anchor="ISOC.bnet" target="https://www.internetsociety.org/blog/2017/06/12-innovative-projects-selected-for-beyond-the-net-funding/">
  <front>
    <title>Beyond the Net. 12 Innovative Projects Selected for Beyond the Net Funding. Implementing Privacy via Mass Encryption: Standardizing pretty Easy privacy’s protocols</title>
    <author initials="I." surname="Simao" fullname="Ilda Simao">
      <organization></organization>
    </author>
    <date year="2017" month="June"/>
  </front>
</reference>
<reference anchor="SRC.pepforandroid" target="https://pep-security.lu/gitlab/android/pep">
  <front>
    <title>Source code for pEp for Android</title>
    <author >
      <organization></organization>
    </author>
    <date year="2018" month="July"/>
  </front>
</reference>
<reference anchor="SRC.pepforios" target="https://pep-security.ch/dev/repos/pEp_for_iOS/">
  <front>
    <title>Source code for pEp for iOS</title>
    <author >
      <organization></organization>
    </author>
    <date year="2018" month="July"/>
  </front>
</reference>
<reference anchor="SRC.pepforoutlook" target="https://pep-security.lu/dev/repos/pEp_for_Outlook/">
  <front>
    <title>Source code for pEp for Outlook</title>
    <author >
      <organization></organization>
    </author>
    <date year="2018" month="July"/>
  </front>
</reference>
<reference anchor="SRC.enigmailpep" target="https://enigmail.net/index.php/en/download/source-code">
  <front>
    <title>Source code for Enigmail/pEp</title>
    <author >
      <organization></organization>
    </author>
    <date year="2018" month="July"/>
  </front>
</reference>


    </references>


<section anchor="code-excerpts" title="Code Excerpts">

<t>This section provides excerpts of the running code from the pEp
reference implementation pEp engine (C99 programming language).</t>

<section anchor="pep-identity" title="pEp Identity">

<t>How the pEp identity is defined in the data structure
(cf. src/pEpEngine.h):</t>

<figure><artwork><![CDATA[
typedef struct _pEp_identity {
    char *address;            // C string with address UTF-8 encoded
    char *fpr;                // C string with fingerprint UTF-8
                              // encoded
    char *user_id;            // C string with user ID UTF-8 encoded
    char *username;           // C string with user name UTF-8
                              // encoded
    PEP_comm_type comm_type;  // type of communication with this ID
    char lang[3];             // language of conversation
                              // ISO 639-1 ALPHA-2, last byte is 0
    bool me;                  // if this is the local user
                              // herself/himself
    identity_flags_t flags;   // identity_flag1 | identity_flag2
                              // | ...
} pEp_identity;
]]></artwork></figure>

<section anchor="corresponding-sql" title="Corresponding SQL">

<t>Relational table scheme excerpts (in SQL) used in current pEp implementations,
held locally for every pEp installation in a SQLite database:</t>

<figure><artwork><![CDATA[
CREATE TABLE person (
   id text primary key,
   username text not null,
   main_key_id text
       references pgp_keypair (fpr)
       on delete set null,
   lang text,
   comment text,
   device_group text,
   is_pep_user integer default 0
);

CREATE TABLE identity (
   address text,
   user_id text
       references person (id)
       on delete cascade on update cascade,
   main_key_id text
       references pgp_keypair (fpr)
       on delete set null,
   comment text,
   flags integer default 0,
   is_own integer default 0,
   timestamp integer default (datetime('now')),
   primary key (address, user_id)
);

CREATE TABLE pgp_keypair (
   fpr text primary key,
   created integer,
   expires integer,
   comment text,
   flags integer default 0
);
CREATE INDEX pgp_keypair_expires on pgp_keypair (
   expires
);
]]></artwork></figure>

</section>
</section>
<section anchor="pep-communication-type" title="pEp Communication Type">

<t>In the following, is an example for the rating of communication types as
defined by a data structure (cf. src/pEpEngine.h <xref target="SRC.pepcore"/>):</t>

<figure><artwork><![CDATA[
typedef enum _PEP_comm_type {
    PEP_ct_unknown = 0,

    // range 0x01 to 0x09: no encryption, 0x0a to 0x0e:
    // nothing reasonable

    PEP_ct_no_encryption = 0x01, // generic
    PEP_ct_no_encrypted_channel = 0x02,
    PEP_ct_key_not_found = 0x03,
    PEP_ct_key_expired = 0x04,
    PEP_ct_key_revoked = 0x05,
    PEP_ct_key_b0rken = 0x06,
    PEP_ct_my_key_not_included = 0x09,

    PEP_ct_security_by_obscurity = 0x0a,
    PEP_ct_b0rken_crypto = 0x0b,
    PEP_ct_key_too_short = 0x0c,

    PEP_ct_compromized = 0x0e, // known compromized connection
    PEP_ct_mistrusted = 0x0f, // known mistrusted key

    // range 0x10 to 0x3f: unconfirmed encryption

    PEP_ct_unconfirmed_encryption = 0x10, // generic
    PEP_ct_OpenPGP_weak_unconfirmed = 0x11, // RSA 1024 is weak

    PEP_ct_to_be_checked = 0x20, // generic
    PEP_ct_SMIME_unconfirmed = 0x21,
    PEP_ct_CMS_unconfirmed = 0x22,

    PEP_ct_strong_but_unconfirmed = 0x30, // generic
    PEP_ct_OpenPGP_unconfirmed = 0x38, // key at least 2048 bit
                                       // RSA or EC
    PEP_ct_OTR_unconfirmed = 0x3a,

    // range 0x40 to 0x7f: unconfirmed encryption and anonymization

    PEP_ct_unconfirmed_enc_anon = 0x40, // generic
    PEP_ct_pEp_unconfirmed = 0x7f,

    PEP_ct_confirmed = 0x80, // this bit decides if trust
                             // is confirmed

    // range 0x81 to 0x8f: reserved
    // range 0x90 to 0xbf: confirmed encryption

    PEP_ct_confirmed_encryption = 0x90, // generic
    PEP_ct_OpenPGP_weak = 0x91, // RSA 1024 is weak (unused)

    PEP_ct_to_be_checked_confirmed = 0xa0, //generic
    PEP_ct_SMIME = 0xa1,
    PEP_ct_CMS = 0xa2,

    PEP_ct_strong_encryption = 0xb0, // generic
    PEP_ct_OpenPGP = 0xb8, // key at least 2048 bit RSA or EC
    PEP_ct_OTR = 0xba,

    // range 0xc0 to 0xff: confirmed encryption and anonymization

    PEP_ct_confirmed_enc_anon = 0xc0, // generic
    PEP_ct_pEp = 0xff
} PEP_comm_type;
]]></artwork></figure>

</section>
<section anchor="abstract-crypto-api-examples-1" title="Abstract Crypto API examples">

<t>The following code excerpts are from the pEp Engine reference
implementation, to be found in src/message_api.h.</t>

<t>[[ Note: Just a selection; more functionality is available. ]]</t>

<section anchor="encrypting-a-message" title="Encrypting a Message">

<t>Cf. src/message_api.h <xref target="SRC.pepcore"/>:</t>

<figure><artwork><![CDATA[
// encrypt_message() - encrypt message in memory
//
//  parameters:
//      session (in)     session handle
//      src (in)         message to encrypt
//      extra (in)       extra keys for encryption
//      dst (out)        pointer to new encrypted message or NULL if
//                       no encryption could take place
//      enc_format (in)  encrypted format
//      flags (in)       flags to set special encryption features
//
//  return value:
//      PEP_STATUS_OK           on success
//      PEP_KEY_HAS_AMBIG_NAME  at least one of the recipient
//                              keys has an ambiguous name
//      PEP_UNENCRYPTED         no recipients with usable key, 
//                              message is left unencrypted,
//                              and key is attached to it
//
//  caveat:
//      the ownership of src remains with the caller
//      the ownership of dst goes to the caller
DYNAMIC_API PEP_STATUS encrypt_message(
        PEP_SESSION session,
        message *src,
        stringlist_t *extra,
        message **dst,
        PEP_enc_format enc_format,
        PEP_encrypt_flags_t flags
);
]]></artwork></figure>

<t>Cf. src/message_api.h <xref target="SRC.pepcore"/>:</t>

</section>
<section anchor="decrypting-a-message" title="Decrypting a Message">

<t>Cf. src/message_api.h <xref target="SRC.pepcore"/>:</t>

<figure><artwork><![CDATA[
// decrypt_message() - decrypt message in memory
//
//  parameters:
//      session (in)   session handle
//      src (in)       message to decrypt
//      dst (out)      pointer to new decrypted message
//                     or NULL on failure
//      keylist (out)  stringlist with keyids
//      rating (out)   rating for the message
//      flags (out)    flags to signal special decryption features
//
//  return value:
//      error status 
//      or PEP_DECRYPTED if message decrypted but not verified
//      or PEP_CANNOT_REENCRYPT if message was decrypted (and
//         possibly verified) but a reencryption operation is
//         expected by the  caller and failed
//      or PEP_STATUS_OK on success
//
//  flag values:
//      in:
//          PEP_decrypt_flag_untrusted_server
//              used to signal that decrypt function should engage in 
//              behaviour specified for when the server storing the 
//              source is untrusted
//      out:
//          PEP_decrypt_flag_own_private_key
//              private key was imported for one of our addresses
//              (NOT trusted or set to be used - handshake/trust is
//              required for that)
//          PEP_decrypt_flag_src_modified
//              indicates that the src object has been modified. At
//              the moment, this is always as a direct result of the 
//              behaviour driven by the input flags. This flag is the 
//              ONLY value that should be relied upon to see if such 
//              changes have taken place.
//          PEP_decrypt_flag_consume
//              used by sync 
//          PEP_decrypt_flag_ignore
//              used by sync 
//
//
// caveat:
//      the ownership of src remains with the caller - however, the
//      contents might be modified (strings freed and allocated anew 
//      or set to NULL, etc) intentionally; when this happens,
//      PEP_decrypt_flag_src_modified is set.
//      the ownership of dst goes to the caller
//      the ownership of keylist goes to the caller
//      if src is unencrypted this function returns PEP_UNENCRYPTED
//      and sets
//      dst to NULL
DYNAMIC_API PEP_STATUS decrypt_message(
        PEP_SESSION session,
        message *src,
        message **dst,
        stringlist_t **keylist,
        PEP_rating *rating,
        PEP_decrypt_flags_t *flags
);
]]></artwork></figure>

</section>
<section anchor="obtain-common-trustwords" title="Obtain Common Trustwords">

<t>Cf. src/message_api.h <xref target="SRC.pepcore"/>:</t>

<figure><artwork><![CDATA[
// get_trustwords() - get full trustwords string
//                    for a *pair* of identities
//
//    parameters:
//        session (in)  session handle
//        id1 (in)      identity of first party in communication
//                      - fpr can't be NULL  
//        id2 (in)      identity of second party in communication
//                      - fpr can't be NULL
//        lang (in)     C string with ISO 639-1 language code
//        words (out)   pointer to C string with all trustwords
//                      UTF-8 encoded, separated by a blank each
//                      NULL if language is not supported or
//                      trustword wordlist is damaged or unavailable
//        wsize (out)   length of full trustwords string
//        full (in)     if true, generate ALL trustwords for these
//                      identities.
//                      else, generate a fixed-size subset.
//                      (TODO: fixed-minimum-entropy subset
//                      in next version)
//
//    return value:
//        PEP_STATUS_OK            trustwords retrieved
//        PEP_OUT_OF_MEMORY        out of memory
//        PEP_TRUSTWORD_NOT_FOUND  at least one trustword not found
//
//    caveat:
//        the word pointer goes to the ownership of the caller
//        the caller is responsible to free() it
//        (on Windoze use pEp_free())
//
DYNAMIC_API PEP_STATUS get_trustwords(
  PEP_SESSION session, const pEp_identity* id1,
  const pEp_identity* id2, const char* lang,
  char **words, size_t *wsize, bool full
);
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="document-changelog" title="Document Changelog">

<t>[[ RFC Editor: This section is to be removed before publication ]]</t>

<t><list style="symbols">
  <t>draft-birk-pep-03:
  <list style="symbols">
      <t>Major restructure of the document</t>
      <t>Adapt authors to the actual authors and extend acknowledgement section</t>
      <t>Added several new sections, e.g., Key Reset, Trust Revoke, Trust 
Synchronization, Private Key Export / Import, Privacy Considerations
(content yet mostly TODO)</t>
      <t>Added reference to HRPC work / RFC8280
      <list style="symbols">
          <t>Added text and figure to better explain pEp’s automated Key
Exchange and Trust management (basic message flow)</t>
        </list></t>
      <t>Lots of improvement in text and editorial changes</t>
    </list></t>
  <t>draft-birk-pep-02:
  <list style="symbols">
      <t>Move (updated) code to Appendix</t>
      <t>Add Changelog to Appendix</t>
      <t>Add Open Issue section to Appendix</t>
      <t>Fix description of what Extra Keys are</t>
      <t>Fix Passive Mode description</t>
      <t>Better explain pEp’s identity system</t>
    </list></t>
  <t>draft-birk-pep-01:
  <list style="symbols">
      <t>Mostly editorial</t>
    </list></t>
  <t>draft-birk-pep-00:
  <list style="symbols">
      <t>Initial version</t>
    </list></t>
</list></t>

</section>
<section anchor="open-issues" title="Open Issues">

<t>[[ RFC Editor: This section should be empty and is to be removed
     before publication ]]</t>

<t><list style="symbols">
  <t>References to RFC6973 (Privacy Considerations)</t>
  <t>Add references to prior work, and what differs here - PEM (cf. RFC1421-1424)</t>
  <t>Better explain Passive Mode</t>
  <t>Better explain / illustrate pEp’s identity system</t>
  <t>Explain Key Mapping (to S/MIME)</t>
  <t>Add more information to deal with organizational requirements</t>
  <t>Add text to Key Reset (<xref target="key-reset"/>) as well as reference as soon as available</t>
  <t>Add text to Trust Revoke (<xref target="trust-revoke"/>) as well as reference as
soon as available</t>
  <t>Add text to Trust Synchronization (<xref target="trust-synchronization"/>) as well
as reference as soon as available</t>
  <t>Add references to Private Key Export / Import
(<xref target="private-key-export-import"/>) as soon as reference available</t>
  <t>Add text to Privacy Considerations (<xref target="privacy-considerations"/>)</t>
</list></t>

<!--
LocalWords:  utf docname toc sortrefs symrefs SRC pepcore CryptoParty
LocalWords:  interoperable fpr UUID USERID userId SMTP uid MUAs ons
LocalWords:  keystore NetPGP iOS Crypto JNI JSON ObjC crypto api Bron
LocalWords:  Shelburn Alexey Melnikov Trammell Gondwana Kahn Gillmor
LocalWords:  Tomae Rescorla Dittler Iraklis Symeonidis Mirja Walfield
LocalWords:  Kuehlewind Resnick Housley Farrel ISOC bnet src typedef
LocalWords:  struct lang bool SQLite pgp keypair datetime enum rken
LocalWords:  compromized RSA SMIME CMS OTR anonymization xbf xa xb xc
LocalWords:  xba xff dst AMBIG stringlist keylist keyids REENCRYPT
LocalWords:  reencryption untrusted behaviour trustword wordlist HRPC
LocalWords:  wsize Windoze const Changelog PEM anonymize automatation
LocalWords:  Keyservers
-->

</section>


  </back>

<!-- ##markdown-source:
H4sIAGcYgVwAA81963bbSJLmfzxFrupHkW6Ssl2uKls10zuyLJc1ZVkaS+7q
3u4+OiCRlNAGATYASmaVvWdfY19vn2Tji4i8ACRl92V2Vqe6LQGJvERGxj0i
x+NxMquyvLw+MKt2Pn6aJG3eFvbA7C1r27Zrc5w2a7Os89t0tjaD5fFyeGDO
9c/p2ryw83RVtHtJOp3W9vbA7PwsyapZmS6o66xO5+14mtfvx0u7HD/8Jpml
rb2u6vWBadosSZo2LbOrtKhKar22TbLMD8wf22o2Mk1Vt7WdN/TbeiG/zKrF
wpZt8+ckSVftTVUfJF+ZXw8O8nJWrDJrJpP95iatbbYvr6/a9LrZv62K97a+
wiwmi/fZpyQxZkz/MyYvmwPzamJO0/qvKxocz2Tir2xdpmXeeVPVBDpan3lZ
rcosbfOq5OcNTdO2B+Zsamtbmx/rdGpL84TfzfKWlnr0avz0ycOH5ue8bG3d
3qxqeUn9tADFxV3e/mLrgmDBL+wizYsDcyOTmCxkEv9GIJzMu2OvaoLXTdsu
m4P9/e77/S+BTXNji+mqLrcB5vnEvKpsafPGlhFontOsctt7xbB5R/tjLrCj
aZ015rJOZ+/NRVWsMJ3G/LiYvuLGDoHQfjK76QBxb68Ht4dPvjP/Y2XrXBvu
BNryhpFo7zdPHpknT8y3BO9vH9NvezFIpzz5f8ttO5/cuBXQHMwAbwg+WXhs
Di/NSqY43AS2vtlPkrKqFwTxW3tArd6+PHr86NEz/fXJsyfu1++ffPPtQZLk
5bzX/MnTpw+Bx/j9u2fff+PaP/72qfv12ZPH+uvTx2hszMn4hUMLPlmyPH3h
z1tbr5r2rqLN2PZNTbMgarDlzQ3BlJDlPU/x4u3RhB7Oqpr/NKZN62ts1Q60
y+ztvrQT8nJEH9JhXtUzS5tHmEidGzrPdFhKepQvloXFqeavTTXnIzaw5XVe
Sts0S5d0bBrZBBqFOn388NHT8cPvgbHH8Yrf23WzLmdfPNHaLqtmn49ladsx
06tmf54Xdr/Nl/tRl/s9WqaPx2/eTNoPbbzg++jpT3ZtLuizm7oq819kyed1
RQSvKgRRHWEz/DPWf93h+x3TMvOcZuHf8GH93SR+2P9sGznbRQBjAH8nUyrL
A1pNXayFoANjLs6OJlMC2XZI393dTRxQm2pGx209IRKxPy2q633q+vv9h9/t
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

-->

</rfc>

