我们先理解一下业界具有统一认识的一些概念:
安全启动:启动过程中,前一个部件验证后一个部件的数字签名,验证通过后,运行后一个部件,否则就中止或复位系统。因此它是一个防恶意篡改的手段。
可信启动:启动过程中,前一个部件度量(计算HASH值)后一个部件(通常在后一个部件被签名校验过之后),然后把度量安全的保存下来,比如扩展到TPM的PCR中。后续接入平台后,部件的度量会上报到认证平台,认证平台会有配置一个可信白名单,如果某个部件的版本信息不在白名单里,则认为此设备是不受信任的,因为它可能使用了一个虽然有签名,但可能BUG的版本。因此它是一个可信版本的管理手段。
安全启动/可信启动 是确保系统级别的安全手段,适用于有可信诉求的整机系统,终端设备如手机、STB、路由器等,当然也适用于通用服务器设备。
以上安全启动和可信启动的概念,网上以及公司W3有许多专家在讨论,可以自行进一步理解。然而,如果仅从字面要求试图实施时,我们又会发现许多新的问题,举个例子:安全启动时,确实每一级都被签名校验了,但确定安全吗? 某一级如操作系统1分钟前刚刚被校验过,1分钟后还是可信的吗?不见得,这个过程中,操作系统完全有可能已经被非法修改过了。
要做到相对更安全,要么能够做到Runtime的实时校验,即每次使用那一刻都要校验。如果做不到Runtime校验,那就想办法将校验过的数据安全保存起来…相关实现方案和技术其实在有前提的情况下已具备,这是另一个课题。
这个前提是指系统需要是不开放的嵌入式系统,因为不开放,可定制,提供特定的功能/服务,因此整机系统的保护是可行的,并且方案都是很成熟的。
那对于通用计算设备比如服务器产品是个什么样的情况呢? 基本上就是这么个事实:
- 系统“全局保护”越来越难以实现,且不切实际
原因是当前开源共享,并且是自由的大环境