{"revision":"0ed62d2c742f8e20","language":"it","entry":{"id":"external-keys","group":"guides","kind":"guide","title":"Porta le tue chiavi pubbliche","summary":"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.","sections":[{"kind":"paragraph","text":"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."},{"kind":"paragraph","text":"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."},{"kind":"paragraph","text":"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."},{"kind":"paragraph","text":"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."},{"kind":"heading","text":"Firma la sfida sul tuo computer"},{"kind":"paragraph","text":"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."},{"kind":"code","language":"shell","code":"ssh-keygen -Y sign -n veil -f ~/.ssh/id_ed25519 veil-challenge.txt\ncat veil-challenge.txt.sig"},{"kind":"paragraph","text":"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."},{"kind":"code","language":"shell","code":"gpg --local-user <fingerprint> --armor --detach-sign veil-challenge.txt\ncat veil-challenge.txt.asc"},{"kind":"paragraph","text":"minisign firma il file così com’è, in una delle sue due forme. Incolla il file .minisig."},{"kind":"code","language":"shell","code":"minisign -Sm veil-challenge.txt\ncat veil-challenge.txt.minisig"},{"kind":"paragraph","text":"Una chiave Ed25519 o ML-DSA (44, 65 o 87) grezza firma i byte della sfida. Con OpenSSL 3.5:"},{"kind":"code","language":"shell","code":"openssl pkeyutl -sign -inkey key.pem -rawin -in veil-challenge.txt | base64"},{"kind":"paragraph","text":"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."},{"kind":"paragraph","text":"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."},{"kind":"heading","text":"Usa le chiavi pubbliche nei tuoi strumenti"},{"kind":"paragraph","text":"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."},{"kind":"code","language":"shell","code":"curl -fsS 'https://veil.rip/u/1/keys.txt?format=allowed_signers' > allowed_signers\ngit config gpg.ssh.allowedSignersFile \"$PWD/allowed_signers\"\ngit log --show-signature -1"},{"kind":"code","language":"shell","code":"curl -fsS 'https://veil.rip/u/1/keys.txt?format=pgp' | gpg --import"},{"kind":"heading","text":"Trova la persona dietro una chiave"},{"kind":"paragraph","text":"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."},{"kind":"heading","text":"Controlla una prova da solo"},{"kind":"paragraph","text":"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."}],"related":["external-keys-file","person-card","lookup","publish-person"],"errors":[],"documentationUrl":"https://veil.rip/docs/external-keys?lang=it"}}