你需要多少数学知识才能理解和实现零知识证明?答案是取决于你的目标的理解水平和你的应用系统所需要的安全性。在没有任何对零知识证明数学基础了解的情况下,我们也可以实现零知识证明。但是,如果要阅读基础论文、理解证明系统的内部运作或者实现一个安全且高性能的zk-SNARKs,我们需要一些数学知识。

没有扎实的数学基础,对于学习零知识证明相关概念有兴趣但没有了解过素数域(prime field)或者椭圆曲线(elliptic curve)的人可能很快就会不知所措。出现这种情况的原因不是理解所需要的数学过于复杂,而是大量的技术名词、不了解的术语和令人困惑的符号使文本难以阅读。即使是一个简单的概念,可能仍会因为上述原因而难以理解。出现这种情况容易导致读者丧失兴趣,或者是获取到一些支离破碎的知识,在最坏的情况下,这些知识会导致读者开发出不成熟且不安全的实现。

这就是为什么本书使用很大篇幅解释理解zn-SNARKs开发的基础概念所需要的数学原理。我们鼓励对基础数论和椭圆曲线不熟悉读者花费一定时间阅读相关章节,直到读者可以解决每章中的至少几个练习。读者应当重视例子中的所有细节。

本书从非常底层开始并且仅假设读者具有高中数学整数计算的基本概念。然后本书将展示乍看起来与高中数学完全不同的数字和数学结构,但在更深的层次上,实际上非常相似。这将在本书的示例中给予说明。

值得强调的是,在本书中的数学是非正式的、不完整的且经过优化以帮助读者尽可能有效的理解零知识证明相关概念。本书在设计上选择了尽可能少但必要的数学理论,侧重于丰富的数值计算。我们相信这种非正式的、示例驱动的方式使初学者在初始阶段更容易理解材料。

作为初学者,你会发现在实际开发高安全性的现实世界zk-SNARKs算法前,使用纸笔计算一个简单的zk-SNARK是有用的。

但是,为了读者可以计算这些简单的数学示例,读者需要一定的数学基础。因此,本书致力于帮助没有相关经验的读者专注于我们认为重要的概念,并附有鼓励你自行计算的练习。每节包含一系列难度逐渐提高的联系以帮助读者记忆和使用相关概念。