veil

Porta le tue chiavi pubbliche

Metti sulla tua scheda la metà pubblica delle tue chiavi SSH, PGP, minisign, Ed25519 o ML-DSA con una prova che chiunque controlla, poi dalle a git, ssh-keygen o gpg.

Aggiungi la metà pubblica delle chiavi che usi già: SSH, PGP, minisign o ML-DSA. La chiave privata non lascia mai il tuo computer. Dimostri che la chiave è tua firmando una sfida con quella.

Veil non chiede mai una chiave privata. Incolla solo la chiave pubblica e la firma della sfida. Se incolli qui una chiave privata per errore, considerala esposta e sostituiscila.

Sulla tua scheda scegli Aggiungi una chiave pubblica sotto Dispositivi e chiavi, e incolla la chiave pubblica. La pagina ne legge il tipo, poi ti dà una breve sfida come file, veil-challenge.txt. La sfida nomina la tua scheda, la chiave, la chiave di dispositivo del browser e l’ultimo checkpoint controfirmato del registro, quindi la firma non si può retrodatare né riusare su un’altra scheda.

Di una chiave OpenPGP arrivano sulla tua scheda solo la chiave principale e le sottochiavi di firma. La pagina elenca gli user ID che la chiave porta e ne tiene uno solo se lo spunti. Questi nomi e indirizzi diventano parte del registro pubblico della tua scheda, nel log, e restano nella sua storia. Le foto e le certificazioni di altre persone non vanno mai sulla scheda.

Firma la sfida sul tuo computer#

Le chiavi SSH (Ed25519, ECDSA P-256 e P-384, RSA da 2048 bit) firmano con namespace veil. Una firma fatta per git qui non vale.

cURL
ssh-keygen -Y sign -n veil -f ~/.ssh/id_ed25519 veil-challenge.txt
cat veil-challenge.txt.sig

Una chiave OpenPGP (versione 4: RSA da 2048 bit, ECDSA P-256 o P-384, Ed25519) firma il file così com’è, con la chiave principale o con una sottochiave di firma. Incolla il file .asc; va bene anche un file firmato in chiaro. Una firma fatta con SHA-1 non vale.

cURL
gpg --local-user <fingerprint> --armor --detach-sign veil-challenge.txt
cat veil-challenge.txt.asc

minisign firma il file così com’è, in una delle sue due forme. Incolla il file .minisig.

cURL
minisign -Sm veil-challenge.txt
cat veil-challenge.txt.minisig

Una chiave Ed25519 o ML-DSA (44, 65 o 87) grezza firma i byte della sfida. Con OpenSSL 3.5:

cURL
openssl pkeyutl -sign -inkey key.pem -rawin -in veil-challenge.txt | base64

Su Windows firma il file che la pagina scarica. Va bene anche una copia incollata nel Blocco note, con gli a capo CRLF o con il BOM, e la prova registra quale forma hai firmato. Un file salvato da Windows PowerShell con > è in UTF-16: la pagina te lo dice, e lo salvi in UTF-8.

Incolla la firma e scegli Controlla e aggiungi la chiave. Il tuo browser la controlla prima di firmare la nuova versione della scheda, e il server la controlla di nuovo.

Usa le chiavi pubbliche nei tuoi strumenti#

GET /u/{card}/keys.txt dà le chiavi pubbliche di una scheda come file. allowed_signers va con git e ssh-keygen -Y verify, authorized_keys con un server, minisign con minisign -V -p, e pgp è un portachiavi armato per gpg --import. gpg importa una chiave solo se ha almeno uno user ID. Aggiungi fp=<impronta> per una chiave sola; GET /u/{card}.keys è il file authorized_keys all’indirizzo che la gente conosce da GitHub. Il file è la parola del server: controlla ogni prova sulla scheda prima di affidartici.

cURL
curl -fsS 'https://veil.rip/u/1/keys.txt?format=allowed_signers' > allowed_signers
git config gpg.ssh.allowedSignersFile "$PWD/allowed_signers"
git log --show-signature -1
cURL
curl -fsS 'https://veil.rip/u/1/keys.txt?format=pgp' | gpg --import

Trova la persona dietro una chiave#

GET /v1/lookup?fingerprint=SHA256:… trova la scheda che tiene una chiave SSH o ML-DSA. Vale anche l’ID di una chiave minisign, e valgono le 40 cifre esadecimali dell’impronta di una chiave OpenPGP, con o senza spazi. ?key= prende la riga OpenSSH o la chiave pubblica OpenPGP armata come la incolleresti. Una chiave sta su una sola scheda alla volta.

Controlla una prova da solo#

Leggi state.external dalla scheda in JSON. Per ogni chiave ricostruisci la sfida dal numero della scheda e dai campi della voce, nella forma che dice proof.variant (assente: i byte offerti; crlf, bom, noeol e le loro combinazioni, come le scrive docs/formato-v2.md, sezione 4), controlla il checkpoint citato con la policy dei testimoni del registro, controlla che la chiave di dispositivo in proof.by fosse attiva nella versione che ha aggiunto la chiave, e verifica la firma. assets/veil-external.js fa tutto questo e si può usare da solo. Per OpenPGP, pub è la base64 dei pacchetti della chiave: la chiave principale con le sue auto-firme, gli user ID scelti dalla persona, le sottochiavi di firma.