BSV 上用于通用计算的隐私非交互式赏金

如何安全地外包任何计算

我们提出了一种新颖的赏金机制,可以在区块链上安全私密地外包任意计算。解决方案和付款的交换是原子的和无需信任的:赏金发布者获得解决方案而赏金收集者获得奖励,或者两者都不发生。赏金发布者部署一个智能合约,当且仅当提供解决方案时才会释放资金。为了防止解决方案泄露,它使用只有双方知道的密钥进行加密。为了验证加密的解决方案,零知识证明 (ZKP) 用于证明加密的解决方案是有效的,并且使用正确的密钥对其进行加密,同时保密。

据我们所知,这是有史以来第一个也是唯一一个在没有可信第三方的情况下安全外包任何计算的方法。

公平交换问题

买家想知道计算问题的解决方案,例如数独游戏。她不想或不能自己解决它,所以她通过悬赏支付给提供解决方案的卖家来将其外包。

如果买家先付款,卖家可能不会告诉他解决方案。

买家先付款

同样,如果卖方先公开解决方案,买方可能会拒绝付款。

卖家先透露

这是典型的公平交换问题。如果存在双方都信任的第三方托管,解决起来很简单。在没有托管的情况下已经进行了多次尝试来解决它。

第一次尝试

图一

一种天真的方法是简单地在公共区块链上部署一个赏金智能合约来解决这个问题,就像我们外包旅行商问题所做的那样。它由三个步骤组成,如图 1 所示:

  1. 赏金发布者 Alice 放置了一个赏金交易 Tm,其中包含一个智能合约,该合约支付给见证人 w 以满足电路 C 中表示的问题,即 C(w) 评估为真。

  2. 赏金收集者 Bob 在另一个交易 Tc 中将 w 提交给赏金交易。

  3. 发布者爱丽丝从上述交易中提取 w

任何人都可以通过向智能合约提交解决方案来尝试收集赏金。智能合约在验证确实解决问题的建议解决方案后向收集者付款。由于公共区块链的透明性,这有两个缺点:

  1. 攻击者,例如恶意矿工,可以拦截收集者的交易,提取解决方案,并创建竞争交易以自己领取赏金,而无需解决问题。

  2. 任何人都可以通过观察发布在链上的解决方案来获取解决方案。如果赏金发布者打算将他支付的解决方案保密,这是有问题的。

第二次尝试:零知识条件支付(ZKCP)

ZKCP 允许买家使用不需要信任任何人的比特币从卖家那里购买解决方案。它包括两个步骤:

  1. 使用 ZKP,卖方说服买方相信哈希原像 k 是链下有效加密解决方案 s 的加密密钥,而无需披露解决方案。

  2. 然后买方将比特币锁定在支付给卖方的交易中,只有在卖方提供正确的原像时才能赎回比特币,买方用它来解密解决方案。

我们的解决方案

我们的赏金机制解决了上述所有问题,并具有以下显着特性。

  1. 非交互式:赏金发布者通过向区块链发送单个交易来创建用于解决计算难题的赏金。

  2. 开放:任何人只要有解决方案就可以在后续交易中收取赏金,并且在赏金创建时收集者是未知的。

  3. 可提取:保证赏金发布者能够从赏金收集交易中提取解决方案。

  4. 安全:恶意窃听方即使拦截收款交易也无法领取赏金

  5. 隐私:局外人无法通过观察区块链获知解决方案。

实现满足所有这些要求的赏金会很困难,因为在发布赏金时解决问题的用户的身份是未知的。在图 1 中,恶意攻击者,例如矿工,可以窃听 Tc,获得见证并自行赎回奖励,因为 Tm 中的智能合约允许任何拥有 w 的人赎回。此外,任何第三方都可以在区块链上观察 Tc 并了解秘密 w,赏金发布者为此付费并可能希望保密。需要一种方法来加密和隐藏 w,同时仍然确保 C(w) 为真。

为了防止这些攻击,w 使用对称加密的共享密钥进行加密。它源自椭圆曲线 Diffie–Hellman (ECDH) 密钥交换,如图 2 所示。Alice 的公钥 QA 在 Tm 中发布。 Bob 必须使用 QA 来导出共享密钥。他将自己的公钥QB暴露在Tc中,Alice用它推导出相同的共享密钥,对加密解进行解密得到 w

图 2:ECDH 密钥交换

ZK电路

Tm 中的智能合约验证了 Tc 中的证明,证明了图 3 所示的复合电路。它需要多个输入,包括私密见证人 w,并输出使用共享密钥加密的见证人。第 1 步确保 w 有效,其余验证 w 是否使用正确的共享密钥加密,以便 Alice 可以解密它。第 2 步使用 ECDH 推导共享密钥。步骤4中的enc()可以是任何对称加密。在实践中,为了提高效率,需要 ZKP 友好的加密,例如 Poseidon 加密。

图 3: 电路

最终工作流程

最终改进的赏金机制如图 4 所示。

  1. 赏金发布者 Alice 放置了一个包含智能合约的赏金交易 Tm,如果证明证明 Ew 加密的,该智能合约就会释放资金。

  2. 赏金收集者鲍勃根据他的私钥和爱丽丝的公钥求解 w 并使用共享的 ECDH 密钥对其进行加密。他生成一个 ZK 证明并提交交易 Tc 以领取赏金,其中包含证明和密文 E。

  3. Alice 根据她的私钥和 Bob 的公钥导出相同的共享 ECDH 解密密钥。她在 Tc 中解密 E 并得到 w

如果攻击者拦截 Tc 并更改接收者,则证明将失效,因为它与 Bob 的公钥绑定。攻击者无法重定向和窃取赏金。该证明类似于常规支付交易中使用的数字签名,可防止篡改。攻击者也看不到见证,因为它是加密的。

图 4

在实践中,最后期限将被添加到赏金中。如果在一定时间内没有人认领,爱丽丝可以取回她的钱。

如何获得 Bob 的公钥

Bob 的公钥 QB,即认领交易的发送者,在基于账户的区块链(例如以太坊)中很容易获得。以太坊的 Solidity 编程语言将其公开在全局事务变量 tx.origin 或 msg.sender 中。

在BSV中,我们基于一种称为 OP_PUSH_TX 的技术提取 QB。 OP_PUSH_TX 允许智能合约(在 Tm 中)访问支出交易(Tc),从而强制执行赏金到收集者公钥 QB 的位置,在 ECDH 中用于派生共享加密密钥¹。

BSV与其他区块链

这种赏金机制可以应用在很多区块链中。 在 BTC 和 Ethereum 等未确认交易可能会被更高费用的后续交易延迟的区块链中,赏金发行人 Alice 有可能拦截 Tc,解密并获取见证人 w。 她可以使用 w 创建一个竞争性收集交易,以在 Tc 被开采到一个区块之前以更高的交易费用领先 Tc。 在BSV上,这是极不可能的,因为交易是按照先见原则处理的。

可信设置

有两类 ZKP:需要可信设置的和不需要可信设置的。 在许多情况下,后者是首选,因为它往往更有效。 如果 Bob 进行设置,他可以创建一个伪造的证明并窃取赏金而无需解决 w。 由于无法信任第三方,因此 Alice 必须进行设置。

与 ZKCP 不同,如果 Alice 通过破坏 ZKP 使用的零知识属性来恶意操纵设置以从证明中获取部分或全部见证人,这不是问题²。 无论如何,她都会解密证据以获得见证人。 为了额外的安全性,Bob 可以对设置进行额外的检查,以确保它是由 Alice 诚实地执行的,并且公共参考字符串的格式正确。 他还可以通过在本地运行验证者智能合约来验证他的证明确实通过了验证,并且只有在通过后才广播 Tc。

潜在用例

本发明开辟了许多将任意实际计算问题外包给公众的方法。 任何先提交解决方案的人都可以保证获得报酬。 下面只是几个例子。

  • 挖矿:矿池通过向任何发现使给定区块头哈希满足共享难度目标的随机数的矿工支付报酬来外包哈希。 矿工不必像在传统矿池中那样信任矿池进行支付。 支付是无需信任且即时的。

  • 机器学习:企业希望在给定数据集上训练机器学习模型,例如自然语言处理或线性回归,以改善用户体验。 它将培训外包,希望以可承受的价格找到最准确的模型,而无需像 Kaggle 这样的集中式平台。

  • 可证明的高分辨率图像:网站的用户喜欢图像,该图像分辨率低且只是预览。 他想购买高分辨率副本,可能缩小到预览版。

  • 旅行商问题:一家物流公司希望找到最短路线,将包裹高效地运送到一系列收件人手中,从而最大限度地降低汽油成本。

  • 数独谜题:爱丽丝是数独游戏的狂热粉丝,她有一个数独谜题难住了她好几个小时。 她放弃并悬赏给提供谜题解决方案的人。

ZKP 的快速技术进步使得证明许多实际应用的陈述成为可能。 我们将很快演示如何利用这种赏金机制来解决实际问题。 敬请关注!

致谢

感谢 ZeMing Gao 审阅本文的早期草稿并提供建设性反馈。


[1] 如果在交易中使用从公钥散列派生的地址,而不是公钥本身,QA 和 QB 将替换为 Alice 和 Bob 的地址,并且需要额外的步骤来确保地址是从公钥派生的。

[2] WI 是不够的:重新审视零知识或有(服务)支付

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/138103.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Layui + Flask | 实现注册、登录功能(案例篇)(08)

此案例内容比较多,建议滑到最后点击阅读原文,阅读体验更佳。后续也会录制案例视频,将在本周内上传到同名的 b 站账号。 已经看了 layui 表单相关的知识,接下来就可以实现注册功能,功能逻辑如下: 项目创建 新建 flask 项目下载 layui 文件,解压之后复制到指定文件编写前…

PostgreSQL设置主键为自增

1、创建自增序列 CREATE SEQUENCE table_name_id_seq START 1; 2、设置字段默认值 字段默认值中设置 nextval(table_name_id_seq) 3、常用查询 -- 查询所有序列 select * from information_schema.sequences where sequence_schema public; -- 查询自增序列的当前值 select cu…

Unity中UI组件对Shader调色

文章目录 前言一、原理在Shader中直接暴露的Color属性,不会与UI的Image组件中的Color形成属性绑定。因为UI的Image组件中更改的颜色是顶点颜色,如果需要在修改组件中的颜色时,使Shader中的颜色也同时改变。那么就需要在应用程序阶段传入到顶点…

自动驾驶中的决策规划

参考: 【干货篇】轻舟智航:自动驾驶中的决策规划技术(附视频回放 PPT 下载) - AIQ 如图所示, 各模块介绍 定位模块主要负责解答的问题是“车现在在哪里”,是在道路上还是在路口,是在高架桥上还是在停车场里。 感知…

Redis 集合(Set)快速指南 | Navicat

Redis 支持通过多种数据类型来存储项目集合。其中,包括列表、集合和哈希。上周的博文介绍了列表(List)数据类型并重点介绍了一些用于管理列表(List)的主要命令。在今天的文章中,我们将转向关注集合&#xf…

怒刷LeetCode的第11天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:迭代 方法二:递归 方法三:指针转向 第二题 题目来源 题目内容 解决方法 方法一:快慢指针 方法二:Arrays类的sort方法 方法三:计数器 方法四…

Neo4j图数据库_web页面关闭登录实现免登陆访问_常用的cypher语句_删除_查询_创建关系图谱---Neo4j图数据库工作笔记0013

由于除了安装,那么真实使用的时候,就是导入数据了,有了关系和节点的csv文件以后如果用 cypher进行导入数据和创建关系图谱,还有进行查询,以及如果导入错误如何清空,大概是这些 用的最多的,单独把这些拿进来,总结一下,用的会比较方便. 1.实现免登陆访问: /data/module/neo4j-…

【动态规划刷题 16】最长等差数列 (有难度) 等差数列划分 II - 子序列

1027. 最长等差数列 https://leetcode.cn/problems/longest-arithmetic-subsequence/ 给你一个整数数组 nums&#xff0c;返回 nums 中最长等差子序列的长度。 回想一下&#xff0c;nums 的子序列是一个列表 nums[i1], nums[i2], …, nums[ik] &#xff0c;且 0 < i1 <…

Spring Cloud Alibaba Nacos 2.2.3 (2) - 单机版启动 (winodows 和 linux )

Nacos 2.2.3 (1) - 下载与数据库配置 参考下载与数据库配置 启动服务器 执行 nacos-server-2.2.3\bin 下的startup.sh或者startup.cmd &#xff08;根据不同系统&#xff09; windows 下nacos 单机启动 方式一&#xff1a; 1&#xff0c;打开cmd 2&#xff0c;cd 到nacos-s…

什么是虚拟DOM(Virtual DOM)?它在前端框架中的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是虚拟DOM&#xff08;Virtual DOM&#xff09;&#xff1f;⭐ 虚拟DOM 在前端框架中的作用⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&…

sudo apt-get update失败的原因和解决方法

ubuntu更新资源包时出现连接超时的问题&#xff1a; 无法发起与 cn.archive.ubuntu.com:80 (2403:2c80:5::6) 的连接 - connect (101: 网络不可达) 无法连接上 cn.archive.ubuntu.com:80 (45.125.0.6)&#xff0c;连接超时 正在读取软件包列表… 完成 W: 无法下载 http://cn.ar…

Vue路由和Node.js环境搭建

文章目录 一、vue路由1.1 简介1.2 SPA1.3 实例 二、Node.js环境搭建2.1 Node.js简介2.2 npm2.3 环境搭建2.3.1 下载解压2.3.2 配置环境变量2.3.3 配置npm全局模块路径和cache默认安装位置2.3.4 修改npm镜像提高下载速度 2.4 运行项目 一、vue路由 1.1 简介 Vue 路由是 Vue.js…

使用GPT训练中秋古诗写作讲解

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

PyTorch C++ 前端:张量

本篇文章将尝试了解 PyTorch 组件的高级概述以及它们如何配合。 PyTorch 组件的高级概述 后端 PyTorch 后端是用 C++ 编写的,它提供 API 来访问高度优化的库,例如:用于高效矩阵运算的张量库、用于执行 GPU 运算的 CUDA 库以及用于梯度计算的自动微分等。 前端 可以使用…

如何通过百度SEO优化提升网站排名(掌握基础概念,实现有效优化)

随着互联网的发展&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;成为了网站优化中不可或缺的一部分。在中国&#xff0c;百度搜索引擎占据着主导地位&#xff0c;因此掌握百度SEO概念和优化技巧对网站的排名和曝光非常重要。 百度SEO排名的6个有效方法&#xff1a; 首…

前后端分离的低代码快速开发框架

低代码开发正逐渐成为企业创新的关键工具。通过提高开发效率、降低成本、增强灵活性以及满足不同用户需求&#xff0c;低代码开发使企业能够快速响应市场需求&#xff0c;提供创新解决方案。选择合适的低代码平台&#xff0c;小成本组建一个专属于你的应用。 项目简介 这是一个…

PHP通过pem文件校验签名异常

问题描述&#xff1a; 在对接第三方支付过程中&#xff0c;支付成功异步回调时&#xff0c;校验签名&#xff0c;一直无法通过。 但是在支付成功时有一个同步返回也需要校验签名&#xff0c;用的是同样的校验方法&#xff0c;都没有问题。 当把回调时传递的参数放在postman中&a…

测试域: 流量回放-工具篇jvm-sandbox,jvm-sandbox-repeater,gs-rest-service

JVM-Sandbox Jvm-Sandbox-Repeater架构_小小平不平凡的博客-CSDN博客 https://www.cnblogs.com/hong-fithing/p/16222644.html 流量回放框架jvm-sandbox-repeater的实践_做人&#xff0c;最重要的就是开心嘛的博客-CSDN博客 [jvm-sandbox-repeater 学习笔记][入门使用篇] 2…

MYSQL存储引擎基础知识介绍

下面重点介绍几种常用的存储引擎,并对比各个存储引擎之间的区别&#xff0c;以帮助读者理解 不同存储引擎的使用方式。 MyISAM MyISAM是 MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键&#xff0c;其优势是访 问的速度快&#xff0c;对事务完整性没有要求或者以 SEL…

java面向对象(八)

文章目录 一、abstract关键字的使用1.概念2. abstract修饰类:抽象类3.abstract修饰方法&#xff0c;抽象方法4.abstract使用上的注意点&#xff1a;5.抽象类的匿名子类 二、计算一段代码执行所花费的时间三、接口的使用1.接口的使用2.定义接口中的成员3.代码demo4.Java类可以实…