使用全同态加密和Zama Concrete ML的加密图像水印

  • ZamaFHE
  • 发布于 2025-03-27 22:53
  • 阅读 22

本文介绍了Zama Bounty Program Season 7的获奖方案,该方案使用全同态加密(FHE)和Concrete ML实现了加密图像的隐形水印。该方案包含一个编码器神经网络(用于嵌入水印)和一个解码器神经网络(用于提取水印)。文章还讨论了该方案的性能和水印提取方法,以及其在版权保护、身份验证和篡改检测等方面的应用潜力。

博客

/

Concrete ML

工程

社区

使用全同态加密和 Zama Concrete ML 的加密图像水印

2025 年 3 月 26 日

-

Andrei Stoian


不可见图像水印是一种将隐藏信息嵌入到数字图像中而不明显改变其外观的技术。

在 Zama Bounty Program 第 7 季期间,我们挑战开发者社区开发一个系统,该系统可以使用 Concrete ML,Zama 的机密 AI 库,使用全同态加密 (FHE) 对加密图像执行不可见水印操作。鉴于生成式人工智能的最新发展和 欧盟人工智能法案 等监管举措,这种方法尤其具有现实意义,这些举措推动了对人工智能生成内容的可靠数字水印技术的发展。

实际上,FHE 可用于创建一个无需信任的服务,该服务允许在所有生成的图像上实现标准化,从而满足 GenAI 输出中对归属和可追溯性日益增长的需求。

应用包括:

  • 版权保护:证明所有权。
  • 身份验证:验证基于嵌入式水印的图像的真实性。
  • 篡改检测:识别和定位篡改。
  • 数字媒体跟踪:监控图像在平台上的分发和使用情况。

借助 FHE,所有这些应用都可以在不将原始内容暴露给水印服务的情况下执行,从而确保隐私并符合新兴法规。

关注获奖作品

以下两张图片在普通人看来可能完全相同,但其中一张包含不可见的水印。最先进的水印方法通常依赖于机器学习模型,而部署此类模型最方便的方法是通过在线服务。但是,这里有一个关键问题:用户如何确保上传到在线水印嵌入服务的图像保持私密?

在上面的示例中,右侧的图像(包含不可见的水印)是由 Github 用户 Soptq 使用 FHE 构建的 隐私保护机器学习 模型生成的。

它的模型包含两个部分:

  • 一个私下嵌入水印的编码器神经网络 (NN)。
  • 一个从图像中提取水印的解码器神经网络(如果存在)。

水印是一个 11 位的代码,为了提高其鲁棒性,它通过纠错方案进行了扩充,总共达到了 16 位。由于在使用 Concrete ML 时,量化感知训练 (QAT) 模型具有最佳的准确率-延迟权衡,因此获胜的解决方案使编码器网络适应 QAT 与 Brevitas 一起使用。通常,解码器用于检测公共图像上的任何水印,因此它没有转换为 FHE。

编码器概述。

编码器模型由两个主要模块组成:

  • 水印图像创建模块
  • 水印嵌入模块
def forward(self, image: torch.Tensor, watermark=None):
## 量化输入
watermark = self.quant_watermark(watermark)
watermark = self.watermark2image(watermark)

image = self.quant_image(image)
watermark = self.quant_image(watermark)
inputs = torch.cat([image, watermark], dim=1)

在上面的代码片段中,水印图像由水印位创建,然后与输入图像连接。quant_image 成员是一个 QuantIdentity Brevitas 量化器。由于两个输入已连接,因此它们必须共享相同的量化,如该代码所示。

forward 函数的第二部分创建一个带有跳跃连接的 MUNIT 图像转换网络。同样,对于连接的层输出,会小心地处理量化。

enc = []
x = self.pre(inputs)
for layer in self.enc:
    enc.append(x)
    x = layer(x)

enc = enc[::-1]
for i, (layer, skip) in enumerate(zip(self.dec, enc)):
    if i < self.config.num_down_levels - 1:
        x = layer(x, skip)
    else:
        skip = self.quant_dec(skip)
        inputs = self.quant_dec(inputs)
        x = layer(x, torch.cat([skip, inputs], dim=1))

欠采样和反射填充。

由于 Concrete ML 中无法使用多种类型的层,例如 Upsample、Repeat 和 Reflection Padding,因此赏金获得者使用其他 PyTorch 运算符优雅地实现了它们:

class QuantUpsample(nn.Module):
    def __init__(self, scale_factor):
        super(QuantUpsample, self).__init__()
        self.s = scale_factor

    def forward(self, x):
        n, c, h, w = x.shape
        out = x.reshape(-1, c, h, 1, w, 1)
        out = torch.cat([out] * self.s, dim=-3)
        out = torch.cat([out] * self.s, dim=-1)
        out = out.reshape(-1, c, h * self.s, w * self.s)
        return out

class Reflection1xPad2d(nn.Module):
    def __init__(self):
        super(Reflection1xPad2d, self).__init__()

    def forward(self, x):
        x_pad_right = x[:, :, :, [-2]]
        x_pad = torch.cat([x, x_pad_right], dim=3)

        x_pad_bottom = x_pad[:, :, [-2], :]
        x_pad = torch.cat([x_pad, x_pad_bottom], dim=2)

        return x_pad

模型编译和执行。

使用优化的量化参数编译模型:rounding_treshold_bits,它 可确保 准确率和延迟之间的最佳权衡。

quant_encoder = compile_brevitas_qat_model(
    encoder,
  (train_sub_set, secret_compile_set),
  rounding_threshold_bits={"n_bits": 7, "method": "approximate"},
  configuration=config,
  verbose=False,
  output_onnx_file="tmp.onnx",
)

在上面的代码中,train_sub_set 是图像的代表性集合,而 secret_compile_set 是一组带有错误代码的 16 位水印。Concrete ML 使用这两个集合来确定 FHE 兼容编译模型的密码参数。

最后,可以将该模型应用于具有 secret 变量中的新水印的加密图像输入:

encoded_input = quant_encoder.forward(
    input.numpy(),
    np.expand_dims(secret.numpy(), 0),
    fhe="execute"
)

水印最初是一个 11 位字符串,通过添加纠错位将其扩展为 16 位:

secret: tensor([[1., 0., 0., 0., 1., 0., 1., 0., 0., 1., 1.]])
secret+ECC: tensor([[1., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 1., 1.]])

关于性能的说明:在桌面 CPU 上,完整的执行过程大约需要 20 分钟,而在功能更强大的服务器上,运行速度会快几倍。

水印提取。

最后,为了从图像中提取水印,应用了第二个神经网络。在典型的用例中,图像权利所有者会检查他们在网上找到的图像是否是他们拥有权利的图像的副本。

noised_decoded_secret = decoder(noised_input) > 0.5
noised_secret_bits = tensor2bitarray(noised_decoded_secret[0])
noised_secret = hamming_decode(noised_secret_bits)
noised_secret = bitarray2tensor(noised_secret).unsqueeze(0).float()
print("Original secret", original_secret)
print("Decoded secret", noised_secret)
print("Secret recovered? ", torch.all(noised_secret == original_secret).item())

## 原始 secret tensor([[1., 0., 0., 0., 1., 0., 1., 0., 0., 1., 1.]])
## 解码 secret tensor([[1., 0., 0., 0., 1., 0., 1., 0., 0., 1., 1.]])
## secret 恢复了吗? True

结论

获奖作品的作者Soptq 成功地实现了一个用于嵌入水印的先进的神经网络。这种方法对各种图像转换具有很强的抵抗力,包括模糊、噪声、重采样、裁剪和 JPEG 压缩。这种鲁棒性是通过独特的训练过程实现的,在该过程中,会随机应用转换,并挖掘出难分样本,以使模型专注于最具挑战性的场景。

亚军解决方案利用了基于 DCT 的分解方法。与获胜的解决方案相比,它提供了更快的性能,但其对图像转换的抵抗力却较低。你可以在此 Hugging Face space 上探索第二名的解决方案。

展望未来,私有水印有潜力证明图像的所有权和真实性。它还可以在 检测图像篡改 方面发挥关键作用——这在生成式人工智能时代是一个日益严重的问题,在生成式人工智能时代,虚假信息和隐私风险比以往任何时候都更加普遍。

对于 Zama Bounty Program 的第 8 季,我们邀请社区探索 FHE 如何使用机器学习模型来提高生物年龄估计的隐私性。

附加链接

阅读更多相关帖子

未找到任何项目。

Concrete Concrete ML FHEVM TFHE-rs

产品与服务

隐私保护的机器学习 机密区块链 阈值密钥管理系统

开发者

博客 文档 GITHUB FHE 资源 研究论文 Bounty Program FHE 状态操作系统

公司

关于 FHE 介绍 活动 媒体 职业 法律

联系方式

与专家交谈 联系我们 X Discord Telegram 所有社区渠道

在电子时代,开放社会需要隐私。隐私不是秘密。私事是不想让全世界知道的事情,而秘密是不想让任何人知道的事情。隐私是有选择地向世界展示自己的力量。如果双方有某种交易,那么双方都会记住他们的互动。每一方都可以谈论自己对这件事的记忆;谁能阻止它呢?可以颁布法律来禁止它,但言论自由,甚至比隐私更重要,是开放社会的基础;我们不寻求限制任何言论。如果许多人在同一个论坛中一起发言,每个人都可以向所有其他人发言,并将关于个人和其他各方的知识汇总在一起。电子通信的力量已经实现了这种群体言论,而且它不会仅仅因为我们可能希望它消失而消失。既然我们渴望隐私,我们必须确保交易的每一方只知道该交易直接需要的知识。由于任何信息都可以被谈论,我们必须确保我们尽可能少地透露信息。在大多数情况下,个人身份并不重要。当我在商店购买一本杂志并将现金交给店员时,没有必要知道我是谁。当我要求我的电子邮件提供商发送和接收消息时,我的提供商不需要知道我在和谁说话,或者我在说什么,或者别人在对我说什么;我的提供商只需要知道如何将消息发送到那里,以及我欠他们多少费用。当我的身份被交易的底层机制泄露时,我就没有隐私。我不能在这里有选择地展示自己;我必须始终展示自己。因此,开放社会中的隐私需要匿名交易系统。到目前为止,现金一直是主要的此类系统。匿名交易系统不是秘密交易系统。匿名系统使个人能够选择在何时以及仅在需要时透露自己的身份;这是隐私的本质。开放社会中的隐私也需要密码学。如果我说了一些话,我希望只有我打算让其听到的人才能听到。如果我的言论内容对全世界开放,我就没有隐私。加密是为了表达对隐私的渴望,使用弱密码加密是为了表达对隐私不太强烈的渴望。此外,当默认设置为匿名时,为了有保证地透露自己的身份,需要密码签名。我们不能指望政府、公司或其他大型的、没有面孔的组织出于善意而给予我们隐私。谈论我们对他们有利,我们应该预料到他们会说。试图阻止他们的言论是与信息的现实作斗争。信息不仅仅是想要自由,它渴望自由。信息会扩展以填充可用的存储空间。信息是谣言的年轻、更强大的表弟;信息脚步更快,眼睛更多,知道的更多,但比谣言理解的更少。如果我们期望拥有任何隐私,我们必须捍卫自己的隐私。我们必须走到一起,创建允许匿名交易发生的系统。几个世纪以来,人们一直通过耳语、黑暗、信封、紧闭的门、秘密握手和信使来捍卫自己的隐私。过去的技术不允许强大的隐私,但电子技术可以。我们这些密码朋克致力于构建匿名系统。我们正在使用密码学、匿名邮件转发系统、数字签名和电子货币来捍卫我们的隐私。密码朋克编写代码。我们知道必须有人编写软件来捍卫隐私,而且因为除非我们大家都这样做,否则我们就无法获得隐私,所以我们将编写它。我们发布我们的代码,以便我们的密码朋克同伴可以练习和使用它。我们的代码对所有人免费使用,在全球范围内。如果你不赞成我们编写的软件,我们不太关心。我们知道软件无法被摧毁,而且一个广泛分散的系统无法被关闭。密码朋克鄙视对密码学的法规,因为加密本质上是一种私人行为。事实上,加密行为将信息从公共领域中移除。即使是反对密码学的法律也只能到达一个国家的边界和其暴力的手臂所及之处。密码学将不可避免地在整个地球上传播,以及它所实现的匿名交易系统。为了使隐私得到广泛传播,它必须成为社会契约的一部分。人们必须走到一起并部署这些系统以实现共同利益。隐私的范围仅限于社会上同伴的合作程度。我们这些密码朋克寻求你的问题和你的担忧,并希望我们能够与你交流,以便我们不会欺骗自己。但是,我们不会因为有些人可能不同意我们的目标而被改变方向。密码朋克正在积极致力于使网络对隐私更加安全。让我们一起前进。前进。作者:Eric Hughes。1993 年 3 月 9 日。

  • 原文链接: zama.ai/post/encrypted-i...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ZamaFHE
ZamaFHE
Zama是一家开源密码学公司,专注于为区块链和人工智能构建最先进的完全同态加密(FHE)解决方案。