Trisha Datta和Dan Boneh 2022年9月博客 Using ZK Proofs to Fight Disinformation指出,当今找到某数字图像的来源和获取时间 变得越来越困难。图像来源在新闻媒体领域尤其值得关注,可避免信息误传。
开源代码实现为:
理想情况下,图像应包含地理位置和时间戳信息,并附加这些信息的正确性证明。当用户在某线上新闻稿中看到该图片时,可根据相应的proof来验证地理位置和时间戳信息,从而无需信任文章的发布者 或 第三方事实追踪网站。可通过类似浏览器扩展程序的方式来自动探测和验证这样的proof。本文接下来将探讨如何实现类似的系统。
内容来源和真实性联盟(C2PA,Coalition for Content Provenance and Authenticity)提出了C2PA Technical Specification提出了一种基于数字签名的检验图像来源的标准。相机在拍摄时会自动附加一系列关于该照片的断言(如位置、时间戳)。但是,这些相片并不会直接发布,在发布到新闻报道中之前,它们通常会被裁剪、调整大小,并可能转换为灰度。一旦修改了,公众就不再是对原始图像验签,因为发布的修改版的照片。在C2PA标准中,当某签名照片被C2PA-enabled编辑应用程序 修改后,该编辑应用会对修改的地方进行签名。公众可验证这些签名来验证公开发布照片的位置和时间戳。
C2PA的这种方案存在一个问题:其需要信任编辑软件会对修改之处进行正确签名。若某adversary可提取编辑软件的签名密钥,则在仍然遵循C2PA协议的前提下,仍可为任何照片生成有效签名。这将让诚实的验证者信服该伪造的照片是一张有效的照片,尽管事实上该照片是伪造的是无效的。类似的,若该编辑软件有某个软件漏洞,使得在无需提取该编辑软件签名密钥的情况下,adversary可为其选择的任意照片签名。
为此,需要某种方案来对已签名照片进行编辑,使得仅有编辑过照片的人,可确信:
整个方案无需信任编辑软件。
为证明编辑后的相片来源,可使用succinct zero-knowledge proofs。所谓zero-knowledge proof,是指声称其知道某个秘密witness,用户可在不知道该秘密witness是什么的情况下,验证该声称是正确的。zero-knowledge proof,应具有如下属性:
这些属性使得Verifier无需信任Prover,从而解决了C2PA协议中的信任问题。
对于在线新闻系统,其新闻稿内的每张照片,将附加如下信息:
该succinct zero knowledge proof用于证明如下声明:
仅当其伴随有一个有效的零知识证明 且 对原始照片所做的一系列修改是“permissible”的 时,观众才接受该照片。“permissible”是指不会从根本上改变照片内容的编辑。(Associated Press示例)
在本方案中,强调了未修改照片及其签名 是秘密witness的一部分,对公众不可得。观众仅能看到修改后的照片、其metadata 以及 相应的零知识证明。“零知识”属性可确保原始照片仍是保密的:这是必须的,因原始照片中包含了需裁减掉的敏感内容。
2016年Naveh 和 TromerPhotoProof: Cryptographic Image Authentication for Any Set of Permissible Transformations论文中,为多种图片编辑(包括裁剪、换位、翻转、旋转和调整对比度/亮度)实现了零知识证明。这些工作展示了为相片编辑 编写零知识证明的灵活性,但其所实现的证明时间过长,所以并不实用。
幸运的是,过去6年来的技术进步,使得可在可行时间内,为相片编辑 生成零知识证明。为此,编写了一个程序来为裁剪、调整大小、灰度转换 创建零知识证明。裁剪、调整大小、灰度转换 这些都是Associated Press所允许的修改。该程序以circom语言来实现的。每个circom程序会生成一个零知识证明,以验证对于一系列(可能是秘密的)输入,其满足一系列约束。
本实现中:
以裁剪修改为例,程序如下非常直观:【即证明 新图片 与 裁剪范围内的原始图片 具有完全相同的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