区块链 | NFT 相关论文:Preventing Content Cloning in NFT Collections(二)

2024-05-07 04:28

本文主要是介绍区块链 | NFT 相关论文:Preventing Content Cloning in NFT Collections(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🐶原文: Preventing Content Cloning in NFT Collections

🐶写在前面: 这是一篇 2023 年的 CCF-C 类,本博客只记录其中提出的方法。



F C o l l N F T \mathbf{F_{CollNFT}} FCollNFT and ERC-721 NFTs

在以太坊这样的区块链上,NFT 是通过实现 ERC-721 标准的智能合约创建和交易的。

智能合约可以执行的主要操作有:

  • 铸币 m i n t \mathsf{mint} mint:创建一个新的代币并将其分配给发行者;
  • 转账 t r a n s f e r \mathsf{transfer} transfer:从当前所有者那里转移一个代币到一个指定的账户;

只有当发出交易的账户是智能合约的部署者时,铸币 m i n t \mathsf{mint} mint 操作才会成功。只有当发出交易的账户是 NFT 的当前所有者,或者是被所有者委托过的账户时,转账 t r a n s f e r \mathsf{transfer} transfer 操作才会成功。

因此,ERC-721 符合 P 1 \mathbf{P1} P1 P 2 \mathbf{P2} P2

ERC-721 智能合约通过在智能合约实例的状态内维护一个键值对映射来追踪所生成的代币。当代币 t \mathsf{t} t 属于某个集合时,在该集合中 t . i d \mathsf{t.id} t.id 是键值对的键, ( t . o w n e r , t . d a t a ) \mathsf{(t.owner, t.data)} (t.owner,t.data) 是键值对的值。然而,ERC-721 标准并没有阻止映射中存在两个不同的键 t . i d \mathsf{t.id} t.id t ′ . i d \mathsf{t'.id} t.id,但是关联到相同的数据 t . d a t a = t ′ . d a t a \mathsf{t.data = t'.data} t.data=t.data

由此可见,ERC-721 智能合约通常不能安全地实现 F C o l l N F T \mathsf{F_{CollNFT}} FCollNFT 功能,因为 P 3 \mathbf{P3} P3 可能无法得到保证。因此,我们提出了一种不同的实现 ERC-721 智能合约的两步方法。

首先,我们要求 t . i d = s h a 256 ( t . d a t a ) \mathsf{t.id = sha256(t.data)} t.id=sha256(t.data)。然后,如果键尚未存在于键值对映射中,那么新创建的代币可以成功地添加到映射中。基于这一机制,调用 mint 函数创建一个克隆品 t ′ \mathsf{t'} t 将会失败,因为 t ′ . i d \mathsf{t'.id} t.id 已经存在于映射中。这保证了集合中数据的唯一性 P 3 \mathbf{P3} P3,且仍处于 ERC-721 合约的要求之内。



Discussion on the Implementation of F C o l l N F T \mathbf{F_{CollNFT}} FCollNFT

这一小节探讨了如何具体实现与 F C o l l N F T \mathsf{F_{CollNFT}} FCollNFT 兼容的一组图像。

图像可以根据不同的编码方案表示。最常用的方案之一是 RGB 颜色模型,这是一个加色模型,其中红、绿和蓝三种光的原色以各种方式相加,以重现广泛的颜色。具体来说,图像中的每个像素都用一个表示红、黄和蓝分量的三个值的元组来表示。因此,一个 RGB 图像是一个宽度为 M \mathsf{M} M 像素、高度为 N \mathsf{N} N 像素的矩阵,每个单元格有 3 \mathsf{3} 3 个值。

作为一个玩具示例,我们考虑一个宽度为 16 \mathsf{16} 16 像素、高度为 9 \mathsf{9} 9 像素的图像集合,其中每个颜色分量的值可以设置在 0 \mathsf{0} 0 255 \mathsf{255} 255 之间。因此,每个图像是一个维度为 16 × 9 × 3 = 432 \mathsf{16 × 9 × 3 = 432} 16×9×3=432 的字节数组。

每个图像都与一个记录了创建时间的元数据相关联,该时间使用 U N I X \mathsf{UNIX} UNIX 时间戳表示,可以用 4 \mathsf{4} 4 字节的无符号整数表示。总的来说,这个集合中的每个收藏品 c \mathsf{c} c 都将包含一个 432 \mathsf{432} 432 字节的 c . a r t w o r k \mathsf{c.artwork} c.artwork 图像和 4 \mathsf{4} 4 字节的 c . m e t a \mathsf{c.meta} c.meta

为了获得符合 F C o l l N F T \mathsf{F_{CollNFT}} FCollNFT 标准的集合,我们直接将 c \mathsf{c} c 上传到智能合约中,这将强制图像遵守 RGB 格式,即验证对于 M × N \mathsf{M × N} M×N 矩阵的每个单元格都有三个值在 [ 0 , 255 ] \mathsf{[0, 255]} [0,255] 的区间内,并且有指定的尺寸。然后,智能合约设置 t . d a t a = c \mathsf{t.data = c} t.data=c,计算 c \mathsf{c} c 的哈希值,并将其作为 t . i d \mathsf{t.id} t.id 的值。

这种方法的局限性在于它需要将 c \mathsf{c} c 完整上传。在我们的示例中,即使 c . a r t w o r k \mathsf{c.artwork} c.artwork 很小,但我们仍然需要 432 \mathsf{432} 432 字节来表示它。

请注意,微小的 NFT 也是存在的,甚至还有人提出的单比特 NFT 。

参见:https://foundation.app/@aaa/foundation/42796

然而,图像通常具有更大的尺寸,宽度和高度达到数千像素。因此,图像在许多区块链中不能上链,即使可能的话,大文件也会影响交易费用。以下是解决这一问题的可能的方案。



1 方案一

一种常见的做法是依赖于在 IPFS 上上传收藏品 c \mathsf{c} c,IPFS 是一个点对点网络,用于通过计算在它们内容上的信息(即文件的 s h a 256 \mathsf{sha256} sha256)来共享文件。在代币 t \mathsf{t} t 上,我们设置

t . i d = t . d a t a = a d d r I P F S = s h a 256 ( c ) \mathsf{t.id = t.data = addr_{IPFS} = sha256(c)} t.id=t.data=addrIPFS=sha256(c)

然而,这并不能防止恶意铸币者铸造一个新的代币 t ′ \mathsf{t'} t

t ′ . i d = t ′ . d a t a = a d d r I P F S ′ = s h a 256 ( c ′ ) \mathsf{t'.id = t'.data = addr'_{IPFS} = sha256(c')} t.id=t.data=addrIPFS=sha256(c)

其中, c ′ . a r t w o r k = c . a r t w o r k \mathsf{c'.artwork = c.artwork} c.artwork=c.artwork c ′ . m e t a ≠ c . m e t a \mathsf{c'.meta \ne c.meta} c.meta=c.meta。换句话说,数字艺术品 c ′ . a r t w o r k \mathsf{c'.artwork} c.artwork c . a r t w o r k \mathsf{c.artwork} c.artwork 相同,而关于它们的描述 c ′ . m e t a \mathsf{c'.meta} c.meta c . m e t a \mathsf{c.meta} c.meta 不同。在 c . m e t a \mathsf{c.meta} c.meta 不必要的上下文中,可以通过设计删除它,使得这种攻击无法执行。

简而言之, c \mathsf{c} c 包含 c . a r t w o r k \mathsf{c.artwork} c.artwork c . m e t a \mathsf{c.meta} c.meta 这两部分。只要 c . m e t a \mathsf{c.meta} c.meta 不同,那么都有 c ≠ c ′ \mathsf{c \ne c'} c=c。因此,这可能会掩盖 c . a r t w o r k \mathsf{c.artwork} c.artwork c ′ . a r t w o r k \mathsf{c'.artwork} c.artwork 相同的事实,即数字艺术品惨遭克隆。



2 方案二

可以合理地假设数字资产在其生成时由其创作者 c r e a t o r \mathsf{creator} creator 签名,以保证其起源的真实性。

资产创作者 c r e a t o r \mathsf{creator} creator 通过密码学对资产进行签名,生成 σ \mathsf{σ} σ。我们可以设置 t . i d = σ \mathsf{t.id = σ} t.id=σ,以保持代币的独特性,因为尝试添加相同创作者 c r e a t o r \mathsf{creator} creator 的相同 t . d a t a \mathsf{t.data} t.data 将会产生相同的 σ \mathsf{σ} σ

那让另一个创作者 c r e a t o r \mathsf{creator} creator 使用相同 t . d a t a \mathsf{t.data} t.data 就不会有问题了?

然而,创作者始终可能被攻陷,例如:攻击者窃取秘密密钥来产生 σ \mathsf{σ} σ。如方案一所述,攻击者将能够产生克隆体,即改变 c . m e t a \mathsf{c.meta} c.meta 后再次进行签名。



3 方案三

铸币 m i n t \mathsf{mint} mint 交易可以携带一个证明,证明 t . i d \mathsf{t.id} t.id 的简洁值是资产 c . a r t w o r k \mathsf{c.artwork} c.artwork 的密码学哈希。这可以通过简洁的非交互式知识论证 S N A R K s \mathsf{SNARKs} SNARKs 来实现。

在我们的案例中,铸币者需要上传一个密码学哈希 s \mathsf{s} s(将作为 t . i d \mathsf{t.id} t.id)和一个 S N A R K π \mathsf{SNARK\ \pi} SNARK π,证明对 c . a r t w o r k \mathsf{c.artwork} c.artwork 的知识,其中:

s = s h a 256 ( c . a r t w o r k ) \mathsf{s = sha256(c.artwork)} s=sha256(c.artwork)

c . a r t w o r k \mathsf{c.artwork} c.artwork 是一张使用 RGB 颜色模型的图片。

约束约束 π = s h a 256 ( c ) \mathsf{\pi = sha256(c)} π=sha256(c) 避免了恶意铸币者随意设置 c . m e t a \mathsf{c.meta} c.meta,正如方案一中讨论过的情况一样。智能合约验证 π \mathsf{\pi} π 是否正确,然后设置:

t . i d = t . d a t a = s h a 256 ( c . a r t w o r k ) \mathsf{t.id = t.data = sha256(c.artwork)} t.id=t.data=sha256(c.artwork)

以确保 t . d a t a \mathsf{t.data} t.data 在集合中的独特性。

使用 S N A R K s \mathsf{SNARKs} SNARKs 来证明 s h a 256 \mathsf{sha256} sha256 的抗图像的效率过于低效,但实际上可以考虑使用其他密码学哈希函数,如 P o s e i d o n \mathsf{Poseidon} Poseidon,这些函数旨在允许更高效地实例化证明此类声明的 S N A R K s \mathsf{SNARKs} SNARKs



这篇关于区块链 | NFT 相关论文:Preventing Content Cloning in NFT Collections(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966320

相关文章

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

Node Linux相关安装

下载经编译好的文件cd /optwget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gztar -xvf node-v10.15.3-linux-x64.tar.gzln -s /opt/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/ln -s /opt/nod

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen