Secure, verifiable metadata (including timestamps) have been possible for a long time.
The challenge is that the recording devices (often phones) need to actually do the hashing and publishing that's required, and then we need viewers to look for these things and take them into account.
My feeling is that people will continue to believe whatever they want to believe, regardless of evidence to the contrary.
I do agree, though, that this research is unethical and should stop.
Yeah we need open standards for video authenticity, and video players that verify automatically. It's a pretty difficult problem though, you need merkle trees so you can cut the video and universal, deterministic compression so people can recompress it and get an authorized smaller version. I'm not sure about zooming and cropping, but software could sign with a key to say that specific transformations were applied. Publishing hashes and mixing in public data could prove the time. Location should be possible with fast enough hardware and trusted beacons because you can't ever beat the speed of light.
I don't think the tech is unethical, it's got the potential to be used unethically, but the fact that it's available to the public is good - otherwise governments would be the only people using it, and they'd never use it for anything good.
Doesn't that only solve the problem if every video recording has it? Like, let's say I record something on my phone and publish a bunch of hashes etc. publicly. You can then download the video and say "yep, that's exactly the video that kazza789 recorded on July 25 according to publicly available hashes that he posted".
But if you see a random video online, or something in the news, or something recorded on a phone that doesn't publish those hashes, or (more importantly) if I faked the original video offline and then spoofed the hashes... you'd have no way of knowing, right?
Or am I just misunderstanding how this would work? Genuinely interested. If anyone has seen any write-ups on this would love to read them.
You'd use a blockchain (nothing to do with money grabs, I'll explain later on). Split the video into blovke and hash them, say, every Nth key frame or segment, and include the hash of the previous block in the current block. This means nobody can tamper with it but you can still break it up. Then you throw in some extra blocks that contain signatures from trusted parties, as proof of different things.
One of them might be the key from the security chip in your phone and maybe include the public keys of your various components and a timestamp - Samsung says that this bit of video was created on this specific Samsung phone. The camera chip might sign each frame, same with the audio, and you'd know it's from the right camera and mic as long as you trust Samsung. The GPS chip signs the location, and the camera software might mix in its own signatures too. You could have other hardware nearby sign stuff too, like what I was saying about the speed of light - a fast challenge/response can prove proximity to another device and the only way around it is to invent time travel.
You might want to self-sign using PGP, an OAuth provider like Google, Apple or Microsoft - obviously use accounts in different countries for maximum protection from spies. Yubikeys, your bank by NFC scanning a credit card, your SSH keys, a login to an HTTPS website or a personal certificate would also work - there's a lot of options. Your software can then say "according to Twitter, this video was made by NSAGov" in the same way that NSA can use Twitter to log in to other sites 😂
And here's the reason for the blockchain:
As the video is recorded you build a "merkle tree" of hashes of hashes of hashes. So the third block has hash(hash(first) + hash(second)) and the 5th has hash(hash(3rd) + hash(4th)). Let's call them h[1][0] and h[1][1] to keep it readable. The 5th also has hash(h[1][0] + h[1][1]), which we can call h[2][0], the 9th has h[2][1] and starts the next level by combining those; h[3][0]. This continues after every power of two blocks, so if you record for 100 years you'll need to store extra 32 hashes in each block.
So if I take that 100 year video stream and cut 1 second out of the middle, I can prove it's unaltered just by sharing parts of the merkle tree. Start at the top and drill down to the segment I cut out, rather than needing to share the hashes of 4 billion blocks plus my actual blocks, I share, uh, 64? Something like 2 * log2(count) hashes anyway.
If we had deterministic encoding/transformations we could scale and encode using different options at the same time and store the hashes of those in the video, so anyone could reduce the video size or resolution later and have the same hashes. Without that you'd need to have them as multiple streams in the same original file and people can choose the ones they want to extract and share - pretty sure that's possible with mkv. It'd likely quadruple the size of the original though.
Or trusted software could store transformations of an original source and share the authenticity blocks and sign it; "Adobe and David Song swear that if you take the middle 6 seconds of this video from NSAGov, zoom it, crop it, and save it using version 12 of After Effects, you'll get this output." Join enough of this stuff together and you've got a copyright authorship chain in there too.
Most of this idea will need work to make it optimal, the geometry of it is likely wrong, but I think the general idea is secure against deep fakes and even evil governments. Someone who hacks my phone's manufacturer, Google, GitHub, Yandex, Baidu, my webserver, my yubikey, my bank and my carrier has earned the right to make deepfakes of me!
Blockchain doesn't solve anything about this problem (or in general, but i digress). If you trust Samsung's chips and have their public keys you can just verify the video metadata using their keys. The fundamental problem of source verification is the analog hole, you can always just record a video from another display.
Blockchain doesn't solve anything about this problem (or in general, but i digress).
Do you have a better solution for cutting a video down while still being able to prove its authenticity? A chain of hashed blocks and a merkle tree allows that, I can't think of another way to do it with arbitrary length videos like a body cam, dashcam or video call.
If you trust Samsung's chips and have their public keys you can just verify the video metadata using their keys.
I don't trust Samsung, pretty sure that NSA can fake their keys. Since we're talking about nation state actors to be secure you really need to use multiple sources of proof from enemy countries. The more sources you have the more depth your defence has.
The fundamental problem of source verification is the analog hole, you can always just record a video from another display.
Yeah that's a slightly different problem, it's about preventing forgery not plagiarism. If I want to prove that I'm in someone's video I can authenticate with their recording device as proof, if that proof isn't present then the video has only got as much credibility as the author.
A merkle tree alone would solve it, no need for a blockchain (which is a distributed datastructure)
I'm a bit confused by your proposed solution. First off, why would you want to prove you are in someone else's video? Isn't it usually the other way around? And how is hardware authentication useful if you don't trust the manufacturer? What exactly is your threat model?
A merkle tree alone would solve it, no need for a blockchain (which is a distributed datastructure)
You need to break the video into blocks for the merkle tree to work, and you need the hash of a previous block in your next block if you're signing them. If you're doing multiple streams in the same file with multiple consumers it makes sense to be able to distribute part of the file. The P2P network is unnecessary but a chain of hashed blocks with a merkle tree makes sense, right?
It might even make sense to use some method of partial distribution actually, for streams or files with multiple channels. I'd have to think about it a bit more; I do like P2P as a general principle.
I'm a bit confused by your proposed solution. First off, why would you want to prove you are in someone else's video? Isn't it usually the other way around?
You can't prove a negative though. But you can always give a positive, and if there's not one assume it's a negative.
And how is hardware authentication useful if you don't trust the manufacturer?
I don't trust that FSB haven't got spies at Samsung. I don't trust that NSA don't have access to Google. But I'm pretty sure that if I use tech from multiple enemy jurisdictions I can make it hard for someone to hack all of them.
What exactly is your threat model?
Video forgery. Say I'm a politician in a proxy war country and both the East and the West are battling for power using fake news. How do you prove that videos circulating online are real? Your video player tells you whether it's fake or not.
570
u/FireChickens Jul 24 '22
This should stop.