{emayili} Understanding Encrypted Email

I’m adding encrypted message support to the {emayili} package for sending emails from R.

The first step has been understanding what the contents of an encrypted email looks like. To do this I’ve set up my email client, Thunderbird, to send encrypted emails using my GnuPG keypairs. In this post I look at the content of an encrypted message generated with Thunderbird.

For reference, I using Thunderbird 78.14.0 and GnuPG 2.2.19.

thunderbird --version
Thunderbird 78.14.0
gpg --version
gpg (GnuPG) 2.2.19
libgcrypt 1.8.5
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/wookie/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

Encrypted Message

Below is the raw content of an encrypted email message. I’ve stripped off a bunch of irrelevant header fields. The message is saved as a text file, encrypted-email.txt.

The following chunk is mostly a load of unintelligible (encrypted) nonsense. Feel free to scroll down vigorously.
MIME-Version: 1.0
Subject: ...
Content-Type: multipart/encrypted;
 protocol="application/pgp-encrypted";
 boundary="yIuKl9CZjofeRWX4nmi7Fpd5iMT9ZpzLi"

This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
--yIuKl9CZjofeRWX4nmi7Fpd5iMT9ZpzLi
Content-Type: application/pgp-encrypted
Content-Description: PGP/MIME version identification

Version: 1

--yIuKl9CZjofeRWX4nmi7Fpd5iMT9ZpzLi
Content-Type: application/octet-stream; name="encrypted.asc"
Content-Description: OpenPGP encrypted message
Content-Disposition: inline; filename="encrypted.asc"

-----BEGIN PGP MESSAGE-----

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
Q/UrxoI=
=+gjh
-----END PGP MESSAGE-----

--yIuKl9CZjofeRWX4nmi7Fpd5iMT9ZpzLi--

The Subject field is just a placeholder (...), and will only be populated once the message is decrypted. The body of the message and any attachments are all encrypted.

Decrypting

To see the actual content we’ll decrypt the message with gpg and the -d (or --decrypt) option.

gpg -d encrypted-email.txt
gpg: encrypted with RSA key, ID 3210F48A9FF304AF
gpg: encrypted with 4096-bit RSA key, ID A24340A0BB8A468E, created 2021-11-26
      "Alice <alice@yahoo.com>"

We get some information on the key used to encrypt the message. The rest of the output is MIME encoded. We’ll decode that with qprint.

gpg -d encrypted-email.txt | qprint -d

Here’s what the result looks like:

Content-Type: multipart/signed; micalg=pgp-sha256;
 protocol="application/pgp-signature";
 boundary="O6WVJZQXER4dsIzUPXt9tWyET8SZP73NO"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--O6WVJZQXER4dsIzUPXt9tWyET8SZP73NO
Content-Type: multipart/mixed; boundary="B1LtVCpc3KMkw7XaeAzMOooL7dNoXrtKx";
 protected-headers="v1"
Subject: Top Secret Message
From: Alice <alice@yahoo.com>
To: Bob <bob@gmail.com>
Message-ID: <8d5d0999-3838-1dc2-889b-ad3316de676d@yahoo.com>

--B1LtVCpc3KMkw7XaeAzMOooL7dNoXrtKx
Content-Type: multipart/mixed;
 boundary="------------FE374C6C7804A00CF598765A"
Content-Language: en-GB

This is a multi-part message in MIME format.
--------------FE374C6C7804A00CF598765A
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Don't share this with anybody!

--------------FE374C6C7804A00CF598765A
Content-Type: text/plain; charset=UTF-8;
 name="ave-maria.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="ave-maria.txt"

TWF4aW11cyByZXggYXVjdG9yIGZvcnRpc3NpbXVzIGNvbnNvbGF0b3IgaW5jb21wcmFlaGVu
c2liaWxpcyBnbG9yaW9zdXMgcGl1cyBpbnVpc2liaWxpcyBjb25zZXJ1YXRvci4K
--------------FE374C6C7804A00CF598765A
Content-Type: application/pgp-keys;
 name="OpenPGP_0x87CC261267801A17.asc"
Content-Transfer-Encoding: quoted-printable
Content-Description: OpenPGP public key
Content-Disposition: attachment;
 filename="OpenPGP_0x87CC261267801A17.asc"

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=fr2w
-----END PGP PUBLIC KEY BLOCK-----

--------------FE374C6C7804A00CF598765A--

--B1LtVCpc3KMkw7XaeAzMOooL7dNoXrtKx--

--O6WVJZQXER4dsIzUPXt9tWyET8SZP73NO
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature"

-----BEGIN PGP SIGNATURE-----

wsF5BAABCAAjFiEEHaMTPoparJX1Q0Q5h8wmEmeAGhcFAmGgdAgFAwAAAAAACgkQh8wmEmeAGhdD
GQ/7BqBwF86uEJD/0MLGW/vsqwAewGojifr8fOzcjgXBS1LKwZOydzCX2/8tk0KciIw89kolfGtI
NASFwCICq6uF2C2iMrRBvDXyx8kWvbshlGXtc6BzMa1DKUEuurfb5OsdR6GhuZP0yauhsA4XUe/0
o3goVCNHD30vJtzwB2/is0SRGTz6imy/alkHidJ4KvlGIuKD1C4jeCnkErIoL/ewaz3X2/ZiSlm/
b2THGm6v8SJGiqm9ArCVkHVZzQ9C9JbNeUXaQhI7RhgnqATM43aXLOgFa4VRaAoJl4I/0Jv40KB5
Qs22K3s3z1LDPvDaWLK2u2Pdv37eoKPrkgKOmlOGS52LpAtbosiNXQ/yzuVZRY9dd19l4lnuXVxJ
0Bs/9GftbYa8Kf/sKrzE6oX87BH10lN9tUoKUTJqI3+d9Vsy5waf4m/pQb+x1+lfmWHP4S7J9RNZ
WdGGY2v6TDkiWll7o+ZdHLqrqqRz3ietUR23UIjod1NPJHPR7CrVwvYzCUSukbxTgrlhepO/EZDM
oGzsRIXNxsoRQE1PNt3UbPR4F0NVLtHxVokmeEX4x45G3ai1paGkeBgjAPFt1IVPTH6ZurwrOO5Y
hF7HMBEWDoohePa2LnGojlmoBu1Y7PpP+gvwFK5yEPBJl6vWTbo2ylTfBmpL0qHK9/Q4InG6eDgQ
J7AüT2
-----END PGP SIGNATURE-----

--O6WVJZQXER4dsIzUPXt9tWyET8SZP73NO--

Right, so that looks a lot more like a regular email. It’s a multipart MIME document with a message body (with content “Don’t share this with anybody!”) and a Base64 encoded attachment.

Attachments

This is the part of the decrypted message that contains the attachment:

--------------FE374C6C7804A00CF598765A
Content-Type: text/plain; charsetF-8;
 name="ave-maria.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="ave-maria.txt"

TWF4aW11cyByZXggYXVjdG9yIGZvcnRpc3NpbXVzIGNvbnNvbGF0b3IgaW5jb21wcmFlaGVu
c2liaWxpcyBnbG9yaW9zdXMgcGl1cyBpbnVpc2liaWxpcyBjb25zZXJ1YXRvci4K

Still looks like nonsense, right? That’s because it’s Base64 encoded (see the Content-Transfer-Encoding header). We can decode it using the base64 utility.

cat << EOF | base64 -d
TWF4aW11cyByZXggYXVjdG9yIGZvcnRpc3NpbXVzIGNvbnNvbGF0b3IgaW5jb21wcmFlaGVu
c2liaWxpcyBnbG9yaW9zdXMgcGl1cyBpbnVpc2liaWxpcyBjb25zZXJ1YXRvci4K
EOF
Maximus rex auctor fortissimus consolator incompraehensibilis gloriosus pius inuisibilis conseruator.

This decrypted content of the attachment looks like Latin, but it’s actually encrypted with the Ave Maria cipher developed by Johannes Trithemius.

Public Key

The message includes Alice’s public key. This is important for Bob if he responds to Alice: he’ll need to have her public key in order to encrypt his response.

Alice can also export her public key and send it to Bob separately.

gpg --armor --export alice@yahoo.com
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
abbslw==
=j6UK
-----END PGP PUBLIC KEY BLOCK-----

This appears superficially to differ from the public key embedded in the original message. However, the difference is limited to a few characters at the beginning and end of the key. They are also wrapped to a different line width (72 characters for GnuPG and 76 characters for Thunderbird). The difference in the key content arises from slightly different implementations in Thunderbird and GnuPG.

We can, however, compare the two versions of Alice’s public key using their fingerprints. First we’ll look at the fingerprint from GnuPG. I’ve removed the whitespace from the fingerprint for ease of comparison.

gpg --fingerprint alice@yahoo.com
pub   rsa4096 2021-11-26 [SC]
      1DA3133E8A5AAC95F543443987CC261267801A17
uid           [ultimate] Alice <alice@yahoo.com>
sub   rsa4096 2021-11-26 [E]

Now we save the public key from the email to a file, public-key-block.txt, and then extract the fingerprint from the file.

gpg  --import --import-options show-only public-key-block.txt
pub   rsa4096 2021-11-26 [SC]
      1DA3133E8A5AAC95F543443987CC261267801A17
uid                      Alice <alice@yahoo.com>
sub   rsa4096 2021-11-26 [E]

The fingerprints agree precisely. So the two version’s of Alice’s public key are equivalent and completely interoperable.

Signature

When Alice sends an encrypted message it’s first signed with her private key and then encrypted using Bob’s public key. In order for Bob to verify Alice’s signature he first needs to decrypt the message. So he decrypts the message using his private key and then verifies the signature on the message using Alice’s public key.

Because of the sequence of operations used in creating the message it’s impossible to verify the signature without first decrypting the message.

Just Encryption

It’s not necessary to sign a message. And including your public key is also optional.

So what would the decrypted message body look like without these components?

Subject: Top Secret Message
From: Alice <alice@yahoo.com>
To: Bob <bob@gmail.com>
Message-ID: <bc870861-bcc4-e120-9b66-80ca32ee9b0f@yahoo.com>

--OVgKEOX6d2wdKaEuZNnD57SxmdxfXDQ5P
Content-Type: multipart/mixed;
 boundary="------------0811FAF0B361EA1B57B21AAD"
Content-Language: en-GB

This is a multi-part message in MIME format.
--------------0811FAF0B361EA1B57B21AAD
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Don't share this with anybody!

--------------0811FAF0B361EA1B57B21AAD
Content-Type: text/plain; charsetF-8;
 name="ave-maria.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="ave-maria.txt"

TWF4aW11cyByZXggYXVjdG9yIGZvcnRpc3NpbXVzIGNvbnNvbGF0b3IgaW5jb21wcmFlaGVu
c2liaWxpcyBnbG9yaW9zdXMgcGl1cyBpbnVpc2liaWxpcyBjb25zZXJ1YXRvci4K
--------------0811FAF0B361EA1B57B21AAD--

--OVgKEOX6d2wdKaEuZNnD57SxmdxfXDQ5P--

A lot more concise.

Conclusion & Next Steps

I feel like I now have a reasonable understanding of the anatomy of an encrypted email. It turns out to be simpler that I anticipated: the whole message is encrypted (rather than individual components of the message, the body and attachments).

Schematic structure of encrypted and/or signed MIME message
Schematic layout of MIME components in a PGP signed email (left) and a PGP encrypted email (right).

I’ll be adding support for encryption to {emayili} and hope to push out an update sometime this week.

References

There are a few documents that are germane to this post: