零知识证明是关于秘密见证的陈述,除了该陈述是真实的之外,用户无需了解该见证的任何信息即可验证该陈述
原文:Using ZK Proofs to Fight Disinformation
编译:Kurt Pan
原用标题(译后):使用零知识证明对抗虚假信息
封面:Photo by Micaela Parente on Unsplash
验证数字图像的拍摄时间地点变得越来越困难, 图像出处在新闻媒体领域尤为重要。 俄罗斯在 2 月入侵乌克兰后,网上流传的几张照片和视频 对冲突进行了错误的声称。 一个例子是两张照片的所谓的一一对比。 第一张据称是俄罗斯空袭后的叙利亚,第二张据称是俄罗斯入侵后的乌克兰。 《今日美国》后来的分析显示,第一张照片实际上是 2017 年在伊拉克拍摄的,而第二张照片虽然确实是乌克兰的,但拍摄于入侵前两周。 虽然这些事实核查服务是重要的,但如果个人能够亲自验证照片的出处,他们将避免去依赖第三方,并使他们能够保护自己免受此类假消息的侵害。
在一个理想的世界里,照片会带有地理位置和时间戳,以及这些信息是正确的证明。 这样的话,如果用户在在线新闻文章中看到一张照片,他可以使用提供的证明来验证照片的拍摄时间地点,而且无需信任文章的发布者或第三方事实核查网站。 这种验证可以通过诸如一个可以自动检测和验证这些证明的浏览器扩展之类的东西来进行。 这篇博文的其余部分讨论了我们做出这样的一个系统的尝试。
内容出处和真实性联盟 (C2PA) 提出了一个依赖于数字签名的标准来验证图像出处。 相机会 “数字签名”每张拍摄的照片以及一系列关于照片的断言(例如位置、时间戳)。 但是,照片并非会按原样发布; 在发布到新闻报道中之前,它们通常会被裁剪、调整大小,还可能转换为灰度图片。 一旦进行了这些编辑,公众就无法再验证原始图像上的签名,因为只有编辑后的图像会被发布。 在 C2PA 标准中,当使用开启 C2PA 的应用对签名的照片编辑时,编辑应用将对发生的编辑进行签名。 公众可以验证这些签名以验证已发布照片的位置和时间戳。
这种 C2PA 方法的一个问题是它依赖于信任编辑软件来对编辑操作签名的正确性。 如果敌手可以从编辑软件中提取签名密钥,则他可以对其想要的任何图像生成有效签名,同时仍然遵循 C2PA 协议。 这将使诚实的验证者相信伪造的图像是真实的照片,即使它并不是。 同样,即使没有提取软件的签名密钥,编辑软件中的软件漏洞也可能会让敌手可以签名他选择的任何图像。
因此,我们需要一种编辑签名过的照片的方法,使得只拥有经过编辑的照片的人也可以确保 (i) 原始未编辑的照片已被正确签名,并且是在所声明的时间和地点拍摄的,以及 (ii) 仅对签名过的照片进行了所允许的编辑,例如裁剪、调整大小和灰度。 该方案的安全性不应要求信任编辑软件。
为了证明编辑过照片的出处,我们使用简洁零知识证明。零知识证明是关于秘密见证的陈述,除了该陈述是真实的之外,用户无需了解该见证的任何信息即可验证该陈述。这些证明是完备的,意思是验证将以高概率在真实的陈述上成功;可靠的,意思是验证将以高概率的错误的陈述上失败;以及零知识的,意思是对原始图像没有任何信息泄露。这些性质意味着验证者不需要信任证明者,从而解决了 C2PA 协议带来的信任问题。
在上面描述的在线新闻系统中,我们将如下使用这些零知识证明。新闻文章中显示的每张照片都将附有其元数据(例如位置和时间戳)、对原始照片所做编辑的描述以及一个简洁零知识证明。该证明证明了以下陈述:
“证明者 (i) 知道一张由 C2PA 相机正确签名的未经编辑的照片,(ii) 未经编辑的签名照片上的元数据与附在公共照片上的元数据相同,以及 (iii) 新闻文章中的公开照片是对未经编辑的照片应用所声称的编辑的结果。”
仅当照片附有有效的零知识证明并且对原始照片进行的编辑列表是 “允许的” 时,查看者才会接受照片。 ” 允许的 “指不会从根本上改变照片内容的编辑(美联社的这份清单 中包含了一些示例)。
我们强调,未经编辑的照片及其签名是秘密见证的一部分,不向公众提供。 查看者只能看到编辑后的照片、其元数据和零知识证明。 “零知识” 性质确保了原始照片保持保密; 这在原始照片包含需要裁剪掉的敏感内容的情况下是可取的。
2016 年,Naveh 和 Tromer 为各种照片编辑操作实现了零知识证明,包括裁剪、转置、翻转、旋转和调整对比度/亮度。 虽然这项工作证明了为图像编辑生成零知识证明的可行性,但实现的证明时间太大因而无法实用。
幸运的是,过去六年取得的进步现在使我们能够在可行的时间内为图像编辑生成零知识证明了。 为了展示这一点,我们实现了程序来生成用于裁剪、调整大小和灰度转换的零知识证明,这些操作都包含在美联社发布的允许编辑列表中。 我们的实现是用 circom 编写的,circom 是一种设计用于生成零知识证明的语言。 每个 circom 程序都会生成一个零知识证明,用于验证一组(可能是秘密的)输入是否满足一组约束。 在我们的实现中,输入是原始照片、新照片(例如在线新闻文章中显示的照片)和与编辑操作相关的参数,并且约束断言了新照片是通过对原始照片以给定参数执行编辑获得的。 我们将在下面讨论用于生成证明的每个程序和及其运行时间。
裁剪证明生成程序非常简单,并创建约束断言了新照片与裁剪范围内的原始照片具有相同 RGB 值。 表 1 显示了该程序的运行时间结果。
原始大小 (像素 x 像素 ) | 大小改变后大小 (像素 x 像素) | 证明生成时间 (秒) |
---|---|---|
100 x 100 | 36 x 67 | 3.05 |
100 x 100 | 75 x 75 | 2.97 |
100 x 100 | 100 x 100 | 2.88 |
200 x 200 | 100 x 100 | 3.20 |
200 x 200 | 200 x 200 | 3.19 |
300 x 300 | 150 x 150 | 4.95 |
300 x 300 | 300 x 300 | 4.75 |
400 x 400 | 200 x 200 | 6.9 |
400 x 400 | 400 x 400 | 7.23 |
500 x 500 | 250 x 250 | 9.81 |
600 x 600 | 300 x 300 | 13.32 |
600 x 600 | 600 x 600 | 13.31 |
调整大小证明生成程序,创建约束断言可以通过双线性调整从原始照片中获得新照片,双线性调整通过采用原始图像中四个像素的 RGB 值的加权线性组合来计算调整大小后图像中每个像素的 RGB 值。 我们的 circom 程序实现了这篇博文中描述的大小调整逻辑,这与 tensorflow 的图片大小调整操作是一致的。 表 2 显示了该程序的运行时间结果。
原始大小 (像素 x 像素 ) | 大小改变后大小 (像素 x 像素) | 证明生成时间 (秒) |
---|---|---|
100 x 100 | 36 x 67 | 3.42 |
100 x 100 | 75 x 75 | 3.75 |
100 x 100 | 100 x 100 | 3.71 |
200 x 200 | 100 x 100 | 5.27 |
200 x 200 | 200 x 200 | 8.12 |
300 x 300 | 150 x 150 | 9.25 |
我们的灰度证明生成程序 创建了一些约束,断言新照片的 RGB 值可以通过将 Photoshop 使用的标准灰度计算 应用于原始照片的 RGB 值来获得。 此公式通过对 RGB 值进行加权线性组合来获得一个像素的值:grayValue = 0.30R + 0.59G + 0.11B。 为了适应该计算中涉及的浮点数,我们将我们的值缩放了 100 倍,并将余数作为秘密见证的一部分传递给舍入计算。 表 3 显示了该程序的运行时间结果。
像素 | 证明生成时间 (秒) |
---|---|
40,000 | 5.63 |
80,000 | 8.92 |
160,000 | 17.88 |
320,000 | 37.05 |
我们在运行在 Microsoft Surface Book 笔记本电脑上的 Hyper-V Ubuntu 虚拟机上进行了实验,最终在我们的时间测试实验受到了笔记本电脑内存的限制。 幸运的是,因为我们的时间呈像素的线性增长,所以我们可以估计出更大实验的运行时间。 例如,纽约时报上的照片一般都调整为 2048 x 1363 像素,我们可以估计对于这种尺寸的图像,生成裁剪证明大约需要 103 秒,生成调整大小证明大约需要 287 秒,生成灰度证明大约需要 323 秒 。 使用更强大的机器会大大缩短这些时间。 因为这些证明只需要生成一次,所以这样的时间是适合实际实现的。 验证时间与图像大小无关,只需不到几百毫秒。
免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。文章内的信息仅供参考,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。