Content Provenance and Authenticity
Diese Projekt began als meine Masterarbeit und wurde über die Zeit näher in meine Arbeit mit eingebunden.
Coalition for Content Provenance and Authenticity (C2PA)
Unter C2PA1 versteht man heute mehr als nur den eigentlichen Zusammenschluss von einer vielzahl von Unternehmen, welche an diesem Standart arbeiten, sondern auch den eigentlichen Prozess und die damit verbundenen Manifeste.
Die grundlegende Idee von C2PA1 ist die immer schwieriger werdende Problematik reale Medien von Manipulierten oder auch “KI”-generierten zu unterscheiden.
Important
Medien bezeichen in diesem Kontext so ziemlich alles was digital consumiert werden kann, wie Bilder, Dokumente, Videos, Musik, in so vielen gängigen Dateiformaten wie möglich.
Um dies so entgegenzuwirken werden in diese Medien manipulationssichere Metadaten eingebettet, welche exakt dokumentieren, Wer, Wann, Wo, Wie und Was mit diesem Medium gemacht hat.
In einer ideallen Welt, in der C2PA1 in alle vorgesehenden Prozessen integriert wurde, würde das, beispielsweise an einem Bild, bedeuten, dass in diesen Metadaten stehen würde:
- Person A hat das Foto gemacht
- mit Kamera X
- zu der Zeit T_1
- mit den Kameraeinstellungen (Objektiv, Brennweite, Zoomlevel, ISO, etc.)
- an Ort L
- Person B hat diese Foto bearbeitet und auf Server S hochgeladen
- mit Programm P
- zur Zeit T_2
- was bearbeitet wurde (Farbkorrektur, zu geschritten, Gegenstände entfernt/hinzugefügt, etc.)
- Server S hat diese Bild erhalten und
- komprimiert, in ein anderes Format umgewandelt, etc.
- Person C hat diese Bild schließlich in einen Artikel eingefügt und ggfs. auch weitere Dinge damit gemacht
Note
Diese Eckdaten sind Beispiele und es können alle erdenklichen Informationen hinzugefügt werden.
Schließlich kann Person D diese Bild in dem Artikel sehen und hat die Möglichkeit nachzuvollziehen wo diese Bild herkommt.
Dieses Beispiel kann natürlich auch so gegeben werden, dass das Bild nicht fotografiert wurde, von einem “KI”-Tool generiert wurde und in diesem Fall würde nicht der Kameramann und die Kamera in den Metadaten stehen, sondern das “KI”-Tool, welcher Prompt gegeben wurde und auch die Person oder sogar ein anderes Programm, das diesen Prompt gegeben hat.
C2PA in Live Streaming
Meine Aufgabe in diesem Projekt war es die Anwendbarkeit dieser Prozesses im Bereich des Live Streaming zu untersuchen. Zu diesem Zeit wurden diese Prozesse nur für fertiggestellte Videos und nicht für dynamische Live Streams in der technischen Spezifiaktion beschrieben.
Zunächst habe ich gegonnen mit der Recherche, wie das Signieren von Videos funktioniert. Das für habe ich zum einen die technische Spezifiaktion und die Reference Implentation c2pa-rs2 studiert.
Video signieren
Im Streaming Bereich werden sowohl Videos als Live Streams in viele kleine Stückchen, sogenannte Segmente oder auch Fragmente, geteilt, d.h. ein Video besteht tatsächlich aus vielen Einzelteilen. Das wiederum hat zur folge, dass es möglich nur einzelne Segmente zu manipulieren und erfordert die Möglichkeit nicht nur jedes einzelne Segment für sich selbst zu verifizieren, dass es nicht manipuliert wurde, sondern auch, dass das Video als Gesamtes valide ist.
In dem Signierungsprozess eines Videos kommt ein sogenannter Merkle Tree zum Einsatz, dieser erfüllt diese Anforderung exakt. Dieser Merkle Tree und die ensprechenden Metadaten werden in das allererste Segment, das sogenannte Initalisierungssegment, eingebettet. Die einzelnen Video Segmente erhalten nur den Teil, der benötigt wird sich selbst als Teil des _Merkle Tree_s zu validieren.
Testbed
Das Testbed bestand aus vier Teilen:
- Producer: erstellt ein Live Stream
- Signer: signiert den Live Stream
- CDN: lagert den signierten Live Stream
- Consumer: sieht sich den signiert Live Stream and und validert ihn
Producer
Der Producer war der selbe modulare Umschlag um FFmpeg, welchen ich für mein Media over QUIC Projekt erstellt habe. Dieser hat einen Live Stream erzeugt und diesen, dann an den Signer geschickt.
Signer
Der Signer war das c2patool3, welches ich für dieses Projekt modifiziert habe. Die signierten Segmente wurde im Anschluss an das CDN gesendet.
CDN
Das Content Delivery Network (CDN) war eine Abstraktion dessen. Es war einfacher HTTP, welcher die signierten Video empfangen hat, diese abgespeichert hat und schließlich auf Anfrage des Consumer zur Verfügung gestellt hat.
Consumer
Der Consumer war eine Webseite, gebaut mit Svelte4, und bestand aus drei Teilen:
dash.js5 Player: spielt Live Stream ab
+ Plug-in für die Valdierung der Segment mitc2pa.js6, welches ich ebenfalls modifiziert habe + Plug-in zur Anzeige von invaliden Segmente auf der Timeline des Video Players- C2PA Manifest Viewer: zeigt das extrahierte C2PA Manifest an
- Hash Visualisierung: stellt die Hashing Methode dar
Live Stream signieren 1
Mein erster Versuch einen Live Stream zu signieren, war es stur die Video Signierung auf einen Live Stream anzuwenden. Das hat ohne Probleme funktioniert und das der Live Stream wurde signiert und von Client abgespielt und auch korrekt validert. Jedoch bedeutet dieser Ansatz, dass mit jedem neuen Video Segment, das erstellt wird, dass der gesamte Live Stream erneut komplett von Anfang signiert wird, da der Live Stream als Video angesehen wird.
Das hatte zur Folge, dass je länger der Live Stream läuft, desto länger dauert der Signierungsprozess und nach kurzer Zeit hatte das Signieren länger gedauert als jedes Segment lang war, wodurch der Live Stream in stocken geraten ist.
Live Stream signieren 2
Mein nächster Versuch machte Nutzung von der Tatsache, dass in dem C2PA Manifest der Merkle Tree in mehrere Teil geteilt werden konnte. Somit habe ich den Signierungsprozess so angepasst, dass immer 8 Segmente zu einem Merkle Tree zusammengefasst wurden.
Dies hatte zur Folge, dass die Dauer der Signierung nicht mehr linear länger wurde, da die Anzahl quasi auf ein Video mit acht Segmenten reduziert wurde. Jedoch hatte dies wiederum auch zur Folge, dass es jetzt theoretisch möglich einener dieser achter Blöcken zu manipulieren, da es keinen Zusammenhang zwischen diesen Blöcken gab. Des Weiteren wurde das C2PA Manifest immer größer, da mit jedem achtem Segment ein neuer Merkle Tree hinzu kam.
Live Stream signieren 3
Mein finaler Versuch hat sich komplett von dem Merkle Tree distanziert, somit auch von der technischen Spezifiaktion, und hat stattdessen eine Art Hashkette verwendet. Hierfür habe ich einfach den Hash jedes einzelnen Segments mit dessen Vorgänger Segment zusammen gehasht und dieses Ergebniss als Referenzwert verwendet.
Damit habe ich die Dauer der Signierung noch weiter reduziert auf nur ein einzelnes Segment und dazu auch noch den weiteren Angriffspunkt der getrennten achter Gruppen.