建议先阅读姊妹篇 [[ZK-SNARK 介绍]]
,了解零知识证明和 SNARK 基础。
术语“ZK-STARK”是一个首字母缩写词,代表“Zero-Knowledge Scalable Transparent Argument of Knowledge”。名称的每个部分都指代 ZK-STARK 的一个特征:
Zero-Knowledge:和 ZK-SNARK 一样,这也代表着“零知识”,证明者可以向验证者证明他们拥有一条信息,而无需提供信息本身。
Scalable:强调该协议专注于增强区块链的可扩展性。 ZK-STARK 能够在链下计算并存储数据,从而指数级的提高可扩展性。
Transparent:标志着 ZK-STARK 和 ZK-SNARK 之间最显着的区别之一。使用公开可用的随机性(publicly-available randomness)来生成参数,从而消除了对可信设置的需要。
Argument of Knowledge:与 ZK-SNARK 中的含义相同,但使用不同的计算方法。使用抗碰撞的哈希函数(resistant to collisions),有效地消除了对可信设置的需要(trusted setups)。
第一篇详细介绍 STARK 的论文由 Eli Ben-Sasson、Iddo Bentov、Yinon Horeshy 和 Michael Riabzev 于 2018 年发表。Eli Ben-Sasson 是数学家和计算机科学家,StarkWare 总裁兼联合创始人,STARK、FRI 和 Zerocash 协议的共同发明者和 Zcash 的创始科学家,StarkNet 基金会七位董事会成员之一。
STARK 类似于 STNARK 是一种证明和验证协议。它允许处理大型计算,为计算的正确性生成一个证明,然后以很少的计算验证证明。STARKs 可以在区块链可扩展性中发挥关键作用,允许在链下进行大型计算和存储,只有一小部分计算的验证在链上完成。通过在链上执行很少的计算,验证者就可以证明链下完成的大量计算的完整性。
ZK-STARKs 解决了 ZK-SNARKs 的主要弱点之一,即它对“可信设置”的依赖。ZK-SNARK 需要一个初始可信设置阶段来生成生成零知识证明所需的随机性。该阶段生成的保密参数 lambda 如果泄漏,任何知道这个参数的人都可以生成假证明。
zk-SNARK 需要椭圆曲线密码学(elliptic curve cryptography),椭圆曲线密码学 (ECC) 是一种利用椭圆曲线特性生成安全密码密钥的加密技术。这是在线安全的流行选择,因为这些密钥可用于编码和解码数据。ZK-STARK 纯粹使用抗碰撞的哈希算法,不仅参数公开透明而且消除了量子计算的威胁。
SNARK 生成的证明的字节数更小,通常只有几百字节,而 STARK 生成的证明通常有几百千字节,所以 SNARK 在链上验证证明的速度更快且消耗的gas更少。但由于 STARK 采用链下计算和存储并且生成证明的速度更快,所以更具扩展性。
STARK 已被 ZK-rollups 和 Layer-2 等区块链扩展性解决方案采用。这些协议可以在链下计算和存储数据,然后在链上提交零知识证明以更新网络的状态。
StarkWare 获得了以太坊基金会 1200 万美元的赠款,证明了以太坊对 STARK 技术的支持和重视程度。
StarkWare 分别基于 STARK 构建了 StarkEx 和 StarkNet 两个解决方案。StarkWare 联合创始人 Eli Sabasson 曾做过一个比喻,将 StarkEx 和 StarkNet 的分别比作为计算机和云,购买 StarkEx 就像拥有自己的定制化计算机,每个客户都拥有自己的扩容计算机。而 StarkNet 提供的是网络,是通用服务,所有人都可以支付费用并使用。
StarkEx 为应用提供定制化的 ToB 服务
StarkNet 是一个无需许可的去中心化、抗审查的通用 layer 2 网络
2020 年 6 月,第一个基于 STARK 的扩展解决方案 StarkEx,部署在以太坊主网上。 StarkEx 有一个证明者可以在链下执行大型计算并为其正确性生成一个 STARK 证明,以及一个在链上验证该证明的验证者。
StarkNet 是一种无需许可的去中心化有效性汇总。它作为以太坊上的二层网络运行,扩展以太坊的运算能力而不会损害以太坊的可组合性和安全性。所有 StarkNet 交易将进行分批处理,其有效性将由 STARK 提供证明,并在以太坊上进行验证。由于验证证明的计算量指数级的小于链下的计算量,所以 StarkNet 将以太坊的计算量扩展了几个数量级。
证明者:一个单独的进程,生成 STARK 证明以进行验证。证明者将 STARK 证明提交给在以太坊上注册的验证者。
StarkNet 操作系统:根据接收的 transactions 更新系统的状态。支撑 StarkNet 上合约的执行。
StarkNet 状态:状态由合约代码和合约的存储组成。
StarkNet 在以太坊上的合约:作为验证者验证 L2 提交的证明并更新状态,促进 L1 ↔ L2 交互。
全状态节点:StarkNet 网络中的一个节点,仅用于查询当前 StarkNet 状态。它可以独立回答有关 StarkNet 网络当前状态的查询,包括 L1 状态。它不执行批量交易或证明批量。
Sequencer 节点:StarkNet 网络的主节点。它实现了对提交给它的交易进行排序的核心功能。执行 StarkNet 合约程序,并最终更新 StarkNet 合约上的状态。
StarkWare 工程师开发的一种支持 proving 通用计算的编程语言。2020 年夏天,Cairo 首次出现在以太坊主网上。 Cairo 代表 CPU Algebraic Intermediate Representation (AIR),包括一个单一的 AIR,用于验证这个“CPU”的指令集。它为更复杂的业务逻辑、任意计算语句以及以更快、更安全的方式进行编码 proofs 打开了大门。 Cairo 程序可以证明单个应用程序逻辑的执行。但是一个 Cairo 程序也可以是多个此类应用程序的串联——SHARP。
共享证明者(Shared Prover),从几个独立的应用程序中获取 transactions,并在一个单一的 STARK 证明中证明它们。应用程序结合他们的交易批次,更快地填充 STARK 证明的容量。交易以更高的速率和延迟进行处理。
在这里,Statement 随着时间的推移而逐个到达。当达到某个容量(或时间)阈值时,会生成一个大型组合语句(Train)。只有在收到所有单独的 Statement 后,才能证明此合并 Statements。这个 proof 需要很长时间来证明(大约是单独证明每个 Statement 所需的时间总和)。
证明极大的 Statement 最终会受到内存等可用计算资源的限制。在递归证明之前,这实际上限制了 STARK 证明的可扩展性。
使用 STARK 证明,证明语句所需的时间与执行语句所需的时间大致呈线性关系。此外,如果证明一个陈述需要 T 时间,那么验证证明大约需要 log(T) 时间,这通常称为“对数压缩”。换句话说,使用 STARK,您在验证语句上花费的时间比在计算上花费的时间要少得多。
Cairo 允许通用计算表达式可以由 STARK 证明者产生证明,也可以被验证者验证。所以我们还可以编写一个 Cairo 程序来验证多个 STARK 证明。我们可以生成单个证明来验证多个“上游”证明的有效性。这就是我们所说的递归证明。
递归证明可以进一步降低链上的验证成本和验证计算时间。Cairo 开发的递归验证器也开启了向 StarkNet 提交证明的可能性。这将允许在公共 StarkNet(L2 网络)之上构建 L3。
链上的低验证成本将带来以前在以太坊上不可行的一类新的复杂计算应用,例如 AI,机器学习,3D 艺术,游戏物理引擎等。这些特性使得 STARKs 改善了用户体验和降低了 gas 成本,同时保持以太坊结算层的安全性。