{"revision":"0ed62d2c742f8e20","language":"it","entry":{"id":"proofs","group":"guides","kind":"guide","title":"Verifica una scheda in modo indipendente","summary":"Controlla le versioni firmate di una scheda, il suo posto nell’indice del registro e i testimoni del registro.","sections":[{"kind":"paragraph","text":"Una ricerca o un riepilogo aiutano a trovare la scheda. Scarica la scheda completa per avere la prova. La pagina normale della scheda e il widget eseguono già questi controlli nel browser del lettore. Un’integrazione che mostra un proprio verdetto verificato deve controllare la prova."},{"kind":"paragraph","text":"Leggi `format` in GET /v1/log prima di scegliere i controlli. Il registro in uso, log.veil.rip/staging-1, è in formato 2, e un registro in formato 2 nomina anche l’organizzazione Veil in `staffOrg`. Il formato 1 è fermo su log.veil.rip/test-1: resta leggibile e non prende versioni nuove."},{"kind":"heading","text":"Formato 2: il percorso dell’indice","anchor":"format-2"},{"kind":"paragraph","text":"Una scheda in formato 2 porta quello che serve a questi controlli: `proof` per la versione corrente, `index` per il pacchetto d’indice della scheda, `authority` per le versioni che cambiano chi può firmare e `current` con intestazione, corpo e firma correnti. Il lavoro non cresce con la lunghezza della storia della scheda."},{"kind":"steps","items":["Controlla il checkpoint in `index.checkpoint.note`: la firma del registro, il quorum dei testimoni della tua policy fidata e la sua freschezza. `proof` e `index` si riferiscono a quello stesso checkpoint.","Verifica `index.entry`, l’ultima voce d’indice del checkpoint, con la sua prova di inclusione. Controlla `index.value` sulla radice di quella voce con `index.proof`, poi applica le voci di `index.tail` che riguardano questa scheda.","Controlla ogni elemento di `authority` dalla sua sola voce del registro: l’inclusione alla posizione `i`, l’hash dell’intestazione contro il `c` che dà `index.value.auth` e la firma di una chiave dell’autorità precedente. La versione 1 dà l’ID della scheda. Segui `authorityNext` finché è null.","Controlla `current`: l’hash dell’intestazione è quello di `index.value.latest`, l’ha firmata una chiave dell’autorità in vigore, lo stato mostrato ha la radice della sua intestazione e le chiavi coincidono con l’autorità.","Per un’organizzazione, controlla il membro che `label.signer` nomina in ogni versione di autorità e in quella corrente. Quel membro aveva il ruolo e firmava con una chiave attiva della propria scheda in quel punto del registro.","Controlla le dichiarazioni dello staff in `index.statements`. La prima è `index.value.standing`, ogni `prev` è la `i` della successiva, e ognuna è firmata da un membro dell’organizzazione Veil con un ruolo che ne ammette l’azione. Leggi le altre pagine da `statementsNext` finché è null.","Una scheda chiusa risponde 410 con `closed`. Mostrala chiusa solo quando quella voce di chiusura si verifica."]},{"kind":"code","language":"text","code":"veil-rubrica:identity-version:v2\n<canonical label>\n\nveil-rubrica:statement-entry:v2\n<canonical entry without signature>\n\nveil-rubrica:close-entry:v2\n<canonical entry without signature>"},{"kind":"paragraph","text":"Conserva token, ID, ultima versione verificata e la sua autorità. Alla visita dopo rifiuta un indice che indica una versione più vecchia o che cambia versioni di autorità già verificate. La verifica completa legge ogni versione da GET /v1/identities/{n}/versions, dalla versione 1, e controlla ogni corpo, firma e operazione senza l’indice."},{"kind":"paragraph","text":"Una firma composita richiede che si verifichino sia Ed25519 sia ML-DSA-65. Controlla la freschezza con abbastanza controfirme valide da soddisfare il quorum. Un quorum non recente può provare la storia lasciando incerto lo stato corrente."},{"kind":"heading","text":"Formato 1 su test-1","anchor":"format-1"},{"kind":"paragraph","text":"Questi passi valgono solo per una scheda servita da un registro in formato 1, oggi log.veil.rip/test-1, che è fermo. Rifiuta una scheda in formato 1 quando GET /v1/log dice formato 2."},{"kind":"steps","items":["Verifica la firma del record sul prefisso identity-version seguito dai byte esatti di proof.record.","Ricalcola SHA-256 di sale e record. Deve corrispondere a proof.commitment. Per la versione 1 determina anche ID e impronta della scheda.","Controlla che proof.entry contenga token e impegno della scheda. Ricalcola la foglia RFC 6962 e segui la prova di inclusione fino alla radice del checkpoint.","Controlla la firma del registro con la chiave attesa e richiedi il quorum della policy fidata. Conta ogni chiave di testimone una volta sola.","Verifica la catena delle versioni, inclusi prev, autorità della chiave firmataria e ogni impegno fino alla versione 1. Segui i cursori finché la catena è completa.","Conserva l’ultimo checkpoint accettato e controlla la coerenza prima di accettarne uno nuovo. Rifiuta un arretramento o una radice diversa alla stessa dimensione."]},{"kind":"code","language":"text","code":"veil-rubrica:identity-version:v1\n"},{"kind":"heading","text":"Leggi le risorse del registro"},{"kind":"paragraph","text":"GET /v1/log indica il registro usato dalla rubrica. Le sue risorse stanno sotto l’URL HTTPS dell’origine. La stringa vkey completa contiene anche ID e dati della chiave pubblica e non è un indirizzo di pagina."},{"kind":"links","ids":["log-state","log-checkpoint","log-policy","log-witnesses","log-hash-tiles","log-entry-tiles"]}],"related":["versions","version-proof","history","authority","statements"],"errors":[],"pageLinks":[{"anchor":"format-2","label":"Formato 2"},{"anchor":"format-1","label":"Formato 1 su test-1"}],"documentationUrl":"https://veil.rip/docs/proofs?lang=it"}}