.. title: New PGP key ID 1793DAD5D803A8FFD7451697BB992F9864FAD168
.. slug: new-pgp-key-id-1793dad5d803a8ffd7451697bb992f9864fad168
.. date: 2022-04-30 10:35:57 UTC+02:00
.. tags: chain of trust, gnupg, gpg, infrastructure, openpgp, sequoia, sq, web key directory, web of trust
.. category: admin
.. link:
.. description:
.. type: text
As my current |PGP| key ``91BD8815FE0040FA7FF5D68754C28F4FF5A1A949`` will be
expired soon, I have created a new one to replace it.
You can get my new key ``1793DAD5D803A8FFD7451697BB992F9864FAD168`` as well as
the old one and the cross-signatures required to establish the |chain of trust|
between the two via Web Key Directory (|WKD|) (which should be used
automatically by ``gpg >= 2.1.23``).
To not deal with the rather convoluted |gnupg| tooling I have created a
deployment method for this using |sequoia-pgp|'s |sq|, about which you can read
in the rest of this article.
.. TEASER_END
Key servers
===========
Historically, there has been a set of |key servers|, which have been used to
distribute the public keys of users centrally and/ or in a synchronized
fashion. These key servers have been widely relied upon, but they suffer(ed)
from a lot of issues in regards to privacy, stability and speed. Most notably
the Synchronized Key Server (|SKS|) system collapsed under its technical debt
and had to be shut down.
To this day there are still other large, non-synchronized keyserver systems
around (e.g. |hockeypuck|, which drives https://keyserver.ubuntu.com), but they
all suffer from the fact, that a large centralized setup, in which keys are
only ever appended, does not scale.
Additionally, not all keyserver systems support all key types or signatures on
keys, which is problematic, as they can not reflect upon |chain of trust|
between two or more keys. This is very problematic for the |web of trust| of
|PGP|.
Web Key Directory
=================
At the time of writing the |WKD| system is formalized in
|draft-koch-openpgp-webkey-service-11|. It describes a decentralized way of
providing public key material via a given domain's webserver, by exposing
specially crafted files.
WKD Deployment
==============
Personally, I believe that the |gpg| commandline interface is incredibly
convoluted and very complex. I therefore used |sequoia-pgp|'s |sq| instead to
combine PGP public key material and prepare the required directory structure.
In my personal |wkd| project I assembled a simple system consisting of easy to
prepare directories in which to place PGP public keys, which are converted to a
keyring using |sq keyring join|, converted into a |WKD| structure using |sq wkd
generate| and synchronized using |rsync|.
As I do not provide an ``openpgpkey`` subdomain, I am using a direct domain
directory structure (see |WKDHosting| for further details).
Using keys from WKD
===================
In theory all that is required for |gpg| to make use of |WKD| is a version
``>=2.1.23``. However, its use can be somewhat confusing:
.. code:: sh
gpg --locate-keys dave@sleepmap.de
The above only returns the new key
``1793DAD5D803A8FFD7451697BB992F9864FAD168``, but not the old
``91BD8815FE0040FA7FF5D68754C28F4FF5A1A949``. It is entirely opaque to the user
as to why.
Meanwhile with |sq wkd get| it is possible to return the public key material of
both keys:
.. code:: sh
sq wkd get dave@sleepmap.de
The certificates can be inspected directly using |sq inspect|:
.. code:: sh
sq inspect --certifications <(sq wkd get dave@sleepmap.de)
Additionally, the certificates can be imported into an existing |gnupg| based
keyring:
.. code:: sh
gpg --import <(sq wkd get dave@sleepmap.de)
Using |WKD|, the need for providing a separate PGP public key file in the
context of this website has been made obsolete and I have therefore instead
replaced it with plain mentions of the PGP key IDs on the `about page
`_.
.. |PGP| raw:: html
PGP
.. |chain of trust| raw:: html
chain of trust
.. |web of trust| raw:: html
web of trust
.. |WKD| raw:: html
WKD
.. |gnupg| raw:: html
gnupg
.. |sequoia-pgp| raw:: html
sequoia-pgp
.. |sq| raw:: html
sq
.. |key servers| raw:: html
key servers
.. |SKS| raw:: html
SKS
.. |hockeypuck| raw:: html
hockeypuck
.. |draft-koch-openpgp-webkey-service-11| raw:: html
draft-koch-openpgp-webkey-service-11
.. |gpg| raw:: html
gpg
.. |wkd| raw:: html
wkd
.. |sq keyring join| raw:: html
sq keyring join
.. |sq wkd generate| raw:: html
sq wkd generate
.. |rsync| raw:: html
rsync
.. |WKDHosting| raw:: html
WKDHosting
.. |sq wkd get| raw:: html
sq wkd get
.. |sq inspect| raw:: html
sq inspect