发新帖本帖赏金 30.00元(功能说明)我要提问
返回列表
打印
[技术讨论]

【每周分享】利用SHA204给MCU做一个IP保护

[复制链接]
1544|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 mxkw0514 于 2025-3-28 09:56 编辑

#申请原创#@21小跑堂

什么是IP呢?
通俗的来讲,IP可以是专利、设计、商标、版权、固件、算法、协议栈等。
为什么要保护IP呢?
保护IP可以最大限度地保证生产者地经济效益,促进研发人地创新,维护市场地公平竞争。

今天我们利用硬件加密芯片给MCU做一个IP保护系统,保证MCU的核心程序运行的安全。具体的实现流程是:MCU和外部加密IC都存储着一对相同的共享密钥,MCU向加密IC发出随机数质询,加密IC会向MCU返回一个32字节的随机数;然后MCU将共享密钥(存储在MCU端)与随机数进行SHA2哈希运算而生成一个256bitMAC值,加密IC将共享密钥(存储在加密IC)进行SHA2哈希运算而生成一个256 bit的MAC值;最后MCU会比较这两个MAC值,如果相同,则往下运行核心程序。框图如下所示:

8位单片机是没有硬件加密模块的,如果也要对IP进行保护,就需要使用外部加密IC进行身份验证。硬件加密相较于软件加密,是有诸多好处的,硬件加密能够在整个芯片内部进行主动屏蔽,可以防止微探针、辐射和时序的攻击。我们来看一下CryptoAuthentication器件的大致框图。紫色的是防止外界分析数据的掩膜;橙色的是加密引擎,不同的加密IC支持不同的加密算法;蓝色的是EEP,用于存入密钥和加密数据;黄色的是随机数发生器,用于产生随机数;黑色的是单调计数器,用于限制使用的次数,蓝色的是唯一序列码,就算被读出不也会影响到同类其它产品。


下面我们就以PIC18F47Q10和ATSHA204为例,来实现一个简单的IP保护测试例程。PIC18F47Q10是一款高端的8位单片机,该单片机的时钟最高可以跑到64MHz,具有两个外部中断入口地址,也就是说具有两个硬件中断优先级(中断8位单片机只有一个),当然51或者ARM架构的单片机是有很多硬件中断优先级,有好处也有坏处。ATSHA204是一款,本次使用的ATSHA204支持SHA256加密算法,具有IIC或者单总线通信接口,用户可以选择ACES软件(如下图所示)配置ATSHA204,也可以使用Python脚本配置ATSHA204,主要是配置密钥和防止需要保护的加密数据。



这里我们选择使用ACES软件配置ATSHA204,先将加密IC放在硬件工具的座子上(通过IIC接口),连接PC与硬件工具,打开ACES软件,选择加密IC信号,之后分别配置不同的数据槽,数据槽的框图如下所示。密钥放在Slot0或Slot1,私密数据放在Slot3-Slot7里面,需要注意的是,只有锁定配置区(不能再更改密钥),才能在数据区放入数据区。

下面放入此次测试例程的主程序代码,使用的CryptoAuthencation库函数可以利用MPLAB的MCC插件自动生成,生成的相关库函数都有响应的注释。
#include "mcc_generated_files/mcc.h"
#include "cryptoauthlib.h"

const uint8_t nonce_in[20] = {
    0x01, 0x23, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
    0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22
};

const uint8_t key0[32] = {
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

uint8_t mac_bytes[24] = {
    0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE,
    0x00, 0x00, 0x00, 0x00, 0x01, 0x23, 0x00, 0x00,
};

// Section: Main Entry Point
void main(void)
{
    ATCA_STATUS status;
    uint8_t sn[9];
    uint8_t challenge[32];
    uint8_t digest[32];
    uint8_t sha2_input[88];
    uint8_t mac_sw[32];
    // Initialize the device
    SYSTEM_Initialize();

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();
    printf ("\r\nInitial CryptoAuthLib: \r\n");
    status = atcab_init (&cfg_atsha204a_i2c_default);
    if (status != ATCA_SUCCESS)
    {
        printf ("\tFail\r\n");
        LED_SetHigh();
    }
    printf ("\tSuccess\r\n");
    status = atcab_read_serial_number (sn);
   
    if (status == ATCA_SUCCESS)
    {
        atcab_printbin_label ("Seriel Number:\r\n", sn, 9);
    }

    status = atcab_nonce_rand (nonce_in, challenge);
    if (status != ATCA_SUCCESS) {
        printf ("Nonce Fail\n");
    }
    challenge[0] ^= 0x21;
    atcab_printbin_label ("Challenge:\r\n", challenge, 32);
   
//digest是加密IC返回的哈希运算结果(加密IC将随机数challenge与加密IC内部密钥进行哈希运算)
     status = atcab_mac (0x00, 0, challenge, digest);
    if (status != ATCA_SUCCESS) {
        printf ("Slot 0 GetMac Fail\n");

    }
     
     atcab_printbin_label ("Digest:\r\n", digest, 32);

    // MCU将共享密钥与随机数进行哈希运算,这里需要按照数据手册将密钥与一段数据组合
    memcpy (sha2_input, key0, 32);
    memcpy (sha2_input + 32, challenge, 32);
    memcpy (sha2_input + 64, mac_bytes, 24);
    status = atcac_sw_sha2_256 (sha2_input, 88, mac_sw);
    if (status != ATCA_SUCCESS) {
        printf ("Get SW Mac Fail\n");

    }
    atcab_printbin_label ("SW Digest:\r\n", mac_sw, 32);

    // 将MCU哈希运算值和加密IC哈希运算值进行比较,如果相同,则运行核心程序
    if (memcmp (mac_sw, digest, 32) == 0) {
        printf ("Slot 0 CheckMac PASS\n");

}
atcab_release();

    while (1)
    {
}
}

调试、编译和下载程序,上电后,PIC18F47Q10会与ATSHA204进行身份验证,当出现下图后,就说明MCU与加密IC身份验证是成功的。也许会有人说,对称加密技术使用一对共享密钥,会带来一些隐患,比如密钥有泄露的风险,尤其是父密钥(主控的软件中有密钥),所以需要将主控软件中的密钥做些处理增加数据读出的难度。当我们要决定是使用对称加密技术还是非对称加密技术时,要考虑读出密钥的成本和产品的成本、相应的产品对应规范要求等等,所以不能抛开剂量谈毒性。








使用特权

评论回复

打赏榜单

21小跑堂 打赏了 30.00 元 2025-03-28
理由:恭喜通过原创审核!期待您更多的原创作品~~

评论
21小跑堂 2025-3-28 14:39 回复TA
使用ATSHA204加密芯片,为MCU安全保驾护航。 

相关帖子

发新帖 本帖赏金 30.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

682

帖子

5

粉丝