UID加密安全启动原理分析

描述

本文导读

ZDP14x0系列芯片是内置开源GUI引擎的图像显示专用驱动芯片,在实际产品开发中需要加密保护,防止应用程序被读取和盗用,本文将介绍如何实现UID加密安全启动。

UID加密安全启动原理

ZDP14x0系列芯片具有64位全球唯一UID,基于UID实现加密可以保证程序移植到另一个芯片无法运行,详细加密启动实现原理如图1。

芯片上电运行,先从加密文件中读取加密数据,然后将加密数据与初始化数据对比是否一致。若一致,表明程序是首次运行,则读取芯片UID并进行加密计算,并将加密数据写入加密文件覆盖初始化数据。若不一致,表明程序已运行过,需要读取芯片UID数据进行加密运算得到加密数据,然后与加密文件的数据进行对比。若数据一致,证明程序与芯片绑定正常,UI正常运行;否则程序异常,报警不运行UI。

 

驱动芯片

 

图1 UID加密原理

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加密安全启动原理和UID函数接口,接下来看看安全启动程序的实现,详细程序如图4。

 

驱动芯片

 

图4 UID加密安全启动程序

程序开始部分定义了初始化数据,加密文件存放的路径,以及一些局部变量。然后从指定目录读取加密文件数据,若文件读取失败则报警提示不往下运行,读取成功则对比是否和初始化数据一致。若与初始化数据一致,则调用加密文件写接口函数,读取UID进行加密并写入加密文件。若与初始化数据不一致,则调用加密文件校验接口函数,与UID加密数据进行对比校验。 加密文件写接口函数实现如图5,调用全球唯一UID读取接口读取UID,读取成功后做加密计算,然后将加密数据写入到加密文件。操作成功则继续运行,否则报警提示。

 

驱动芯片

 

图5 UID加密安全启动程序

加密文件校验接口函数实现如图6,调用全球唯一UID读取接口读取UID,读取成功后做加密计算,然后与加密文件数据对比。数据一致则继续运行,否则报警提示。

 

驱动芯片

 

图6 加密文件校验程序

UID加密Demo示例

本UID加密安全启动示例已上传到gitee,在资料中的路径为hmi_zdp14x0�3.UI_build_projectuser_projects uid_secret_boot_demo,欢迎下载体验。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分