PAGE1
PAGE1
LPC15xx系列安全功能
1.安全功能概述
LPC15xx系列单片机内置了多种安全功能,旨在保护设备免受物理和逻辑攻击。这些安全功能包括但不限于:安全启动、存储器保护、加密和解密功能、安全中断处理等。本节将详细介绍这些安全功能的原理和应用场景。
1.1安全启动
安全启动是LPC15xx系列单片机中的一个重要功能,用于确保设备在启动时加载的固件是经过验证的,从而防止恶意代码的加载和执行。安全启动通常涉及以下几个步骤:
验证固件:通过校验和或数字签名验证固件的完整性和真实性。
加载固件:如果固件验证通过,则将其加载到内存中并开始执行。
保护启动过程:防止在启动过程中对固件的篡改。
1.1.1原理
安全启动过程通常涉及一个安全启动加载器(BootLoader),该加载器在系统上电后首先运行。安全启动加载器会读取存储在非易失性存储器中的固件,并使用预先存储的公钥或校验和来验证固件的完整性和真实性。如果验证通过,固件将被加载到RAM中并开始执行;否则,系统将进入安全模式,防止恶意代码的运行。
1.1.2实例
以下是一个简单的安全启动加载器示例,使用校验和验证固件的完整性。
#includeLPC15xx.h
#includestdio.h
//定义固件存储区域
#defineFIRMWARE_START_ADDR0
#defineFIRMWARE_END_ADDR0x1000FFFF
#defineCHECKSUM_ADDR0
//计算校验和
uint32_tcalculate_checksum(uint32_tstart,uint32_tend){
uint32_tchecksum=0;
for(uint32_ti=start;i=end;i+=4){
checksum+=*(__IOuint32_t*)i;
}
returnchecksum;
}
//验证固件
boolverify_firmware(){
uint32_texpected_checksum=*(__IOuint32_t*)CHECKSUM_ADDR;
uint32_tactual_checksum=calculate_checksum(FIRMWARE_START_ADDR+4,FIRMWARE_END_ADDR);
return(expected_checksum==actual_checksum);
}
//安全启动加载器主函数
intmain(void){
//初始化系统
SystemInit();
//验证固件
if(verify_firmware()){
//如果固件验证通过,跳转到固件入口地址
void(*app_start)(void)=(void(*)(void))FIRMWARE_START_ADDR;
app_start();
}else{
//如果固件验证失败,进入安全模式
printf(Firmwareverificationfailed!Enteringsafemode.\n);
while(1);
}
return0;
}
1.2存储器保护
存储器保护是LPC15xx系列单片机中的另一个关键安全功能,用于防止未经授权的访问和修改。LPC15xx系列单片机提供了多种存储器保护机制,包括存储器保护单元(MPU)和存储器访问控制(MAC)。
1.2.1原理
存储器保护单元(MPU)可以配置多个区域,每个区域可以设置不同的访问权限(如读、写、执行等)。通过配置MPU,可以确保某些关键数据和代码区域只能被特定的模块或函数访问,从而提高系统的安全性。
1.2.2实例
以下是一个简单的MPU配置示例,保护一个特定的存储器区域。
#includeLPC15xx.h
//配置MPU保护一个区域
voidconfigure_mpu(){
//使能MPU
SCB-CTRL|=SCB_CTRL_MPU_EN;
//配置区域1:0-0x20000FFF,只读
MPU-RNR=0;//选择区域0
MPU-RB