比特币 ZK 赏金系列:第 1 部分——支付解密密钥

2023-09-20 12:11:37

以前,我们使用零知识赏金 (ZKB) 来支付比特币上的数独解决方案。在本系列中,我们将使用 ZKB 来解决范围更广的更实际的问题。

在第 1 部分中,我们应用 ZKB 来支付解密密钥。假设 Alice 使用对称密钥 K 加密她的文件。为了安全起见,她联系了在线备份服务 Bob,以保留 K 的副本。她不想让 Bob 知道 K,所以她使用门限秘密共享方案K 分成 N 份,这样任何 M 份的法定人数都可以恢复 K。Bob 生成一个椭圆曲线私钥/公钥对 (sk, pk) 并将 pk 给 Alice。Alice 使用非对称加密算法用 pkK 的份额进行加密。例如 ElGamalECIES,并将其发送给 Bob。她对其他 (M-1) 台备份服务器也这样做。

如果 Alice 丢失了她的本地 K,她会向 Bob 索要解密密钥 sk,而 Bob 只有在获得报酬后才交付 sk。这是 ZKB 解决的经典公平交易问题,因为它保证付款会导致正确解密密钥的泄露。

实现

数独付费相比,我们只需要改变子电路C来验证解密密钥对应于用于加密 K 的公钥,而不是验证数独解。电路的其他部分保持不变,可以重复使用。

template Main(n, k) {

  // little-endian
  signal private input privkey[k];
  signal public input pubkey[2][k];


  // get pubkey from privkey
  component privToPub = ECDSAPrivToPub(n, k);
  for (var i = 0; i < k; i++) {
    privToPub.privkey[i] <== privkey[i];
  }

  // verify input pubkey
  signal pub_x_diff[k];
  signal pub_y_diff[k];
  for (var i = 0; i < k; i++) {
    pub_x_diff[i] <-- privToPub.pubkey[0][i] - pubkey[0][i];
    pub_x_diff[i] === 0;
    pub_y_diff[i] <-- privToPub.pubkey[1][i] - pubkey[1][i];
    pub_y_diff[i] === 0;
  }
  
  
  
   Assert that (db * Qa) = Qs 

  ...

   Assert that (db * G) = Qb /

  ...

   Assert that encrypting w with Qs produces ew. /

  ...
  
}

请注意,用于解密的私钥作为私有输入传递给电路,因此永远不会向公众透露。公钥作为公共输入传递,以便验证者智能合约可以确保证明是使用正确的私钥生成的。

这与支付到私钥谜题不同,后者将私钥公开暴露在链上。

勒索软件

可以想象恶意黑客可以使用相同的方法来支付解密密钥。

黑客用恶意软件感染受害者的计算机并加密他的文件,例如,让受害者点击网络钓鱼电子邮件中的恶意内容。

该恶意软件显示赎金要求,以比特币支付,并在受害者的计算机上显示支付说明。

受害者和黑客彼此不信任。受害者希望得到保证,他在支付赎金后能够解密他的文件。

在这种情况下可以使用相同的 ZK 赏金,但有一个主要区别。在备份情况下,用户可以确定用于加密的公钥,因为他自己执行了加密。在勒索软件案例中,需要额外的证据让受害者相信赏金智能合约中使用的公钥确实与用于加密他的文件的公钥相同。一种简单的解决方案是随机选择几个文件供黑客解密。

如何缓解此类勒索软件攻击不在本文讨论范围之内。感兴趣的读者可以在例如 [1] 中找到更多信息。

[1] Gyges 之戒:调查犯罪智能合约的未来

更多推荐

分析数组,结构体在反汇编中存储

本文会在IDA中分析数组,结构体在内存中的存储目录IDA分析数组存储IDA分析结构体存储传递参数的方式IDA分析数组存储测试代码如下:/************************************************************************//*@Author:玄都大法师/*@D

Gateway网关

网关GateWay官方文档:https://docs.spring.io/spring-cloud-gateway/docs/3.1.2/reference/html/#gateway-how-it-works核心概念路由:网关的核心数据结构,定义了网关如何处理请求.一条路由信息包含路由的唯一标识ID,目的地URI,一

驱动开发,基于gpio子系统编写LED灯的驱动,亮灭控制

1.gpio子系统介绍一个芯片厂商生产出芯片后会给linux提供一个当前芯片中gpio外设的驱动,我们当前只需要调用对应的厂商驱动即可完成硬件的控制。而linux内核源码中的gpio厂商驱动有很多,这里linux内核对厂商驱动做了一些封装,提供了一系列的API,我们在自己编写的设备驱动中只需要调用这些API即可访问对应

redis 集群(cluster)

1.前言我们知道,在Web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(主存分离、快速容灾技术)还需要考虑数据容量的扩展,数据安全不会丢失等。在Redis中

大数据时代下统计数据质量的影响因素

统计工作是为政府提供国民经济运行信息的重要手段,将大数据应用于统计工作是社会发展饿必然趋势。一、内涵在数字化时代和数字经济的飞速发展,“数据”已经被认定为一种新的生产要素,并且发挥着重要作用。数据质量的高低直接影响数据价值的高低。数据质量,是指在业务环境下,数据符合数据消费者的使用者目的,能够满足业务场景具体需求的程度

132.【MySQL_进阶】

MySQL_进阶(一)、存储引擎1.MySQL体系结构(1).连接层(2).服务层(3).引擎层(4).存储层2.存储引擎简介(1).查看某张表的数据引擎(2).展示此版本支持的所有存储引擎(3).创建表my_myisam,并指定MyIASM存储引擎(4).存储引擎示列3.存储引擎_Innodb(1).Innodb介绍

赛宁党支部赴延安开展革命旧址学习主题党日活动

为深入学习贯彻新时代中国特色社会主义思想和中共二十大精神,不断提升党支部成员综合素质和业务能力,2023年9月,赛宁公司党支部组织北京、南京、广州等三地部分党员及入党积极分子开展了“革命旧址学习”主题党日活动,深入寻访延安革命纪念馆、杨家岭、枣园革命旧址等红色基地,重温入党誓词,感悟辉煌历史,凝聚前进力量。“走进革命纪

K8S-Pod 进阶

Pod进阶一、资源限制(业务cpu内存)1.定义2.Pod和容器的资源请求和限制3.CPU资源单位4.内存资源单位5.示例二、健康检查:又称为探针(Probe)1.定义2.探针的三种规则:3.Probe支持三种检查方法4.示例三、扩展1.pod的状态2.Container生命周期四、总结1.资源限制2.Pod容器探针3

JS响应替换|解决谷歌验证码混淆js还原替换后的跨域问题

关注它,不迷路。本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!1.目标地址夜幕爬虫安全论坛的登录页面有个谷歌验证码:其地址是:https://bbs.nightteam.cn/member.php?mod=logging&action=login它的混淆js地

【Xilinx】基于MPSoC的OpenAMP实现(一)

【Xilinx】基于MPSoC的OpenAMP实现(一)一、开发环境1、开发思路2、下载官方bsp包二、编译Linux1、配置petalinux环境变量2、创建工程3、进入目录4、设置缓存目录(重点:可离线编译,加快编译速度)5、配置u-boot6、配置内核6.1增加内核选项(重点:没有正确选择会导致运行时各种奇怪的报

Linux常用命令—find命令大全

文章目录一、find命令常用功能1、find命令的基本信息如下。2、按照文件名搜索3、按照文件大小搜索4、按照修改时间搜索5、按照权限搜索举例:6、按照所有者和所属组搜索7、按照文件类型搜索8、逻辑运算符一、find命令常用功能1、find命令的基本信息如下。命令名称:find。英文原意:searchforfilesi

热文推荐