Command Palette
Search for a command to run...
Prezta:基于SNARKs的可证明远程零信任授权执行
Prezta:基于SNARKs的可证明远程零信任授权执行
Zhongjing Wei Yupeng Zhang Osaid Muhammad Ameer Nikita Borisov
摘要
保障控制关键基础设施的运营技术系统安全已成为一项紧迫挑战。由于边缘设备能力有限,现代化进程依赖应用网关与身份管理系统对接并执行访问策略。这些网关虽能处理复杂授权决策并支持零信任架构,却带来部署与管理负担:必须与远程分布式边缘设备同址部署,持续更新安全补丁,并在最小化停机时间内维护。我们提出可证明远程零信任授权执行(PREZTA)架构,通过在客户端运行的零知识虚拟机(zkVM)内评估策略来消除这些网关。zkVM生成边缘设备可高效验证的简洁授权证明,将零信任安全边界延伸至边缘。策略与身份管理方案可演进而无需更新边缘设备。为验证PREZTA可行性,我们基于RISC Zero zkVM实现了一个支持XACML 3.0策略与JWT身份声明的原型。尽管zkVM引入显著证明开销,我们通过将策略编译为Rust代码并预编译正则表达式来缓解此问题。结合优化的签名验证与JWT解析,这些措施将证明者时间降低一个数量级以上。我们的编译器正确实现了XACML 3.0合规测试套件的83%,在桌面机上证明生成耗时数十秒,而验证仅需数十毫秒——速度足以满足资源受限的边缘设备需求。
一句话总结
伊利诺伊大学厄巴纳-香槟分校的研究人员提出 PREZTA,一种通过零知识虚拟机生成简洁授权证明来消除对共置应用网关需求的架构,从而将零信任安全扩展到资源受限的边缘设备,同时支持策略演进而无需设备更新,优化编译将证明生成缩短至数十秒,验证仅需数十毫秒。
核心贡献
- PREZTA 架构通过在客户端的零知识虚拟机(zkVM)内评估零信任授权策略,生成边缘设备可高效验证的简洁证明,从而消除了应用网关,将零信任边界扩展到边缘,且无需为策略变更而更新设备。
- 基于 RISC Zero zkVM 构建的原型支持 XACML 3.0 策略和 JWT 身份声明;它将策略编译为 Rust 代码,预编译正则表达式,并通过优化的签名验证和 JWT 解析将证明者时间降低了一个数量级以上。
- 编译器正确实现了 XACML 3.0 一致性测试套件的 83%,在桌面环境中证明生成只需数十秒,验证只需数十毫秒,表明验证速度足够快,适用于资源受限的边缘设备。
引言
运营技术(OT)网络控制着关键物理基础设施,但这些网络中的设备通常内置安全防护极少,且升级周期长达数十年。为了将零信任安全实践扩展到此类环境,现有解决方案部署应用网关,在将请求转发到边缘设备之前评估复杂的授权策略。然而,这些网关必须与 OT 设备物理共置,以避免出现隐式信任的网络段,这带来了显著的管理负担:每个网关都是安全关键资产,必须持续打补丁并加固。作者提出 PREZTA,一种将策略评估从网关转移到零知识虚拟机(zkVM)中的架构。客户端无需在本地运行重量级的策略决策点,而是在 zkVM 内执行策略并生成正确的授权简洁证明。OT 设备能够以极低成本验证该证明,从而使即便是资源受限的设备也能执行复杂且可演进的策略,无需现场网关升级。
方法
作者提出 PREZTA,一种新颖的零信任架构,利用简洁非交互式知识论证(SNARKs)和数字签名来执行访问控制策略,无需依赖传统网关。在传统的零信任环境中,应用网关充当策略执行点和策略决策点,这带来了显著的更新和维护开销。
如下图所示:
作者完全从架构中移除了网关。相反,策略评估和证明生成的开销转移到了主体。
参考框架图:
PREZTA 架构由身份提供者、策略权威、主体和边缘设备组成。身份提供者对主体进行身份验证,并颁发包含属性的认证 token。策略权威设置授权策略,编译并签名。主体运行 zkVM 执行策略逻辑,并生成 zkSNARK 证明。主体随后将请求、上下文和证明发送到边缘设备,策略执行点在此验证证明并做出最终访问决策。
系统运行分为三个主要阶段:策略部署、证明生成和证明验证。为了实现策略的可验证评估,作者开发了一个策略编译器,将 XACML 策略直接转换为 Rust 代码,然后编译为 RISC-V 机器码,在 RISC Zero zkVM 中执行。
如下图所示:
该流水线将 XACML 策略转换为中间表示,再转换为 Rust 代码,最后生成 RISC-V 二进制文件。运行时,客户程序在 zkVM 环境中执行,将 JWT 和请求属性作为输入,输出访问决策以及请求属性。
为了提高系统效率,作者对 zkVM 引入了几项优化。对于正则表达式,不在运行时运行通用正则引擎,而是将模式预编译为确定性有限自动机并嵌入为静态数据,消除了解析开销。对于 JWT 解析,直接使用 Rust 中的 serde_json 库,对常见 token 很高效。对于计算开销较大的 RSA 验证,利用 RISC Zero zkVM 中的预编译系统调用,并硬编码公钥参数以避免动态构造开销。
实验
编译器在 323 个 XACML 一致性测试策略上进行了验证,全部通过,确认了所支持功能集的正确实现。在 AWS 实例上的端到端实验表明,证明者时间主要由 RSA 验证和 zkVM 填充所主导,大多数策略的证明时间在数十秒内;移除 RSA 模块后,大多数时间降至约 7 秒。优化相较于朴素方法带来了显著的加速,正则表达式和 RSA 的改进贡献最大。验证器很快,证明规模很小,表明 PREZTA 是实用的,并可通过专用电路进一步增强。
在 PREZTA 中,输入属性根据验证方式以及与现实世界来源的绑定方式分为私有和公共两类。像 JWT 这样的私有属性在 zkVM 内部验证,而公共属性(JWT 公钥、主体 IP、资源 ID、时间戳)则绑定到网络栈、请求上下文和系统时钟等来源,使边缘设备在接受证明之前能检查其真实性。JWT 是私有属性,通过 zkVM 内部的签名验证隐式确认,因此边缘设备从不会看到其内容。JWT 公钥是与 zkVM 代码一起提交的公共属性,为验证者提供可信绑定以检查证明者的身份。主体 IP 地址、请求的资源 ID 和系统时间戳是分别绑定到网络栈、请求上下文和系统时钟的公共属性,使边缘设备能够直接验证它们。
累计添加 RSA 和正则表达式优化后,证明生成时间从 1301.7 秒降至 27.3 秒,加速 47.7 倍。RSA 步骤带来了周期数和证明者时间最大的绝对减少,而正则表达式步骤则从前一阶段获得了最大的相对增益。验证器时间和证明大小也大幅缩减,从 196.9 毫秒降至 15.1 毫秒,从 3.2 MB 降至 250 KB。仅 RSA 优化就将用户周期从 1050 万降至 80.5 万,证明者时间从 1301.7 秒降至 176 秒,提升 7.4 倍。添加正则表达式优化后,进一步将周期降至 15.4 万,并将证明者时间缩短至 27.3 秒,较仅 RSA 阶段加速 6.4 倍。
在分析的用户周期最高的策略中,正则表达式匹配和 RSA 验证是两项主导操作,合计占总量的 90% 以上。仅正则表达式组件就消耗了将近一半的周期,而 RSA 也占据了相近的份额,其余所有任务仅占一小部分。这一分布解释了为什么聚焦正则表达式的优化和将 RSA 卸载到专用电路对减少证明者时间影响最大。正则表达式匹配是用户周期最大的单一贡献者,约占总量的 47%。RSA 验证消耗了相近比例的周期,约 45%,成为第二大瓶颈。所有其他操作合计(标记为“其他”)占用户周期不到 10%,表明系统的开销高度集中在两个模块。
评估考察了增量优化对将私有和公共属性分离的系统的证明生成的影响,其中私有 JWT 在 zkVM 内验证,公共属性绑定到外部来源。周期分解显示,RSA 验证和正则表达式匹配是两个主要瓶颈,合计消耗超过 90% 的计算开销。依次将 RSA 卸载到专用电路并应用正则表达式特定的优化,大幅减少了证明生成时间,同时缩小了验证器时间和证明大小。这些结果证实,针对主要成本中心可以带来显著的整体加速,使该方法适用于边缘设备。