PoD-Tiny——实现零信任交易的最简协议

原创:郭宇

本文面向有一定密码学基础,或者对密码学感兴趣的读者。文中虽有大量数学公式出现,但都比较简单不难理解。

导言:zkPoD 是什么?

zkPoD 实现了去中心化的「零知识有条件支付」,支持上 GB 数据的零信任公平交易。关于「零知识有条件支付」的概念请看这篇概述文章 『zkPoD:区块链,零知识证明与形式化验证,实现无中介、零信任的公平交易』。 zkPoD 是一个全新的实现 ZKCP 目标的方案。目前 zkPoD 已经支持上 GB 的数据,支持低 TPS 公链,也支持高 TPS 联盟链;既支持二进制数据,也支持带有内部丰富类型与结构的表格数据。与传统的「受信第三方」相比,zkPoD利用区块链来作为一个「Trustless 第三方」,实现「零信任公平交易」。

zkPoD 也是一个实现数据与价值双向流通的底层基础协议

zkPoD 开源代码与更多文档请见:https://github.com/sec-bit/zkPoD-node

Proof-of Delivery (PoD) 协议

PoD 是实现 zkPoD系统的核心协议。PoD 协议实现了借用区块链智能合约来进行「数据」和 「Token」的原子交换,并且保证买卖双方的公平性。PoD 并没有像 ZKCP[1] 那样采用单一的 zkSNARK 方案来实现原子交换,而是利用了 Pedersen Commitment,Schnorr Protocol 等密码学经典方案。这样 PoD 可以做得更高效,同时易扩展。PoD 协议还将利用形式化的证明来构建坚实的「信任根基」。

本文介绍一个极简的 PoD 协议——PoD-Tiny,这个协议简化了很多细节,并不实用,但是可以帮助读者快速理解 PoD 的原理和面临的挑战。

假设我是卖家,而你需要从我手里买一个数据文件,这个协议的一个大致流程是:

  • 步骤一:我把「数据」加密后,传给你
  • 步骤二:你把「Token」交给区块链「智能合约」
  • 步骤三:我用「密钥」交换「智能合约」手里的「Token」,然后你紧接着可以从智能合约中读取「密钥」进行「数据」解密

是不是很简单?聪明的你此刻正在高度怀疑这个过程是不是哪有问题。

「公平交易」中的关键问题

  • 关键问题(1):你收到的加密数据确实是你想要的数据
  • 关键问题(2):你收到加密数据之后,不付钱就跑路怎么办
  • 关键问题(3):而我出示给智能合约的密钥必须是真密钥,否则拿不到 Token
  • 关键问题(4):我出示真密钥之后,必须要能拿到 Token

我们接下来就抽丝剥茧,讨论下 PoD-Tiny 是怎么巧妙解决这些问题的

锁定数据的特征:Authenticator

对于关键问题(1),我们需要一个锚点,什么是你想要的数据。这里简单起见,假设我们事先约定了一个数据文件的唯一标签,或者特征。然后你购买的数据需要能和这个标签一一对应。

一般来说,大家喜欢用 Hash 来标记对一个字符串的特征,比如计算

h = MD5("hello,zkPoD!")

我们看下这个字符串 “hello,zkPoD!” 总共有 12 个字节大小,也就是 96 个 bit。于是我们可以将这 12 个字节转换成一个有限域上的整数(这里我们假设有限域的大小接近 256 bit )。这样我们可以把这个字符串编码成一个整数,我们姑且用一个符号表示这个整数, 假设是 m。

我们通过下面的运算产生这个数据的「承诺」。

A = mG*

承诺也叫 Commitme

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值