DoConure

Come verifico un file firmato in seguito?

Chiunque può confermare che un PDF firmato è esattamente quello prodotto da questo servizio, senza chiave API, caricandolo su /verify: la pagina ne ricalcola lo SHA-256 e riporta una corrispondenza o "Nessuna corrispondenza", in italiano o in inglese (?lang=it o ?lang=en; per impostazione predefinita la lingua della richiesta firmata). Per fare la stessa cosa da codice, calcola tu l'hash e confrontalo con signedSha256 ottenuto da una GET sulla busta:

curl -F "document=@signed.pdf" https://your-host/verify

Lo stesso controllo, per una macchina

Anche qui senza chiave, con un limite di frequenza per indirizzo. Chiedi JSON:

GET /verify/{sha256}.json
POST /verify.json            (multipart, part "document")

200 OK
{
  "schema": 1,
  "queriedSha256": "ab12...",
  "found": true,
  "integrity": { "result": "matches_a_signed_file", "algorithm": "sha256" },
  "signature": { "level": "SES", "legalQualification": "simple_electronic_signature",
                 "status": "completed", "completedAt": "...", "signerCount": 2,
                 "signers": [{ "fullName": "Anna Rossi", "signedAt": "..." }], "isTest": false },
  "seal": { "requested": true, "padesProfile": "B-T", "applied": true },
  "timestamp": { "requested": true, "applied": true },
  "evidence": { "chain": { "intact": true, "events": 14 },
                "purged": false,
                "retention": "10 years from the envelope closing, unless the organisation chose a shorter period" }
}

Di proposito non viene mai ridotto a un unico booleano valid. Un hash corrispondente dice che il file è esattamente quello firmato qui; non dice che il sigillo fosse qualificato (qualified non viene mai affermato: nessun certificato di questa installazione è dichiarato qualificato), che una marca temporale sia ancora verificabile, né che il firmatario fosse chi diceva di essere. Ogni fatto è un campo a sé, con parole proprie, e found: false riporta le stesse ragioni che dà la pagina. Una busta le cui evidenze sono state eliminate risponde comunque dal suo hash registrato e dice evidence.purged: true. Una busta di test dice isTest: true.

Basta un solo byte cambiato (un PDF salvato di nuovo, una copia passata per un altro strumento) perché non corrisponda più. È proprio questo lo scopo: è un'evidenza di manomissione, non un checksum fine a sé stesso.

Da dove viene l'impronta: Cosa vede il firmatario.