一文详解什么是隐私计算和可信计算、机密计算
序言:隐私计算起源于安全领域的数据安全问题,其概念经常与安全领域另一些概念混淆,且整个行业对隐私计算本身也没有一个完整清晰的定义。提到隐私计算,最高频出现的概念就是可信计算、机密计算。
可信计算以“可信”为前缀,所以我们先搞清楚“可信”的定义。可信相关的词汇最早可以追溯到1983年美国国防部的一个标准,里面首次提到“可信计算”这个词汇,但是并没有对“可信”这个词做准确定义。直到1990年左右,ISO/NIST首次对“可信”这个词做了清晰、明确的定义。原文说的比较复杂,且几乎所有中文版本都是文盲式的字面直译,差不多可以认为不是“人类可读”的文字,所以我这里简单总结下对可信的定义:如果A的行为完全符合B的预期,则A对B是可信的。
1999年10月,由Compaq、HP、IBM、Intel和Microsoft 牵头组织成立可信计算平台联盟(TCPA),2003年TCPA改组为可信计算组织(TCG)。该组织结合成员各自产品最新特性定义了设备从上电到启动到最终运行起来的安全检查全过程, 并把它叫做“可信计算”,目的是推行他们的设备和技术范式。
这个标准的核心思路就是以一个不可改(或者受硬件保护)的可信根(或者叫设备签名)为起头,以链式验证的方式,确保系统里的所有文件在静态层面是没有被篡改过的。现在的密码机以及手机的可信启动也都完全遵循这个逻辑。
先解释个名次:什么叫范式?范式其实就是我们常说的方法论,它是针对某个具体问题的原则性解决思路,通常不包含任何具体可执行方案,但是用来指导这些方案的设计和执行。
目前行业里有部分组织或者个人坚持认为只有TCG定义的这种范式才是可信计算,隐私计算以及机密计算等等是与可信计算并列的东西。30年以来,行业里的大小厂家或者组织在提到“可信”或者提到以“可信”作为前缀的技术术语时,都沿用了前述ISO/NIST的定义,没有任何厂家或者组织明确对它有过重新定义。所以我们有必要回到“可信”的最原始的定义去理解所有“可信”相关概念,划定这些概念的关系:
实际上可信的定义具体到计算机程序或者系统层面,说的就是如果程序或者系统的表现完全符合设计者(比如程序员)预期,则这个程序或者系统就是可信的。可信强调的是程序行为的可预测性和可掌控性,中文里与之最接近的词汇应该叫“可控”,指的就是一切皆在掌控之中:任何情况,包括程序被攻击,其行为永远按照设计者既定的逻辑运行,不会出现任何意外情况,code is law,也就是代码即法律。
这个意义上讲,TCG把他们定义的那套逻辑叫可信计算也能说得过去:确保了程序没被篡改过,当然能一定程度确保程序行为是符合预期的。只不过可信计算绝对不止是这一个场景,TCG所描述的这个场景是可信计算的一个子集,不是全部。
可信计算不是具体的技术点,它是一种满足“可信”要求的计算范式。实现可信计算的方式多种多样,包括纯软件、纯硬件、软硬结合等等,任何遵循“可信”定义的程序或者系统实现都可以叫可信计算。
隐私计算的设计目的是在数据共享场景下实现数据的可用不可⻅,且确保任何情况下(包括被攻击)都满足这一设计表现,所以它是可信计算的一个具体场景,也即隐私计算是可信计算的一个子集 。
因此,和可信计算一样,隐私计算是一种计算范式,不是具体的技术点。可以实现隐私计算的技术点也是多种多样,包括了多方安全计算(基于分片原理或者基于同态原理等)、可信执行环境(TEE,如SGX、TrustZone等)等等。
与之有关的还有个易混淆的概念叫作“机密计算”,其核心是确保数据的不可⻅、代码以及数据的不可篡改,这个表现刚好可以用来实现部分可信计算场景。机密计算也是可以用来实现可信计算的技术点之一。
可信计算除了数据不可见这样的常见表现外,在实际已有的工程层面, 区块链作为可信计算的一个具体实现,它的表现则是行为可控,满足可信的定义要求;但并不要求数据私密,这里也再次说明了可信与数据私密性没有必然关系。可信计算的实现与TEE、与MPC等等也都不是必然关系。