尽管以 zkSNARKs 为代表的 ZK 技术在区块链行业获得了前所未有的发展,但与行业预期的终极 end game 仍然相距甚远。一方面,zkRollup 对以太坊性能突破带来了一定优势,但是随着链上应用的日渐匮乏,空有基建缺乏使用的窘境无法突破。另一方面 zk 技术本身仍然没有孵化出高价值的 zk 应用——不管是隐私为核心的链上交易和机密支付,还是各类 zk +XXX (zkEmail, zkLogin, zkPassport, …),仍然是需求不明确,或者强行蹭 zk, 技术贴金,没有真正解决场景痛点。
zkTLS,作为一种新的密码学技术,乍一看大家可能觉得又是一种无甚新意的 zk + XXX 技术。事实上,zkTLS 与传统的 zkSNARKs 类技术并没有多大关系,甚至这里的 “zk” 也不是传统的零知识证明。zkTLS 主要解决互联网的数据验证和分享问题,从而帮助应用在确保数据真实可靠的前提下获得数据的价值。
一个通俗的例子是,你如何向另一个人证明你的银行账户有很多钱?传统的方法是让银行为你出具资产证明。这类纸质证明带有银行的公章,带有很明确的真实性(authenticity)。
(图片来源于网络)
那么,如果问题转变成,你如何向另一个人证明你的信用分、电商消费金额、游戏时长呢?我们无法预期这些存有你个人数据的网站会为你进行单独背书,提供相关的证明服务。或者你直接通过屏幕截图也许可以让其他人信服,但是这个过程仍然会被人认为伪造,以及带来额外的敏感信息泄露的风险。
zkTLS 就是一种基于 TLS 协议的数据验证技术,能在客观上为基于互联网的任意数据提供真实性证明。
最早的 zkTLS 技术产品是 TLSNotary 项目在 2015 年发布的一款产品 PageSigner,基于 Chrome 浏览器。从它的名字不难发现,TLSNotary 的初衷就是为了做一款能提供网页数据真实性证明的工具。事实上,一直到 2020 年, ChainLink 团队发表了论文 DECO,zkTLS 才逐渐进入行业视野,大家发现原来还有另一类预言机(Oracle),可以获得链下的私有数据。
客观来说,2023 年之前,zkTLS 技术在对接实际业务需求时仅仅停留在“可用”阶段,距离“好用”还相差甚远,单次证明耗时通常需要若干分钟。2023 年,有鉴于此前 zkTLS 技术在使用了安全多方计算之后在通信方面开销过高,reclaim 提出了基于代理模式(proxy mode) 的 zkTLS 技术,通过传统的 zkSNARKs 以及引入一个需要信任的代理节点,实现 TLS 数据的可验证。2023 年年中,Primus 团队(此前名为“PADO”)通过 garble-then-prove 的技术,结合 quicksilver 算法将基于安全多方计算模式的 zkTLS 技术整体性能提升了 10 倍以上,并且在代理模式里,通过用 quicksilver 算法代替传统的 zkSNARKs,将整体性能也提升了 10 倍以上。目前来看,Primus 的 zkTLS 技术在性能上基本能满足各类业务场景的需要。
读者可以查阅相关的基准测评了解更多的 zkTLS 的性能情况 (https://hackmd.io/@-fI_Eu_rR8qs02aOhOPWNg/HkRyz5OF1g)
通常来说,zkTLS 实现网页数据的真实性验证,依赖于一个第三方 Attestor。Attestor 类似观察者,通过“阅读” TLS 协议的执行过程中的请求和响应消息,来确保用户的数据(来自于服务器的响应消息)确实来自于指定的数据源(注:这里的数据源指服务器域名以及相关的 API endpoint)。
TLS 协议一般分为两个阶段:握手和会话。在握手阶段,客户端和服务端通过一系列的通讯交互,共同计算出会话密钥用于下一阶段的加密通讯。在会话阶段,客户端将请求消息发送给服务端,服务端随之返回响应消息,所有的消息都由会话密钥进行加密处理,确保没有第三方可以窃取。
zkTLS 根据核心技术组件的不同,主要分为两大类,基于安全多方计算(MPC)的和基于代理的技术。
MPC 模式主要依赖于安全多方计算的使用。在 MPC 方案中,Attestor 和 Client(客户端) 通过 两方计算(2PC)协议 来模拟 TLS 握手中的客户端部分。这意味着在握手阶段结束后,客户端不会直接获得完整的会话密钥。只有当 Attestor 收到 响应密文 后,它才会将 密钥份额 发送给客户端,使其能够解密所有密文。
「小知识:MPC 即安全多方计算,一般为两方参与(即 2PC)或者三方及以上参与(称为 MPC)。不管是 2PC,还是 MPC,都要求参与各方保证自己的计算输入不被其他方获得,同时能协作完成某一个指定的计算任务,例如多人一起计算出平均工资而不泄漏任何一人的薪资情况,或者多个数据提供者在不泄漏各自数据资源的条件下一起参与完成 AI 模型训练。」
MPC 模式的直观流程如下:
1.握手阶段:
Client 和 Attestor 运行 2PC 协议,共同计算会话密钥。在此过程中,Client 和 Attestor 仅持有会话密钥的各自份额,而非完整密钥。
2.请求加密:
Client 和 Attestor 再次运行 2PC 协议,计算加密后的请求数据。
3.响应处理:
Client 接收 数据源 返回的响应密文,并将其转发给 Attestor。
4.密钥解封与验证:
Attestor 将 密钥份额 发送给 Client,使其获得完整的会话密钥。Client 使用该密钥解密响应,并向 Attestor 证明密文有效,且满足协议设定的安全属性。需要注意的是,Client 和 Attestor 并不会使用 2PC 协议来解密响应密文,解密由 Client 在获得完整密钥后独立完成。
代理模式下,Attestor 作为代理,在 Client(客户端) 和 Data Source(数据源) 之间转发所有 TLS 交互数据(包括握手信息和加密通信数据)。TLS 协议结束时,Client 需要向 Attestor 以零知识方式(ZK)证明 密文的有效性。
Proxy 模式的设计动机消除 MPC-TLS 中的 2PC 协议,因为 2PC 是计算开销最大的部分,通过减少计算复杂度,提高了协议的整体执行效率。
zkTLS 的核心价值主要是可验证性。
在此之前,并没有很好的方法在无需信任的条件下,支持用户提供可信的个人数据。这种可验证性有着广泛的灵活度和实用性,包括:
你可能会想,基于 zkTLS 的数据共享的可能使用案例是什么?以下是我们认为值得探索的一些想法:
zkTLS 代表的不仅是 Web2 数据在 Web3 生态中的可用性提升,更是数据所有权的转变。过去受限于平台的数据,如今可以自由流动、受隐私保护,并具备可编程性。这一演进让用户不再只是被动接受者,而是数据的真正掌控者。
随着 zkTLS 的采用加速,我们将见证数据的可验证性带来的组合效应——更多可验证的数据支撑更强大的应用。另一方面,这些可验证数据在应用间传递价值,将引发一个新的问题,如何对这些关键数据进行计算,并确保计算结果的正确性。
事实上,对链上敏感数据的计算通常借助于全同态加密(FHE)等更加复杂的密码学技术。 Primus 通过对全同态加密算法结合零知识证明进行重新设计,提出了 zkFHE(可验证全同态加密)协议,支持免信任的链上数据机密计算,正在将 zkTLS 这一横跨不同赛博空间的数据验证技术,进一步拓展到数据计算领域,为解锁更多的创新应用创造可能性。
本文作者: Xavier (https://x.com/Xavier_bham), co-founder@Primus Lab, 密码学博士,拥有 10 年以上 MPC/ZK 等隐私研究经验。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。