Zum Inhalt springen

Zeitstempel (RFC 3161)

POST https://api.kennmarq.com/v1/tsa/{key}

Unser eigener Zeitstempelserver nach RFC 3161, für den lokalen Modus: Wenn Ihr Rechner ein C2PA-Manifest signiert, lässt er die Signatur über diese URL mit einem Zeitstempel versehen. Der Schlüssel steht in der URL, weil die C2PA-Bibliothek keine Header hinzufügen kann.

Ein Schlüssel nur für tsa

Erstellen Sie einen Schlüssel, dessen einzige Berechtigung tsa ist, und setzen Sie ihn in die URL. Jeder Schlüssel mit weiteren Berechtigungen wird hier mit 403 key_not_allowed_in_url abgelehnt: URLs landen in Logs, und ein mächtiger Schlüssel darf nie darunter sein. Ist das passiert, rotieren Sie den gesendeten Schlüssel.

Zeitstempel-URL
https://api.kennmarq.com/v1/tsa/sk_live_…

Anfrage

  • Content-Type: application/timestamp-query
  • Der Body: ein DER-codierter TimeStampReq, höchstens 4 KB.
  • Message Imprints in SHA-256, SHA-384 oder SHA-512. Ein SHA-1-Imprint erhält in der Antwort einen Ablehnungsstatus.
  • certReq wird berücksichtigt (unsere TSA-Kette kommt in das Token), und Ihre Nonce wird unverändert zurückgegeben.

Antwort

200 mit exakt Content-Type: application/timestamp-reply und der DER-codierten TimeStampResp als Body, Byte für Byte so, wie unser Server sie erzeugt hat. Jedes Token gibt eine Genauigkeit von 1 Sekunde an, trägt eine zufällige 128-Bit-Seriennummer und unsere eigene Policy-OID und ist mit ECDSA P-256 / SHA-256 signiert, einschließlich signingCertificateV2 (RFC 5816).

Jedes Token kommt in unser öffentliches Transparenzprotokoll, bevor es zurückgegeben wird; der Header X-Log-Index gibt an, wo, und GET /v1/log/proof/{index} beweist es. Eine Ablehnung trägt kein Token und keinen Index.

Beispiel mit OpenSSL

Shell
# A query for a file's SHA-256, asking for our certificate in the reply
openssl ts -query -data artwork.png -sha256 -cert -out request.tsq

curl https://api.kennmarq.com/v1/tsa/$TSA_KEY \
  -H "Content-Type: application/timestamp-query" \
  --data-binary @request.tsq \
  -o response.tsr

openssl ts -reply -in response.tsr -text

Um ein Token zu verifizieren, rufen Sie unsere TSA-Kette über GET /v1/certificate?chain=tsa ab.

Zählung

Jeder Zeitstempel zählt einmal im monatlichen Zeitstempelkontingent, das genauso groß ist wie das Markierungskontingent Ihres Plans (bei Testschlüsseln wie Ihr Kontingent an Testmarkierungen), getrennt für Live- und Testschlüssel. Eine Anfrage, die auf unserer Seite fehlschlägt, wird nicht gezählt. Die Aufrufe pro Minute des Plans gelten für die Organisation, alle ihre Schlüssel zusammen; die IP-Allowlist des Schlüssels gilt für den Schlüssel.

C2PA-Validatoren melden unsere Zeitstempel als timeStamp.untrusted, bis unser öffentlich vertrauenswürdiges Zertifikat eingerichtet ist; die Datei besteht die Validierung trotzdem.

Fehler

Fehler von POST /v1/tsa
StatusCodeWann
400invalid_requestEin leerer Body oder eine Zeitstempelanfrage, die unser Server nicht verarbeiten konnte.
401missing_api_key, invalid_api_key, api_key_revokedKein Schlüssel, ein unbekannter oder ein widerrufener Schlüssel.
402quota_exceededDie Zeitstempel des Monats sind aufgebraucht.
403key_not_allowed_in_urlDer Schlüssel hat Berechtigungen über tsa hinaus.
403ip_not_allowedDie Adresse steht nicht auf der IP-Allowlist des Schlüssels.
413payload_too_largeDie Zeitstempelanfrage ist größer als 4 KB.
415unsupported_media_typeDer Content-Type ist nicht application/timestamp-query.
429rate_limitedZu viele Aufrufe in dieser Minute.
503tsa_unavailableDer Zeitstempelserver ist kurzzeitig nicht verfügbar. Es wird nichts berechnet; versuchen Sie es erneut.