嵌入式安全机制
一、硬件级安全机制
1. 安全存储与加密加速
eFuse技术
功能:熔断一次性可编程存储器,存储根密钥、设备指纹。
应用:STM32MP1系列通过eFuse存储Secure Boot公钥哈希。
代码示例:1
2
3// 读取eFuse中的密钥(伪代码)
uint8_t root_key[32];
HAL_EFUSE_Read(EFUSE_KEY_SLOT0, root_key, 32);HSM(硬件安全模块)
芯片型号:ATECC608A(加密协处理器)
功能:- AES-128/256加密
- ECC P-256签名验证
- 防物理探测(Tamper-proof)
2. 隔离执行环境
ARM TrustZone
原理:将CPU划分为安全世界(Secure World)和普通世界(Normal World)。
实现:1
2// 安全世界服务调用(SMC指令)
__smc(0x81000000); // 触发安全监控模式调用应用场景:指纹识别、支付认证(如智能锁)。
RISC-V PMP(物理内存保护)
配置:设置内存区域权限(RWX)1
2csrw pmpaddr0, 0x80000000 # 设置地址范围
csrw pmpcfg0, 0x0F # 权限:RWX + 锁定位
二、启动安全
1. Secure Boot流程
1 |
|
实现要素:
- 非对称签名(RSA-2048/ECDSA)
- 链式验证(每个阶段验证下一级哈希)
代码示例(U-Boot签名验证):
1 |
|
2. 防回滚攻击
版本计数器:存储于安全区域,固件版本号必须递增。
1
2uint32_t current_ver = read_otp(VERSION_OTP_ADDR);
if (new_ver <= current_ver) abort();
三、数据安全
1. 加密存储
- 透明加密(Flash加密)
技术:AES-XTS模式(适合Flash块设备)
实现:NXP LPC55S6x支持片上Flash加密引擎。 - 密钥轮换
方案:定期更新加密密钥,旧数据异步解密后重新加密。
2. 安全认证
挑战-响应协议
流程:- 设备生成随机数Nonce发送至服务器
- 服务器用共享密钥计算HMAC(Nonce)并返回
- 设备验证HMAC合法性
代码片段:
1
2
3
4uint8_t nonce[16];
generate_secure_nonce(nonce); // 使用TRNG生成
send_to_server(nonce);
hmac_sha256(key, nonce, received_hmac);
四、通信安全
1. 协议层加密
TLS/DTLS
优化:mbedTLS + 预共享密钥(PSK)降低资源消耗。
配置:1
mbedtls_ssl_conf_psk(&conf, psk, psk_len, identity, identity_len);
LoRaWAN安全
机制:- 入网时生成NwkSKey(网络会话密钥)和AppSKey(应用会话密钥)
- 每帧数据带MIC(消息完整性码)
2. 防重放攻击
序列号+时间戳
实现:
1
2
3
4
5
6typedef struct {
uint32_t seq; // 单调递增序列号
uint32_t timestamp;
uint8_t data[50];
uint8_t mac[32]; // HMAC-SHA256
} SecurePacket;
五、运行时防护
1. 内存保护
MPU(内存保护单元)
配置:FreeRTOS-MPU划分任务内存区域,阻止越界访问。
示例:1
2
3
4
5
6
7
8
9
10// 定义任务内存区域
static StackType_t task_stack[1024] __attribute__((aligned(32)));
TaskParameters_t params = {
.pvTaskCode = task_func,
.usStackDepth = 1024,
.pvParameters = NULL,
.uxPriority = 1,
.puxStackBuffer = task_stack,
.xRegions = { { (void*)0x20000000, 32, portMPU_REGION_READ_WRITE }, }
};ASLR(地址空间随机化)
实现:启动时随机化代码/数据基址(需MMU支持)。
2. 异常监控
看门狗(WDT)
级联看门狗:- 窗口看门狗(WWDG):检测软件逻辑错误
- 独立看门狗(IWDG):防硬件故障
配置:
1
2
3
4
5IWDG_HandleTypeDef hiwdg;
hiwdg.Instance = IWDG;
hiwdg.Init.Prescaler = IWDG_PRESCALER_256;
hiwdg.Init.Reload = 4095; // 超时约30s
HAL_IWDG_Init(&hiwdg);
六、物理攻击防护
1. 防侧信道攻击
恒定时间算法
示例:密码比较避免短路求值
1
2
3
4
5
6
7bool secure_compare(const uint8_t *a, const uint8_t *b, size_t len) {
uint8_t result = 0;
for (size_t i = 0; i < len; i++) {
result |= a[i] ^ b[i];
}
return (result == 0);
}
2. 光传感器屏蔽
- 金属屏蔽层:覆盖关键芯片,防止激光注入攻击。
七、安全开发实践
1. 工具链加固
编译器选项:
1
2CFLAGS += -fstack-protector-strong -Wformat-security -D_FORTIFY_SOURCE=2
LDFLAGS += -Wl,-z,now,-z,relro
2. 漏洞扫描
静态分析:
1
2# 使用Cppcheck检测漏洞
cppcheck --enable=all --suppress=missingIncludeSystem .
3. 安全认证
- 标准合规:
- ISO/SAE 21434(汽车网络安全)
- UL 2900(物联网设备)
八、典型攻击与防御对照
攻击类型 | 防御机制 | 实现示例 |
---|---|---|
固件提取 | Flash加密 + 安全调试接口锁定 | STM32 RDP级别2 |
中间人攻击 | TLS 1.3 + 证书固定 | MbedTLS证书指纹校验 |
缓冲区溢出 | MPU分区 + Stack Canary | FreeRTOS-MPU配置 |
时序侧信道 | 恒定时间算法 | OpenSSL BN_CTX结构 |
九、资源受限设备优化
- 轻量级加密:
- 算法选择:ChaCha20-Poly1305(比AES-GCM省50%资源)
- 硬件加速:使用芯片内置AES引擎(如ESP32)
- 最小化可信计算基(TCB):
仅安全引导加载程序和关键服务运行在TrustZone。
通过硬件安全模块、加密协议、内存保护和持续监控的多层防御,可显著提升嵌入式设备对抗恶意攻击的能力,满足工业控制、医疗设备等高安全场景需求。