比特币 ZK 赏金系列:第 2 部分——查找哈希冲突

2023-09-20 12:15:03

在我们的零知识赏金 (ZKB) 系列的第二部分中,我们将其应用于解决哈希冲突难题。在这样的谜题中,两个不同的输入散列到相同的输出。此类赏金可用于:

  1. 充当煤矿中的金丝雀,给我们一个有价值的提醒。存在冲突是散列函数较弱的标志,因此我们可以尽早升级以减轻损失。

  2. 资助研究以发现哈希函数中的漏洞,特别是对于 MiMC 等新函数。

碰撞攻击

历史

比特币开发者彼得托德于 2013 年最初发布了用于发现各种哈希函数中的冲突的比特币赏金。SHA1 赏金是在 2017 年收集的,在谷歌破解它后不久。

最初的哈希碰撞赏金

这种原始赏金有两个缺点:

  1. 一旦有人广播包含解决方案的收集交易,矿工就可以拦截它,提取解决方案,并将奖励重定向到他们自己。

  2. 该解决方案是公开的,可以被恶意行为者利用。

ZKB 解决了这两个问题,因此只有发现碰撞的赏金收集者才能赎回它,并且只有赏金制定者才能了解解决方案。

实现

第 1 部分一样,我们只需替换特定于应用程序的电路 C 即可验证两个原像(即散列函数的输入)不同但它们产生相同的散列。我们以 Poseidon 哈希函数为例,一种新的 ZK 友好哈希。其他哈希函数可以使用类似方式。这两个原像作为私有输入传递进来,永远不会公开透露。

template Main() {

    // Private inputs:
    signal input preimage0[16]; 
    signal input preimage1[16];
    signal input db[4];                      // Seller (Bob) private key.
    signal input Qs[2][4];                   // Shared (symmetric) key. Used to encrypt w.
    
    // "Public" inputs that are still passed as private to reduce verifier size on chain:
    signal input Qa[2][4];                   // Buyer (Alice) public key.
    signal input Qb[2][4];                   // Seller (Bob) public key.
    signal input nonce;                      // Needed to encrypt/decrypt xy.
    signal input ew[34];                     // Encrypted solution to puzzle.

    // Public inputs:
    signal input Hpub[2];            // Hash of inputs that are supposed to be public.
                                     // As we use SHA256 in this example, we need two field elements
                                     // to acommodate all possible hash values.

    
     Assert that public inputs hash to Hpub. ///

    ...

     Assert that preimages are a valid solution. //
    // Check preimage0 and preimage1 are differend and that they produce the same hash.
    var diff = 0;
    for (var i = 0; i < 16; i++) {
        diff += preimage0[i] ^ preimage1[i];
    }
    assert(diff != 0);

    component h0 = Poseidon(16);
    component h1 = Poseidon(16);
    for (var i = 0; i < 16; i++) {
        h0.inputs[i] <== preimage0[i];
        h1.inputs[i] <== preimage1[i];
    }
    h0.out === h1.out;

     Assert that (db * Qa) = Qs 

    ...

     Assert that (db * G) = Qb /

    ...

     Assert that encrypting w with Qs produces ew. /

    ...
}

GitHub 上提供了完整的代码和测试,包括验证证明并支付赏金收集者的智能合约

更多推荐

软考复习 -- 计算机网络

1网络互连设备物理层:中继器和集线器(多路中继器)数据链路层:网桥和交换机(多端口网桥)网络层:路由器应用层:网关2广播域和冲突域3协议簇4网际层协议4TCP和UDP4.1TCP传输层协议——TCP:面向连接可靠的传输层协议,采用三次握手建立和关闭连接TCP的功能或服务有:可靠传输、连接管理、差错校验和重传、流量控制、

4-3 nn.functional和nn.Module

一,nn.functional和nn.Module前面我们介绍了Pytorch的张量的结构操作和数学运算中的一些常用API。利用这些张量的API我们可以构建出神经网络相关的组件(如激活函数,模型层,损失函数)。其实:Pytorch和神经网络相关的功能组件大多都封装在**torch.nn**模块下。这些功能组件的绝大部分

47个Docker常见故障的原因和解决方式

本文针对Docker容器部署、维护过程中,产生的问题和故障,做出有针对性的说明和解决方案,希望可以帮助到大家去快速定位和解决类似问题故障。Docker是一种相对使用较简单的容器,我们可以通过以下几种方式获取信息:1、通过dockerrun执行命令,或许返回信息2、通过dockerlogs去获取日志,做有针对性的筛选3、

源码:TMS FlexCel Studio for .NET 7.19

TMSFlexCelStudiofor.NET是100%托管代码Excel文件操作引擎以及Excel和PDF报告生成,适用于.NET、Xamarin.iOS、Xamarin.Android、Xamarin.Mac、WindowsPhone和WindowsStore功能概述使用FlexCelStudiofor.NET创建

moea项目的问题解决方案

moea项目的相关问题报错1:run_GAN-adjlvxm.py':[Errno2]Nosuchfileordirectory报错2:mkdir:cannotcreatedirectory‘./result’:Fileexists报错3:fromfunction.APG-SMOEA_frameworkimportop

【验证码逆向专栏】螺丝帽人机验证逆向分析

声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】联

python每日一题(模拟用户登录验证)

1、题目预先设定正确用户名与密码,用来验证用户是否登录成功。第一次:①输入用户名与密码,如果用户名与密码正确,则提示登录成功;②如果用户名错误(不管密码是否正确),则需要重新输入用户名与密码验证,并提示用户名或密码错误;③如果用户名正确,密码错误,打印密码错误,且仅需要输入密码验证,且验证次数仅剩与2次,若在2次验证机

2023华为杯研究生数学建模E题思路代码分析

完整的思路代码查看文末名片血肿扩张风险相关因素探索建模。请根据“表1”(字段:入院首次影像检查流水号,发病到首次影像检查时间间隔),“表2”(字段:各时间点流水号及对应的HM_volume),判断患者sub001至sub100发病后48小时内是否发生血肿扩张事件。结果填写规范:1是0否,填写位置:“表4”C字段(是否发

netty报文解析之粘包半包问题

粘包问题Netty的粘包问题是指在网络传输过程中,由于TCP协议本身的特点,导致发送方发送的若干个小数据包被接收方合并成了一个大数据包。这种情况称为粘包。TCP协议是面向流的协议,没有数据边界,发送方发送的数据可能会被分成多个数据包进行发送,接收方则需要将这些数据包重新组装为原始数据。当接收方处理不当时,就可能会发生粘

【JavaWeb】你这么厉害,知道RBAC权限模型和ABAC权限模型吗?

文章目录一.RBAC权限模型1.RBAC的组成2.RBAC模型分类2.1.基本模型RBAC02.2.角色分层模型RBAC12.3.角色限制模型RBAC22.4.统一模型RBAC33.RBAC0模型核心表结构3.1.表结构设计3.2.模块划分4.基于RBAC的延展—用户组二.ABAC权限模型(基于Java讲解)1.ABA

人机中的事实与价值时空、排序

人机结合智能与事实价值融合分析确实是未来解决复杂疑难问题的基本策略之一。该策略利用人类智慧和机器智能相结合,结合有效的事实和价值分析方法,以更全面、准确、高效地解决问题。通过人机结合,可以充分发挥人类的主观能动性、判断力和创造力,同时借助机器的强大计算和数据处理能力,提供更深入、广泛的信息搜索、筛选和分析。这种结合能够

热文推荐