Giving State to the Stateless: Augmenting Trustworthy Computation with Ledgers
Gabriel Kaptchuk, Matthew Green, Ian Miers
Network and Distributed Systems Security (NDSS) Symposium 2019
一、Introduction
该篇文章做了一次尝试,将可信计算平台(如 Intel SGX, ARM TrustZone 等)与区块链(如 BTC, ETH) 结合,期望实现无状态的可信计算。背景如下:
- 中心化和去中心化网络已经广泛使用,去中心化网络已被证明可以有更长的寿命和更高的可靠性。
- 有状态的可信计算环境可能会被攻击(需要外部存储非易失数据、以及监控网络流量等)
- 可信计算环境的硬件资源有限,特别是非易失存储资源的有限。
解决办法: 将有状态的可信计算环境(TEE)变更为无状态的TEE。使用类似传统 http 的模式提供计算服务。同时引入分布式账单(Ledger)来记录状态。文章给出了一个Host、TEE 和 Ledger 之间的三方协议,来实现该方案。
对于通常的服务,可以用如下公式形式化描述:P是给定程序,对于输入Ii,当前状态Si和随机代价ri,产生确定输出Oi和新的状态Si+1。
$$ P(I_i,S_i,r_i) \rightarrow O_i,S_i+1 $$
文章对上述模型做了一下修正,以提高安全性:
- Attempt 1: 加密程序状态,无法抵御重放攻击
- Attempt 2: 使用 Ledger 存储状态信息,也无法抵御回放攻击
- Attempt 3: 使用 Ledger 绑定程序的输入。通过向 Ledger 中提交输入,可以解决上述攻击。
- Attempt 4: 随机化。为了防止恶意Host 复制程序执行,采用伪随机数发生器,产生随机代价???
- Extension 1: 减少 Ledger 带宽 …
- Extension 2: 增加公共输入输出
- Extension 3: 指定程序
二、模型
文章给出模型的三个参与者:
- The Ledger(L):对于给定提交可以给出证明 $\sigma_i$
- The Enclave($\epsilon$):无状态可信计算环境
- The host application(H): 可能是恶意的。
最终基本模型为:
$$ P(I_i, S_i; r _i) → (O_i, Pub_i, S_i+1)$$
多出一个 $Pub_i$ 为公共消息。(在 Extension 2 中定义)
2.1 Ledger 借口定义
对于 Ledger 需要有一个抗碰撞 Hash 函数 $H_L$,并维护一个 Hash 链。并定义如下两个函数:
- Ledger.Post(DATA,CID) -> (POST,$\sigma$)
- Ledger.Verify(post, σ) → {0, 1}
2.2 Enclave-Ledger 交互
Enclave 和 Ledger 定义三个接口:
2.1 初始化:Setup($1^\lambda$) → (K,pp)
对于某一个安全参数 $\lambda$ 产生一个存在 Encalve 中的长期密钥 K 和一个提供给 host 和 ledger 的参数 pp。
2.2 ExecuteApplication(pp,P)
这个函数运行于 Host 上。每次用户首先产生输入,并将其 Commit 到 Ledger 中去,而后通过 pp 指定 Enclave,通过 P 制定 Encalve 中执行程序。
2.3 $ ExecuteEnclave_{K,pp}((P, i, S_i, I_i, r_i, σ_i, post_i)) → (S_i+1 , O_i , Pub_i ) $
该程序实际运行于 Enclave 中。验证 i,SI与σi, posti 对应后,执行具体程序 P。
三、具体模型
四、应用与组建实现
文中举出了几个具体的协议应用场景,比如 Private Smart Contracts 等。另外还提出了构建 Enclave 和 Ledger 的方案(SGX、Bitcoin),以及对应的 overhead 估计。这里不再赘述。
五、结论
文章的核心贡献在于提出了一个三方交互协议。将状态信息外包给分布式记账、而可信计算平台本身无状态,来实现安全的、有状态的、多步骤的可信计算实现。
本人保留对侵权者及其全家发动因果律武器的权利
版权提醒
如无特殊申明,本站所有文章均是本人原创。转载请务必附上原文链接:https://www.elliot98.top/post/lab/big4-reading-4/。
如有其它需要,请邮件联系!版权所有,违者必究!