MOD8ID加密芯片应用笔记之:SecureBoot
SecureBoot是一种确保嵌入式产品(系统)获得授权的方法,通常应用于硬件和或软件授权。安全性取决于两点:攻击者无法更改boot;并且攻击者无法获得密钥,可以阻止对硬件设备的非法篡改,克隆,升级。
MOD8ID安全加密芯片包含专业的硬件安全功能,旨在防止此类攻击者获取设备中存储的机密信息。能完美支持SecureBoot功能,应用于嵌入式软件保护,OTA安全升级,。本文基于MOD8ID的SecureBoot的实现。
Host即待保护的主控端,HOST需要实现:
• 需要执行SHA256计算(计算image文件摘要)。
• 使用IO保护功能时:需要能够生成临时随机数(一次性使用)。
Secure Boot安全模型的操作流程如下表所示:(请参考MOD8ID DEMO工程源码,相关SDK请联系MODSEMI技术专家获取)
Host(主控端) | MOD8ID | 备注 | |||
发行过程 | |||||
① 根据方案选定的算法创建授权私钥和认证公钥 | secure_boot_public_key | ||||
② 根据方案选定的算法创建IO保护密钥 | io_protection_key | 可选。建议启用IO保护,可用主IO保护密钥和MOD8-SN进行密钥分散,达到一机一密的目的。 | |||
③ 个人化 | app_load_configuration app_write_key | •写入芯片配置、锁配置区; •写入IO保护密钥、认证公钥,锁数据区; | 锁定操作不可逆。 | ||
④ 创建授权签名:计算image文件摘要,对摘要进行签名 | digest signature | 签名随image一起保存、发行。 | |||
认证过程 | |||||
① Boot中计算image文件摘要 | digest
| ||||
② Boot中读取授权签名 | signature | ||||
③ 认证 | app_secureboot | •验证MAC •验证签名 •返回结果 | |||
④ 认证结果处理 |
测试数据:
授权私钥(ECC P-256):2B8B53733302CC1E7462610EB9FE8B067921DC204DAC7CB97B8FE4E768DE0732
认证公钥(ECC P-256):99708DE6A8985409A9A57F4595E69ACA41CEF4EBADF1C66730CC1ABA800C5A8F 93F88951F17E1D3D4DA0815F5938D817E3C6A0FC828B026D6C60F0231A471ABC
IO保护密钥:68747470733A2F2F7777772E6D6F6473656D692E636F6D2F73686F77732F372F
image文件摘要(SHA256):A4F537970F7478BA105A1C3A91BA436091AA7DB9AED09F0101AD215D38E3FE8A
image文件签名(ECC P-256):5D9ECB1A4F4B03C3027FE23E520A73EB82BB73D08D1410010D77D803D9EEDA48 F3F9642C1DCD40731772B4798E49934E99E900749C32734F88D157862F6D28D1
数组格式:
const uint8_t io_protection_key[] = {
0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x6D, 0x6F, 0x64, 0x73,
0x65, 0x6D, 0x69, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x73, 0x68, 0x6F, 0x77, 0x73, 0x2F, 0x37, 0x2F,
};
const uint8_t secure_boot_public_key[] = {
0x99, 0x70, 0x8D, 0xE6, 0xA8, 0x98, 0x54, 0x09, 0xA9, 0xA5, 0x7F, 0x45, 0x95, 0xE6, 0x9A, 0xCA,
0x41, 0xCE, 0xF4, 0xEB, 0xAD, 0xF1, 0xC6, 0x67, 0x30, 0xCC, 0x1A, 0xBA, 0x80, 0x0C, 0x5A, 0x8F,
0x93, 0xF8, 0x89, 0x51, 0xF1, 0x7E, 0x1D, 0x3D, 0x4D, 0xA0, 0x81, 0x5F, 0x59, 0x38, 0xD8, 0x17,
0xE3, 0xC6, 0xA0, 0xFC, 0x82, 0x8B, 0x02, 0x6D, 0x6C, 0x60, 0xF0, 0x23, 0x1A, 0x47, 0x1A, 0xBC,
};
uint8_t digest[] = {
0xA4, 0xF5, 0x37, 0x97, 0x0F, 0x74, 0x78, 0xBA, 0x10, 0x5A, 0x1C, 0x3A, 0x91, 0xBA, 0x43, 0x60,
0x91, 0xAA, 0x7D, 0xB9, 0xAE, 0xD0, 0x9F, 0x01, 0x01, 0xAD, 0x21, 0x5D, 0x38, 0xE3, 0xFE, 0x8A,
};
uint8_t signature[] = {
0x5D, 0x9E, 0xCB, 0x1A, 0x4F, 0x4B, 0x03, 0xC3, 0x02, 0x7F, 0xE2, 0x3E, 0x52, 0x0A, 0x73, 0xEB,
0x82, 0xBB, 0x73, 0xD0, 0x8D, 0x14, 0x10, 0x01, 0x0D, 0x77, 0xD8, 0x03, 0xD9};
标签:MOD8ID(9) 物联网安全(3) 安全解决方案(1) 物联网认证芯片(1) IOT安全(1) 视频加密(3) 固件保护(1) 安全芯片(2) ATECC608(2) 返回列表