1. 引言

Trisha Datta和Dan Boneh 2022年9月博客 Using ZK Proofs to Fight Disinformation指出,当今找到某数字图像的来源和获取时间 变得越来越困难。图像来源在新闻媒体领域尤其值得关注,可避免信息误传。

开源代码实现为:

  • https://github.com/TrishaDatta/circom-circuits(circom)

理想情况下,图像应包含地理位置和时间戳信息,并附加这些信息的正确性证明。当用户在某线上新闻稿中看到该图片时,可根据相应的proof来验证地理位置和时间戳信息,从而无需信任文章的发布者 或 第三方事实追踪网站。可通过类似浏览器扩展程序的方式来自动探测和验证这样的proof。本文接下来将探讨如何实现类似的系统。

内容来源和真实性联盟(C2PA,Coalition for Content Provenance and Authenticity)提出了C2PA Technical Specification提出了一种基于数字签名的检验图像来源的标准。相机在拍摄时会自动附加一系列关于该照片的断言(如位置、时间戳)。但是,这些相片并不会直接发布,在发布到新闻报道中之前,它们通常会被裁剪、调整大小,并可能转换为灰度。一旦修改了,公众就不再是对原始图像验签,因为发布的修改版的照片。在C2PA标准中,当某签名照片被C2PA-enabled编辑应用程序 修改后,该编辑应用会对修改的地方进行签名。公众可验证这些签名来验证公开发布照片的位置和时间戳。

C2PA的这种方案存在一个问题:其需要信任编辑软件会对修改之处进行正确签名。若某adversary可提取编辑软件的签名密钥,则在仍然遵循C2PA协议的前提下,仍可为任何照片生成有效签名。这将让诚实的验证者信服该伪造的照片是一张有效的照片,尽管事实上该照片是伪造的是无效的。类似的,若该编辑软件有某个软件漏洞,使得在无需提取该编辑软件签名密钥的情况下,adversary可为其选择的任意照片签名。

为此,需要某种方案来对已签名照片进行编辑,使得仅有编辑过照片的人,可确信:

  • 1)原始的未编辑照片签名正确,具有其所声称的拍摄时间和地点;
  • 2)对原始签名照片,仅有允许的修改,如裁剪、调整大小、灰度转换。

整个方案无需信任编辑软件。

为证明编辑后的相片来源,可使用succinct zero-knowledge proofs。所谓zero-knowledge proof,是指声称其知道某个秘密witness,用户可在不知道该秘密witness是什么的情况下,验证该声称是正确的。zero-knowledge proof,应具有如下属性:

  • 1)完备性:对于正确的声明,验证将高概率成功;
  • 2)可靠性:对于错误的声明,验证将高概率失败;
  • 3)零知识性:意味着不会泄露秘密witness。(本场景是指不会泄露原始图像)

这些属性使得Verifier无需信任Prover,从而解决了C2PA协议中的信任问题。

对于在线新闻系统,其新闻稿内的每张照片,将附加如下信息:

  • 1)metadata信息(如位置和时间戳)
  • 2)对原始图片的修改描述
  • 3)a succinct zero knowledge proof

该succinct zero knowledge proof用于证明如下声明:

  • 1)Prover知道某未编辑照片由某C2PA相机正确签名;
  • 2)该未编辑签名照片的metadata 与 某公开照片的metadata 一致;
  • 3)新闻稿内的公开照片为 未编辑照片 + the claimed edits。

仅当其伴随有一个有效的零知识证明 且 对原始照片所做的一系列修改是“permissible”的 时,观众才接受该照片。“permissible”是指不会从根本上改变照片内容的编辑。(Associated Press示例)

在本方案中,强调了未修改照片及其签名 是秘密witness的一部分,对公众不可得。观众仅能看到修改后的照片、其metadata 以及 相应的零知识证明。“零知识”属性可确保原始照片仍是保密的:这是必须的,因原始照片中包含了需裁减掉的敏感内容。

2016年Naveh 和 TromerPhotoProof: Cryptographic Image Authentication for Any Set of Permissible Transformations论文中,为多种图片编辑(包括裁剪、换位、翻转、旋转和调整对比度/亮度)实现了零知识证明。这些工作展示了为相片编辑 编写零知识证明的灵活性,但其所实现的证明时间过长,所以并不实用。

幸运的是,过去6年来的技术进步,使得可在可行时间内,为相片编辑 生成零知识证明。为此,编写了一个程序来为裁剪、调整大小、灰度转换 创建零知识证明。裁剪、调整大小、灰度转换 这些都是Associated Press所允许的修改。该程序以circom语言来实现的。每个circom程序会生成一个零知识证明,以验证对于一系列(可能是秘密的)输入,其满足一系列约束。

本实现中:

  • 输入为原始图片、新图片(如新闻稿上展示的图片),与编辑相关的参数,the constraints assert that the new photo is obtained by performing the edit with the given parameters on the original photo。

以裁剪修改为例,程序如下非常直观:【即证明 新图片 与 裁剪范围内的原始图片 具有完全相同的RGB值】

pragma circom 2.0.0;template Crop(hOrig, wOrig, hNew, wNew, hStartNew, wStartNew) {signal input orig[hOrig][wOrig][3];signal input new[hNew][wNew][3];signal output n_check;for (var i = 0; i <  hNew; i++) {for (var j = 0; j < wNew; j++) {for (var k = 0; k < 3; k++) {new[i][j][k] === orig[hStartNew + i][wStartNew + j][k]; }       }       }n_check <== 1;}component main = Crop(700, 700, 350, 350, 0, 0);

裁剪证明生成时间情况为:

以调整大小编辑为例,其程序内容为:【即证明 新图片 通过bilinear resizing 从原始照片中获得。即resized image中每个像素的RGB值计算为:原始图片中相邻4个元素RGB值的weighted linear combination。以下程序基于tensorflow image resizing操作的Understanding Bilinear Image Resizing算法。】

pragma circom 2.0.0;
template Resize(hOrig, wOrig, hNew, wNew) {signal input orig[hOrig][wOrig];signal input new[hNew][wNew];signal output n_check;for (var i = 0; i < hNew; i++) {for (var j = 0; j < wNew; j++) {var x_l = (wOrig - 1) * j / (wNew - 1);var y_l = (hOrig - 1) * i / (hNew - 1);var x_h = x_l * (wNew - 1) == (wOrig - 1) * j ? x_l : x_l + 1;var y_h = y_l * (hNew - 1) == (hOrig - 1) * i ? y_l : y_l + 1;var xRatioWeighted = ((wOrig - 1) * j) - (wNew - 1)*x_l;var yRatioWeighted = ((hOrig - 1) * i) - (hNew - 1)*y_l;var denom = (wNew - 1) * (hNew - 1);var sum = orig[y_l][x_l] * (wNew - 1 - xRatioWeighted) * (hNew - 1 - yRatioWeighted)+ orig[y_l][x_h] * xRatioWeighted * (hNew - 1 - yRatioWeighted)+ orig[y_h][x_l] * yRatioWeighted * (wNew - 1 - xRatioWeighted)+ orig[y_h][x_h] * xRatioWeighted * yRatioWeighted;new[i][j] * denom === sum;     }       }n_check <== 1;
}component main = Resize(3, 6, 3, 2);

为调整大小编辑生成证明用时为:

灰度化编辑证明程序为:【即对原始图片的RGB值 运用How Photoshop Translates RGB Color to Gray算法 获得新图片的RGB值——对某像素的RGB值进行加权线性组合:grayValue = 0.30R + 0.59G + 0.11B。未避免其中的浮点运算,实际代码中放大了100倍,将余值作为secret witness的一部分传给rounding calculation。】

pragma circom 2.0.0;
template GrayscaleChecker(n) {signal input orig[n][3];signal input gray[n];signal input negativeRemainder[n];    signal input positiveRemainder[n];signal output n_check;for (var i = 0; i < n; i++) {      30 * orig[i][0] + 59 * orig[i][1] + 11 * orig[i][2] === 100 * gray[i] - negativeRemainder[i] + positiveRemainder[i]; }n_check <== n;
}component main = GrayscaleChecker(2);

为 灰度化编辑 生成证明所需用时为:

以上所有用时都是基于在笔记本内虚拟机运行计算的。
纽约时报上的图片通常会调整为2048x1363像素,可等比例放大,认为生成裁剪证明用时约103秒,生成resizing证明用时约287秒,生成灰度化证明用时约323秒。使用更强的机器,实际用时将缩短。因为这些证明仅需要生成一次,用时可满足实际应用。验证proof时间与image size无关,仅需要几百毫秒。

参考资料

[1] twitter 头脑风暴:proofs of permissible photo edits
[2] Trisha Datta和Dan Boneh 2022年9月博客 Using ZK Proofs to Fight Disinformation

ZKP+图片授权——PhotoProof:proofs of permissible photo edits相关推荐

  1. 微信小程序保存canvas绘制的图片到本地,拒绝图片授权后继续授权

    authorizeSaveImg() { //重新授权相册const that = this;wx.getSetting({success(res) {// 第一,直接调取保存,系统会自动调取授权if ...

  2. 微信小程序-如何实现图片授权保存本地?【亲测有效,附完整源码】

  3. HitPaw Photo Enhancer(图片无损放大软件)官方正式版V1.0.1.7 | 基于ai人工智能图片清晰算法的增强照片清晰度的软件

    HitPaw Photo Enhancer 是一款优秀的图片无损放大软件,采用了先进的ai人工智能图片清晰放大技术,只需三步就能帮助用户一键放大图片并修复模糊的图像使之质量更好,也就是大家常说的增强照 ...

  4. DVDFab Photo Enhancer AI (AI图片无损放大软件)官方中文版V1.0.2.3 | 图片无损放大器

    DVDFab Photo Enhancer AI 是一款实用的AI图片无损放大软件,可以帮助用户在不损失原图片任何质量的情况下进行ai图片清晰化和放大操作,同时还具备图像美化.图片降噪.图像锐化.黑白 ...

  5. 响铃:百度图腾要做正版授权平台,它能解决图片版权双向痛点吗?

    文|曾响铃 来源|科技向令说(xiangling0815) 继数字音乐.游戏.影视等版权问题后,图片版权问题近来成为版权领域的热门,与版权问题天然亲近的区块链免不了掺和一下,7月,百度就推出了基于区块 ...

  6. python 图片对比文件夹_初学Python-找出文件夹下的所有图片

    这个命题,有2种含义. 1.找出指定某个文件夹目录下的图片 2.找出指定某个文件夹及其子文件夹下的图片 两者的区别在于,子文件夹的图片是否需要找出来.对应的处理方法也略微有所区别,下面具体讲解一下.找 ...

  7. python运行完不能显示图_【已解决】Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片...

    [问题] 在windows的cmd命令行下,使用Python的PIL库打开并显示一个jpg图片:openedImg = Image.open(saveToFile); print "open ...

  8. Android之ListView异步加载图片且仅显示可见子项中的图片

    折腾了好多天,遇到 N 多让人崩溃无语的问题,不过今天终于有些收获了,这是实验的第一版,有些混乱,下一步进行改造细分,先把代码记录在这儿吧. 网上查了很多资料,发现都千篇一律,抄来抄去,很多细节和完整 ...

  9. python自动上传图片_使用Python实现一个简单的图片上传存储服务

    使用flask实现的一个简单的图片上传服务 设计初衷 对于图片的存储,有很多选择,一般采用云服务如(七牛,又拍等),但是国内的服务像七牛 自定义域名竟然需要域名备案(Excuse me,当初就是因为备 ...

  10. Team photo的新api

    Graph API的更新速度真是快,今年9月中旬又增加了关于Team photo的两个新的api. https://docs.microsoft.com/en-us/graph/api/team-ge ...

最新文章

  1. CSS之布局(行内元素的盒模型)
  2. bootstrap的日期选择器 完整源码demo附效果图
  3. 今日 Paper | 手部和物体重建;三维人体姿态估计;图像到图像变换等
  4. 设计模式-----单例模式
  5. 【数据结构与算法】之深入解析图的拓扑排序
  6. 一图胜千言!Python数据可视化多维讲解
  7. 传三星8英寸Galaxy Tab 3平板最早将于6月上市
  8. P5494-[模板]线段树分裂
  9. python中的 descriptor
  10. fastreport dll_报表如何连接到VistaDB嵌入式数据库?FastReport.Net轻松搞定
  11. python 3.7下载安装scrapy_win10上python3.7安装scrapy1.5.1
  12. 快速排序—三路快排 vs 双基准
  13. Kotlin的基本数据类型
  14. 在苹果Mac中如何将html网页转成PDF文件?
  15. Tapestry5 开发过程中问题收集
  16. 物联网工程导论第二版思考题答案
  17. 千古绝唱——陆游和唐琬
  18. 手机屏幕如何投屏到电脑上(Windows10)
  19. 微信群抽奖,有什么好用的抽奖小程序?
  20. Hadoop新手篇:hadoop入门基础教程 1

热门文章

  1. 算法创作|什么是数据结构
  2. 【luoguP1922】女仆咖啡厅桌游吧
  3. java listview用法_2.4.5 ListView简单实用
  4. zabbix如何自定义一个监控项对web网站进行存活监控和报警?
  5. pycharm逗号后面补空格_解决在pycharm 中复制代码时出现空格的方法
  6. java Android 生成6位随机数字
  7. Python3 插入排序
  8. VS下使用LoadLibrary加载dll失败
  9. 磁盘管理、进程管理、文件系统、软硬链接详细文档
  10. JAVA阻止继承:final类和方法