MODSEMI

News

新闻资讯

首页   
  • 新闻资讯
  •  | 
  • 技术推文
  • MOD208加密芯片示例程序与参考设计

    来源:MODSEMI 发布日期:2022-10-14 15:04:50 浏览:3008

      MOD208加密芯片是一款用于电子设备反克隆/防抄板/嵌入式固件保护等功能的高安全专用加密芯片,其内置防篡改NVM安全存储和对称密码硬件引擎支持。MOD208的安全NVM可用于存储密钥和私有数据、安全加密读/写,支持机密数据与安全日志存储,支持多种安全配置。这种新的安全技术大大增强了电子设备整体系统安全性。MOD208具有广泛的防御机制,专门设计用于防止对设备本身的物理攻击或对设备和系统之间传输的数据的逻辑攻击。MOD208具有支持安全通信的I2C接口,可以方便快捷地与主机微控制器软件集成。

    MOD208涵盖了许多类型的安全应用程序所需的广泛用例,其中包括::

            • 安全下载和引导

            身份验证和保护嵌入式固件

            • 生态系统控制

            OEM/原装授权保护

            配件与耗材保护

            • 反克隆/防抄板

            防止使用相同的BOM或盗版代码进行克隆复制

            • 报文安全性

            网络节点的认证、消息完整性和机密性(IoT)

    MOD208参考设计:

    下图说明了如何将MOD208与本地主机集成。

                                                                                                                                      MOD208芯片集成示意图




    注意:上拉电阻和Cvcc的值取决于目标应用电路和目标I2C频率。

    MOD208示例程序:

    相关的完整示例工程可以联系MODSEMI FAE免费获取,示例程序包含驱动,库,以及主程序代码所有需要的功能。

    MOD208的默认i2c设备地址是0x64。(偏移后的IIC地址是0xC8)

    主程序示例代码如下:


    int main(void)
    {
        MSE_STATUS status;
        /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
        HAL_Init();
    
        /* Configure the system clock */
        SystemClock_Config();
    
        /* Initialize all configured peripherals */
        MX_GPIO_Init();
    
        /* Demo工程中创建了两个Target,里面分别定义了I2C_HAL和I2C_EMUL,分别表示硬件I2C和软件模拟I2C */
    #ifdef I2C_HAL
        MX_I2C1_Init();
    #endif
    
        MX_USART1_UART_Init();
    
        // 串口输出log:UART-TX
        printf("%sn", STRING_HEADER);
    
        /* 大小端判断:注意不同CPU大小端可能不一样,部分主设备端验证用的API可能会计算错误 */
        IsBigEndian();
    
        /* [0] init: I2C通信连接、测试(最关键的一步,I2C驱动移植请参考ecc_i2c.c[硬件I2C]或i2c_bitbang_stm32.c[模拟I2C]) */
        status = mse_init(&cfg_mod208_i2c);
        if (status != MSE_SUCCESS)
        {
            printf(" mse_init() failed with ret=0x%02X rn", status);
            goto exit;
        }
    
        printf(" init OK.rn");
    
        /* 出厂前个人化阶段 */
        /* [1] Load configuration:加载配置并锁定配置区(仅执行一次,注意:锁定后无法解锁) */
        status = app_load_configuration();
        if (status != MSE_SUCCESS)
        {
            printf(" APP - Load configuration failed rn");
            goto exit;
        }
        printf(" Load configuration OK.rn");
    
        /* [2] Write Slot Data:生成密钥、写入密钥及应用配套数据,锁定数据区(锁定后无法解锁),前置条件:[1] */
        status = app_write_key();
        if (status != MSE_SUCCESS)
        {
            printf(" APP - Write key failedrn");
            goto exit;
        }
        printf(" Write key OK.rn");
    
        /* 认证阶段 */
        status = generate_device_mac();
        /* [3] 发起认证,前备条件:[0][1][2]*/
        if (status != MSE_SUCCESS)
        {
            printf(" APP - generate device mac failed rn");
            goto exit;
        }
    
        /* [4] 计算Host MAC */
        status = calculate_host_mac();
        if (status != MSE_SUCCESS)
        {
            printf(" APP - calculate host mac failed rn");
            goto exit;
        }
    
        /* [5] 比较认证结果 */
        compare_mac();
    
    exit:
        while (true)
        {
        }
    }