Daan van Tongeren
PDFengine Team
Proberen te bewijzen dat twee PDF's identiek zijn, of dat er niets aan een PDF is veranderd, komt neer op één ding: een cryptografische hash. Een hash is een korte vingerafdruk van een PDF, berekend uit de inhoud van het bestand. Leveren twee bestanden dezelfde hash op, dan zijn ze tot op de byte gelijk. Verandert er één teken, dan verandert de hash compleet. Zo krijg je wiskundig bewijs, geen subjectief "het lijkt me hetzelfde."
Er zit een addertje onder het gras waar zelfs ervaren advocaten en IT'ers over struikelen. Twee PDF's die er identiek uitzien en identiek lezen, kunnen tóch verschillende hashes teruggeven. Dat betekent niet dat er met het document is geknoeid. Hieronder leg ik uit waarom dat gebeurt, welke hash de vraag echt beslecht, en hoe je tot een verdedigbaar resultaat komt zonder ooit een terminal te openen.
Kernpunten
Een cryptografische hash bewijst dat twee bestanden byte voor byte identiek zijn; verander één teken en de vingerafdruk verandert volledig.
Twee visueel identieke PDF's leveren vaak verschillende SHA-256-hashes op, omdat een PDF bij het opslaan een verborgen /ID-veld herschrijft. Dat is normaal, geen manipulatie.
SHA-256 is een federaal gestandaardiseerde veilige hash (NIST FIPS 180-4); het oudere SHA-1 kent aangetoonde botsingen en mag niet als bewijs worden vertrouwd.
Vier afzonderlijke hashes (bytes, tekst, visueel, metadata) kunnen bewijzen dat de inhoud identiek bleef, zelfs als de metadata veranderde. Eén enkele byte-hash kan dat niet.
Een hash bewijst gelijkheid, niet wie een bestand veranderde of wanneer. Combineer hem daarvoor met een vertrouwd tijdstempel of een handtekening.

Identiek zijn tussen twee bestanden betekent dat hun inhoud exact overeenkomt, en met een cryptografische hash toon je dat aan. SHA-256 is een federaal gestandaardiseerde veilige hashfunctie die een 256-bits vingerafdruk produceert (NIST FIPS 180-4). Draai hem over een bestand en je krijgt een reeks van 64 tekens. Draai hem opnieuw over een identieke kopie en je krijgt telkens dezelfde reeks.
De waarde zit in de gevoeligheid. Draai één bit om, verander één komma, bewerk één pixel, en de uitkomst verandert onherkenbaar. Er is geen gedeeltelijke overeenkomst. Daarom vertrouwen rechters en toezichthouders op hashing om aan te tonen dat elektronisch bewijs sinds de verzameling niet is gewijzigd. Die redenering sluit aan bij het authenticatiekader in de Amerikaanse Federal Rules of Evidence, waar een partij moet aantonen dat een stuk is wat het beweert te zijn (American Bar Association, 2017).
In de praktijk beslaat een SHA-256-hash een adresruimte van 2^256, zodat een overeenkomende vingerafdruk wordt behandeld als in feite sluitend bewijs dat twee bestanden byte voor byte gelijk zijn; toezichthouders zoals de SEC eisen dat gegevens niet-herschrijfbaar worden bewaard, juist zodat de integriteit later aantoonbaar is (SEC Rule 17a-4).
Omdat een PDF zichzelf elke keer dat je opslaat opnieuw schrijft, zelfs als je niets zichtbaars verandert. Dit is het meest misbegrepen punt in documentforensiek, en het leidt mensen voortdurend naar de verkeerde conclusie. Ontwikkelaars lopen ertegenaan, notarissen lopen ertegenaan, en forumdraden staan vol met dezelfde verwarring. Eén kennisbankartikel van iText heeft letterlijk als titel "Why are PDF files different even if the content is the same?".
De boosdoener zit in de PDF-trailer: een /ID-array. De specificatie vraagt PDF-software (schrijvers) om daar een unieke identifier op te slaan, en de meeste PDF-software genereert die bij elke opslagactie opnieuw. Exporteer vanuit Preview, dupliceer het bestand, soms zelfs bij afdrukken naar PDF, en die verborgen waarde verschuift. De pagina's zien er hetzelfde uit. De tekst leest hetzelfde. Maar de ruwe bytes verschillen, dus de PDF-hash verandert terwijl er zichtbaar niets is veranderd.
Dit is waar het naïeve advies "vergelijk gewoon de hash" gevaarlijk wordt in een juridische context. Een jurist vergelijkt twee byte-hashes, ziet een verschil en concludeert ten onrechte dat er met het document is geknoeid. In werkelijkheid heeft een routinematige heropslag de verpakking veranderd, niet de inhoud. Een ontwikkelaar documenteerde precies deze valkuil tijdens het debuggen van PDF-hashes (Phoenix Effect), en forensische onderzoekers bediscussiëren het onder koppen als "Same content different hash values".
Links: een onschuldige heropslag verandert de ruwe bytes, dus de SHA-256-byte-hash verschilt (rood kruis). Rechts: de gerenderde pagina en de tekstlaag zijn onveranderd, dus de inhouds- en visuele hash komen nog steeds overeen (groen vinkje).
Hoe onderscheid je dan een echte bewerking van een cosmetische heropslag? Je stopt met vertrouwen op één enkele byte-hash.
Je hasht de lagen apart, niet alleen de ruwe bytes. Een bestandshash beantwoordt "zijn dit exact dezelfde bytes?" Een inhoudshash beantwoordt de vraag waar het je meestal om gaat: "is dit hetzelfde document?" Toen ik de vingerafdruk-tool bij pdfen bouwde, kwam deze gelaagde aanpak rechtstreeks voort uit het zien hoe mensen een byte-only-verschil ten onrechte als fraude uitlegden.
De vingerafdruk-tool van pdfen berekent vier afzonderlijke hashes van één bestand:
Bestandshash — SHA-256 van de ruwe bytes. Detecteert elke verandering, inclusief het herschrijven van de /ID.
Teksthash — de genormaliseerde tekstlaag, met de metadata eruit gestript. Dit is je inhoudsvingerafdruk.
Visuele hash — de genormaliseerde gerenderde pagina's, zodat ook een gescand of op afbeeldingen gebaseerd document is gedekt.
Metadatahash — de genormaliseerde metadataset, apart geïsoleerd.
Omdat de lagen onafhankelijk zijn, kun je iets bewijzen wat een gewone checksum nooit zou kunnen. Stel dat je persoonlijke metadata uit een contract verwijdert voordat je het deelt, met een tool als metadata verwijderen. De bestandshash verandert en de metadatahash verandert, precies zoals verwacht. Maar de teksthash en de visuele hash blijven identiek. Die combinatie is het bewijs: de inhoud bleef onaangeroerd, alleen de metadata verschoof. Eén enkele byte-hash zou alleen "verschillend" zeggen en je niets vertellen over wat er werkelijk anders was.
De conclusie: pdfen berekent vier gelaagde hashes per bestand, zodat het oordeel onderscheid kan maken tussen "zelfde inhoud, andere metadata" en "de inhoud verschilt", een onderscheid dat geen enkele SHA-256-reeks kan uitdrukken.
Je maakt een vingerafdruk van het bestand op een bekend, betrouwbaar moment, bewaart die vingerafdruk en controleert hem later opnieuw. De workflow is gemaakt voor mensen die nooit een commandoregel zullen aanraken, wat de meeste advocaten, notarissen en compliance officers zijn. Upload de PDF, het Office-bestand, de afbeelding of de e-mail, en je krijgt een vingerafdruk-token plus een downloadbaar JSON-bestand ernaast. Dat token is je uitgangspunt.
Later plak je het token of het JSON-bestand terug in "Vergelijken met een opgeslagen vingerafdruk", en de tool vertelt je precies wat er is veranderd. De oordelen zijn in gewone taal, geen muur van hexadecimale tekens:
Identiek — bytes, inhoud en metadata komen allemaal overeen.
Zelfde inhoud en metadata; alleen de bytes verschillen — het onschuldige geval van een heropslag.
Zelfde inhoud, andere metadata — bijvoorbeeld gestripte of bewerkte metadata.
De inhoud verschilt — een echte wijziging in het document.
Voor e-mail maakt de tool een vingerafdruk per node, wat betekent dat elke bijlage zijn eigen set hashes krijgt. Dat is van belang wanneer een geschil draait om één PDF verstopt in een doorgestuurd bericht. Wil je twee bestanden rechtstreeks tegen elkaar controleren in plaats van tegen een opgeslagen uitgangspunt, dan toont de vergelijk-tool dezelfde gelijkheidsmatrix naast elkaar.
Het is de moeite waard om één grens duidelijk te benoemen. Bewijzen dat een e-mail is verzonden is een andere vraag dan bewijzen dat een bestand ongewijzigd is, en berust op verzendsignalen zoals SPF en DKIM in plaats van op bestandshashing. Dat behandel ik apart in bewijzen dat een e-mail verzonden is. Deze post blijft bij de identiteit van bestanden en PDF's.
Omdat de oudere algoritmen als bewijs gebroken zijn, en SHA-256 de huidige federale standaard is (NIST hash-functions project). Dit is geen theoretische voorzichtigheid. Botsingen in SHA-1 zijn aangetoond, niet slechts voorspeld. Het opensourceproject sha1collider produceert twee verschillende PDF's die dezelfde SHA-1-hash delen (nneonneo op GitHub).
Denk na over wat dat in een rechtszaal betekent. Als je integriteitsbewijs op SHA-1 draait, kan een tegenpartij betogen dat een overeenkomende hash geen overeenkomend bestand meer garandeert, omdat een botsing haalbaar is. Dat argument werkt niet tegen SHA-256. De uitkomst leeft in een ruimte van 2^256, en er is nog geen praktische botsing geproduceerd. Voor alles wat je mogelijk moet verdedigen: gebruik SHA-256 en kijk niet meer om.
Is een modern algoritme niet overdreven voor een interne documentcontrole? Niet echt. De kosten van het berekenen van SHA-256 zijn verwaarloosbaar, en er nu op standaardiseren betekent dat je een archief nooit later opnieuw hoeft te hashen wanneer het zwakkere algoritme uiteindelijk een audit niet doorstaat.
Niet rechtstreeks, en dat verrast mensen. Acrobat heeft geen simpele hash-knop voor "zijn deze twee bestanden byte-identiek." Het integriteitsmechanisme is gebaseerd op digitale handtekeningen met certificaten: het hasht het document, versleutelt de digest met het certificaat van de ondertekenaar en berekent bij openen opnieuw een hash om wijzigingen na ondertekening te detecteren (Adobe digital signature standards). Dat is werkelijk sterk, maar alleen als het document vooraf is ondertekend. Acrobats "Bestanden vergelijken" is een visuele en tekstuele diff, die antwoord geeft op "wat is er veranderd", niet op "is dit het cryptografisch identieke bestand."
Jouw vraag | Adobe Acrobat | pdfen-vingerafdruk |
|---|---|---|
Zijn deze twee bestanden byte voor byte identiek? | Geen specifieke hashcontrole | Bestandshash (SHA-256) |
Is de inhoud veranderd, los van een heropslag? | Bestanden-vergelijken-diff (visueel) | Tekst- + visuele hash |
Bewijs zonder het bestand vooraf te ondertekenen? | Nee; vereist een eerdere digitale handtekening | Ja; vingerafdruk van elk bestaand bestand |
Werkt op e-mail en bijlagen? | Nee | Ja, per node |
Bruikbaar zonder technische kennis? | Deels | Ja, oordelen in gewone taal |
Acrobat en pdfen lossen overlappende maar verschillende problemen op. Ondertekende je het document vooraf, dan is Acrobats handtekening uitstekend. Krijg je vandaag een bestand aangereikt met de vraag "is dit hetzelfde als wat we vorig jaar indienden", dan heb je een vingerafdruk nodig, geen handtekening. Adobes eigen prijzenpagina dekt de abonnementskant als je de handtekeningworkflow wilt.
Omdat het opslaan van een PDF verborgen bytes herschrijft, voornamelijk de /ID-waarde in de bestandstrailer, zelfs als er zichtbaar niets verandert. Twee qua inhoud identieke PDF's leveren dan verschillende SHA-256-hashes op (iText). Het is normaal gedrag, geen manipulatie. Een tekst- of visuele hash negeert die verpakking en bevestigt dat de inhoud hetzelfde is.
Een overeenkomende hash bewijst dat twee bestanden byte voor byte identiek zijn, wat sterk bewijs is van gelijkheid en integriteit. Maar een hash alleen bewijst niet wie een bestand veranderde of wanneer. Binnen het kader van de Amerikaanse Federal Rules of Evidence ondersteunen hashes de authenticatie (Duke Judicature), het sterkst in combinatie met een vertrouwd tijdstempel of handtekening. Het ondersteunt de toelaatbaarheid; het garandeert die niet.
Upload het bestand naar de vingerafdruk-tool van pdfen en je krijgt de SHA-256-bestandshash plus drie op inhoud gebaseerde hashes, zonder terminal. Dit is belangrijk voor niet-technische gebruikers; Adobe-forumdraden laten mensen zien die willen verifiëren dat een download ongewijzigd is zonder enige CLI (Adobe Community). Je krijgt ook een op te slaan token en een downloadbaar bewijs-PDF.
Ja, en hier bewijzen aparte hashes hun nut. Na het verwijderen van metadata veranderen de bestandshash en de metadatahash, maar de teksthash en de visuele hash blijven identiek. Die combinatie bewijst dat de inhoud onaangeroerd bleef. Eén enkele byte-hash kan alleen "verschillend" zeggen, wat ten onrechte zou suggereren dat het document zelf is bewerkt terwijl alleen de metadata verschoof.
Niet voor iets wat je mogelijk moet verdedigen. Botsingen in SHA-1 zijn aangetoond: het project sha1collider bouwt twee verschillende PDF's met dezelfde SHA-1-hash (GitHub). SHA-256 is de federale standaard (NIST FIPS 180-4) en kent geen praktische botsing. Behoud de oude hash voor legacy-opzoekingen als het moet, maar baseer bewijs op SHA-256.
Bewijzen dat een PDF identiek is, of dat er niets aan is veranderd, is genuanceerder dan "vergelijk de hash." De byte-hash vertelt de waarheid, maar niet de hele waarheid, want een gewone opslagactie verandert de bytes zonder het document aan te raken. Het scheiden van de bestands-, tekst-, visuele en metadatahash is wat een verwarrend verschil omzet in een helder oordeel.
Wil je die helderheid zonder terminal, maak dan een vingerafdruk van je bestand met de vingerafdruk-tool van pdfen, bewaar het token en controleer het opnieuw zodra er een vraag opkomt. Om twee bestanden tegen elkaar af te wegen, gebruik je bestanden vergelijken. En onthoud de eerlijke grens: een hash bewijst gelijkheid, niet auteurschap of tijdstip. Combineer hem daarvoor met een vertrouwd tijdstempel of handtekening. Zo gebruikt, geeft een vingerafdruk je bewijs waar je achter kunt staan.
Door Daan van Tongeren, oprichter van PDFen.
PDFen, IlovePDF en Freeconvert.com bieden allemaal goed werkende en snelle hulpmiddelen om documente...
PDF/A is onbekend, maar daarmee niet minder essentieel. Met PDF/A kunt u uw bestanden jarenlang veil...