解密区块链中最常见的密码学技术-零知识证明 | 技术帖

顾名思义,零知识证明就是既能充分证明自己是某种权益的合法拥有者,又不把有关的信息泄露出去——即给外界的“知识”为“零”。

解密区块链中最常见的密码学技术-零知识证明 | 技术帖

Part 1 零知识证明

顾名思义,零知识证明就是既能充分证明自己是某种权益的合法拥有者,又不把有关的信息泄露出去——即给外界的“知识”为“零”。

解密区块链中最常见的密码学技术-零知识证明 | 技术帖

目前以匿名性闻名的数字资产Zcash的匿名交易就是依靠“零知识证明”实现的。


Part 2 举例说明

举个例子:假如A 要向 B 证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开。有两个方法:

方法一:
A 把钥匙出示给 B,B 用这把钥匙打开该房间的锁,从而证明 A 拥有该房间的正确的钥匙。

方法二:
B 确定该房间内有某一物体,A 用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给 B,从而证明自己确实拥有该房间的钥匙。

方法二的原理就是零知识证明。

解密区块链中最常见的密码学技术-零知识证明 | 技术帖

证明示例:

零知识证明可以在不泄露内容本身的情况下,证明我知道这个秘密,可以有效解决许多验证问题。

解密区块链中最常见的密码学技术-零知识证明 | 技术帖

验证过程信息不泄露


Part 3 零知识证明的特性

  • 完备性 completeness:如果证明方和验证方都是诚实的,并遵循证明过程的每一步,进行正确的计算,那么这个证明一定是成功的,验证方一定能够接受证明方。

  • 合理性 soundness:没有人能够假冒证明方,使这个证明成功。

  • 零知识性 zero-knowledge:证明过程执行完之后,验证方只获得了「证明方拥有这个知识」的信息,而没有获得关于这个知识本身的任何信息。


Part 4 零知识证明的优点

  • 随着零知识证明的使用,安全性不会降级,因为该证明具有零知识性质。

  • 高效性,该过程计算量小,双方交换的信息量少。

  • 安全性依赖于未解决的数学难题,如离散对数、大整数因子分解、平方根等。

  • 许多零知识证明相关的技术避免了直接使用有政府限制的加密算法,为相关产品的出口带去优势。


零知识证明在区块链中的应用

比特币和以太坊网络都使用公共地址来代替验证者和证明者的真实身份,使得交易部分匿名; 只有发送和接收地址,以及交易数量是公众知道的。但是,通过区块链上提供的各种信息,如交互记录等,可以发现地址的真实身份,存在隐私暴露的隐患。

用了零知识证明之后,发送方、接收方和第三方的细节信息可以保持匿名,同时保证交易有效。

最早使用零知识证明技巧的区块链叫做 Zcash,实际的做法叫做 Zk-Snarks,这是许多零知识证明的做法之一,也是最有名的一个。

Zk-Snarks 是 “零知识简洁无交互知识认证” 的简称,是一种在无需泄露数据本身情况下证明某些数据运算的一种零知识证明。

Zk-Snarks 技术缩减了证明所需的时间和验证它们所需的计算量。它能够证明有效交易的条件已经满足,而不需要透露交易所涉及的地址或交易量的任何关键信息。

Zcash 可以将交易纪录上的汇款者、收款者和金额都经过加密隐藏起来,因此矿工无从得知这些交易上的细节,但仍然可以验证交易。不过,目前多数使用者在 Zcash 上的交易,还是选择未经加密的作法,因为花费的成本比较高。

另外,以太坊(Ethereum)上的智能合约目前也已经可以运用 Zk-Snarks 这套零知识证明的作法。但以太坊不完全是从隐私的角度切入,而是从节省运算成本的角度应用零知识证明。

透过 Zk-Snarks,以太坊矿工可以不用再重新执行交易的运算,而是只要对方提得出证明即可。大概就像我不需要真的知道你会高一到高三的数学,而只要看到高中毕业证就能确定你懂高中数学。不过,这只有在制作证明的成本,远低于实际运算成本的情况下才划算。

Zk-Snarks 将需要验证的交易内容转化为两个多项式乘积相等的证明,并结合同态加密等高级技术,在执行事务验证的同时保护隐藏的事务量。其过程可简单描述为:

将代码分解为可验证的逻辑验证步骤,然后将这些步骤分解为由加减乘除组成的计算流程。

进行一系列变换,将待验证代码转换为多项式方程,如 t(x)h(x)= w(x)v(x)。

为了使证明更加简洁,验证者事先随机选择几个检查点 s,检查这些点上的方程是否为真。

通过同态编码或加密,验证者在计算方程时不知道实际输入值,但仍然可以验证。

在等式的左右两边,乘以一个不等于 0 的密值 k。当验证 (t(s)h(s)k) = (w(s)v(s)k) 时,具体的 t(s)、h(s)、w(s)、v(s)是不可知的,可以对信息进行保护。

当前履行 Zk-Snarks 算法的一个缺陷是需要在 advanced 中内置参数。如果这些参数泄露,整个网络将面临毁灭性的破坏。因此,用户必须信任在使用这些网络时不会泄露的信息。

可能的解决方案包括使用现代的“可信执行环境”,如 Intel SGX 和 ARM TrustZone。对于 Intel 的 SGX 技术,即使应用程序、操作系统、BIOS 或 VMM 受到威胁,私钥也是安全的。此外,最近的一份白皮书揭示了它在零知识密码学中的创新:Zk-Snarkss(零知识可伸缩透明知识参数)。

根据 Zk-Snarks 白皮书,Zk-Snarks 是第一个不依赖任何信任设置实现区块链验证的系统,而随着计算数据数量的增加,计算速度呈指数增长。它不依赖于公钥加密系统,而且更简单的假设使它在理论上更安全,因为它唯一的加密假设是哈希函数 (如 SHA2) 是不可预测的。零知识证明和 Zk-S(T|N)ARK 等技术的测试和采用需要时间。

转载声明:本文 由CoinON抓取收录,观点仅代表作者本人,不代表CoinON资讯立场,CoinON不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。若以此作为投资依据,请自行承担全部责任。

声明:图文来源于网络,如有侵权请联系删除

风险提示:投资有风险,入市需谨慎。本资讯不作为投资理财建议。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2019年12月18日 下午4:12
下一篇 2019年12月18日 下午4:13

相关推荐

解密区块链中最常见的密码学技术-零知识证明 | 技术帖

星期三 2019-12-18 16:12:46

解密区块链中最常见的密码学技术-零知识证明 | 技术帖

Part 1 零知识证明

顾名思义,零知识证明就是既能充分证明自己是某种权益的合法拥有者,又不把有关的信息泄露出去——即给外界的“知识”为“零”。

解密区块链中最常见的密码学技术-零知识证明 | 技术帖

目前以匿名性闻名的数字资产Zcash的匿名交易就是依靠“零知识证明”实现的。


Part 2 举例说明

举个例子:假如A 要向 B 证明自己拥有某个房间的钥匙,假设该房间只能用钥匙打开锁,而其他任何方法都打不开。有两个方法:

方法一:
A 把钥匙出示给 B,B 用这把钥匙打开该房间的锁,从而证明 A 拥有该房间的正确的钥匙。

方法二:
B 确定该房间内有某一物体,A 用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给 B,从而证明自己确实拥有该房间的钥匙。

方法二的原理就是零知识证明。

解密区块链中最常见的密码学技术-零知识证明 | 技术帖

证明示例:

零知识证明可以在不泄露内容本身的情况下,证明我知道这个秘密,可以有效解决许多验证问题。

解密区块链中最常见的密码学技术-零知识证明 | 技术帖

验证过程信息不泄露


Part 3 零知识证明的特性

  • 完备性 completeness:如果证明方和验证方都是诚实的,并遵循证明过程的每一步,进行正确的计算,那么这个证明一定是成功的,验证方一定能够接受证明方。

  • 合理性 soundness:没有人能够假冒证明方,使这个证明成功。

  • 零知识性 zero-knowledge:证明过程执行完之后,验证方只获得了「证明方拥有这个知识」的信息,而没有获得关于这个知识本身的任何信息。


Part 4 零知识证明的优点

  • 随着零知识证明的使用,安全性不会降级,因为该证明具有零知识性质。

  • 高效性,该过程计算量小,双方交换的信息量少。

  • 安全性依赖于未解决的数学难题,如离散对数、大整数因子分解、平方根等。

  • 许多零知识证明相关的技术避免了直接使用有政府限制的加密算法,为相关产品的出口带去优势。


零知识证明在区块链中的应用

比特币和以太坊网络都使用公共地址来代替验证者和证明者的真实身份,使得交易部分匿名; 只有发送和接收地址,以及交易数量是公众知道的。但是,通过区块链上提供的各种信息,如交互记录等,可以发现地址的真实身份,存在隐私暴露的隐患。

用了零知识证明之后,发送方、接收方和第三方的细节信息可以保持匿名,同时保证交易有效。

最早使用零知识证明技巧的区块链叫做 Zcash,实际的做法叫做 Zk-Snarks,这是许多零知识证明的做法之一,也是最有名的一个。

Zk-Snarks 是 “零知识简洁无交互知识认证” 的简称,是一种在无需泄露数据本身情况下证明某些数据运算的一种零知识证明。

Zk-Snarks 技术缩减了证明所需的时间和验证它们所需的计算量。它能够证明有效交易的条件已经满足,而不需要透露交易所涉及的地址或交易量的任何关键信息。

Zcash 可以将交易纪录上的汇款者、收款者和金额都经过加密隐藏起来,因此矿工无从得知这些交易上的细节,但仍然可以验证交易。不过,目前多数使用者在 Zcash 上的交易,还是选择未经加密的作法,因为花费的成本比较高。

另外,以太坊(Ethereum)上的智能合约目前也已经可以运用 Zk-Snarks 这套零知识证明的作法。但以太坊不完全是从隐私的角度切入,而是从节省运算成本的角度应用零知识证明。

透过 Zk-Snarks,以太坊矿工可以不用再重新执行交易的运算,而是只要对方提得出证明即可。大概就像我不需要真的知道你会高一到高三的数学,而只要看到高中毕业证就能确定你懂高中数学。不过,这只有在制作证明的成本,远低于实际运算成本的情况下才划算。

Zk-Snarks 将需要验证的交易内容转化为两个多项式乘积相等的证明,并结合同态加密等高级技术,在执行事务验证的同时保护隐藏的事务量。其过程可简单描述为:

将代码分解为可验证的逻辑验证步骤,然后将这些步骤分解为由加减乘除组成的计算流程。

进行一系列变换,将待验证代码转换为多项式方程,如 t(x)h(x)= w(x)v(x)。

为了使证明更加简洁,验证者事先随机选择几个检查点 s,检查这些点上的方程是否为真。

通过同态编码或加密,验证者在计算方程时不知道实际输入值,但仍然可以验证。

在等式的左右两边,乘以一个不等于 0 的密值 k。当验证 (t(s)h(s)k) = (w(s)v(s)k) 时,具体的 t(s)、h(s)、w(s)、v(s)是不可知的,可以对信息进行保护。

当前履行 Zk-Snarks 算法的一个缺陷是需要在 advanced 中内置参数。如果这些参数泄露,整个网络将面临毁灭性的破坏。因此,用户必须信任在使用这些网络时不会泄露的信息。

可能的解决方案包括使用现代的“可信执行环境”,如 Intel SGX 和 ARM TrustZone。对于 Intel 的 SGX 技术,即使应用程序、操作系统、BIOS 或 VMM 受到威胁,私钥也是安全的。此外,最近的一份白皮书揭示了它在零知识密码学中的创新:Zk-Snarkss(零知识可伸缩透明知识参数)。

根据 Zk-Snarks 白皮书,Zk-Snarks 是第一个不依赖任何信任设置实现区块链验证的系统,而随着计算数据数量的增加,计算速度呈指数增长。它不依赖于公钥加密系统,而且更简单的假设使它在理论上更安全,因为它唯一的加密假设是哈希函数 (如 SHA2) 是不可预测的。零知识证明和 Zk-S(T|N)ARK 等技术的测试和采用需要时间。