大话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...
- 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...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
推荐7个模板代码和其他游戏源码下载的网址
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
-
- 基于锂离子电池的电池荷电状态 (SOC) 和运行健康状态 (SOH) 估计技术
- 深入解析电池充电状态 (SOC) 和运行状态 (SOH) 估计技术
- CBN丨Stocks tumble as global investors brace for Trump's April 2 tariffs
- 掌握C#、VB.NET与Web前端,轻松打造工控界面惊艳UI
- OpenGL中位图的操作(opengl图像处理)
- 使用SOLIDWORKS软件中的Draw compare功能比较工程图
- 新手怎么学cdr之将照片变线条的三种方法
- Android开发学习之路-带文字的图片分享
- canvas是什么?前端中canvas 性能为何会比 html/css 好?
- 单精度和双精度浮点数(单精度浮点数和双精度浮点数有什么区别)
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)