blog
blog copied to clipboard
My blog
# [Embedded] ZYNQ-UltraScale+的启动流程 ZYNQ UltraScale+ 是一种SoC设计,主要包含下面的片上系统: - Quad-core Arm® **Cortex™-A53-based** Application Processing Unit (APU) - Dual-core Arm **Cortex-R5F-based** Real-Time Processing Unit (RPU) - Arm Mali™-400 **MP2 based Graphics Processing Unit...
# [Embedded] NXP-LS1046的启动流程 NXP-LS1046的启动流程可以分为两个stages: * SoC阶段(SoC init + BootROM) * Bootloader阶段(ATF/PPA/U-Boot) 在Bootloader阶段,也可以选择两种模式: * PPA模式(传统的启动方式) * ATF模式(采用ARM的ATF作为启动方式) Note, **如果要使能secure boot,则需要采用ATF启动模式**。 # 1. Boot High-Level Design ## 1.1 Boot flow with PPA...
# [Embedded] NXP-LS1046 secure boot # 1. secure boot overview ## 1.1 introduction NXP的secure boot流程被分为多个阶段,严格按照TF-A的规则使用,分为BL1, BL2 (at EL3), BL31, BL32, BL33。secure boot的image验证是使用各自的image header完成。 image header有两类: - **CSF headers (NXP Chain...
# [Embedded] x86-UEFI-Secure-Boot 依托系统固件BIOS,使用认证的固件以提高安全性。在2011年,NIST发布BIOS Protection Guidelines ([SP800-147](https://csrc.nist.gov/publications/detail/sp/800-147/final)),并在2018年,扩大概念从BIOS到platform,则发布Platform Firmware Resiliency Guidelines ([SP800-193](https://csrc.nist.gov/publications/detail/sp/800-193/final))。NIST的目的是提供一个针对固件完整性的通用的准则。 1987年,Clark-Wilson提出了一个完整性模型 [Clark-Wilson integrity policy](http://theory.stanford.edu/~ninghui/courses/Fall03/papers/clark_wilson.pdf)。 UEFI secure boot总的原则是遵循该模型的rules的。一些rules可以参考: https://edk2-docs.gitbook.io/understanding-the-uefi-secure-boot-chain/overview#integrity-models # 1. UEFI Boot Chain 根据NIST-SP800-147和SP800-193,系统在引导流程期间需要保证完整性(integrity)和有效性(availability)。对于固件而言,secboot(a.k.a verified boot)在执行下一阶段引导流程之前需要执行一系列验证策略。 UEFI secure boot在UEFI手册中定义的一个特性。它来确保只有正确的第三方固件程序可以在OEM的固件环境中执行。UEFI...
# [Embedded] ZYNQ-Secure Storage 如果使用Zynq® UltraScale+™设备,大部分数据是存储在设备的外面的(NVM),如果想增强数据的保密性,则需要启动Secure Storage来保护数据[^1]。保护数据的算法使用ZYNQ内置的GCM-AES硬件引擎,那么同样,对于GCM-AES来说确保Key的可信是最重要和最根本的事情。eFUSE/OTP保存着Secure Boot和Secure Storage使用的加密的Key,而且内置的PUF(physically unclonable function)对Key的保密性进行了增强。Key的写入eFUSE/OTP和配置PUF的**过程叫做Provisioning[^2]**,也只有在Provisioning之后,Secure Storage和Secure Boot才能使用RSA和GCM-AES保密与认证功能。如何进行Provisioning可以参考[^2] **本文参考**: * (AN) Secure Storage Application Note[^1] * (Provisioning) - Programming BBRAM and eFUSEs Application Note [^2]...
# 3.0_Security_对称密钥算法加解密 定义:**对称加密算法即,加密和解密使用相同密钥的算法**。(加密Key=解密key);对称密钥算法又分为**分组密码 (Block Cipher)和流密码(Stream Cipher)**,在算法模式上,分为**ECB/CBC/CFB/OFB/CTR**这些模式。 常用算法包括DES(Data Encryption Standard,数据加密算法) 、3DES(Triple Data Encryption Algorithm,三重数据加密算法)、 AES(Advanced Encryption Standard,高级加密标准,又称Rijndael加密法) 、PBE(Password-based encryption,基于密码验证)、RC4(来自Rivest Cipher 4的缩写)、 SM1 、SM4(国产)。 **ChaCha20-Poly1305**是Google所采用的一种新式加密算法,性能强大,在CPU为精简指令集的**ARM平台上尤为显著**(ARM v8前效果较明显),在同等配置的手机中表现是AES的**4倍**(ARM v8之后加入了AES指令,所以在这些平台上的设备,AES方式反而比chacha20-Poly1305方式更快,性能更好),可减少加密解密所产生的数据量进而可以改善用户体验,减少等待时间,节省电池寿命等。 除此之外,还有3GPP下面适用于基站的加密算法,包括KASUMI/ZUC/SNOW-3G。由此可见,**对称加密主算法种类繁多**。一般的,**描述对称加密算法, 主算法 + 模式**,例如AES256 使用ECB模式。...
# 3.3_Security_对称密钥算法之AEAD 简单的说,把[3.0_Security_对称密钥算法加解密](https://github.com/carloscn/blog/issues/137)和[3.2_Security_对称密钥算法之MAC(CMAC/HMAC)](https://github.com/carloscn/blog/issues/144)结合在一起,就是AEAD。全称为:**[Authenticated](https://en.wikipedia.org/wiki/Authenticated) Encryption** (**AE**) and **Authenticated Encryption with Associated Data** (**AEAD**) 对于AEAD的编程接口: * 加密: * 输入:明文、密钥、header(未加密,可选); * 输出:密文和MAC(tag) * 解密: * 输入:密文,密钥,tag,header(在加密的时候使用的,可选) * 输出:明文,验证tag的结果,如果有header也有验证header的结果; 注意,header的目的是提供认证和完整性的保护,应用场景在网络和存储的[metadata](https://baike.baidu.com/item/%E5%85%83%E6%95%B0%E6%8D%AE/1946090),是对不需要保证安全性但是需要认证功能的数据。 常用的AEAD包含: - [CCM](https://en.wikipedia.org/wiki/CCM_mode) -...
# [embedded] NXP-LS1046的image操作 # 1. Walk Thought ## 1.1 boot option LS1046ARDB supports the following boot options: - SD - QSPI NOR flash  如果改变默认启动方式需要额外的设置在image中或者RCW中。 ## 1.2 QSPI NOR flash...
# 3.2_Security_对称密钥算法之MAC(CMAC + HMAC) Digest仅仅能够验证信息的**完整性**(Integrity),而没有办法确认信息的**身份认证**(Authetication)。例如,Alice收到一则需要Bob汇款1000元的消息,同时收到汇款消息的hash值,Alice可以计算hash确认1000元这个消息没有被篡改,但问题是,这则消息不是由Bob发的呢?因此就需要更高明的方法来帮助确认这个消息没有被篡改,还要确认这个消息是Bob发的。 消息认证有着广泛的应用,例如: * **SWIFT**:环球银行金融电信协会。银行和银行之间通过SWIFT来传递交易消息,而消息的完整性及对消息的验证都是通过消息验证码。 * **IPSec**:互联网基本通信息协议,对通信内容认证和校验都是采用消息验证码。 * **SSL/TLS**:通信内容的认证和完整性校验都是通过消息验证码。 常用的MAC有: - [CBC-MAC](https://en.wikipedia.org/wiki/CBC-MAC "CBC-MAC") - [DAA](https://en.wikipedia.org/wiki/Data_Authentication_Algorithm "Data Authentication Algorithm") - [GMAC](https://en.wikipedia.org/wiki/Galois_Message_Authentication_Code "Galois Message Authentication Code") - [HMAC](https://en.wikipedia.org/wiki/HMAC "HMAC")...
# [Embedded] ZYNQ-使用petalinux建立启动引导项(QSPI/JTAG/SD/TFTP) 早在2018年我们使用ZYNQ使用SD卡制作了Linaro的启动镜像,参考:[ZYNQ的Linux Linaro系统镜像制作SD卡启动](https://github.com/carloscn/blog/issues/39) 但是我们是自己收集的Image的素材,例如: - vivado编译生成PL:bit文件 - sdk生成的PS:fsbl文件 - uboot生成的:uboot.elf (自行编译) - linux生成的: uimage (自行编译) Note,没有启动ATF,所以ATF层级引导在上面的例子中不存在。 这种方式属于传统的方式,但是petalinux工程给了我们一个更为友善和方便的方法,我们只需要使用petalinux的工程(包含linux、uboot、atf、根文件系统、下载工具等等)就可以实现上面我们自行编译的工作,而且还支持JTAG、SD、QEMU等多种方式启动。 # petalinux安装 对于ubuntu的发行版,严格按照petalinux文档要求进行,新的发行版没有赛灵思的测试,会出现各种问题,不要在环境上纠缠和浪费时间。对于petalinux安装和后面建立的工程,建议预留至少50G的空间,可使用`df -h`查看所剩空间。 下载petalinux的安装工具,在使用petalinux安装工具之前,至少你的ubuntu环境需要安装以下工具集: `sudo apt-get install tofrodos iproute2 gawk...