如何獲取STM32 MCU的唯一ID

2021-08-22 08:29:47 字數 1386 閱讀 2747

前段時間由於應用需要對產品授權進行限制,所以研究了一下有關stm32 mcu的唯一id的資料,並最終利用它實現了我們的目標。

1、基本描述

在資料中對其特性的描述是:96 位的唯一裝置識別符號提供了乙個對於任何裝置和任何上下文都唯一的參考號碼。使用者永遠不能改變這些位。96 位的唯一裝置識別符號也可以以單位元組/半字/字等不同方式讀取,然後使用自定義演算法連線起來。

2、獲取唯一id

前面我們對唯一id做了簡單的描述,並且得到了其儲存位址,接下來我們說以說如何得到這個id。

前面已經描述過唯一id可以按位元組、半字、字等方式讀取。唯一id是乙個96位的資訊串,所以按字讀取就是3個字,按半字讀取就是6個,按位元組讀取就是12個。本質上沒有區別,在這裡我們按字讀取。

1 /*定義stm32 mcu的型別*/

2 typedef enum mcutypedef;

14 15

16 uint32_t idaddr=; /*stm32h7唯一id起始位址*/

26

27 /*獲取mcu的唯一id*/

28 void getstm32mcuid(uint32_t *id,mcutypedef type)

29 36 }

3、使用唯一id我們得到唯一id當然是為了使用它,前面在st資料中描述了三個使用方式。我們在這裡來使用它實現軟體許可權的限制。那麼如何用唯一id來實現軟體執行許可權的限制呢?我們說一說思路:

首先,我們需要指定乙個flash位址,至於於位址空間的大小則與我們xu要儲存的資訊有關,一般都不會太長。例如,我們使用md5來生成加密資訊,則最多需要16個位元組的儲存空間;如果我們使用sha1來作為生成演算法,則最多需要20個位元組的空間。當然,我們也可以選取其中的一段或幾段。不管選用多大的空間都需要將其清零,即初始化為0xffffffff。

接下來再程式執行前讀取前面指定的位址並讀取其值,並判斷是否全部為0xffffffff,即判斷程式是否第一次執行。如果是,那麼就獲取唯一id並作相應的處理,然後將資訊寫入前面的位址中。

如果不是第一次執行,則讀取指定位址的值,並用同樣的演算法處理唯一id。然後比較儲存的資訊與計算的資訊是否一致,一致則啟動程式執行,不一致則終止執行。

如果有人使用工具讀出flash內容時,因為改制定的位址已經被寫入了資訊,所以如果把讀出的檔案再燒到其它mcu晶元,因唯一id不同所以資訊完全不符程式就不會執行。從而實現了對程式許可權的限制。

怎樣獲取STM32MCU的唯一ID

每個stm32mcu設計中都有唯一的id 96位 每個id都具備有不可修改和唯一性,這一點在基本的程式防解密上很有效果,id結合加密的程式可以有效增加破解的難度和成本。每款stm32的儲存器位址不一樣,不同的微控制器型號96位的id儲存位置不一樣。這個96位的唯一身份標識,可以以位元組 8位 為單位...

如何獲取STM32的裝置唯一ID

在資料中對其特性的描述是 96 位的唯一裝置識別符號提供了乙個對於任何裝置和任何上下文都唯一的參考號碼。使用者永遠不能改變這些位。96 位的唯一裝置識別符號也可以以單位元組 半字 字等不同方式讀取,然後使用自定義演算法連線起來。測試demo如下 獲取產品唯一id ifdef stm32f00x h ...

STM32讀取MCU唯一ID和flash資訊

1 基本描述 用作序列號 例如 usb 字串序列號或其它終端應用程式 在對內部 flash 進行程式設計前將唯一 id 與軟體加密原語和協議結合使用時用作安全金鑰以提高 flash 中 的安全性 啟用安全自舉過程等 在資料中對其特性的描述是 96 位的唯一裝置識別符號提供了乙個對於任何裝置和任何上下...