我写一个简单的 JPEG 图片防篡改工具. 希望大家帮我看看有没有漏洞可以钻.
主要思路是对 JPEG 图片进行签名并将签名信息写入 EOI 文件尾, 若签名后的图片内容有任何的改动(不包括修改文件名), 则无法通过验证, 以此来检测该图片相较于签名前的图片是否有改动过.
项目已上传至GitHub
$ pixelguard sign -i official.jpg -o output_official.jpg # 将签名信息写入图片尾部
JPEG file signature successful!
$ pixelguard verify output_official.jpg # 图片未被修改
This JPEG file has not been tampered with.
$ exiftool -Artist="happy-shine" output_official.jpg # 修改 EXIF 信息(或修改像素点之类的操作)
1 image files updated
$ pixelguard verify output_official.jpg # 再次验证, 检测到图片内容被修改
Warning: This JPEG file has been tampered with!
1
vus520 26 天前
截屏缩放裁剪呢?
|
3
hatw 26 天前
比较 MD5 啥的不也一样?
|
6
alexsz 26 天前
一时想不出有哪些应用场景
|
8
NoOneNoBody 26 天前 1
EOI 就是 ffd9 之后吧,这些截了也不影响图片显示,不少图片存储的服务器是直接截了的,避免借传图片之名传不当信息
如果截了之后,如何自举? |
9
voidshine OP @NoOneNoBody 这个确实是一个问题, 还不知道咋解决, 现在的做法是直接当成被修改过了, 不接受识别不了签名的图片:
$ pixelguard sign -i official.jpg -o output_official.jpg JPEG file signature successful! $ pixelguard verify official.jpg # 原图, 没有签名信息 Warning: This JPEG file has been tampered with! |
10
iqoo 26 天前
还以为利用水印信息存储签名呢
|
11
voidshine OP @NoOneNoBody 其实好像就是自举不了, 仅针对已经签过名的图片的篡改识别, 未签名 或 签名信息被破坏 或 签名信息与图片信息对不上 的都算被篡改过了
|
12
ltyj2003 26 天前 via Android 1
人家篡改完重新生成个签名信息替换,阁下当如何应对?
|
14
yhnbgfd 26 天前
一直在想有什么场景,
比如, 以后手机截图自带签名功能, 以后各种屏幕截图拿去验签一下就知道是真截的还是 p 的? 额, 如果我直接截屏 P 的图片阁下..额 |
17
TimG 26 天前 via Android
@voidshine 13# 这种情况也能自举?不用存储旧信息就能实现吗?如果旧验证信息同样存在于文件内那就存在被一起篡改的可能,否则理论上就没法自举,如果能同时实现,确实是有巧思,佩服。
|
18
kera0a 26 天前 via iPhone
下一步是不是要引入 ca 了😄
|
19
voidshine OP @Yukineko 是的,但是可以将一台机器上的 gpg 公钥私钥导出为文件,然后 scp 到目标服务器再导入,就能识别了。做这个的初衷就是上传到本服务器的 jpeg 要被打上签名,用户下载的图片是带签名的图片
|
20
cavan 26 天前
可以考虑图像数字水印技术,这种技术可以保证图片肉眼看不出内容变化的情况下,隐写版权信息进去。比如对图像矩阵进行离散余弦变换后,把版权信息写入到矩阵的左上角,然后再离散余弦反变换回 jpeg 图像,这样截图、缩放、旋转后,版权信息一般都还在。
|
21
voidshine OP @cavan 之前参考过这个 ,挺厉害的. https://github.com/guofei9987/blind_watermark
|
22
qdwang 26 天前
我目前只想到一种适用情况。就是怕云服务器把我图片改了。。。其他好像没什么用?
|
24
Greatshu 25 天前
一个场景是监控录像机给下载的图片签名,保证是图片没有修改
|