ZDP14x0系列芯片是内置开源GUI引擎的图像显示专用驱动芯片,在实际产品中常常需要加密保护,防止应用程序被读取和盗用,本文介绍如何实现UID加密安全启动。ZDP14x0系列芯片是内置开源GUI引擎的图像显示专用驱动芯片,在实际产品开发中需要加密保护,防止应用程序被读取和盗用,本文将介绍如何实现UID加密安全启动。
ZDP14x0系列芯片具有64位全球唯一UID,基于UID实现加密可以保证程序移植到另一个芯片无法运行,详细加密启动实现原理如图1。
芯片上电运行,先从加密文件中读取加密数据,然后将加密数据与初始化数据对比是否一致。若一致,表明程序是首次运行,则读取芯片UID并进行加密计算,并将加密数据写入加密文件覆盖初始化数据。若不一致,表明程序已运行过,需要读取芯片UID数据进行加密运算得到加密数据,然后与加密文件的数据进行对比。若数据一致,证明程序与芯片绑定正常,UI正常运行;否则程序异常,报警不运行UI。图1 UID加密原理
了解了UID加密安全启动原理,接下来看看UID的接口函数。ZDP14x0 UID分为64位全球唯一UID和64位用户可自定义UID。UID接口函数包括全球UID获取接口、自定义UID获取接口、自定义UID设置接口,需要注意的是自定义UID只能设置一次,锁定后无法修改。
图2 UID接口函数
3个UID接口函数的入口参数都是chip_uid_t类型的结构体,其定义如图3。
图3 chip_uid_t类型结构体
了解了UID加密安全启动原理和UID函数接口,接下来看看安全启动程序的实现,详细程序如图4。
图4 UID加密安全启动程序
程序开始部分定义了初始化数据,加密文件存放的路径,以及一些局部变量。然后从指定目录读取加密文件数据,若文件读取失败则报警提示不往下运行,读取成功则对比是否和初始化数据一致。若与初始化数据一致,则调用加密文件写接口函数,读取UID进行加密并写入加密文件。若与初始化数据不一致,则调用加密文件校验接口函数,与UID加密数据进行对比校验。加密文件写接口函数实现如图5,调用全球唯一UID读取接口读取UID,读取成功后做加密计算,然后将加密数据写入到加密文件。操作成功则继续运行,否则报警提示。加密文件校验接口函数实现如图6,调用全球唯一UID读取接口读取UID,读取成功后做加密计算,然后与加密文件数据对比。数据一致则继续运行,否则报警提示。图6 加密文件校验程序
本UID加密安全启动示例已上传到gitee,在资料中的路径为hmi_zdp14x0\03.UI_build_project\user_projects\ uid_secret_boot_demo,欢迎下载体验。HMI-ZDP14X0D串口屏开发套件资料持续更新中,需要获取最新资料,可关注如下链接:https://gitee.com/zlgmcuopen/hmi_zdp14x0。如需购买评估套件或与我们交流,可点击下面链接购买硬件或加入技术交流群与我们交流。HMI-ZDP14x0D开发套件已在微商城上架,点击链接即可购买。如需加入技术交流群,请添加客服微信,我们将邀请您进群,与志同道合的朋友交流,并有专业技术人员为您答疑解惑。