Carlos Wei (Haochen)
Carlos Wei (Haochen)
# ls104x Provisioning Guideline !!!请严格按照本文步骤执行eFUSE的烧录(provisioning)。请每一步都要一个字一个字的读,不可以错过任何步骤,不可以越过任何的过程,即便你对一些过程已经熟悉。一个参数的错误都可能导致secure boot失败。 # 1. Provisioning Provisioning分为两个阶段: * 调试阶段:使用RCW来控制BootROM从mirror register读取SRKH; * 生产阶段:RCW控制失效,BootROM强制从eFUSE读取SRKH; 调试阶段是给我们提供一个SRKH烧录错误的,我们只是把SRKH烧录到[mirror registers](https://docs.nxp.com/bundle/GUID-487B2E69-BB19-42CB-AC38-7EF18C0FE3AE/page/GUID-2CF1D60F-C79F-4A35-800B-2BFE504EBAC5.html),并没有真正的烧录到eFUSE。只有烧[SFP_INGR register](https://docs.nxp.com/bundle/GUID-487B2E69-BB19-42CB-AC38-7EF18C0FE3AE/page/GUID-EFF8FF41-C8C0-4A3B-AF95-E801D585B7C6.html) 之后,mirror register的值会被打到eFUSE上,此时eFUSE不可以被烧录,也就是进入到生产阶段。 ## 1.1 调试阶段的Provisioning 烧录前提:需要一个非secure状态下编译的可以进入到uboot环境的firmware。 调试阶段的的Provisioning,需要烧录三个位置: * **OTPMK**:最先烧录的,这个是烧录到真正的eFUSE,没有mirror机制。 * **SRKH Mirror...
# 1. 服务器端配置 本文使用HTTP而不是HTTPS,并且服务器使用本机HOST局域网更新。 ## 1.1 仓库配置 - 需要进行ostree仓库的初始化 - 需要在ostree仓库中增加busybox的rootfs文件 - **对rootfs文件进行部署标准化改造** - 需要commit仓库变化 - 需要生成summary文件 - 需要启动服务器监听程序 创建初始化仓库: `mkdir -p repo && ostree --repo=repo init --mode=archive-z2 && mkdir...
本文来源于以下的文献,对其进行整理: * https://source.android.com/docs/security?hl=zh-cn * https://developer.android.com/quality/privacy-and-security * https://github.com/OWASP/owasp-mastg/blob/master/Document/0x02a-Frontispiece.md * https://mas.owasp.org/MASTG/Intro/0x01-Foreword/ * Book -- Android Security Internals An In-Depth Guide to Android's Security Architecture # 1. Android Security Arch ## 1.1 Security...
系统芯片(SoC,System on a Chip)的密钥管理机制对于确保整个系统的安全性至关重要。SoC通常是集成了多个功能模块(如处理器核心、内存、输入/输出控制等)的单个芯片,广泛应用于智能手机、平板电脑、嵌入式系统等设备中。SoC的密钥管理机制的重要性可以从以下几个方面来理解: 1. **数据保护**:SoC的密钥管理机制用于加密和解密数据,确保存储或传输的数据安全,防止敏感信息泄露。 2. **安全引导**:密钥管理机制可以用于实现安全引导过程,确保设备在启动时只加载和执行经过验证的、可信的软件。 3. **设备认证**:SoC可以利用密钥管理机制实现设备级别的身份认证,确保设备在网络或系统中的身份是合法和可信的。 4. **数字版权管理(DRM)**:在处理版权受保护的内容(如数字媒体内容)时,密钥管理机制用于实施DRM策略,防止非法复制和分发。 5. **安全通信**:密钥管理对于保障设备之间的安全通信至关重要,例如在进行加密通信或执行其他安全相关操作时。 6. **防止篡改和攻击**:有效的密钥管理机制可以帮助防止各种安全威胁,如篡改攻击、重放攻击等。 7. **合规性**:对于需要遵守特定安全标准和法规的应用(如金融服务、健康信息处理),密钥管理机制有助于确保合规。 8. **多样性和灵活性**:在复杂的应用场景中,密钥管理机制提供了处理多种安全需求的灵活性和扩展性。 SoC的密钥管理机制是确保整个系统安全、保护数据隐私和完整性、维护设备和网络的安全信任链的基础。在设计和实施SoC时,对密钥管理机制的考虑是至关重要的。 本文对一般的SoC中的key管理机制进行调研,并进行总结,并以NXP等著名的SoC为例,来作为Key管理的设计。 * Key种类 * Key管理 (存储or派生) * Key的使用场景 *...
# 1. 背景 由于私钥和对称秘钥具有非常高的机密性,不允许泄露;公钥和证书则具有完整性要求,禁止未授权更改,因此,如何存储具有机密性的数据和完整性保护要求的数据,是一个严肃且重要的话题。在携带有硬件HSM、密码机或者是硬件HSE等硬件安全模块的设备上,由硬件安全模块提供对敏感数据的机密性保护和完整性保护。但是,对于一些不具备硬件安全模块的设备,同样需要对机密数据和完整性数据进行保护。幸运的是,TEE提供了安全存储的能力,能够为敏感数据提供机密性和完整性保护能力。  # 2. TEE的安全基础-- TrustZone TrustZone提供了一些基础的安全能力,基于这些安全能力,上层可以构建不同的安全机制,比如说TEE、Secure Boot等。其中,将内存分为安全内存和非安全内存是TrustZone的一项重要特性,其主要目的包括: 1. **隔离敏感数据:** TrustZone允许将敏感数据存储在安全内存中,而将非敏感数据存储在非安全内存中。这样,敏感数据在处理器的安全区域内受到保护,不容易被恶意软件或非授权的应用程序访问和泄露。 2. **执行安全代码:** 安全内存还用于存储安全性相关的代码,如加密和认证算法,以及安全启动代码。这些代码在非安全内存中不可见,从而提供了一种方式来执行和保护安全关键操作。 3. **隔离不受信任的应用:** 非安全内存用于存储不受信任的应用程序和操作系统组件。TrustZone通过硬件隔离确保这些应用程序和组件无法直接访问安全内存中的敏感数据或安全代码。 4. **防止侧信道攻击:** 通过将安全内存隔离,TrustZone有助于防止侧信道攻击,如缓存侧信道攻击和时序侧信道攻击,因为非安全的应用程序无法直接观察或干扰安全内存中的操作。 5. **提供硬件支持:** TrustZone利用ARM处理器的硬件支持,确保内存分区的强制执行。这是硬件级别的隔离,不容易被绕过。 具体参考,对于M核心: https://github.com/carloscn/blog/issues/197 (这里只是写trustzone的意义,更多的用的是A核) ##...
### 变量定义的位置 在C语言中,变量的定义位置取决于编码风格和标准。在C89(ANSI C)标准中,要求在函数的开始部分声明所有变量。但在C99及之后的标准中,允许在需要时在函数内任何位置声明变量。 #### C89标准 在C89标凈中,所有变量必须在函数的任何执行语句之前定义。这意味着所有的变量声明都应该在函数的开始部分,通常是在任何逻辑或计算操作之前。 ```C #include int main(void) { int ret = 0; int a = 9, b = 0, c = 7, d = 6; a...
https://github.com/carloscn/design/issues/11
# 1. Background Secure Boot需要信任根公钥(Root of Trust Public Key,ROTPK)的原因在于它为整个安全启动过程提供了一个基本的、可信赖的起点。这个起点是确保系统安全性的关键部分,用以确保用以验证启动代码的公钥的完整性和真实性,是建立信任链的基础。本文主要讨论,**如何保证信任链的“根”的安全性**。  在系统芯片(SoC)和其他嵌入式系统中常用的“信任链”(Chain of Trust)安全启动流程。以下是关键方面的概述:  **信任链概念** - 启动过程中的安全验证:信任链确保系统上加载的每个组件未被篡改。这个过程从重置开始,硬件组件首先验证第一阶段的软件。随后,已验证的软件加载额外的软件。 - SoC硬件上电启动:当SoC硬件上电时,CPU会自动从起始地址(如重置向量)开始执行。起始地址和启动选择器被配置到内部闪存地址空间的预定义位置或掩膜ROM中。在工厂配置后,这个起始地址处的代码被认为是不可变的。这些特性为不可变的引导加载程序不能轻易被绕过提供了强有力的保证。 - 不可变引导加载程序:不可变的引导加载程序使用公钥来检查第一阶段的代码是否为真实的,然后再执行它: - 在单阶段启动过程中,不可变引导加载程序可能验证单个映像或同时验证多个映像。 - 在多阶段启动过程中,可能有多个加载程序,每个加载程序使用密钥来验证和加载其他映像。 - 基于产品需求的实现决策:实现必须根据产品需求确定需要多少启动阶段。无论阶段数量如何,每个启动阶段都必须验证其加载的所有软件。 # 2. Supply...
本文不涉及Trustzone的技术实现,根据Trustzone的设计讲述Trustzone的技术背景、技术概述和技术应用。 在Trustzone的技术背景中,我们阐述为什么要使用Trustzone技术;在技术概述中主要讲述Trustzone最基本的设计模型以及和Cortex-A的Trustzone的异同;技术应用中主要讲述基于Trustzone我们能做什么丰富的应用。 # 1. Trustzone技术背景 如果你是关心安全的开发者,我相信拿到armv8-m的架构肯定会问,armv8-m从芯片层级考虑安全的话,肯定首要是trustzone的技术,那么armv8-m的trustzone技术到底怎么考察安全性: * 内存隔离 * 跳转安全state限制 * 预防SG指令的滥用(Inadvertent SG instruction in binary data) * 虚假的函数和异常返回值的状态 * 预防在secure内存中的溢出问题 * 调试的权限管理设计 ## 1.1 内存隔离 将内存分为安全内存和非安全内存是TrustZone的一项重要特性,其主要目的包括: 1. **隔离敏感数据:** TrustZone允许将敏感数据存储在安全内存中,而将非敏感数据存储在非安全内存中。这样,敏感数据在处理器的安全区域内受到保护,不容易被恶意软件或非授权的应用程序访问和泄露。...