Het principe achter het wijzigen van een bestandshash
Typische cryptografische hashes zijn onder andere: MD5, SHA-1/256 enz. Het kernkenmerk van het ontwerp van cryptografische hashfuncties is het "lawine-effect": elke minimale wijziging in de invoer leidt tot een enorme verandering in de uitvoer. Dit betekent dat zelfs als slechts één byte wordt gewijzigd, de volledige hashwaarde compleet anders wordt. Bijvoorbeeld: je schrijft een document van 2000 woorden en slaat het op als Word-bestand. Als je slechts één teken wijzigt, bijvoorbeeld door een spatie toe te voegen, verandert de MD5 van dit bestand volledig. Daarom is de essentie van “het wijzigen van een bestandshash” het wijzigen van de bestandsinhoud zelf, en niet van externe eigenschappen zoals de bestandsnaam. Deze eigenschap maakt het relatief eenvoudig om hashes op bestandsniveau te wijzigen.
Verschillende systemen en formaten gaan anders om met wat als “metadata” wordt beschouwd: als metadata is ingebed in de bestandsgegevens (zoals tags binnen JPEG-/videocontainers), zal het wijzigen ervan de hash veranderen; als metadata is opgeslagen in externe datastromen of eigenschappen van het bestandssysteem, heeft het wijzigen ervan geen invloed op de hash die op basis van de bestandsinhoud wordt berekend. Dit verklaart het veelvoorkomende verschijnsel dat “het wijzigen van de bestandsnaam de hash niet verandert, maar het wijzigen van ingebedde metadata wel”.
Transcodering door videoplatforms en “detecteren of de hash is gewijzigd”
Nadat een gebruiker een video naar een videoplatform heeft geüpload, voert het platform op deze video het volgende uit:
Ontvangst van het originele bestand
Formaatcontrole en verificatie
Transcodering (formaatconversie, resolutieaanpassing, compressie)
Extractie van keyframes
Hashberekening op meerdere lagen
Dit is een transcodeerproces van “demultiplexen → decoderen → verwerken → opnieuw coderen → multiplexen”, bedoeld om meerdere versies met verschillende bitrates/resoluties te produceren voor adaptief afspelen. Dit proces verandert op zichzelf al de bytevolgorde van het bestand en elke cryptografische hash van vóór de upload.
Op bestandshashniveau: tijdens het transcoderen genereert het platform het bestand opnieuw, waardoor de oorspronkelijke bestandshash vanzelf verandert. Daarom heeft een door de gebruiker vooraf gewijzigde bestandshash na transcodering geen betekenis meer. Het platform zal dus niet controleren of je bestand bijvoorbeeld een gewijzigde MD5 heeft, omdat dat geen enkele zin heeft!
Deduplicatie- en auteursrechtcontroles zijn niet afhankelijk van de bestandshash van de uploader. In plaats daarvan berekent het platform op basis van de gedecodeerde inhoud zijn eigen “audio-/videovingerafdruk” of perceptuele hash, en vergelijkt die met referentievingerafdrukken in de database. Zo maakt YouTube Content ID bijvoorbeeld een “vingerafdruk” van geüploade inhoud en vergelijkt die met referenties die door rechthebbenden zijn aangeleverd.
Daarom “detecteert” het platform niet dat de hash is gewijzigd, maar “negeert het de uploadhash, berekent het opnieuw een inhoudsvingerafdruk en voert het matching uit”. Daardoor kan het simpelweg wijzigen van bestandsbytes of containermetadata om MD5/SHA te veranderen, detectie op basis van inhoud niet omzeilen.