Zum Inhalt springen

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

  1. 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.
  2. Senden Sie uns den Manifest-Store, den die Bibliothek eingebettet hat: etwa 13 KB Claim und Assertions, nie Pixel. Schalten Sie Vorschaubilder ab.
  3. 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.
  4. 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
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.c2pa

Was 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:

Was ein Manifest enthalten muss, damit wir es signieren
PrüfungIm Einzelnen
Jede Assertion, die der Claim aufführt, steht im Manifest, mit dem Hash, den der Claim ihr gibtund das Manifest enthält keine, die er nicht aufführt
Nur die Assertions, die eine Markierung trägtdie Aktionen, das Hard Binding, das Soft Binding des Wasserzeichens, der Generator, Bestandteile (Ingredients): kein Vorschaubild, das Pixel enthielte
Ein KI-Quelltypc2pa.created oder c2pa.opened mit trainedAlgorithmicMedia oder compositeWithTrainedAlgorithmicMedia: Wir signieren nur mit KI erstellte Dateien
Ein Wasserzeichen kommt mit seiner Aktionc2pa.watermarked.bound und ein TrustMark-Soft-Binding, beides oder keines
Unser Generatorder 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_signature in unser Transparenzprotokoll. Wir sehen Ihre Datei nie, daher enthält der Eintrag ihr Hard Binding (den Hash in der Assertion c2pa.hash.data des 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.
Content Credentials, die Ihre Datei bereits trug, reisen als Bestandteile mit dem Manifest mit, samt aller Vorschaubilder, die ihr Unterzeichner hineingelegt hat. Lassen Sie sie weg, wenn sie uns nicht erreichen sollen.

Fehler

Fehler von POST /v1/sign
StatusCodeWann
400invalid_requestKein C2PA-Manifest-Store, ein bereits signiertes Manifest oder eines, das wir nicht signieren; die Meldung nennt die fehlgeschlagene Prüfung.
401missing_api_key, invalid_api_key, api_key_revokedSiehe Authentifizierung.
402quota_exceededDie Markierungen des Monats sind aufgebraucht.
403insufficient_scope, ip_not_allowedDem Schlüssel fehlt die Berechtigung sign, oder die Adresse steht nicht auf der Allowlist.
413payload_too_largeDer Store ist größer als 1 MB.
415unsupported_media_typeDer Body wird nicht als application/c2pa gesendet.
429rate_limitedZu viele Aufrufe in dieser Minute; versuchen Sie es nach Retry-After Sekunden erneut.
502mark_failedDie Signatur konnte nicht erstellt und geprüft werden. Es wird nichts berechnet.
503marker_unavailable, tsa_unavailableDer Signaturdienst oder der Zeitstempelserver ist kurzzeitig nicht verfügbar. Es wird nichts berechnet; versuchen Sie es erneut.

Fehler-Bodys folgen dem gemeinsamen Format.