« home

Crittografia End-to-End: chiavi PGP via WKD

16 Nov 2025

Semplicissimo ma troppo poco conosciuto, il sistema di Web Key Directory permette di aumentare la riservatezza delle comunicazioni email pubblicando la propria chiave PGP pubblica su un banalissimo server web.

Una WDK permette infatti al mittente di una mail di trovare facilmente la chiave pubblica del destinatario cui vuole scrivere in modo da cifrare la mail.

Alcuni MUA (programmi di posta elettronica) permettono di scoprire una chiave disponibile via WKD cliccando con il tasto destro su un indirizzo email o su una firma crittografica.

Se non stai ancora usando GnuPG per cifrare la tua corrispondenza, puoi trovare una guida molto semplice su come iniziare.

Tuttavia l'obiettivo di questa guida è permettere ai tuoi contatti di cifrare le comunicazioni verso di te (e le altre caselle email del tuo dominio), senza grandi sbattimenti (purché utilizzi programmi decenti).

Ad esempio, chi ti scrive da Proton Mail cifrerà automaticamente le mail verso di te, mentre chi usa Thunderbird potrà trovare la vostra chiave pubblica cliccando con il tasto destro su una mail e selezionando l'opzione "Individua la chiave PGP" dal menu a comparsa.

Si tratta dell'uovo di Colombo: dato il dominio di un indirizzo email, viene richiesta la chiave pubblica di quella casella via HTTPS, su una URI convenzionale costruita a partire da quel dominio.

Tramite sottodominio openpgpkey

Secondo il protocollo, la chiave di interesse viene anzitutto ricercata nel sottominio openpgpkey del dominio cui è associato l'indirizzo email.

Ad esempio, la chiave necessaria a cifrare le comunicazioni verso pippo@example.org verrà ricercata sul server https://openpgpkey.example.org.

La procedura per creare il record sul DNS e il virtual host corrispondente dipende molto dalla vostra situazione, che vi affidiate ad uno shared hosting, affittiate un VPS o disponiate di un piccolo server domestico accessibile tramite fibra.

In tutti i casi, una volta creato il sottodominio è necessario caricare sul web server le chiavi pubbliche secondo la convenzione prevista dal protocollo.

Le istruzioni che seguono sono state testate su una Debian GNU/Linux ma dovrebbero funzionare su qualsiasi sistema operativo che disponga dei programmi necessari, anche su spyware come Windows (with WSL) o MacOS.

Anzitutto installiamo sshfs (gpg dovreste già averlo):

sudo apt-get install sshfs
	

Useremo sshfs perché è più semplice da usare e documentare in una riga di comando, ma adattare queste istruzioni ad una GUI come FileZilla non dovrebbe essere troppo complesso: basterà eseguire i comandi localmente e poi caricare tutto sul server.

Prepariamo l'ambiente di lavoro:

DOMAIN=your-domain.com
cd $(mktemp -d)
TARGET=$PWD
GPGP="gpg --no-default-keyring --keyring $TARGET/publish.gpg"
	

Ovviamente al posto di your-domain.com dovrai mettere il dominio delle caselle email.

Creiamo un portachiavi GPG in cui importare le chiavi pubbliche che vogliamo pubblicare. Questo passaggio non è strettamente necessario, ma può essere utile quando nel portachiavi abbiamo anche chiavi scadute che non possiamo rimuovere per poter decifrare vecchi messaggi.

$GPGP --fingerprint
gpg --export "$DOMAIN" | $GPGP --import
	

A questo punto, publish.gpg contiene tutte le chiavi associate al dominio in $DOMAIN. È dunque una buona idea verificare la presenza (e rimuovere) le chiavi scadute con i comandi $GPGP --list-key e gpg --delete-key ID_CHIAVE.

Creiamo quindi la struttura di directory che andremo a pubblicare sul sito:

mkdir openpgpkey
$GPGP --list-options show-only-fpr-mbox -k | gpg-wks-client -v --install-key
	

Per pubblicarla dobbiamo semplicemente caricarla sulla cartella .well-known/, all'interno della cartella associata al dominio openpgpkey.your-domain.com, dopo aver configurato propriamente il web server.

In questo caso, ordiniamo ad Apache di non rispondere in chiaro sulla porta 80 e di non mostrare l'elenco dei file sul server.

mkdir $TARGET/server
sshfs -o ServerAliveInterval=15 username@ftpserver:/your/openpgpkey/website/folder $TARGET/server
cd $TARGET/server
cat << EOF > .htaccess
RewriteCond "%{SERVER_PORT}" "^80$"
RewriteRule ^ - [R=404,L]
Options -Indexes
EOF
mkdir .well-known
cp -fr ../openpgpkey .well-known
	

Fatto! Da questo momento chi vi scrive potrà facilmente trovare la vostra chiave pubblica e cifrare ciò che vi vuole comunicare.

Senza sottodominio

Se non potete aggiungere sottodomini ma il vostro sito risponde anche a https://example.org (ovvero il dominio della email, senza il consueto www), potete copiare i file creati in una diversa directory del server.

Invece di copiare l'intera cartella openpgpkey, copiamo solo la sottocartella hu/ in un percorso convenzionale.

mkdir $TARGET/server
sshfs -o ServerAliveInterval=15 username@ftpserver:/your/root/website/folder $TARGET/server
cd $TARGET/server
mkdir -p .well-known/openpgpkey
cat << EOF > .well-known/openpgpkey/.htaccess
RewriteCond "%{SERVER_PORT}" "^80$"
RewriteRule ^ - [R=404,L]
Options -Indexes
EOF
cp -fr ../openpgpkey/$DOMAIN/hu .well-known/openpgpkey
	

Naturalmente in questo caso dovremo verificare che non siano già configurati dei redirect per la cartella .well-known che impediscano al server di servire le nostre chiavi.

Per verificare che tutto funzioni correttamente è sufficiente scegliere uno degli indirizzi email appena esportati ed invocare il seguente comando per cercarne la chiave pubblica:

gpg --homedir "$(mktemp -d)" --verbose --locate-keys pippo@example.org
	

La riservatezza è un diritto umano

Cifrare la corrispondenza verso qualcuno è un gesto di cortesia che dovrebbe diventare consueto.

Se cifriamo le mail che inviamo ai nostri corrispondenti non proteggiamo solo la nostra riservatezza, ma anche quella dei destinatari.

Inoltre rendiamo molto più difficile ogni forma di sorveglianza passiva, in cui terze parti raccolgono le mail in transito per profilare mittenti e destinatari a fini commerciali e politici.

Inoltre, se cifrare la corrispondenza diventasse finalmente una norma sociale condivisa, il costo di inviare una mail di SPAM aumenterebbe automaticamente, mentre verrebbe facilitato il lavoro dei filtri antispam, che potrebbero semplicemente scartare tutte le mail non cifrate.

Dal punto di vista professionale, pubblicare una chiave PGP dimostra un minimo di competenza informatica (moltissimi ciarlatani non sanno nemmeno cosa siano PGP e WKD) e rispetto nei confronti dei vostri potenziali clienti.

Se non disponete di un dominio e usate una mail fornita da altri, potete comunque caricare la vostra chiave pubblica su un keyserver o fornirla ai vostri contatti di persona (il metodo in assoluto più sicuro) o tramite un altro canale che ritenete sufficientemente sicuro.

Personalmente apprezzo molto quando qualcuno usa questa accortezza nei miei confronti e cerco sempre di usarla nei confronti dei miei interlocutori.

Se volete scrivermi, trovate la mia chiave pubblica via WKD.