Transparenzprotokoll
Alles, was wir signieren, öffentlich
Jede Signatur von Content Credentials, jeder Zeitstempel und jedes signierte Prüfergebnis, das Kennmarq.com herausgibt, wird zuerst in dieses Protokoll geschrieben. Das Protokoll kann nur wachsen, und solange es wächst, signieren wir jede Stunde, mindestens aber einmal am Tag, eine Wurzel über seinen gesamten Inhalt. Alle können prüfen, dass die Signatur einer Datei darin steht und dass nie etwas entfernt, verändert oder rückdatiert wurde.
Neueste signierte Wurzel
- Einträge
- 563
- Signiert
- (Wurzel 149)
- Wurzel-Hash
- 897c3b232864c2c9130f7d67a12815bb865d0ca08f4efec23f83e5b78f2fa893
- Schlüssel-ID
- 3b51f0f999b77a04bd96b2b86fa783237f5f33f29c55275a7e5a06ad7230829e
- Signatur
- MEYCIQDvtHKEuzfherpaixgaZFQUw3aaS2FIuay/ETvcVGbgVQIhAJc6l/rUw38Yoi04yj1bKKbZyGIr5I24JaE4ezqbC5uB
Derzeit 563 Einträge im Protokoll. Als JSON: https://api.kennmarq.com/v1/log/root
Was hineinkommt
- Signaturen: für jede über die API markierte Datei das Label ihres Manifests und der SHA-256 der Datei, ihrer Signatur, des Signaturzertifikats und des Zeitstempels in der Signatur. Bei einer im lokalen Modus markierten Datei, die uns nie erreicht, tritt ihr Hard Binding an die Stelle ihres SHA-256.
- Zeitstempel: für jedes Token unseres Zeitstempelservers seine Seriennummer, sein Zeitpunkt, sein SHA-256 und der Hash, den es mit einem Zeitstempel versieht.
- Anker der Audit-Logs: Das Audit-Log jeder Organisation ist per Hash verkettet; sein neuester Hash kommt hierher, unter einem Pseudonym, das nur die Mitglieder der Organisation erkennen können, sodass sich sein Verlauf nicht unbemerkt umschreiben lässt.
- Signierte Prüfergebnisse: für jedes Ergebnis von POST /v1/verify, das wir signieren, sein SHA-256, der SHA-256 der geprüften Datei und die ID des Schlüssels unseres Prüfdienstes.
Nie darin: Namen oder IDs von Organisationen, Dateinamen oder -inhalte, Wasserzeichen-IDs, Modelle, Apps oder Titel, Adressen oder Personen. Wer eine Datei hat, kann ihren Eintrag finden; alle anderen erfahren aus dem Protokoll nichts.
Selbst prüfen
- Finden Sie den Eintrag einer Datei über das Label ihres Manifests oder über den
X-Log-Index, den die API mit ihr zurückgegeben hat:GET /v1/log/proof/urn:c2pa:…antwortet mit dem Eintrag und den Hashes, die ihn mit einer signierten Wurzel verbinden. - Prüfen Sie, ob der Eintrag zur Datei passt (ihr SHA-256, das Label ihres Manifests), und rechnen Sie den Beweis bis zur Wurzel hoch.
- Prüfen Sie die Signatur der Wurzel mit unserem öffentlichen Schlüssel (siehe unten).
- Bewahren Sie die Wurzeln auf, die Sie gesehen haben.
GET /v1/log/consistencybeweist, dass jede spätere Wurzel noch mit allen Einträgen einer früheren beginnt.
Die API-Referenz enthält die genauen Formate und die wenigen Zeilen Shell und Python, die jede Prüfung durchführen. Der Baum folgt RFC 9162 (Certificate Transparency), und Wurzeln werden wie die Tree Heads aus RFC 6962 signiert, sodass vorhandene Tools und Bibliotheken funktionieren.
curl -s "https://api.kennmarq.com/v1/log/key?format=pem" -o log-key.pem
curl -s "https://api.kennmarq.com/v1/log/root" -o root.json
printf '0001%016x%016x%s' "$(jq .timestamp root.json)" "$(jq .tree_size root.json)" \
"$(jq -r .root_hash root.json)" | xxd -r -p > tree-head.bin
jq -r .signature root.json | base64 --decode > signature.der
openssl dgst -sha256 -verify log-key.pem -signature signature.der tree-head.binLetzte Wurzeln
| Wurzel | Signiert | Einträge | Wurzel-Hash |
|---|---|---|---|
| 149 | 563 | 897c3b232864c2c9130f7d67a12815bb865d0ca08f4efec23f83e5b78f2fa893 | |
| 148 | 550 | 533fa80cc9342b3b7d2a938e123583adaa3a3ff1e1f15a5e0c567b9285ae5c5c | |
| 147 | 544 | cb537fb383038e50850a7e8ebdbab3e01ef879e50e161ff38666ba8ae6d8da76 | |
| 146 | 543 | f4b334fc696c7580c8dfd1cc72655e3470da10d61708f3fe861f3ddc3a92177b | |
| 145 | 542 | 20737af83ce09bc9955cf5659eab4f4de98c999bfb02a28c0608f09b4e07dfe0 | |
| 144 | 537 | cbac0d45d78547b09fb5a56e65770c68ce5112e648c9d2350c7c80fbdc2eb7ce | |
| 143 | 522 | 1e76b52cd13890935c1918437a9bf508c10d1ac1f936a25a338659824d11e9eb | |
| 142 | 516 | 80391ea31eb3546589ed9c6e78d1a78efb2a3bddd0eae4ba6b6c9a4353f4f44b | |
| 141 | 515 | df323aad2b192d395ade8d304389e7bdc0af1a6233d9b8ab4e57ad42c15e5c13 | |
| 140 | 514 | f9ba75d9da9f43887116258817f14d2e37bef979e0bdcc11a820c160762ee801 |
Alle Wurzeln, die neueste zuerst: GET /v1/log/roots.
Unser Protokollschlüssel
ECDSA P-256 mit SHA-256. Schlüssel-ID 3b51f0f999b77a04bd96b2b86fa783237f5f33f29c55275a7e5a06ad7230829e, der SHA-256 des unten stehenden Schlüssels im DER-Format. Er signiert nur Tree Heads, und sein privater Schlüssel verlässt AWS KMS nie.
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE42CpuoaS4/rNCAyQ08euvOtCa9X3
Zuq7bXjiCyeh4C0O92Ey6CbvOtfkS11IoLLFWFzzXrcpi/0L2vDeXsufyw==
-----END PUBLIC KEY-----