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

这篇具有很好参考价值的文章主要介绍了BSV 上用于通用计算的隐私非交互式赏金。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

公平交换问题

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

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

bsvw,智能合约,区块链,智能合约,零知识证明

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

bsvw,智能合约,区块链,智能合约,零知识证明

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

第一次尝试

bsvw,智能合约,区块链,智能合约,零知识证明

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

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

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

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

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

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

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

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

bsvw,智能合约,区块链,智能合约,零知识证明

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

bsvw,智能合约,区块链,智能合约,零知识证明

图 2:ECDH 密钥交换

ZK电路

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

bsvw,智能合约,区块链,智能合约,零知识证明

图 3: 电路
### 最终工作流程

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

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

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

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

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

bsvw,智能合约,区块链,智能合约,零知识证明

图 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 是不够的:重新审视零知识或有(服务)支付文章来源地址https://www.toymoban.com/news/detail-786288.html

到了这里,关于BSV 上用于通用计算的隐私非交互式赏金的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 交互式shell与非交互式shell,反弹shell

    交互shell就是shell等待你的输入,并且立即执行你提交的命令。 这种模式被称作交互式是因为shell与用户进行交互。 这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当签退后,shell也终止了。 需要进行信息交互,例如输入某个信息 会返回信息 你需要对其输

    2024年02月02日
    浏览(53)
  • 人机交互学习-5 交互式系统的需求

    关于目标产品的一种陈述,它指定了产品应做什么,或者应如何工作 应该是具体、明确和无歧义的 搜集数据 解释数据 提取需求 注:了解 功能不同 智能冰箱:应能够提示黄油已用完 字处理器:系统应支持多种格式 物理条件不同 移动设备运行的系统应尽可能小,屏幕显示限

    2024年02月09日
    浏览(55)
  • 人机交互学习-6 交互式系统的设计

    Allan Cooper建议不要过早地把重点放在小细节、小部件和精细的交互上会妨碍产品的设计,应先站在一个高层次上关注用户界面和相关行为的整体结构 Allan Cooper提出的交互框架不仅 定义了高层次的屏幕布局 ,同时定义了 产品的工作流、行为和组织 。它包括了6个主要步骤:

    2024年02月09日
    浏览(56)
  • 交互式shell

    交互式模式就是shell等待用户的输入,并且执行用户提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当用户签退后,shell也终止了。 shell也可以运行在另外一种模式:非交互式模式。在这种模

    2024年02月02日
    浏览(47)
  • Pyspark交互式编程

    Pyspark交互式编程 有该数据集Data01.txt 该数据集包含了某大学计算机系的成绩,数据格式如下所示: 根据给定的数据集,在pyspark中通过编程来完成以下内容: 该系总共有多少学生; (提前启动好pyspark) 该系共开设了多少门课程; Tom同学的总成绩平均分是多少; 求每名同学的

    2023年04月08日
    浏览(45)
  • 构建一个动态交互式图表

    在Web开发中,JavaScript不仅是实现交互效果的关键,还可以用于构建复杂的可视化组件,如动态交互式图表。在本篇博客中,我将演示如何使用JavaScript和HTML5的Canvas元素来创建一个简单的动态条形图。 HTML结构  首先,我们需要一个HTML结构来容纳我们的图表。 JavaScript实现 接下

    2024年02月20日
    浏览(51)
  • 【非交互式零知识证明】(下)

    继续上一节的内容,我们首先再回顾一下经典交互式零知识证明。 交互式零知识证明的一般模型如下: (1)证明者和验证者共享一个公共输入,证明者可能拥有某个秘密输入; (2)如果验证者认可证明者的响应,则输出Accept,否则输出Reject。 经典交互式零知识证明除了应

    2024年02月04日
    浏览(44)
  • Matlab交互式的局部放大图

    在数据可视化中,很多时候需要对某一区间的数据进行局部放大,以获得对比度更高的可视化效果。下面利用 MATLAB 语言实现一个交互式的局部放大图绘制。 源码自行下载: 链接:https://pan.baidu.com/s/1yItVSinh6vU4ImlbZW6Deg?pwd=9dyl 提取码:9dyl 使用方法 : 1.将 BaseZoom.m 和 parameters

    2024年01月16日
    浏览(49)
  • Android2:构建交互式应用

    一。创建项目 项目名 Beer Adviser 二。更新布局 activity_main.xml 三。增加资源 strings.xml 四。响应点击 MainActivity.kt 知识点:

    2024年02月12日
    浏览(56)
  • 【shell】交互式自动化执行命令

    sftp 登陆并传输文件时需要手动输入密码 通过 expect 脚本模拟用户输入来与命令交互, 根据命令的输出提示, 来执行相应的操作, 来实现自动化 expect 给变量赋值用 set 变量名 \\\"变量值\\\" 获取今天 : set today [clock format [clock seconds] -format %Y-%m-%d] 获取昨天 : set yesterday [clock format [expr

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包