{"revision":"0ed62d2c742f8e20","language":"it","entry":{"id":"verify-files","group":"guides","kind":"guide","title":"Verifica file e rilasci firmati","summary":"Controlla un download con la firma che lo accompagna e la scheda che tiene la chiave: nel browser, con le API o in un flusso di GitHub.","sections":[{"kind":"paragraph","text":"Su veil.rip/verify scegli File o rilascio e trascina il file con la sua firma, oppure incolla la firma. Il tuo browser calcola l’hash del file a pezzi e non lo carica mai. Legge la firma, trova la scheda che tiene la chiave, controlla la scheda con il registro pubblico e i suoi testimoni, e poi dice chi ha firmato, con quale chiave e se quella chiave è sulla scheda oggi."},{"kind":"paragraph","text":"Legge quattro tipi di firma. Una firma SSH fatta per i file con ssh-keygen -Y sign -n file. Una firma staccata OpenPGP (.asc o .sig) o un testo firmato in chiaro. Un file .minisig, nella forma prefirmata o in quella legacy. Un blocco di Veil il cui messaggio è sha256:<hex> <nome>, oppure un elenco di checksum."},{"kind":"code","language":"shell","code":"ssh-keygen -Y sign -n file -f ~/.ssh/id_ed25519 veil-1.2.tar.gz\ngpg --armor --detach-sign veil-1.2.tar.gz\nminisign -Sm veil-1.2.tar.gz"},{"kind":"paragraph","text":"Una firma OpenPGP dichiara una data, scritta dall’orologio di chi firma. La pagina controlla lo stato della chiave a quella data e dice che la data viene da chi firma, perché chi ha una chiave rubata può scriverne una qualunque. Le firme SSH e minisign non hanno data, quindi per una chiave che la scheda ha tolto la pagina non sa dire se ha firmato prima della rimozione."},{"kind":"heading","text":"Un rilascio con un elenco di checksum"},{"kind":"paragraph","text":"Firma un solo file SHA256SUMS o SHA512SUMS invece di ogni download. Trascina l’elenco, la sua firma e i file che hai scaricato: la pagina controlla la firma una volta, poi ogni file con la sua riga, ed elenca i file che corrispondono, quelli che non corrispondono, quelli che l’elenco non nomina e le righe senza file."},{"kind":"code","language":"shell","code":"sha256sum veil-1.2.tar.gz veil-1.2.zip > SHA256SUMS\ngpg --armor --detach-sign SHA256SUMS"},{"kind":"heading","text":"Firma con la tua scheda"},{"kind":"paragraph","text":"Sulla tua scheda, accanto a Firma un messaggio, Firma un file calcola l’hash di un file nel tuo browser e firma sha256:<hex> <nome> con la chiave di dispositivo di questo browser, come blocco di Veil. Firma un rilascio fa lo stesso per più file: scrive il loro elenco SHA256SUMS e lo firma come blocco. Pubblica il blocco accanto ai file."},{"kind":"heading","text":"Collega un rilascio al suo controllo"},{"kind":"paragraph","text":"La pagina di un rilascio può avere un link a veil.rip/verify?u=<scheda>&sha256=<hex>. La pagina si apre con la scheda e l’hash atteso già scritti, e chi visita trascina il file, che resta nel suo browser. veil.rip/verify#b=<blocco> apre allo stesso modo un blocco di Veil, e nessun server vede quello che segue il #."},{"kind":"heading","text":"Chiedi alle API"},{"kind":"paragraph","text":"POST /v1/verify prende la firma con gli hash del file, che calcoli tu: il server non vede mai il file. Da un hash controlla le firme SSH, le firme minisign prefirmate e i blocchi di Veil, e su un elenco di checksum che mandi controlla ogni formato. Una firma staccata OpenPGP o una firma minisign legacy del file stesso risponde 422 file_needed, perché solo i byte la possono controllare."},{"kind":"code","language":"shell","code":"sha512=$(sha512sum veil-1.2.tar.gz | cut -d' ' -f1)\njq -n --rawfile sig veil-1.2.tar.gz.sig --arg h \"$sha512\" \\\n  '{signature: $sig, sha512: $h, name: \"veil-1.2.tar.gz\"}' \\\n  | curl -fsS https://veil.rip/v1/verify --json @-"},{"kind":"heading","text":"In un flusso di GitHub"},{"kind":"paragraph","text":"L’azione in integrations/github-action-veil-verify controlla i file e le firme di un rilascio in un job e lo fa fallire con una firma sbagliata, un file che non corrisponde al suo elenco o un file senza firma. Legge le chiavi della scheda da GET /u/{card}/keys.txt e verifica sulla macchina del job, quindi vanno bene file di qualunque dimensione."}],"related":["verify-file","external-keys","external-keys-file","message-verification"],"errors":[],"documentationUrl":"https://veil.rip/docs/verify-files?lang=it"}}