匿名
未登录
登录
百问网嵌入式Linux wiki
搜索
查看“STM32MP15 secure boot”的源代码
来自百问网嵌入式Linux wiki
名字空间
页面
讨论
更多
更多
页面选项
Read
查看源代码
历史
←
STM32MP15 secure boot
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== Purpose == Secure boot is a key feature to guarantee a secure platform. <br><br /> [[Boot_chains_overview#STM32MP_boot_sequence|STM32MP1 boot sequence]] supports a trusted boot chain that ensures that the loaded images are authenticated and checked in integrity before being used. {{Warning| The secure boot feature availability is indicated in the ''security'' field of the chip [[STM32MP15_microprocessor#Part_number_codification|part number]].}} == Authentication processing == STM32 MPU provides authentication processing with ECDSA <ref>https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm</ref> verification algorithm, based on ECC <ref>https://en.wikipedia.org/wiki/Elliptic-curve_cryptography</ref>. ECDSA offers better result than RSA with a smaller key. STM32 MPU relies on a 256 bits ECDSA key.<br> Two algorithms are supported for ECDSA calculation: * P-256 NIST * Brainpool 256 The algorithm selection is done via the signed binary header, as shown in [[STM32MP15_secure_boot#STM32_Header|STM32 header]] (subchapter in this same article). The EDCSA verification follows the process below:<br> [[File:Bootrom_Authentication.png|810px|center|link=]] === Key generation === First step is to generate the ECC pair of keys with [[KeyGen_tool|STM32 KeyGen tool]]. This is the key pair that will be used to sign the images. <br> The tool also generates a third file containing the public key hash (PKH) that will be used to authenticate the public key on the target. === Key registration=== {{Warning| Make sure that a device with Secure boot enabled is used: this is mentionned in the [[STM32MP15_microprocessor#Part_number_codification|part number]], otherwise the device will become permanently unusable.}} ==== Register hash public key ==== First step to enable the authentication is to burn the [[STM32MP15_ROM_code_overview#OTP WORD 24 to 31 - Public Key Hash (PKH)|OTP WORD 24 to 31]] in [[BSEC internal peripheral|BSEC]] with the corresponding public key hash (PKH, output file from [[KeyGen_tool|STM32 KeyGen]]). OpenSTLinux embeds a '''stm32key''' tool that can be called from [[U-Boot_overview#U-Boot command line interface (CLI)|U-Boot command line interface]] to program the PKH into the OTP.<br /> PKH file (publicKeyhash.bin) must be available in a filesystem partition (like bootfs) on a storage device (like sdcard) before proceeding. {{Board$}} ext4load mmc 0:4 0xc0000000 publicKeyhash.bin {{highlight|Load hash file from mmc 0 partition 4 (ext4) in DDR}} 32 bytes read in 50 ms (0 Bytes/s) {{Board$}} stm32key read 0xc0000000 {{highlight|Read loaded key from DDR to confirm it is valid (without writing it in OTP)}} OTP value 24: 12345678 OTP value 25: 12345678 OTP value 26: 12345678 OTP value 27: 12345678 OTP value 28: 12345678 OTP value 29: 12345678 OTP value 30: 12345678 OTP value 31: 12345678 {{Warning| If hash key is ok, the key in OTP can be fused}} {{Board$}} stm32key fuse -y 0xc0000000 {{highlight|Write the key in OTP}} The device now contains the hash to authenticate images. To read back the OTP, you can use [[NVMEM_overview|NVMEM framework]]. === Image signing === In a second step, FSBL and SSBL binaries must be signed. [[Signing_tool|STM32 Signing tool]] allows to fill the STM32 binary header that is parsed by the embedded software to authenticate each binary. ==== STM32 Header ==== {{:STM32 header for binary files}} For {{MicroprocessorDevice | device=15}}: * the monotonic counter is stored in [[STM32MP15_ROM_code_overview#OTP WORD 4 - Monotonic counter| OTP 4]] * the Public Key Hash is stored in [[STM32MP15_ROM_code_overview#OTP WORD 24 to 31 - Public Key Hash (PKH)|OTP WORD 24 to 31]] {{ReviewsComments|MCC: is there a tool to read STM32 header fields? }} === Image programming === Once the images are signed, they can be programmed into the flash on the target board with [[STM32CubeProgrammer]]. === PKH check === Before really starting the authentication process, the ROM code compares the hash of the public key carried in the STM32 header with the one that was provisionned in OTP. === Authentication === ==== Bootrom authentication ==== Using a '''signed''' binary, the ROM code authenticates and starts the FSBL. If the authentication fails, the ROM code enters into a serial boot loop indicated by the blinking Error LED (cf [[STM32MP15 ROM code overview#Common debug and error cases|Bootrom common debug and error cases]]) The [[STM32MP15 ROM code overview|ROM code]] provides secure services to the FSBL for image authentication with the same ECC pair of keys, so there is no need to support ECDSA algorithm in FSBL. ==== TF-A authentication ==== TF-A is the FSBL used by the Trusted boot chain. It is in charge of loading and verifying U-boot and (if used) OP-TEE image binaries. Each time a '''signed''' binary is used, TF-A will print the following status: <pre> INFO: Check signature on Non-Full-Secured platform </pre> If the image authentication fails the boot stage traps the CPU and no more trace is displayed. === Closing the device === ''Notice that this last step is not shown in the diagram above.'' Without any other modification, the device is able to perform image authentication but non authenticated images can still be used and executed: the device is still opened, let's see this as a kind of test mode to check that the PKH is properly set. As soon as the authentication process is confirmed, the device can be closed and the user forced to use signed images. [[STM32MP15 ROM code overview#OTP WORD 0|OTP WORD0]] bit 6 is the OTP bit that closes the device. Burning this bit will lock authentication processing and force authentication from the Boot ROM. Non signed binaries will not be supported anymore on the target. To program this bit, the [[STM32CubeProgrammer_release_note|STM32CubeProgrammer]] or [[U-Boot_overview#U-Boot command line interface (CLI)|U-Boot command line interface]] can be used. Here is how to proceed with U-Boot: {{Board$}} fuse prog 0 0x0 0x40 {{Warning| Once this bit is written the platform is locked}} <references/> <noinclude> [[Category:Trusted Firmware-A (TF-A)| 03]] {{PublicationRequestId | 10394 | 2019-01-30| BrunoB }} </noinclude>
该页面使用的模板:
STM32 header for binary files
(
查看源代码
)
模板:Board$
(
查看源代码
)
模板:Highlight
(
查看源代码
)
模板:MicroprocessorDevice
(
查看源代码
)
模板:PublicationRequestId
(
查看源代码
)
模板:ReviewsComments
(
查看源代码
)
模板:STPink
(
查看源代码
)
模板:Warning
(
查看源代码
)
返回至
STM32MP15 secure boot
。
导航
导航
WIKI首页
官方店铺
资料下载
交流社区
所有页面
所有产品
MPU-Linux开发板
MCU-单片机开发板
Linux开发系列视频
单片机开发系列视频
所有模块配件
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志