Filecoin技术文档学习2-------zk-SNARKs系列知识1同态隐藏

在前面的学习中,文件存储的矿机为了证明自己在某一时刻正确的存储了客户的数据文件,用到了零知识证明zk-SNARKs这样的加密技术。从本文开始我会全面详细的解释zk-SNARKs加密技术,这是FIlecoin的核心技术也是Zcash加密数字货币的核心技术。zk-SNARKs技术其实是多种数学知识结合在一起创建的一种加密技术,通过此技术,存储空间提供者与客户之间可以在无须信任的情况下对存储服务快速有效的达成合作。

从本节开始我们将分解zk-SNARKs技术,逐一讲解其中的数据逻辑。本节的内容是同态隐藏。在解释同太隐藏之前,首先了解一下一些基本的数学概念,

有限群

定义[1],

举例:对于一个素数P=17和一个数组A={0, 1,2……p-1}, 将加法+作用于数组A时,我们定义一个对P取余数的操作mod P,这样任何2个属于数组A的元素x,y进行加法操作之后再对P取余数,其结果仍然属于数组A:

数学公式为: r = (x+y)modp; x,y,r都属于数组A。

比如x=13,y=19,那么(13 + 19)mod17 = 15。

此时数组A连同加法运算被称作一个有限群。

循环群:

定义:[2]

举例:

Filecoin技术文档学习2-------zk-SNARKs系列知识1同态隐藏_第1张图片

i是生成器,阶为4的循环群G

对于复数i,组成的循环群G,他的阶是4,生成器是i,但这里需要注意,循环群并不是指有限的n个数值循环出现,其实存在无限循环群,比如对于正整数的数组的加运算组成了一个无线循环群,有兴趣的同学自行查找资料,这不影响本节的内容讲解。

离散对数

定义[3]:

举例:数组G

= {…, 0.001, 0.01, 0.1, 1, 10, 100, 1000,

…}对于乘法来说是个循环群。G中的所有元素都是10的整数次幂,10是这个群的生成器。对于G的任意元素a,我们可以计算log10

a:比如log10 10000 = 4 log10 0.001 = -3

这就是离散对数问题。只有整数次幂求对数才是离散对数问题,如果幂次不为整数,那么就不算做离散对数问题:比如log10 53 = 1.724276… 指的是10^1.724276… = 53,这就不是一个离散对数问题了。

对于素数同余类群的离散对数问题。名字有点长,我还是举例子吧

Filecoin技术文档学习2-------zk-SNARKs系列知识1同态隐藏_第2张图片

费马小定理[4]在同余类群的证明:

Filecoin技术文档学习2-------zk-SNARKs系列知识1同态隐藏_第3张图片

离散对数的计算困难性,对于3的4次方并对7取余数后为4,但是如果问题是对于7取余数是4的,并且是3的整数次幂的数是多少这个问题,答案是4

+

16*n,n为自然数,也就是说这是一个单向的数学问题。如果把P换成一个足够大的素数BP,底数也换为足够大的整数BA,那么给定一个数H,H属于[1,BP],求解一个数x满足:BA的x次幂为H也是一个无法在二项式时间[5]内完成的工作。

同态隐藏:

定义:对于一个同态隐藏的关于x的函数E(x),满足一下特定:

1,对于大部分的 x,在给定的 E(x) 通常很难求解出 x.

2,不同输入将会得到不同输出 - 因此如果 x不等于y, ,则 E(x)不等于E(y).

3,如果某人知道了 E(x) 和 E(y),,则他可以生成在 算数运算式 中的 x 和 y.。比如,他们可以使用 E(x) 和 E(y). 来计算 E(x+y) 。

根据这个定义,我们做如下定义:为了便于理解我们假设素数p=7,当p变足够大时,对于条件2更加满足。

Filecoin技术文档学习2-------zk-SNARKs系列知识1同态隐藏_第4张图片

根据前面的数学知识我们发现E(x)=3^xmod7是否符合我们同态隐藏特性的。

用途:

假设A知道两个变量的x,y的值,他想证明给B看他知道这两个数,但是又不想告诉B具体的x,y的值,那么他们约定了一个同态隐藏方程E(x),并且A告诉B,x+y=7.B为了证明A说的是否正确,则他们可以进行如下交互:

1,A发送E(x),E(y)给B。

2,B根据E(x),E(y)计算出E(x+y).

3,B计算E(7),并且比较E(7)?=E(x+y)是否相等,如果相等,说明A没有说谎,因为只有A确实知道和为7的两个数字的情况下,才能给出正确的E(x)和E(y),假设x+y不等于7,那么E(x+y)就不等E(7)(同态隐藏特点2).那么A所说的他知道两个变量x,y且他们的和为7就是假的。

好吧,看起来这个证明好无聊,不过我们发现,B在无需知道x,y具体内容的情况下,证明了一种关于x,和y的特性,那就是他们的和为7。这只是个简单的例子,是零知识证明的一个基础知识。后续还会有很多数学知识,最后综合运用在一起,来实现zk-SNARKs。敬请期待。

[1]: https://en.wikipedia.org/wiki/Finite_group

[2]: https://en.wikipedia.org/wiki/Cyclic_group

[3]: https://en.wikipedia.org/wiki/Discrete_logarithm

[4]: https://en.wikipedia.org/wiki/Fermat%27s_little_theorem

[5]:https://en.wikipedia.org/wiki/Time_complexity#Polynomial_time

你可能感兴趣的:(Filecoin技术文档学习2-------zk-SNARKs系列知识1同态隐藏)