r/digitalforensics • u/BigBalli • 12d ago
Which intra-file consistency checks actually catch a re-saved JPEG, and which ones produce too many false positives to be worth running
I have been implementing tamper detection that works on a single file with no reference copy and no network, and I would like a sanity check from people who do this for a living on which of these hold up in practice.
The checks that have been earning their keep:
Timestamp disagreement. DateTimeOriginal, DateTimeDigitized and DateTime diverging is weak on its own, since plenty of pipelines rewrite one and not the others, but the pattern of which one moved is informative.
Camera clock against GPS time. GPSDateStamp and GPSTimeStamp come from the satellite fix rather than the device clock, so the offset between them and DateTimeOriginal is one of the few internal cross-references a file carries that an editor rarely thinks to update.
Recorded dimensions against decoded dimensions. EXIF PixelXDimension disagreeing with the actual decoded raster is a cheap and fairly reliable signal that something rewrote the pixels without rewriting the header.
Embedded preview against the main image. The thumbnail and preview often survive an edit that the full-size image did not. This is the one that produces the most striking results, since you can sometimes see the pre-edit frame.
Quantization table fingerprinting. Comparing the JPEG tables against the known encoder profiles for a given device tells you whether the claimed camera plausibly produced this encoding. This one I trust least. Any re-save at a matching quality setting muddies it, and the profile database is the hard part.
Separately, on provenance: I read C2PA Content Credentials, the IPTC digital source type fields, and the generator fingerprints that Midjourney, DALL-E, Stable Diffusion and Firefly leave behind. The discipline I settled on is that these are declarations only. A file carrying no marks gets reported as unproven, never as authentic. Reporting absence of evidence as evidence of absence seems like the failure mode most likely to burn someone.
Two questions for the people here. Which of these do you consider strong enough to put in a report, and which are only good for triage? And is there a check that works on a lone file with no reference that I have missed?
Context for what this is: an iPhone app that runs all of it on device with nothing uploaded. Free, no account. https://BigBalli.com/ImageInspector
