ZKP+图片授权——PhotoProof:proofs of permissible photo edits

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZKP+图片授权——PhotoProof:proofs of permissible photo edits相关的知识,希望对你有一定的参考价值。

1. 引言

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可为其选择的任意照片签名。

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

  • 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的主要内容,如果未能解决你的问题,请参考以下文章

ZKP大爆炸

ZKP应用:石头剪刀布游戏

ZKP用途?

ZKP方案衍变及对比

ZKP编程语言概览

Anoma中的ZKP技术