- 博客(47)
- 资源 (22)
- 收藏
- 关注
原创 Mental Poker- Part 2
在part-1中,我们梳理了去中心纸牌游戏所面临的挑战,也介绍了一种改进的Barnett-Smart协议,part-2将深入了解该协议背后涉及的算法。
2023-09-13 15:12:28
280
原创 Mental Poker- Part 1
扑克是一种牌桌上的游戏,但如果在没有物理扑克的互联网上,没有一个可信第三方维护公平,且参与玩家皆是不诚实的,这个时候怎么来一场公平的扑克游戏?这个问题由Rivest, Shamir and Adleman于1979年提出,并将这个问题称为“Mental Poker”,下面是摘自原文的一段关于Mental Poker的描述:自此大量的解决方案涌现出来,但都不经打,主要因为这些方案计算和通信成本太大,这对于一个实时游戏来说是无法接受的。
2023-09-06 09:32:59
371
原创 Nova: 基于committed relaxed R1CS的IVC方案
Nova是INV的一种实现方案,所谓IVC是指Prover可以向verifier证明ziFiz0。Ωi∗∣F∣iNova 的整体思路是将原始的 R1CS 问题转化为一种更加灵活且支持 Folding形式的relaxed R1CS,并在此基础上,进一步构造了 committed relaxed R1CS,committed relaxed R1CS主要保护了witness的机密性,然后基于 committed relaxed R1CS构建了 IVC方案。
2023-07-07 14:54:17
465
原创 Groth16
Groth16于16年被提出,是一种在证明大小(证明只包含三个点)和验证时间上都具有很大优势的zkSNARK算法。zkSNARK通常需要进行可信设置(Setup),Groth16也不例外,然而Groth16的setup生成的公共参考串(CRS)不是通用的,即由该初始设置生成的CRS只能针对特定电路,而不能直接被用于任意电路的零知识证明之中,这也是Groth16实际应用中比较鸡肋的地方。
2023-05-09 15:44:59
1676
原创 Poseidon Hash
之前我们介绍了zk友好的哈希函数,今天我们介绍另一种zk友好的哈希函数PoseidonPoseidon采用 sponge/squeeze 结构,该结构吸纳万物并生成固定大小的输出,内部有一个状态Ss1s2...st,初始状态为0,状态S可分为外部状态和内部状态,即rrate和ccapacityps:内部状态是不透明的,也不是输出的一部分,这对安全至关重要。
2023-04-19 15:01:03
1097
原创 BLS签名中与0相关的漏洞
在密码中最有趣的数字是什么?当然是0因为0乘以万物都等于0本文章主要讨论BLS签名中与0相关的漏洞(PS:本文最后简单回顾下BLS签名和BLS聚合签名)
2023-03-29 16:17:10
417
原创 Anemoi hash:一种SNARK-friendly的哈希函数
随着zk的兴起,出现了一大批zk友好且面向算术化(Arithmetization-Oriented)的哈希函数,如MiMC-Hash, Rescue–Prime, Poseidon等等,本文要介绍的Anemoi也是一种zk友好且面向算术化的哈希函数,与其他哈希函数相比,Anemoi具有以下特点:可以被用于Groth16, Plonk等证明系统中包含对特定应用的优化,如merkle tree的证明性能优越,参见下表。
2022-11-25 17:31:58
878
原创 海棉结构sponge construction
海绵结构是一类具有有限内部状态的算法,可以将任意有限长的输入消息变成任意长度输出的消息摘要,其结构如下,其中。海棉结构,或称海绵哈希,是当前密码学中一种重要构造结构,如当前sha-3采用的即是海绵结构。函数顺序迭代吸收消息,通常情况下,输入消息不是分组长度的整数倍,因此还要进行填充操作。海绵结构其计算过程主要分为两个部分:abaorbing和squeezing。在squeezing过程中,根据输出长度来输出哈希值,每输出一个值,都要利用。在abaorbing过程中,函数来更新内部状态。
2022-11-25 10:31:20
1563
原创 Zerocash:Decentralized Anonymous Payments from Bitcoin
Zerocash是在比特币上增加一套匿名支付机制得到的货币,这套匿名支付机制叫做DAP(Decentralized Anonymous Payment )方案,DAP可以搭建在任何基于账本的加密数字货币上层,提供一套匿名机制。zcash系统利用zkSnark构造了去中心化的”匿名池“ ,通过铸币(Mint)和浇铸(Pour)完成匿名操作,所谓铸币过程是指用户使用一定量的币兑换等额的承诺(匿名货币),浇铸过程是指用户通过零知识证明的方式进行匿名货币之间的转账,并且在转账过程中还可以进行赎回操作。ste
2022-05-26 08:39:32
2373
原创 Shamir秘密共享的同态性质
一.加法同态Shamir 秘密共享天然具有加法同态性质,即对于多个(t,n)Shamir 秘密共享生成的秘密份额相加是对应秘密值和的秘密份额,并且此过程中的门限值始终为t(d个t-1次多项式相加其结果依然是t-1次),因此t个对应秘密值和的秘密份额可以恢复对应秘密值。MPC协议之BGW算法中的加法运算巧妙利用了此加法同态性质实现了秘密值和的安全多方计算。初始化阶段d个秘密分发者分别选取t-1多项式,分别为n个参与者进行秘密份额分发:F(x)j=sj+F1jjx+...+F(t−1)jxt−1,j=
2022-05-10 16:11:42
1731
原创 基于Pedersen承诺的可验证秘密共享方案: Pedersen VSS
传统(t,n)门限秘密共享方案并未考虑参与者和秘密分发者可能出现的恶意行为:当重构秘密时,不诚实的参与者发送错误的秘密份额当份额分发时,秘密分发者分发错误的秘密份额为解决上述欺骗问题,可验证秘密共享(VSS: VerifiableSecret Sharing)最早于1985年被提出,该方案通过参与方间的交互来验证密钥份额的合法性,随后又提出了非交互式VSS方案 ,但早期的非交互式VSS方案依赖于可信第三方,于是随后又诞生了一批不依赖于第三方的非交互式VSS,Pedersen VSSS即是
2022-05-09 18:26:23
3856
原创 BLS12-381 and BLS Signatures
BLS12-381 and BLS Signatures椭 圆曲线密码算法具有密钥短的优点,为了达到128 bit的安全水平,NIST (美国国家标准与技术研究院)推荐使用 3072 bit 的RSA密钥 ,而椭圆曲线密码算法仅需要256 bit就能达到同等安全强度,这使得密钥长度大大缩短,因而大受欢迎。一. BLS12-381简介BLS12-381是Pairing-Friendly的椭圆曲线,Pairing-Friendly的椭圆曲线要满足两点:1.具有大素数阶子群;2.嵌入次数要小。BLS12-3
2022-04-01 18:11:21
2636
1
原创 zkSnarks:QAP上构造零知识证明
协议一:抽样验证:prover向验证证明它知道一个d阶多项式verifier:选取随机数s,发送给proverprover:计算h(x) = P(x)/t(x) ,公开p(s) 、h(s)。verifier:验证等式p(s) = t(s) h(s)是否成立该证明了prover知道一个整除t(x)的多项式,但存在以下问题:prover 知道s,可以计算出t(s), 随机选取h(s) ,并构造p(s) = t(s) h(s)prover 知道点(s, t® h®), 可以构造
2022-03-23 15:34:43
1117
原创 WeDPR t_out_of_n 不经意传输协议
WeDPR t_out_of_n OT 协议 ,算法实现见:https://github.com/WeBankBlockchain/WeDPR-Lab-Crypto/tree/main/crypto/oblivious_transfer/base_otmessageList = [{id _0,message_0}, {id_1,message_1}, {id_2, message_2} , {id_3, message_3} ]其中id_i 为对应message_i 的标识,id_i 公开步骤一 r
2022-03-09 11:05:44
255
原创 WeDPR 1_out_of_2 不经意传输协议
WeDPR 1_out_of_2 OT 协议 ,算法实现见:https://github.com/WeBankBlockchain/WeDPR-Lab-Crypto/tree/main/crypto/oblivious_transfer/base_otmessage = [message_0, message_1 ]步骤一 receiver初始化: 生成随机数 a , b 计算 c = a * b 计算 point_x = a * G1
2022-02-25 11:21:55
433
原创 WeDPR即时可用场景式隐私保护高效解决方案
WeDPR是一系列即时可用场景式隐私保护高效解决方案套件和服务(参见WeDPR白皮书),由微众银行区块链团队自主研发。方案致力于解决业务数字化中隐私不“隐”、共享协作不可控等隐私保护风险痛点,消除隐私主体的隐私顾虑和业务创新的合规壁垒,助力基于隐私数据的核心价值互联和新兴商业探索,营造公平、对等、共赢的多方数据协作环境,达成数据价值跨主体融合和数据治理的可控平衡。WeDPR具备以下特色和优势:场景式解决方案:已基于具有共性的场景需求,提炼出公开可验证密文账本、多方密文决策、多方密文排名、多方密文计算、
2022-02-25 10:55:12
814
原创 solidity:6.继承
solidity 支持多继承,通过关键字 is 实现,继承的合约可以直接访问父合约的public,internal权限的变量或函数1.继承与构造函数有两种方法初始化父类合约,如contract A 、contract B在继承的时候,父构造函数总是按照继承的顺序调用,跟子合约中父类的构造函数的顺序无关,如contract B、contract Cpragma solidity ^0.8.0;contract X { string x; constructor(string m
2022-01-14 10:06:59
705
原创 solidity:5.函数修改器
modifier的三种应用场景权限控制,如example 1入参校验,如example 2防止重入,如example 3pragma solidity ^0.8.0;contract FunctionModifier{ address public owner; bool public locked; int public x; constructor(){ owner = msg.sender; locked = fals
2022-01-11 16:11:05
10059
原创 solidity:4.函数可见性与修饰符
一. 函数可见性public - 支持内部或外部调用private - 仅在当前合约合约调用,且不可被继承internal- 只支持内部调用external - 不支持内部调用// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.0;contract VisibilityA{ uint public x; function t1() public pure returns(string memory) {
2022-01-07 10:46:36
11354
原创 基于RSA的t-out-of-n OT协议
在1-out-of-2 不经意传输协议(OT)中,发送方(sender)有两个秘密输入(X0,X1),接收方(receiver)有一个选择比特σ\sigmaσ∈\in∈{0,1},双 方执行完协议之后,receiver得到输出Xσ\sigmaσ,sender不知道receiver的输入比特σ\sigmaσt-out-of-n OT 协议是指sender 将 n 个秘密消息加密后发送给receiver,receiver方只能恢复其中t个消息与1-out-of-2 OT相比,t-out-of-n OT 更具
2021-12-22 10:49:52
1229
原创 安全多方计算之BGW算法
BGW协议由Ben-Or等人于1988年提出来的,是早期支持多方安全计算的协议之一,其算法原理是基于Shamir秘密共享机制,BGW协议支持加法、数乘以及乘法运算Shamir秘密共享原理可参考:shamir算法原理Shamir秘密共享算法实现可参考:shmir算法实现基于Shamir秘密共享机制的MPC原理其实很简单,看下面例子:WXYZ分别拥有秘密abcd,现在想秘密计算abcd的和,可以这样做,W将a分成四份,分别将a2/a3/a4发送给XYZ,XYZ执行同样操作;然后W计算a1+b1+c1+d
2021-11-19 15:42:17
6258
原创 shamir秘密共享 go语言实现
算法原理参考:shamir 秘密共享大素数p的选取,这里选取的是128bit大素数func prime128Bit() *big.Int { p := big.NewInt(2) p.Exp(p, big.NewInt(127), nil) p.Sub(p, big.NewInt(1)) return p}Share和Polynomial 结构体定义,Share结构体定义了参与者拥有的秘密(x,y), Polynomial结构体定义了多项式,多项式的「知识」即该多项式的系数,知道多
2021-11-10 15:59:16
1380
3
原创 zkSnarks:证明问题到QAP的转换
许多待证明的问题可以表示为多项式函数的形式,而一个多项式函数可以转化为一个算术电路,已经有文献证明算术电路可以转换成QAP问题,基于QAP问题可以构造zkSNARKs,所以基于QAP问题构造zkSNARKs的第一步是将待证明问题转换成QAP问题,本文主要讲解如何将待证明问题转换成QAP问题。QAP定义:给一系列多项式以及一个目标多项式,是否能根据这一系列的多项式,求得它们的一个线性组合,刚好可以整除目标多项式,如下描述,给定一个解{ai}i=0−>n\{a_i\}_{i=0->n}{ai}
2021-11-04 16:57:04
1552
5
原创 solidity:3.数据存储位置
所有的引用类型都有一个额外注解(storage、memory、calldata),来说明数据的存储位置,上节提到的mapping、struct、array都是引用类型storage - storage变量永久存储在区块链上memory - memory变量则是临时的,当函数调用完成时被移除calldata - 效果同memory,只不过只用在external函数调用中数据存储位置不同,赋值行为也会不同,下面看几个案例:storage to storagestorage状态变量 ->
2021-10-27 18:34:52
10596
原创 solidity:2.mapping、array和struct
一 . mapping 映射(mapping)在声明时的形式为 mapping(KeyType => ValueType),可以根据KeyType 得到ValueType KeyType 除数组类型(除bytes和 string)是不可以作为 KeyType,其它类型均可以作为KeyType ValueType可以是包括映射类型在内的任何类型contract mapTest1 { mapping(address => uint) myMap;
2021-10-26 17:48:37
1136
原创 solidity:1. 变量和常量
一 . Solidity 支持三种类型的变量:状态变量 – 变量值永久保存在合约存储空间中的变量。局部变量 – 变量值仅在函数执行过程中有效的变量,函数退出后,变量无效。全局变量 – 保存在全局命名空间,用于获取区块链相关信息的特殊变量。状态变量contract Test { string public name; function setName(string memory _n) public { name = _n;
2021-10-22 14:56:00
6121
原创 零知识证明框架:gnark
一. 零知识证明的一般构造步骤zk-SNARKs是一种新颖的零知识证明,一般构造流程图如下,首先将一个NP问题拍平(Flatten)构成电路(若干个乘法门/加法门构成),在电路的基础上构造约束,也就是R1CS,有了约束就可以把NP问题抽象成QAP问题。有了QAP问题的描述,就可以在QAP上构建zkSNARKs。二. gnarkgnark是consenSys开发的一个zkSARNK实现,采用Go语言,目前支持groth16,github地址:https://github.com/ConsenSys/g
2021-10-14 11:42:21
2475
5
原创 fabric运维监控:prometheus配置热更新
在上一篇fabric运维监控:prometheus+grafana框架搭建中搭建了prometheus+grafana监控框架,但这里存在一个问题,所有监控job都提前写好在配置文件prometheus.yml中,后面新增job时,都得手动修改配置文件、重启服务,如当用prometheus去监控baas平台时,如何做到prometheus动态监控新增的节点?Prometheus提供了多种动态服务发现的功能,这里以consul为例介绍动态加载配置文件过程1 . 安装consul(docker 方式)do
2021-10-08 16:28:09
6764
hyperledger-fabric-ca-linux-amd64-1.4.9.tar.gz
2021-01-07
Spring Data.zip
2020-10-30
技能树.txt
2019-11-03
IBM hyperledger.zip
2019-11-03
Pedersen承诺.pdf
2019-11-03
信道编码简介
2018-10-26
超级账本fabric-ca
2018-10-26
go语言高级编程
2018-10-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人