# 隐私TEE、ZK

By [DreamRobber](https://paragraph.com/@dreamrobber) · 2022-09-02

---

[http://bcrb.io/c6s4.html](http://bcrb.io/c6s4.html)

zk 的密码学隐私依靠数学计算，适用设备广，通用性强，主要受计算能力大小影响。并不是所有问题都可以通过零知识证明算法进行验证，能处理的数据有局限，多项式时间内可以验证解正确性的问题（NP 问题）一定存在零知识。

TEE 不局限于密码学，通过物理限制影响软件的隐私保密，能处理的数据更丰富。不过 TEE 局限于运行在使用了 TEE 技术的芯片上。

TEE 和密码学隐私算法属于两个极端。 证明算法密码学已经有多年历史较为成熟，TEE 当前处于发展早期。

最坏的情况，量子计算导致密码学失效，那么 TEE 技术将成为重要的替代品。

*   **zk**
    

对称式加密算法的时代，加密和解密数据遵循同样的规则。 对称式加密的关键要素包括加密算法和密钥，数据发送方使用特定的密钥加密数据，并且将加密数据和密钥发送给接收方。

[https://z.cash/](https://z.cash/)

项目示例

[https://academy.binance.com/zh/articles/zk-snarks-and-zk-starks-explained](https://academy.binance.com/zh/articles/zk-snarks-and-zk-starks-explained)

zk-SNARK：例如私钥是 k，v 是常数，SNARK 加密后 C=k\*v。获得 C 可以通过尝试 v 得出 k。

zk-STARK：例如私钥是 k，v 是 是随机哈希碰撞结果，STARK 加密后 C=k\*v&e。获得 C 很难进行哈希 v 得到 k。 zk-STARK 是对 zk-SNARK 计算难度的升级。

[https://cointelegraph.com/explained/zk-starks-vs-zk-snarks-explained](https://cointelegraph.com/explained/zk-starks-vs-zk-snarks-explained)

可信设置的必要性是 zk-SNARK 的关键特征之一。它需要将加密数据和密钥发送给接收方，作为验证和执行机密交易所需的证据。

传输的过程中，加密数据或密钥存在被拦截的风险，一旦加密算法被破解，访问私钥的人可以伪造证据并制造假钱（zk-SNARK 被认为是可合理计算的，足够计算能力的证明者可以计算获得私钥）。

因此，基于 Zk-SNARK 的隐私币必须确保没有任何一方可以访问私钥。但验证者需要获得 Zk 后的数据进行验证操作。

zk-STARK 是作为 zk-SNARK 协议的替代版本而创建的，被认为是该技术的更快和更便捷的实现方式。验证者通过哈希函数碰撞进行更精简的对称加密方式，否定了对可信设置的需要。 通过使开发人员能够将计算和存储转移到链下，STARK 提高了可扩展性。可以通过链下服务生成验证链下计算准确性的 STARK 证明。之后，这些证明被重新发布到链上，以便任何有兴趣的人都可以验证计算。

zk-SNARK 的整体数据量大小远大于 zk-STARK 证明中的数据量，ZK-STARK 的证明规模更大，验证时间更长。

*   **全同态加密（FHE）**
    

使用非对称式加密算法。

同态加密（英語：Homomorphic encryption）是一种加密形式，它允许人们对密文进行特定形式的代数运算得到仍然是加密的结果，将其解密所得到的结果与对明文进行同样的运算结果一样。

换言之，这项技术令人们可以在加密的数据中进行诸如检索、比较等操作，得出正确的结果，而在整个处理过程中无需对数据进行解密。

[http://www.lianchaguan.com/archives/6561](http://www.lianchaguan.com/archives/6561)

缺点： 同态加密的所有中间结果都是加密的，因此服务器不能对中间值做出任何决策，因此只能将所有操作都包含到函数中，增加了函数复杂性（包裹性）。

同态加密必须在同一个密钥下进行，在多方合作中有共谋的可能，因此全同态加密通常适合协作计算，目前可以防止串谋攻击的同态加密安全计算效率低于其他通用协议。

*   **MPC**
    

参与计算的各方不泄露自身输入、且没有可信第三方的情况下安全地计算约定的函数并得到可验证结果的问题： 比如，将一个需要加密的密钥 K 拆分为 n 个不同的部分，保管在不同参与方，各方都不知道其他人保管的那部分。利用这 n 份中的任意至少 t 个部分（2<=t<=n）就能够完整地恢复密钥 K 的内容。多签。

大部分安全多方计算方案对参与方的诚实性有所要求。

在安全多方计算研究中，通常将参与者分为诚实者、半诚实者和攻击者。诚实者提供正确数据，且不尝试窃取他人输入数据；半诚实者提供正确数据，在没有不利后果的前提下愿意获取他人输入；攻击者提供虚假数据破坏合作，且试图窃取他人输入。

大部分相对高效的安全多方计算协议都只有应对大部分参与方都是诚实者或半诚实者的情况具有安全性（类似 51% 攻击）。

安全多方计算的局限性有：效率较低；无法保证参与方输入的真实性；无法阻止参与方恶意构造输入，并从结果推测其他人的输入。

[https://twitter.com/partisiampc](https://twitter.com/partisiampc)

项目示例

带你初步了解多方安全计算（MPC） [https://cn.thebittimes.com/%E5%B8%A6%E4%BD%A0%E5%88%9D%E6%AD%A5%E4%BA%86%E8%A7%A3%E5%A4%9A%E6%96%B9%E5%AE%89%E5%85%A8%E8%AE%A1%E7%AE%97%EF%BC%88mpc%EF%BC%89-tbt20919.html](https://cn.thebittimes.com/%E5%B8%A6%E4%BD%A0%E5%88%9D%E6%AD%A5%E4%BA%86%E8%A7%A3%E5%A4%9A%E6%96%B9%E5%AE%89%E5%85%A8%E8%AE%A1%E7%AE%97%EF%BC%88mpc%EF%BC%89-tbt20919.html)

多签钱包将使用不同的私钥创建不同的签名，而 MPC 是由一个私钥的多个份额组成的单一签名。 为了使多签运行，区块链需要支持它，但并不是所有的链都支持多签钱包，它通常以智能合约的形式出现；MPC 使用的是标准化的加密签名算法(ECDSA：椭圆曲线数字签名算法)，绝大多数区块链都可以实现这种算法。

缺点：MPC 钱包可能缺乏确定使用哪个密钥部分来签署交易的能力，因为所有密钥份额都参与了同一个签名；而 gnosis 可以在部分钱包地址通过情况下完成交互签名，指定签名者。

*   **TEE**
    

TEE全名为可信执行环境（Trusted Execution Environment）是计算平台上由软硬件方法构建的一个安全区域，可保证在安全区域内加载的代码和数据在机密性和完整性方面得到保护。其目标是确保一个任务按照预期执行，保证初始状态的机密性、完整性，以及运行时状态的机密性、完整性。

[https://www.geekmeta.com/article/1091821.html](https://www.geekmeta.com/article/1091821.html)

TEE 将代码、数据运行在芯片上的一个物理区域；其他共识算法多用软件密码学保证安全。

---

*Originally published on [DreamRobber](https://paragraph.com/@dreamrobber/tee-zk)*
