百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

大话MCU 内部UID(unique ID)以及使用UID进行芯片加密思考

yuyutoo 2024-10-18 12:10 3 浏览 0 评论

嵌入式系统产品的加密和解密永远是一对矛盾的统一体。这里我们聊聊使用MCU内部UID加密的方案。

首先需要明确的是,没有一种加密是“绝对”可靠的,但是加密手段可以增加非法使用者的解密成本,借此来防止技术被“轻易”盗取。

现在各大厂家 MCU芯片中的绝大部分都内置一串96或128bit唯一标识码【uniqueID】(该值由原厂设定的,不能由用户修改)。

比如ST STM32F30X系列(经典的ARM Cortex M4产品)

兆易创新 GD32VF103系列(炒的火热的RISC-V 32-bit MCU)

Microchip SAM C20/C21 系列(128位唯一标识码,5V ARM Cortex M0+产品)

到底MCU带不带UID,从各自芯片数据手册或参考手册可确认。如果没有明确写明,就表示该芯片没有UID或者说即使相应地址有数据但不保证其唯一性。

上文提到过UID值由原厂设定的,不能由用户修改,因此该UID对用户来讲是只读的,在一些对数据具有唯一性要求、数据加密操作等场合可以派上用场。MCU芯片中的这个UID 是对整串96位数据保证唯一性,如果你截取其中一部分就不保证唯一性了。

下面重点介绍目前手上的STM32F303芯片内部的UID, STM32F3系列UID介绍如下。大致内容就是芯片WAFER的坐标信息、编号信息、产品批号信息等多个数据组合在一起的。

该UID数据的读取,先从STM32F303参考手册中找到UID的地址信息,从相关地址中取出数据,用几条赋值语句即可完成,也可用用HAL库函数进行读取,下面分别列出了两种读取芯片UID的读取方法。

HAL库函数读取UID

#define UID_BASE ((uint32_t)0x1FFFF7ACU)

HAL_GetUIDw0();

直接读取UID值

读取结果如下:

读取得到了芯片UID,下一步便是对芯片进行加密了。比如用户读取UID后通过私有密钥将UID加密之后的信息写入Flash特定地址,例如Flash的最后一个扇区。程序启动时,首先读取芯片UID并通过同样的密钥和算法进行计算后与Flash中的数值进行比较决定是否启动。

芯片UID加密仅仅是一种初级的软件加密方式,另外还有增加外部加密芯片;对程序代码进行密码加密,使程序变成密文等加密方式,欢迎探讨更多的加密方式。

最后顺便提一下,不要把这个UID跟MCU芯片器件ID【DEVICE ID】混为一谈,各大厂家MCU往往还有DEVICE ID,该ID主要包含芯片料号信息和晶圆DIE版本等信息。它可以通过调试接口访问或被用户软件访问。

下图是使用STM32F303 NUCLEO板通过ST-LINK utility工具读取到的STM32F303 DEVICEID的信息。

欢迎公众号“嵌入式杂谈”,获取更多内容!

相关推荐

基于锂离子电池的电池荷电状态 (SOC) 和运行健康状态 (SOH) 估计技术

简介基于锂离子(Li-ion)电池单元的电池组广泛用于各种应用,例如:混合动力汽车(HEV)、电动汽车(EV)、可供日后使用的再生能源储存以及用于各种目的(电网稳定性、调峰和再生能源时移等)的...

深入解析电池充电状态 (SOC) 和运行状态 (SOH) 估计技术

基于锂离子(Li-ion)电池单元的电池组广泛用于各种应用,例如:混合动力汽车(HEV)、电动汽车(EV)、可供日后使用的再生能源储存以及用于各种目的(电网稳定性、调峰和再生能源时移等)的电网...

CBN丨Stocks tumble as global investors brace for Trump's April 2 tariffs

Hieveryone.I’mStephanieLI.Comingupontoday’sprogramUSso-called“reciprocal”tariffsareset...

掌握C#、VB.NET与Web前端,轻松打造工控界面惊艳UI

OpenGL中位图的操作(opengl图像处理)

  OpenGL中位图的操作(glReadPixels,glDrawPixels和glCopyPixels应用举例)。1.BMP文件格式简单介绍  BMP文件是一种像素文件,它保存了一幅图象中所有的...

使用SOLIDWORKS软件中的Draw compare功能比较工程图

在我们的日常工作中,我们经常会重复利用工程图文件。大家也都知道,我们在制作符合我们公司标准的工程图时,花费的时间可能是两个小时也可能是四个小时甚至更多,所以遇到相似的零部件时,我们都会重复利用工程图来...

新手怎么学cdr之将照片变线条的三种方法

作为强大的平面设计软件,CorelDRAW为用户提供了多种将照片转为线稿的方法,其中包括轮廓描摹、轮廓图滤镜和线条图解等用于查找位图边缘的功能,使用这些功能可以快速的将图片转换为单线条图形。本文结合实...

Android开发学习之路-带文字的图片分享

有用过微信分享SDK的都应该知道,微信朋友圈的时候是不能同时分享图片和文字的,只要有缩略图,那么文字就不会生效。那么问题就来了,如果我们想把APP内的某些内容连带图片一起微信,是不是没办法了呢?再想想...

canvas是什么?前端中canvas 性能为何会比 html/css 好?

更底层的操作(DirectPixelManipulation):Canvas本质上是一个...

单精度和双精度浮点数(单精度浮点数和双精度浮点数有什么区别)

单精度和双精度是我们在mysql中定义数据时候的两个常见类型,那么单精度和双精度数据有什么区别,我们今天就来研究下。单精度...

博途系统如何做浮点数的四舍五入呢?

根据工况而已,仪表数据都是浮点数,但浮点数往往都是小数点后好多位,但我们上位机都用S999.99,也就是有符号的小数点保留两位。这里问题就来了,有时在上位机上明明看到液位到了,为什么没有动作呢,这里往...

「创新班」007. float()函数 -- 把数字字符串(或整数)转为浮点数

一.知识精讲:7.1输入两个浮点数,求和并输出num1=float(input(‘请输入一个数:’))num2=float(input(‘请输入另一个数:’))sum=num1+n...

JAVA中的浮点数与二进制(java中浮点数的定义)

先来看一段简单的代码publicstaticvoidmain(String[]args){    System.out.println(0....

C语言fabs函数详解:浮点数绝对值的「数学净化器」

核心定位fabs是C语言中计算浮点数绝对值的「数学净化器」,它能将任意浮点数转换为非负数。就像一位净化器,无论输入是正是负,它都能将其「净化」为非负值!函数原型与参数...

详解Javascript中被你忽略的浮点数运算的坑,来学习吧

前言在讲解本篇文章的内容开始之前,我们先来掌握以下一些知识点。Javascript中的数字都是双精度的浮点数。Javascript中的整数并不是一个独立的数据类型,而是浮点数的一个子集。Javascr...

取消回复欢迎 发表评论: