Die Signatur des lokalen Modus
POST https://api.kennmarq.com/v1/sign
Im lokalen Modus entstehen das Wasserzeichen und die Content Credentials auf Ihrem Rechner, und die Datei verlässt ihn nie. Nur ihr Manifest kommt hierher, um mit unserem Schlüssel signiert und von unserem Server mit einem Zeitstempel versehen zu werden. Das Python-SDK und die ComfyUI-Nodes erledigen das alles für Sie; diese Seite ist für alle, die es selbst bauen.
So funktioniert es
- Erstellen Sie das Manifest und betten Sie es mit der C2PA-Bibliothek (c2pa-python 0.38.1) ein, signiert mit einer Wegwerf-Zertifikatskette, die Sie eigens dafür erzeugen. C2PA prüft jede Signatur anhand ihres Zertifikats und kann daher nicht mit einem Schlüssel signieren, den es nicht besitzt.
- Senden Sie uns den Manifest-Store, den die Bibliothek eingebettet hat: etwa 13 KB Claim und Assertions, nie Pixel. Schalten Sie Vorschaubilder ab.
- Wir prüfen ihn (siehe unten), signieren denselben Claim mit unserem Schlüssel, versehen die Signatur mit einem Zeitstempel und senden den Store zurück, in derselben Größe, mit unserer Signatur anstelle der Wegwerf-Signatur.
- Setzen Sie ihn in Ihrer Datei an die Stelle des alten. Das Hard Binding der Datei schließt das Manifest aus und bleibt daher gültig. Lesen Sie die Datei dann mit unseren Wurzelzertifikaten (GET /v1/certificate), bevor Sie sie verwenden: Das Ergebnis sollte Trusted lauten, mit einem validierten Zeitstempel.
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.c2paWas wir signieren und was nicht
Wir signieren nur, was eine unserer Markierungen in der Cloud tragen würde, damit unsere Signatur nicht an andere Claims gehängt werden kann:
| Prüfung | Im Einzelnen |
|---|---|
| Jede Assertion, die der Claim aufführt, steht im Manifest, mit dem Hash, den der Claim ihr gibt | und das Manifest enthält keine, die er nicht aufführt |
| Nur die Assertions, die eine Markierung trägt | die Aktionen, das Hard Binding, das Soft Binding des Wasserzeichens, der Generator, Bestandteile (Ingredients): kein Vorschaubild, das Pixel enthielte |
| Ein KI-Quelltyp | c2pa.created oder c2pa.opened mit trainedAlgorithmicMedia oder compositeWithTrainedAlgorithmicMedia: Wir signieren nur mit KI erstellte Dateien |
| Ein Wasserzeichen kommt mit seiner Aktion | c2pa.watermarked.bound und ein TrustMark-Soft-Binding, beides oder keines |
| Unser Generator | der Claim nennt Kennmarq.com als seinen Generator, und sein Hash-Algorithmus ist SHA-256 |
Jedes Manifest wird einmal signiert: Erstellen Sie für jede Datei ein neues.
Antwort
200, application/c2pa: der signierte Store, mit X-Mark-Id, X-Watermark-Id (wenn das Manifest ein Wasserzeichen hat), X-Log-Index, X-Marks-Used, X-Marks-Limit und X-Request-Id. Jede Signatur zählt eine Markierung.
- Die Signatur kommt als Eintrag
c2pa.local_signaturein unser Transparenzprotokoll. Wir sehen Ihre Datei nie, daher enthält der Eintrag ihr Hard Binding (den Hash in der Assertionc2pa.hash.datades Manifests) statt ihres SHA-256. - Mit einem Wasserzeichen wird der signierte Store als dauerhafte Content Credentials der Datei aufbewahrt, ohne Datei-Hash: Eine Kopie, deren Metadaten entfernt wurden, führt trotzdem dorthin.
Fehler
| Status | Code | Wann |
|---|---|---|
| 400 | invalid_request | Kein C2PA-Manifest-Store, ein bereits signiertes Manifest oder eines, das wir nicht signieren; die Meldung nennt die fehlgeschlagene Prüfung. |
| 401 | missing_api_key, invalid_api_key, api_key_revoked | Siehe Authentifizierung. |
| 402 | quota_exceeded | Die Markierungen des Monats sind aufgebraucht. |
| 403 | insufficient_scope, ip_not_allowed | Dem Schlüssel fehlt die Berechtigung sign, oder die Adresse steht nicht auf der Allowlist. |
| 413 | payload_too_large | Der Store ist größer als 1 MB. |
| 415 | unsupported_media_type | Der Body wird nicht als application/c2pa gesendet. |
| 429 | rate_limited | Zu viele Aufrufe in dieser Minute; versuchen Sie es nach Retry-After Sekunden erneut. |
| 502 | mark_failed | Die Signatur konnte nicht erstellt und geprüft werden. Es wird nichts berechnet. |
| 503 | marker_unavailable, tsa_unavailable | Der Signaturdienst oder der Zeitstempelserver ist kurzzeitig nicht verfügbar. Es wird nichts berechnet; versuchen Sie es erneut. |
Fehler-Bodys folgen dem gemeinsamen Format.