【架构】安全(二)
在一个抽象的层次,一个系统需要包含一系列的assets,包括一些在这些assets上的操作。assets一般指的是代码或者数据有一个owner或内在的价值。比如金融价值。高价值的assets属于trusted world,低价值的assets属于non-trusted world。以下列出SoC需要达到的安全需求。
目录
Security requirements:
1.Security Lifecycle
2. Boot ROM and reset
2.1 Boot keys
2.2 Boot types
2.3 Boot parameters
2.4 Boot robustness
2.5 Secondary processing elements
Security requirements:
1.Security Lifecycle

- lifecycle的状态是保持的或并从OTP类的memory中获得的。
- 所有的lifecycle状态的转换是限制在一个设计的规则下,这个规则至少包含:
- 系统启动的时候所有子系统安全状态的初始化。
- 设计好的可部署状态用于授权系统安全特性的使用。
- decommissioned退休状态,不再允许进一步的状态转换。
- 进入decommissioned状态应该清除或不使用所有的密钥 依据FIPS 140-2.
- 一些系统有足够的硬件能力去隐藏root secrets,当系统处于侵入式debug状态时。比如说Trusted World Privileged Debug。这使系统返回Secured状态成为可能。
- Booting,debugging和scan 访问受到secure lifecycle policy控制。
2. Boot ROM and reset
SoC系统的安全初始化由一系列的配置完成,这些配置由安全启动来配置完成。Secure boot确保了firmware的完整性和数据来源的可信度。
安全启动依赖于不可改变的安全boot镜像。它是SoC启动的第一段代码也是用于下一个阶段的验证。一般会分为多个阶段,第一个阶段是Boot ROM。后面的阶段会通过非易失性的存储载入Secure RAM并且执行。第二阶段的boot loader一般指的是Secure Boot Firmware。
2.1 Boot keys
SoC需要有一个on-chip Boot ROM用于安全启动,存储hash形式的公共密钥用于验签。
2.2 Boot types
Cold boot,冷启动一般指的是启动不依赖之前系统状态。一般,冷启动只发生在平台上电或hard reset由power-on reset circuit产生的情况。有时hard reset还会当软件死锁时发生。
Warm boot,热启动一般指的是启动依赖之前系统状态来利用一个比冷启动更快的系统启动方案。这种方式需要告知Boot ROM目前的启动状态,通过比如说:
- 一个特殊的寄存器告知Boot ROM目前的启动状态。
- SoC能够使用一个备用重置向量对于一个warm boot,从而使Boot ROM执行warm boot 特定代码。
典型的场景,任何存储需要执行这种机制需要放置在一个AON的区域中。
| 如果系统支持warm boot,一个flag或register需要能够区分warm boot和cold boot。这个寄存器只能在Trusted world 被配置,在warm reset和cold reset之后被重置。 | |
| 这个flag或寄存器默认配置为cold boot,非授权的侵入会导致cold boot。 |
2.3 Boot parameters
Boot ROM的实施有时会受到额外的configuration信息影响,比如说从OTP的配置。这些配置包含:
- 选择first loadable firmware image启动的设备。
- ROTPK的存储。(Root of Trust Public Key)。
- boot image decryption root key的存储。
- 其他boot特定的参数。
有些configuration需要被禁用,依据LCS。
| Boot ROM需要能感知目前的LCS状态。 | |
| 必须不能从其他的外设存储启动,除非Trusted Debug mode允许这个行为。 | |
| 任何外部的configuration,不是从on-chip OTP获得的必须通过on-chip public key验证。 |
2.4 Boot robustness
当冷启动时Boot ROM不能被其他agents扰乱。这避免了secure boot被跳过了。
| Boot ROM执行的时候,DMA不能获取。 | |
| 冷启动的时候,外设访问需要被禁止。 |
2.5 Secondary processing elements
一般SoC都有多个PE,用于启动的PE是primary。Primary PE用于执行Boot ROM。剩下的PE由Primary PE启动。下列是几个简单的场景:
- platform power controller能保持住所有secondary PEs处于reset state,当primary PE执行Boot ROM时,直到primary PE要求secondray PEs被释放。
- 冷启动后所有的PEs通过Boot ROM中generic boot vector被执行。但是Boot ROM识别出primary boot PE允许它使用secure boot image去启动,同时其他secondary PEs保持inactive。
- on-chip security subsystem 执行它自己private Boot ROM当一个系统reset发生时,执行完后释放AP。security subsystem定义在Security subsystems中。
