可信引导

1 可信引导的提出

    可信计算组织TCG提出了“信任链”和“信任度量”的概念,认为如果从一个初始的“信任根”出发,在平台计算环境的每一次转换时,这种信任可以通过传递的方式保持下去不被破坏,那么可信环境下的各种操作也是可信任的,不存在不被信任的实体,这样就不会破坏平台本身的完整性,从而可以很好的保证平台及应用的安全。

    可信引导确保了系统按照经过严格验证的路径进行引导。它对主引导记录、操作系统装载器、操作系统内核、系统配置信息进行验证,确保引导过程中各部件的完整性。

    可信引导中所需的“信任根”,在TCG的可信方案中是以TPM模块为基础的,而国内推出了对应的TCM安全芯片标准。信任链建立所需的可信度量根可以是整个BIOS,也可以是BIOS中的一段代码。

2 可信引导过程及其可信需求分析

(1)  系统引导过程

    系统引导过程通常包括下列步骤:

1)平台加电,BIOS开始执行,首先是电自检(POST-Power-OnSelf Test),然后对系统内的硬件设备进行监测和连接用。

2)BIOS自检完毕,按照CMOS的引导顺序设置,将从引导设备上读入引导装载程序(Boot Loader)。Boot loader被分为两级,第一级为MBR。

3)MBR开始执行,将装入Boot Loader的第二级,即特定操作系统的装载程序。

4)特定操作系统装载程序将装入操作系统内核。

5)操作系统内核开始执行。

    所有的可执行代码,在执行之前,都经过完整性验证,只有信任根是无条件相信的。从信任根出发,引导过程中的可信建立在可信链传递的机制上。由于整个引导过程是发生在实模式下,因此是由一系列的有先后顺序的执行过程组成。在此阶段,需要保证每一个执行阶段的可信。这早的可信要求,主要是对硬件平台本身和各个可执行实体的完整性验证。从引导过程的分析可以看出,可信的引导过程包括下列要求:

a)平台加电后,BIOS中最先执行的代码段要求作为“信任根”,而被无条件相信,因此,该段代码必须经过BIOS生产商的担保,确定是可信的。或者,BIOS的整体可以被要求作为“信任根”。

b)BIOS执行期间,BIOS调用的其他设备上的执行体要求是可信的,可通过BIOS对这些执行体进行计算和校验来完成。

c)平台的配置信息要求是可信的,该配置信息主要是指平台的硬件信息。

d)BIOS所加载的引导设备中的MBR是可信的。这其中也包括MBR中的磁盘分区信息。

e)操作系统装载程序是可信的。

f)操作系统内核是可信的。

(2)  可信引导过程

    在进行可信引导之前,我们要对系统进行相应的安装过程。这其中主要包括一些预存验证码的生成和存储,将MBR和OS装载程序替换成可信增强的MBR和OS装载程序等。可信增强的MBR和OS装载程序和普通的区别主要是,在将控制权转移到下一个引导组件前,首先对启动各个阶段进行可信度量(完整性度量),以确定是否进行控制权的转移。

    我们可以认为从加电开始、TPM/TCM安全芯片运行到BIOS运行完毕之前系统都是可信的。信任的传递从MBR开始,往后的3个阶段建立信任链:MBR、OS装载程序、OS内核。

    其可信引导过程如下图:


    可信引导过程必须保证以下三点:

a)保证信任是逐层传递。当前一个可执行实体被度量并验证是可信并执行后,其转移控制权至下一个可执行实体之前,必须先对其进行度量,验证可信后方可转移控制权,信任从而传递至下一个执行实体。

b)所有在可信链的建立过程中涉及到的度量和验证方法不能采用软件实现,而是依赖于TPM/TCM的实现。所有的度量和验证调用将最终由TPM/TCM验证模块来完成。

c)可信链是建立在逐层的度量和验证基础上的,这种验证要求由TPM/TCM来保证重要秘密数据的完整性和保密性。在可信链传递过程中涉及的所有重要数据、需要预存的验证码都必须由TPM/TCM来保存,不能使用可移动的存储装置或PC机的系统内存,并且这些数据在使用过程中不能脱离TPM/TCM。TPM/TCM也不能提供访问这些数据的外部调用接口,以保证这些重要数据的秘密和可信。

### iOS 可信引导机制概述 iOS 的可信引导(Trusted Boot Chain)是苹果设备安全体系的核心之一,其目的是确保从设备启动到操作系统加载的整个过程中,所有执行的代码都是经过苹果官方认证的。这一机制通过硬件和软件的结合来实现,确保设备的安全性和完整性。 #### 硬件层面的支持 苹果设备的可信引导始于硬件层面的支持。设备中的安全元件(Secure Enclave Processor, SEP)和信任根(Root of Trust)在启动时起到关键作用。SEP 是一个独立于主处理器的协处理器,负责处理与安全相关的任务[^2]。信任根则存储了设备唯一的密钥对,这些密钥用于验证启动过程中的每个阶段。 #### 启动过程的分阶段验证 iOS 的可信引导分为多个阶段,每个阶段都会验证下一阶段的代码签名,确保只有经过苹果认证的代码才能被执行。以下是主要的验证阶段: 1. **Boot ROM 阶段** 设备启动时首先运行的是 Boot ROM 中的代码,这部分代码是刻录在芯片上的,无法修改。Boot ROM 包含了设备的信任根,并使用该信任根验证低级引导程序(LLB,Low-Level Bootloader)的签名[^3]。 2. **低级引导程序(LLB)阶段** LLB 负责加载并验证 iBoot 引导程序的签名。iBoot 是一个更高级别的引导程序,负责初始化硬件并加载内核[^4]。 3. **iBoot 阶段** iBoot 会验证内核缓存(Kernel Cache)的签名。内核缓存包含了 iOS 操作系统的内核以及必要的驱动程序[^1]。 4. **内核阶段** 内核加载后,会继续验证并加载其他系统组件,例如动态链接库和用户空间的应用程序。所有第三方应用程序在安装前都需要经过苹果的审核并通过应用签名机制验证[^3]。 #### 应用签名机制的补充 除了可信引导机制外,iOS 还通过应用签名机制确保第三方应用程序的安全性。每个应用程序在提交到 App Store 之前都会经过苹果的严格审核,审核通过后会被分配一个唯一的签名。设备在安装应用程序时会验证该签名,确保应用程序未被篡改。 #### 安全隔离技术 为了进一步增强安全性,iOS 利用了 ARM 的 TrustZone 技术,创建了一个可信执行环境(TEE)。TrustZone 将设备的内存、存储和 CPU 资源划分为安全世界(Secure World)和普通世界(Normal World),确保敏感数据和操作在安全世界中进行,避免被恶意软件攻击[^4]。 ### 示例代码:模拟可信引导的基本流程 以下是一个简化的 Python 示例,展示可信引导的基本思想: ```python class TrustedBoot: def __init__(self): self.trust_root = "Apple Root CA" def verify_stage(self, stage_name, signature): if signature == f"{stage_name}_signed_by_{self.trust_root}": print(f"{stage_name} verified successfully.") return True else: print(f"Failed to verify {stage_name}.") return False def boot_process(self): stages = ["Boot ROM", "LLB", "iBoot", "Kernel"] signatures = [ "Boot ROM_signed_by_Apple Root CA", "LLB_signed_by_Boot ROM", "iBoot_signed_by_LLB", "Kernel_signed_by_iBoot" ] for stage, signature in zip(stages, signatures): if not self.verify_stage(stage, signature): print("Boot process aborted.") return print("Device booted successfully.") # 模拟启动过程 trusted_boot = TrustedBoot() trusted_boot.boot_process() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值