区块链 | NFT 水印:Review on Watermarking Techniques(三)
🍍原文:Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains
一个 NFT 的水印认证协议
可以引入第三方实体来实现对交易的认证,即通过使用 R S A \mathsf{RSA} RSA 加密协议来验证水印的有效性。 R S A \mathsf{RSA} RSA 加密是一种广为人知的公钥加密技术,它被广泛应用于保障数据传输的安全性。
作品的所有者 o w n e r \mathsf{owner} owner 和认证实体使用自己的私钥和公钥,在艺术作品中嵌入一个 s i g n a t u r e \mathsf{signature} signature 签名,也就是 w a t e r m a r k \mathsf{watermark} watermark 水印,从而增强了作品本身、创作者 c r e a t o r \mathsf{creator} creator 身份和认证实体的真实性。
个人理解:作品的所有者可以是 c r e a t o r \mathsf{creator} creator 创作者,也可以是创作者委托的 s e l l e r \mathsf{seller} seller 卖家。不过,水印中始终包含的是 c r e a t o r \mathsf{creator} creator 创作者的信息。
除此之外,可以把水印 w a t e r m a r k \mathsf{watermark} watermark 的校验和 c h e c k s u m \mathsf{checksum} checksum 也记录在区块链上,以注册 r e g i s t e r \mathsf{register} register 交易以获得额外的安全性,同时维持 NFT 和数字货币的去中心化特性。
后文会对水印认证协议进行详细的阐述。
通过运用 R S A \mathsf{RSA} RSA 加密技术,可以创建一个水印 W W W,将其嵌入到作品中,以此来验证创作日期 D A T E C R E A \mathsf{DATECREA} DATECREA、所有者标识 U S E R I D \mathsf{USERID} USERID 以及其他相关信息。
假设我们采用了一种 R S A \mathsf{RSA} RSA 对称加密方法,该方法包括两个过程:
- 名为 P U B ( K e y P U B , ⋅ ) \mathsf{PUB(Key_{PUB},\ \cdot\ )} PUB(KeyPUB, ⋅ ) 的加密过程;
- 名为 P R I V ( K e y P R I V , ⋅ ) \mathsf{PRIV(Key_{PRIV},\ \cdot\ )} PRIV(KeyPRIV, ⋅ ) 的解密过程;
它们分别与公钥 K e y P U B \mathsf{Key_{PUB}} KeyPUB 和私钥 K e y P R I V \mathsf{Key_{PRIV}} KeyPRIV 相对应,使得以下等式成立:
W = P R I V ( K e y P R I V , P U B ( K e y P U B , W ) ) W=\mathsf{PRIV(Key_{PRIV},PUB(Key_{PUB},} W \mathsf{))} W=PRIV(KeyPRIV,PUB(KeyPUB,W))
个人理解:在我们使用公钥 K e y P U B \mathsf{Key_{PUB}} KeyPUB 对水印 W W W 进行签名后,可以使用私钥 K e y P R I V \mathsf{Key_{PRIV}} KeyPRIV 将签名值还原为 W W W 水印。
为了确保消息被准确地加密和解密,上述流程必须依赖公、私钥。公钥负责加密,它可以安全地公开传播,而不会削弱系统的安全性。相对地,私钥则必须严格保密,仅被信息的发送者或作品的创作者与所有者所知。接下来,本文将阐述一个用于验证作品真实性及其创作者所有权的认证协议。
1 水印认证协议的提出
设想存在一个认证实体,它通过展示和处理艺术作品来增加艺术家的信誉,同时将交易注册 r e g i s t e r \mathsf{register} register 到区块链上,以便进行公开审计和验证嵌入的水印。这个实体可以是现有的市场,它负责将作品的 URL 和其他相关信息注册到区块链上,通常采用以太坊区块链。
简而言之,“认证实体” 可以由 NFT 市场来充当。
作品的所有者可以利用市场提供的服务来生成一对私钥和公钥,其中私钥需要安全地存储在用户的数字钱包中。同时,市场平台也需要为该笔交易创建一对私钥和公钥。
各自的公私钥如下:
- 卖家:私钥 K e y P R I V U S E R \mathsf{Key_{PRIVUSER}} KeyPRIVUSER 和公钥 K e y P U B U S E R \mathsf{Key_{PUBUSER}} KeyPUBUSER
- 市场:私钥 K e y P R I V M K T \mathsf{Key_{PRIVMKT}} KeyPRIVMKT 和公钥 K e y P U B M K T \mathsf{Key_{PUBMKT}} KeyPUBMKT
所有者的私钥必须对市场保密,市场的私钥也必须对所有者保密。
说明:所有者可以是卖家也可以是创作者,我这里写卖家纯粹是为了对齐文字😇
1.1 水印的嵌入
水印的嵌入和提取过程是公开的。
水印的生成依赖于:
- 市场在创建所有者账户时提供的用户身份 U S E R I D \mathsf{USERID} USERID
- 作品的创作日期 D A T E C R E A \mathsf{DATECREA} DATECREA
- 交易日期(即作品被铸造成区块链记录的日期) D A T E M I \mathsf{DATEMI} DATEMI
这些信息通过连接操作符 ∣ \mid ∣ 结合。
所有者将使用市场的公钥来加密其水印部分 W 1 W_1 W1,而市场则使用所有者的公钥来加密其水印部分 W 2 W_2 W2。最终生成的水印 W W W 是通过将这两部分进行异或操作 ⊕ \oplus ⊕ 结合而成的:
- 卖家: W 1 = P U B ( K e y P U B M K T , U S E R I D ∣ D A T E C R E A ) W_1 = \mathsf{PUB(Key_{PUBMKT},USERID\mid DATECREA)} W1=PUB(KeyPUBMKT,USERID∣DATECREA)
- 市场: W 2 = P U B ( K e y P U B U S E R , U S E R I D ∣ D A T E M I ) W_2 = \mathsf{PUB(Key_{PUBUSER},USERID\mid DATEMI)} W2=PUB(KeyPUBUSER,USERID∣DATEMI)
- 水印: W = W 1 ⊕ W 2 W = W_1 \oplus W_2 W=W1⊕W2
将水印 W = W 1 ⊕ W 2 W = W_1 \oplus W_2 W=W1⊕W2 嵌入到作品当中,并在 IPFS 中保存加了水印的作品。注意,可以选择多种水印技术之一来嵌入水印 W W W,例如前面所述的扩散频谱技术和 LSB 技术。
个人理解: W 1 W_1 W1 和 W 2 W_2 W2 只是在对关键信息进行签名,最后才是通过水印技术把 W W W 嵌入到作品当中。
1.2 水印的提取
在必要时,市场可以通过异或 ⊕ \oplus ⊕ 操作的可逆性,利用已知的 W 2 W_2 W2 水印和提取出的水印 W W W 来生成未知的 W 1 W_1 W1 水印:
W 1 = W 2 ⊕ W W_1 = W_2 \oplus W W1=W2⊕W
同样地,所有者也可以采用相同的方法生成 W 2 W_2 W2 水印。
此外,可以使用现有的算法 [16] 生成水印的校验和 C H E C K S U M \mathsf{CHECKSUM} CHECKSUM。这个校验和会被添加到即将铸造成区块链的数据 D A T A M I N T \mathsf{DATAMINT} DATAMINT 中, D A T A M I N T \mathsf{DATAMINT} DATAMINT 包含作品在 IPFS 中的 URL 和其他相关信息。为了降低燃料费用,校验和 C H E C K S U M \mathsf{CHECKSUM} CHECKSUM 应该比水印本身更小,其功能是为嵌入的水印提供真实性验证。
所提出的认证协议如下图所示:

2 嵌入水印后的验证流程
设想市场系统利用取证工具发现某件已发布作品存在复制或极其相似的情况。或者,作品的所有者察觉到其作品遭受了盗窃,且在该作品原版被铸造成区块链之后,被盗版本也完成了铸币。
通过从涉嫌的作品中提取出透明水印,并利用私钥对相关信息进行解密,可以确认作者的身份。具体来说,通过区块链上的校验和来验证水印,通过水印来验证创作日期、铸币日期和用户的身份信息。这些信息将作为有关争议作品的可靠法律证据。因此,建议的市场流程可以由市场实施,从而为艺术家提供更高质量、更安全的服务。
请注意,验证过程依赖于市场和所有者对交易及作品本身的了解。两个实体(所有者和市场)可以核对水印 W = W 1 ⊕ W 2 W = W_1 \oplus W_2 W=W1⊕W2 的对应部分,并验证所有权。通过对比这两部分信息,可以全面验证可能存在的欺诈行为。为了进一步增加对 NFT 交易的信心,并提升艺术品市场的价值,可以提出这一协议的变种。此外,可见水印和多种透明技术可以与先进的半脆弱水印技术相结合使用。
相关文章:
区块链 | NFT 水印:Review on Watermarking Techniques(三)
🍍原文:Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 一个 NFT 的水印认证协议 可以引入第三方实体来实现对交易的认证,即通过使用 R S A \mathsf{RSA} RSA…...
初识C语言——第十九天
for循环 1.简单概述 2.执行流程 3.建议事项:...
软件需求工程习题
1.(面谈)是需求获取活动中发生的需求工程师和用户间面对面的会见。 2.使用原型法进行需求获取,(演化式)原型必须具有健壮性,代码质量要从一开始就能达到最终系统的要求 3.利用面谈进行需求获取时…...
Win10弹出这个:https://logincdn.msauth.ne
问题描述: Win10脚本错误 Windows10家庭版操作系统开机后弹出这个 https://logincdn.msauth.net/shared/1.0/content/js/ConvergedLogin_PCore_vi321_9jVworKN8EONYo0A2.js 解决方法: 重启计算机后手动关闭第三方安全优化软件,然后在任务管理…...
Vue2 动态路由
VUE CLI 项目 router.js import Vue from "vue"; import Router from "vue-router"; import base from "/view/404/404.vue";const originalPush Router.prototype.push Router.prototype.push function push (location) {return originalPu…...
LeetCode746:使用最小花费爬楼梯
题目描述 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 代码 …...
DockerFile介绍与使用
一、DockerFile介绍 大家好,今天给大家分享一下关于 DockerFile 的介绍与使用,DockerFile 是一个用于定义如何构建 Docker 镜像的文本文件,具体来说,具有以下重要作用: 标准化构建:提供了一种统一、可重复…...
Java基础知识(六) 字符串
六 字符串 6.1 String字符串 1、String类对象创建 定义String类对象格式:** 1)String 字符串变量名“字符串常量”; 2)String 字符串变量名new String(字符串常量); 3)String 字符串变量名; 字符串变量名“字符串常…...
为什么跨境电商大佬都在自养号测评?看完你就懂了!
在跨境电商的激烈竞争中,各大平台如亚马逊、拼多多Temu、shopee、Lazada、wish、速卖通、煤炉、敦煌、独立站、雅虎、eBay、TikTok、Newegg、Allegro、乐天、美客多、阿里国际、沃尔玛、Nike、OZON、Target以及Joom等,纷纷成为商家们竞相角逐市场份额的焦…...
AtCoder Beginner Contest 353
A 题意:检查是否有比第一个数大的数 #include<bits/stdc.h>using namespace std;int main() {int n;cin>>n;int a;cin>>a;int f0;for(int i2;i<n;i){int k;cin>>k;if(k>a){cout<<i<<endl;f1;break;}}if(f0){cout<&l…...
深度解读《深度探索C++对象模型》之虚继承的实现分析和效率评测(一)
目录 前言 具有虚基类的对象的构造过程 通过子类的对象存取虚基类成员的实现分析 接下来我将持续更新“深度解读《深度探索C对象模型》”系列,敬请期待,欢迎左下角点击关注!也可以关注公众号:iShare爱分享,或文章末…...
计算机Java项目|Springboot房产销售系统
作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…...
学习3D几何和特征一致的高斯溅射目标去除
earning 3D Geometry and Feature Consistent Gaussian Splatting for Object Removal 学习3D几何和特征一致的高斯溅射目标去除 Yuxin Wang 王玉欣 HKUST &Qianyi Wu Monash University &Guofeng Zhang Zhejiang University &Dan Xu HKUST 香港科技大学&吴倩…...
PHP 使用常量实现枚举类
PHP 使用常量实现枚举类 <?php abstract class Enum {private static $constCacheArray NULL;private static function getConstants() {if (self::$constCacheArray NULL) {self::$constCacheArray [];}$calledClass get_called_class();if (!array_key_exists($call…...
Linux操作系统基础题库
一. 单选题(共2题,40分) 1. (单选题)Linux操作系统自诞生至今,有数十万的程序开发人员参与到了它的开发与完善中,如今Linux已发展成为是一个成熟、稳定的操作系统。从以下选项中选出关于Linux特点描述完全正确的一项。…...
Java抽象类:为何它是你代码架构的基石?
目录 1、抽象类的概念 2、抽象类语法 3、抽象类特性 4、抽象类的作用 5、 完结散花 个人主页:秋风起,再归来~ 文章专栏:javaSE的修炼之路 个人格言:悟已往之不谏,知来者犹可追 克…...
Flutter 中的 ToggleButtons 小部件:全面指南
Flutter 中的 ToggleButtons 小部件:全面指南 在 Flutter 中,ToggleButtons 是一种允许用户在一组选项中进行切换选择的控件。它通常用于展示一组相关选项,让用户可以快速切换选择。ToggleButtons 是一种水平排列的按钮集合,其中…...
【MYSQL】一颗B+树可以保存多少条数据
引言 事万物都有自己的单元体系,若干个小单体组成一个个大的个体。就像拼乐高一样,可以自由组合。所以说,如果能熟悉最小单元,就意味着我们抓住了事物的本事,再复杂的问题也会迎刃而解。 存储单元 存储器范围比较大…...
ssm125四六级报名与成绩查询系统+jsp
四六级报名与成绩查询系统的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对四六级报名信息管理混乱&am…...
【Unity从零开始学习制作手机游戏】第01节:控制3D胶囊体运动
1. 新建Project L01 使用3D Mobile模板。 2. 建立一个平面,用来承载物体 3. 导入Unity库内的胶囊体 下载 StandardAssets https://download.unitychina.cn/download_unity/e80cc3114ac1/WindowsStandardAssetsInstaller/UnityStandardAssetsSetup-5.6.7f1.exe …...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
