惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
Cloudbric
Cloudbric
V
Visual Studio Blog
L
LangChain Blog
A
About on SuperTechFans
B
Blog
T
Tenable Blog
罗磊的独立博客
Hacker News: Ask HN
Hacker News: Ask HN
Blog — PlanetScale
Blog — PlanetScale
博客园 - 三生石上(FineUI控件)
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Palo Alto Networks Blog
U
Unit 42
WordPress大学
WordPress大学
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
C
Check Point Blog
Security Latest
Security Latest
M
MIT News - Artificial intelligence
Application and Cybersecurity Blog
Application and Cybersecurity Blog
宝玉的分享
宝玉的分享
P
Proofpoint News Feed
NISL@THU
NISL@THU
Forbes - Security
Forbes - Security
S
Securelist
Security Archives - TechRepublic
Security Archives - TechRepublic
Hugging Face - Blog
Hugging Face - Blog
aimingoo的专栏
aimingoo的专栏
Latest news
Latest news
GbyAI
GbyAI
T
Troy Hunt's Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 热门话题
V2EX - 技术
V2EX - 技术
小众软件
小众软件
Google DeepMind News
Google DeepMind News
K
Kaspersky official blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
O
OpenAI News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
N
Netflix TechBlog - Medium
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed

smallyu的博客

为什么买的加密货币一定要去中心化 RISC-V 虚拟机无法代替 EVM 虚拟机 Polkadot 的 Existential Deposit 机制错在哪里 利息,套利,交易策略,金融市场 LayerZero 从来不挑战比特币的地位 默认参数引起的以太坊节点运行错误 硬件钱包与资产安全 预测市场比币圈更赌场 为什么去中心化的跨链桥不可能实现 我对于 AI 时代的答案 不要投资任何隐私币 区块链技术世界的三大真理 以太坊 AA 钱包的致命问题是什么 基于 AI 语义执行的 MCP 区块链的设计 一个集成 Geth 和 CometBFT 的兼容层 我的加密货币定投策略(二) DeFi 基础: 理解 AMM 定价机制 Go 语言 GMP 调度器的原理是什么 Web3 项目分析计划 对 Psyche Network 项目的分析 continuation 教程: 理解 CPS 如何开发一个比特币符文(Runes)协议 比特币脚本开发教程 我从王垠的计算机科学视频班学到了什么 区块链技术面试题(2025年版) Rust 语言容易让新手困惑的一个“过度优化” Solana 智能合约开发教程 (1) 尝试开发一个最小 EVM 虚拟机 基于 ZK 的链上身份系统设计 一个 Web3 打赏系统的设计 鼓吹 Cursor 的人技术能力都差 关于 Code Review 的礼节 假如启动一个新的以太坊 PoS 网络 发行加密货币的最好方式 所有 BFT 共识的区块链都是中心化的 对 2025 年区块链行业的预测 Restaking 项目的经济难题 如何看懂任意区块链项目的技术架构 为什么不要做以太坊的二次开发 为什么不要做智能合约开发和 DeFi 开发 我的加密货币定投策略(一) PoS 类型的区块链如何处理分叉 Ethereum Casper 为什么需要 EIP-7251 区块链中的 PBFT 不需要第二次投票 开发者的思维方式 发币的核心要点 炒币投资的小 tips 为什么说 PoW 比 PoS 更加去中心化 牛市对普通人来说意味着什么 如何健康地远程工作 为什么比特币不用概率加密函数 程序员的 “服从权威” 心理 区块链技术面试题 如何区分公有链和联盟链 对 Layer 2 项目创业想法的回复 对区块链共识机制的理解 Pebbling Game 鹅卵石游戏 PDP 文件证明的局限性 不要小瞧 ChatGPT 为什么炒币不是一个好主意 一种在区块链上生成随机数的机制 为什么以太坊的私钥计算不可逆 关于以太坊的私钥碰撞 “猜均值的2/3” dApp 游戏设计 Proof of Storage/Space/Replication 的区别 Proofs of Retrievability 文件证明的含义 我的加密货币交易机器人 对区块链行业的见闻 随机确认块的共识机制 VRF + BFT 共识引起交易失败的问题 为什么要重视编程思想 对 Web 3.0 的理解 GitBook 好用吗? 一种区块链节点存储扩容的方式 一种基于“自我中心主义”的共识机制 链表常见算法题及解析 基于 Multi-Linked List 的区块链设想 理解哈希函数与序列化 联盟链比公有链差在哪儿 在 Dijkstra 算法中保存路径 为什么数字货币使用区块链是政治问题 区块链:下一代数字身份认证体系的基石 网页技术能实现 3D 建模吗? 给区块链一个定义 从 Erlang 开始了解 Actor 模型 一种侧边导航栏的交互方式 Rust 的 ownership 是什么? Haskell 中的 Monad 是什么? 浅析 Libra 背后的区块链技术 对区块链的理性认识 Rust 基础语法概述 基于 Java 的爬虫框架 WebCollector Kotlin:简化版的 Scala JavaScript 有关联数组吗? 主流编程语言的异常处理机制 Go 语言基本语法 Scala 语法基础 用 Scala 改写 Java 浅度实践 Python 获取海贼王更新信息 HTML5 音乐可视化
对 S-PDP 文件证明的示例和解释
2022-12-14 · via smallyu的博客

2022-12-14

我们现在说的 PDP,一般指发表于 2007 年论文《Provable Data Possession at Untrusted Stores》里的 PDP,第一作者是 Giuseppe Ateniese。这篇论文之前,已经有一些文件证明的概念,比如 B-PDP,但是都没有做到,能够保证服务器端保存了文件。

S-PDP 是论文中首次提出的一种 scheme,可以用于客户端确认,某个文件确实被保存到了服务器环境上,这个服务器环境是不受信任的。

PDP 在解决的问题,就是我把一个文件保存到服务器上,不是说服务器告诉我它保存了,我就相信它真的保存了,我需要一种机制,确认文件真的在服务器上了。

PDP 也有很多种类型,有公开的、私有的、静态的、动态的。S-PDP 是比较基础的一种公开验证的 PDP。

同态加密是实现 S-PDP 的关键。

示例

我想举一个简单的例子来说明 S-PDP 的过程。因为论文中不着边的东西比较多,概括性的定义比较多,而且语焉不详,没有提供太具体的实现方式。我是按照自己的理解来解释。

现在客户端有一个原始的文件,内容是:

F = 12345

把这个文件分割成小的 block,比如分成 5 份:

F = [1, 2, 3, 4, 5]

在客户端这边生成一个随机数组成的数组 W,数组的长度和文件的 block 数量一致。W 的内容一定要是不可预测的:

W = [8, 1, 7, 3, 6]

生成同态加密标签分 2 步,首先,我们对 F 和 W 使用加法同态加密,接着,使用客户端公钥对同态加密后的数组,进行非对称加密:

T = r[ h(9),  h(3),  h(10),  h(7),  h(11)]
  =  [rh(9)) rh(3), rh(10), rh(7), rh(11)]

客户端将会把原始文件 F、同态加密标签 T 一起发送到服务端进行保存,客户端只保留本地生成的随机数组 W,W 是唯一私密不能泄漏的内容。客户端发送完毕后,就可以把本地的原始文件 F 和同态加密标签 T 都删掉了。

当客户端想要验证服务端的文件,由客户端生成一个挑战,比如随机验证第 1 个和第 3 个 block:

chal = [1, 3]

服务端在收到挑战后,生成证明也分 2 步,首先,使用客户端的公钥对原始文件 F 的第 1 个和第 3 个 block 进行非对称加密,接着,使用同态加密标签 T 去做减法同态加密:

V = [rh(9), rh(10)] - r[h(1),  h(3)]
  = [rh(9), rh(10)] - [rh(1), rh(3)]
  = [rh(8), rh(7)]

客户端拿到证明 V 后,使用私钥对证明进行非对称解密:

sW = r'[rh(8), rh(7)]
   =   [ h(8),  h(7)]

可以验证,证明经过解密后的 sW 正对应随机数组 W 第 1 个和第 3 个索引的值。由于同态加密的使用,整个过程中,W 的内容都没有泄漏。

用户只要手里有一开始生成的随机数组 W,在没有原始文件的情况下,就可以验证服务端的文件确实存在。这个随机数组 W 的数据占用是非常少的。而且过程中由于非对称加密的使用,服务端必须同时拥有同态加密标签 T 和原始文件 F,才能够完成挑战。因为 T 是公钥加密的,如果服务端作恶,客户端会解密不出来,服务端挑战失败。

局限性

在 PDP 的过程中,存在个问题:既然 V = T - F,如果服务端事先把整个 V 保存下来,即使删掉 T 和 F,也是可以通过挑战的,而且客户端并不会发现?

这是 PDP 的局限性,PDP 只能保证服务器至少保存了这个文件 1 次(如果一次都不保存,是不能生成 V 的),但是无法保证文件持续保存在服务器上,也无法反复验证证明的有效性。

假如第一次挑战是 [1, 3],服务器通过了挑战并且保存了挑战为 [1, 3] 的证明,那么之后只要是 [1, 3] 的挑战,服务器都可以直接返回已经通过挑战的证明,而不需要对文件进行计算。客户端无法知晓,证明是立即生成的,还是早已生成的。这是所有 PDP 证明的局限性。