La firma della modalità locale
POST https://api.kennmarq.com/v1/sign
In modalità locale la filigrana e le Content Credentials vengono create sulla tua macchina, e il file non la lascia mai. Arriva qui solo il suo manifest, per essere firmato con la nostra chiave e ricevere la marca temporale dal nostro server. L’SDK Python e i nodi ComfyUI fanno tutto questo per te; questa pagina serve a chi vuole implementarlo da sé.
Come funziona
- Crea il manifest e incorporalo con la libreria C2PA (c2pa-python 0.38.1), firmandolo con una catena di certificati usa e getta creata allo scopo. C2PA verifica ogni firma rispetto al suo certificato, quindi non può firmare con una chiave che non possiede.
- Inviaci il manifest store che ha incorporato: circa 13 KB di claim e asserzioni, mai pixel. Disattiva le miniature.
- Lo verifichiamo (vedi sotto), firmiamo lo stesso claim con la nostra chiave, apponiamo la marca temporale alla firma e ti rimandiamo lo store, della stessa dimensione, con la nostra firma al posto di quella usa e getta.
- Rimettilo nel file al posto del vecchio. L’hard binding del file esclude il manifest, quindi resta valido. Poi, prima di usare il file, leggilo con i nostri certificati radice (GET /v1/certificate): deve risultare Trusted, con una marca temporale convalidata.
curl https://api.kennmarq.com/v1/sign \
-H "Authorization: Bearer $KENNMARQ_API_KEY" \
-H "Content-Type: application/c2pa" \
--data-binary @manifest.c2pa -D - -o signed.c2paCosa firmiamo e cosa no
Firmiamo solo ciò che conterrebbe una nostra marcatura nel cloud, così la nostra firma non può essere apposta ad altri claim:
| Verifica | Nel dettaglio |
|---|---|
| Ogni asserzione elencata nel claim è nel manifest, con l’hash che il claim le attribuisce | e il manifest non ne contiene nessuna che il claim non elenchi |
| Solo le asserzioni che contiene una marcatura | le azioni, l’hard binding, il soft binding della filigrana, il generatore, gli ingredienti: nessuna miniatura, che conterrebbe pixel |
| Un tipo di origine IA | c2pa.created o c2pa.opened con trainedAlgorithmicMedia o compositeWithTrainedAlgorithmicMedia: firmiamo solo file creati con l’IA |
| Una filigrana è accompagnata dalla sua azione | c2pa.watermarked.bound e un soft binding TrustMark, entrambi o nessuno dei due |
| Il nostro generatore | il claim indica Kennmarq.com come generatore, e il suo algoritmo di hash è SHA-256 |
Ogni manifest viene firmato una sola volta: creane uno nuovo per ogni file.
Risposta
200, application/c2pa: lo store firmato, con X-Mark-Id, X-Watermark-Id (quando il manifest ha una filigrana), X-Log-Index, X-Marks-Used, X-Marks-Limit e X-Request-Id. Ogni firma conta una marcatura.
- La firma entra nel nostro registro di trasparenza come voce
c2pa.local_signature. Il tuo file non lo vediamo mai, quindi la voce contiene il suo hard binding (l’hash nell’asserzionec2pa.hash.datadel manifest) invece del suo SHA-256. - Con una filigrana, lo store firmato viene conservato come credenziale di provenienza durevole del file, senza hash del file: anche una copia i cui metadati sono stati rimossi rimanda a essa.
Errori
| Stato | Codice | Quando |
|---|---|---|
| 400 | invalid_request | Non è un manifest store C2PA, è un manifest già firmato oppure uno che non firmiamo; il messaggio indica quale verifica non è riuscita. |
| 401 | missing_api_key, invalid_api_key, api_key_revoked | Vedi la pagina Autenticazione. |
| 402 | quota_exceeded | Le marcature del mese sono esaurite. |
| 403 | insufficient_scope, ip_not_allowed | La chiave non ha l’ambito sign, oppure l’indirizzo non è tra gli IP consentiti. |
| 413 | payload_too_large | Il manifest store supera 1 MB. |
| 415 | unsupported_media_type | Il body non è inviato come application/c2pa. |
| 429 | rate_limited | Troppe chiamate in questo minuto; riprova dopo i secondi indicati da Retry-After. |
| 502 | mark_failed | Non è stato possibile creare e verificare la firma. Non viene addebitato nulla. |
| 503 | marker_unavailable, tsa_unavailable | Il servizio di firma o il server di marca temporale è momentaneamente non disponibile. Non viene addebitato nulla; riprova. |
Il body degli errori segue il formato comune.