本文首发公众号:区块链之美关注公众号后可免费阅读!区块链之美 致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。

至此,已经介绍了改进的Paillier加法同态加密,以及FO承诺和基于FO承诺的范围证明。目前暂未介绍改进的同态加密算法加密,下面介绍基于FO承诺的零知识范围证明实现原理与应用举例,如下!

1. 问题引出

在隐私保护技术方面,比较突出的有两种主流的开源密码数字货币:Monero和Zcash。这两种隐匿币采用的账户模型是UTXO模型,并非ACCOUNT模型。Monero在地址隐私方面采用环签名和一次性地址技术,在交易数据隐私方面采用基于环签名和Pedersen承诺的Ring CT方案,同时也解决了交易输入输出地址不可链接且不可跟踪问题。Zcash在交易数据隐私方面采用的是自研的非交互式零知识证明技术zk-SNARKs。此外,业界还提出一种不用进行可信设置的非交互式零知识证明技术Bulletproof,可结合Pedersen承诺解决范围证明问题。

如果用户的交易数据未加密,用户的资金情况以及交易金额等隐私信息很容易泄露,阻止了区块链技术在更多领域内的应用。虽然可以采用加密技术来对用户的交易数据进行加密,但是在传统的交易过程中,为了防止应用层发起非法交易,链码端还需要对交易数据的合法性进行校验,即对输入金额与输出金额相等性校验、交易金额大于0校验和用户余额大于0校验,这些校验在交易数据为明文时很容易完成,但是在对交易信息采用加密技术后,链码端出现的数据均为密文状态,致使无法像校验明文那样来完成校验过程,同时也无法对密文进行相关的运算,来完成对账本的更新。

同态加密是一种具有特殊属性的非对称加密方法,该加密方法可以对加密后的数据进行基本的运算,然后对结果进行解密与直接用明文进行相应的运算结果是一致的,通过使用同态加密算法,能够让链码端在不解密交易数据的情况下对交易密文进行相关的运算,来完成对用户资产的更新。零知识证明是一种基于承诺的证明技术,该技术可以让验证者在不知道承诺中秘密的情况下,相信关于承诺中秘密的有关信息,譬如秘密所在的范围或两个承诺中是否隐藏同一个秘密,通过使用零知识证明技术,能够使链码端在交易信息为密文的情况下,判断密文中隐藏值的所在范围,来完成对交易信息的校验过程。

因此,一种交易金额的同态加密计算和零知识证明方案,主要解决交易数据在智能合约中如何进行密文加法计算,同时提供对密文数据的有效性证明和验证,例如交易秘密数据范围证明交易秘密数据承诺相等证明交易私密数据输入输出平衡验证

2. 范围证明

首先,我们来研究不使用zk-snark、Bulletproof、Ring CT等技术如何实现范围证明。

FO承诺在没有附加条件下应用于区块链交易时不安全的。利用FO承诺的同态性很容易验证交易的平衡特性,即验证方只需要将输入金额的承诺与输出承诺比较就能确定交易的正确性。这种方案简单且能验证交易,但是并不安全。因为承诺的加减要在一个循环群内进行模NNN的操作,所以存在溢出或出现负数金额的可能。通常情况下解决的办法是附加一个范围证明条件,证明交易金额为正整数或者在一个确定的整数范围内,如[0,210][0,2^{10}][0,210]。

以下内容,参考自[1]。设t,l,s1,s2t,l,s_1,s_2t,l,s1​,s2​为公开的安全参数,nnn为一个大合数,其因式分解Alice和Bob未知。对于xxx的两个承诺,分别为Ei(x,ri)=gixhirimodn,i=1或2E_i(x,r_i)=g_i^xh_i^{r_i}modn,i = 1或2Ei​(x,ri​)=gix​hiri​​modn,i=1或2。随机数ri∈[2s1n+1,2s1n−1],i=1或2r_i \in [2^{s_1}n+1,2^{s_1}n-1],i = 1或2ri​∈[2s1​n+1,2s1​n−1],i=1或2。

Alice想向Bob证明一个承诺中的承诺值x∈[a,b]x \in [a,b]x∈[a,b]。这里从理论角度讲,实现的是x∈[a−1,b+1]x \in [a-1,b+1]x∈[a−1,b+1]范围证明,即容忍度δ=1\delta =1δ=1。首先,扩大xxx的大小为x′=2Txx'=2^Txx′=2Tx,T=2(t+l+1)+∣b−a∣T=2(t+l+1)+|b-a|T=2(t+l+1)+∣b−a∣,令E′=E2TE'=E^{2^T}E′=E2T,E′E'E′是x′=2Txx'=2^Txx′=2Tx的FO承诺且仅Alice能解开,x′=[2Ta−2t+l+T/2+1b−a,2Tb+2t+l+T/2+1b−a]x'=[2^Ta-2^{t+l+T/2+1}\sqrt{b-a},2^Tb+2^{t+l+T/2+1}\sqrt{b-a}]x′=[2Ta−2t+l+T/2+1b−a​,2Tb+2t+l+T/2+1b−a​]。

令T=2(t+l+1)+∣b−a∣T=2(t+l+1)+|b-a|T=2(t+l+1)+∣b−a∣,ϕ=2t+l+T/2+1b−a\phi = 2^{t+l+T/2+1}\sqrt{b-a}ϕ=2t+l+T/2+1b−a​,即x′=[2Ta−ϕ,2Tb+ϕ]x'=[2^Ta-\phi,2^Tb+\phi]x′=[2Ta−ϕ,2Tb+ϕ],可以推出:

ϕ=2t+l+T/2+1b−a<2t+l+T/2+1∗2⌈(∣b−a∣−1)/2⌉<2T/2∗2t+l+1∗2⌈(∣b−a∣−1)/2⌉<2T/2∗2T/2<2T\phi = 2^{t+l+T/2+1}\sqrt{b-a} < 2^{t+l+T/2+1}*2^{\lceil(|b-a|-1)/2\rceil} < 2^{T/2}*2^{t+l+1}*2^{\lceil(|b-a|-1)/2\rceil} < 2^{T/2}*2^{T/2} < 2^Tϕ=2t+l+T/2+1b−a​<2t+l+T/2+1∗2⌈(∣b−a∣−1)/2⌉<2T/2∗2t+l+1∗2⌈(∣b−a∣−1)/2⌉<2T/2∗2T/2<2T

即ϕ<2T\phi < 2^Tϕ<2T。

如果Bob相信x′=[2Ta−ϕ,2Tb+ϕ]x'=[2^Ta-\phi,2^Tb+\phi]x′=[2Ta−ϕ,2Tb+ϕ],他一定能够相信x′=⟨2Ta−2T,2Tb+2T⟩x'=\langle2^Ta-2^T,2^Tb+2^T\ranglex′=⟨2Ta−2T,2Tb+2T⟩,即x∈⟨a−1,b+1⟩x\in \langle a-1,b+1\ranglex∈⟨a−1,b+1⟩。由于xxx是一个整数,有理由使Bob相信x∈[a,b]x\in [a,b]x∈[a,b]。

3. 零知识证明范围验证的理论算法

零知识证明范围验证的理论算法原始理论可参考[1],以下中文版参考自[2]。由于时间关系,不再整理,直接引用文章[2],详细理论推导过程如下:


4. 零知识证明范围验证的代码使用详解

具体代码可以到github下载:ING的零知识证明开源代码,代码结构如下:

基于Fujisaki-Okamoto承诺的零知识范围证明应用举例:

public static final SecretOrderGroup EXAMPLE_GROUP = new SecretOrderGroup(new BigInteger("123763483659823661164839153854113"),new BigInteger("9978076495933337078596144096749"),new BigInteger("46959937887401751832025265468109"));@Test (expected = ZeroKnowledgeException.class)
public void testInvalidRange() throws Exception {BigInteger x = new BigInteger("50");//生成x对应的Fujisaki-Okamoto承诺TTPMessage message = TTPGenerator.generateTTPMessage(x, EXAMPLE_GROUP);//要证明的范围区间ClosedRange range = ClosedRange.of("10", "100");//生成范围证明BoudotRangeProof rangeProof = RangeProof.calculateRangeProof(message, range);//对提供的范围证明进行验证RangeProof.validateRangeProof(rangeProof, message.getCommitment(), range);
}

上面代码演示了在不公布明文50,仅给出密文的message情形下,验证方验证message是否在(10,100)区间之间,当然验证结果是超出范围,此时便会抛出new ZeroKnowledgeException(“Zero-knowledge proof validation failed”)的异常,证明验证不通过。

具体TTPMessage的数据结构、FO承诺的生成、范围证明BoudotRangeProof的生成算法和步骤,以及RangeProof.validateRangeProof()验证步骤,不再详述,可参考源码ING的零知识证明开源代码。

5. 关于零知识证明的其他应用场景


至此,关于智能合约隐私计算系列文章总结完毕!

6. 往期回顾

数字签名系列

  • 图解 ECDSA 签名与验签基本原理
  • 图解 BLS 签名与验签基本原理
  • BLS 签名理论原理和工程实现
  • 基于 RSA 的实用门限签名算法
  • 门限密钥共享技术原理
  • 隐私保护利器之环签名实现原理
  • 多重签名 MultiSig:Schnorr 协议与 ECDSA 协议
  • 一种高效的数字签名算法ED25519
  • Schnorr 协议:零知识身份证明和数字签名

智能合约隐私计算

  • 智能合约隐私计算:开篇
  • 智能合约隐私计算:同态加密应用举例
  • 智能合约隐私计算:再谈Paillier同态加密算法
  • 智能合约隐私计算:基于FO承诺的零知识证明
  • 智能合约隐私计算:基于FO承诺的零知识承诺相等性证明和平衡验证

密码学承诺系列

  • Pedersen commitment

同态加密系列

  • 智能合约隐私保护技术之同态加密

3. 参考资料

[1] Fabrice Boudot. Efficient Proofs that a Committed Number Lies in an Interval[C]// International Conference on Advances in Cryptology-eurocrypt. Springer-Verlag, 2000.

[2] https://zhuanlan.zhihu.com/p/37992560

智能合约隐私计算之基于FO承诺的零知识范围证明相关推荐

  1. 智能合约隐私计算之同态加密应用举例

    本文首发公众号 VenusBlockChain,关注公众号后可免费阅读!VenusBlockChain 致力于区块链技术研究,传播区块链技术和解决方案.区块链应用落地.区块链行业动态等. 1 同态加密 ...

  2. 使用ganache-cli和truffle构建以太坊智能合约,以实现“基于哈希锁定的跨链技术”为例

    目录 配置以太坊开发环境 部署智能合约 调用智能合约 配置以太坊开发环境 系统与工具的版本:Ubuntu 21.04 npm 7.5.2 Ganache CLI v6.12.2 (ganache-co ...

  3. 【论文笔记06】智能合约的合约安全和隐私安全研究综述

    计算机学报 原文作者:胡甜媛 李泽成 李必信 包骐豪* 原文标题:智能合约的合约安全和隐私安全研究综述* 原文链接:智能合约的合约安全和隐私安全研究综述 - 中国知网 原文来源: 计算机学报 笔记作者 ...

  4. 基于语义嵌入模型与交易信息的智能合约自动分类系统

    摘要: 作为区块链技术的一个突破性扩展,智能合约允许用户在区块链上实现个性化的代码逻辑从而使得区块链技术更加的简单易用.在智能合约代码信息迅速增长的背景下,如何管理和组织海量智能合约代码变得更具挑战性 ...

  5. 冲量在线亮相英特尔隐私计算研讨会,基于可信执行环境技术构建更安全的数据流通方案

    近日,冲量在线受邀参与由英特尔(中国)联合上海国创科技产业创新发展中心于上海召开的"隐私计算技术研讨会--安全与效率"会议,同各位隐私计算领域的前沿技术专家共同畅谈数据智能时代隐私 ...

  6. 算力智库2021隐私计算论坛圆满落幕,隐私计算落地会长出怎样的新商业模式?

    6月3日,由算力智库主办,中国信息通信研究院云计算与大数据研究所.隐私计算联盟.隐私计算技术联盟联合主办的2021第二届隐私计算产业与应用论坛在上海圆满收官.作为国内首个聚焦隐私计算领域的年度行业权威 ...

  7. 三万文字透视前瞻:区块链及隐私计算在传统企业中的技术认知与进阶思考

    作者  :招商局集团数字化中心  山金孝 声明:文章仅代表作者个人观点,与任何组织或公司无关 前言 区块链是一种分布式网络数据管理技术,其利用密码学和分布式共识协议保证网络传输与访问安全,并实现数据多 ...

  8. 2022爱分析· 隐私计算厂商全景报告 | 爱分析报告

    报告编委 张扬 爱分析 合伙人&首席分析师 洪逸群 爱分析 高级分析师 孟晨静 爱分析 分析师 目录 1.研究范围定义 \2. 厂商全景地图 \3. 市场定义与厂商评估 \4. 入选厂商列表 ...

  9. 【论文笔记01】A Survey on Smart Contract Platforms and Features——智能合约平台和功能调查

    原文作者:M. Suvitha and R. Subha* 原文标题:A Survey on Smart Contract Platforms and Features* 原文链接:A Survey ...

最新文章

  1. 卷积神经网络(CNN)数学原理解析
  2. 如何改变线的长度?CAD .NET热门技术问答精选合集
  3. wxWidgets:创建一个 Frame
  4. 从DUMP函数说开去
  5. 作者:宋长青,山东农业大学教授,农业大数据研究中心常务副主任。
  6. Flutter学习之纵向布局
  7. 一文看懂Java锁机制
  8. php+oracle新增数据类型,Oracle 修改某个字段的数据类型三种方式
  9. 你了解MySQL 主从复制吗?
  10. Sending form data
  11. atitit.提升开发效率---mda 软件开发方式的革命--(2)
  12. H5调用手机摄像头和相册更换头像
  13. ASP.NET身份验证和授权,使用cookie和Claims认证
  14. 用java把word转pdf
  15. 2019蓝桥杯国赛c++ A组
  16. 东南大学计算机视觉博士招生,基于计算机视觉的手势识别及人机交互技术的应用研究...
  17. iphone icloud无法载入储存空间信息
  18. 各种进制转换(二,八,十,十六进制间转换)详解附代码
  19. 怎样才能让青少年培养起阅读习惯?听听猿辅导这四位嘉宾怎么说
  20. OCiOS开发:使用相册、照相机和录像

热门文章

  1. 怎样用 Python写一个股票自动交易接口的程序?
  2. 路由器芯片方案、第三方固件秘密全在这里了
  3. PostgreSQL performance test use ssh tunnel
  4. wifi直连(Android)Wifi-Direct
  5. 从Excel读取数据,注册hotmail等信箱的脚本半自动化简单谈
  6. 美国科技公司实习生薪酬:最高月薪7500美元
  7. Abaqus简史:“黑科技”之路
  8. Ronin SC基础使用教程
  9. TRW五合一(转载)
  10. linux单机游戏软件下载,帝国时代单机手机版