天天看點

stm32f4xx 加密

文章參考http://www.61ic.com/Technology/embed/201311/50853.html,

一、ID擷取

34 裝置電子簽名

電子簽名存儲在 Flash 區。可以使用 JTAG/SWD 或 CPU 對其進行讀取。它包含出廠前程式設計 的辨別資料,這些辨別資料允許使用者固件或其它外部裝置将其接口與 STM32F4xx 微控制器 的特性自動比對。

34.1 唯一裝置 ID 寄存器(96 位)

唯一裝置辨別符最适合:

● 用作序列号(例如 USB 字元串序列号或其它終端應用程式)

● 在對内部 Flash 進行程式設計前将唯一 ID 與軟體加密原語和協定結合使用時用作安全密鑰以

提高 Flash 中代碼的安全性

● 激活安全自舉過程等

96 位的唯一裝置辨別符提供了一個對于任何裝置和任何上下文都唯一的參考号碼。使用者永遠 不能改變這些位。

96 位的唯一裝置辨別符也可以以單位元組/半字/字等不同方式讀取,然後使用自定義算法連接配接 起來。

基址:0x1FFF 7A10

stm32f4xx 加密
stm32f4xx 加密

程式:

static u32 Lock_Code;

void GetLockCode(void)
{
 //擷取CPU唯一ID
 CpuID[0]=*(vu32*)(0x1fff7a10);
 CpuID[1]=*(vu32*)(0x1fff7a14);
 CpuID[2]=*(vu32*)(0x1fff7a18);
 printf("\n\n %x  %x  %x\n\n",CpuID[2],CpuID[1],CpuID[0]);
 //加密算法,很簡單的加密算法
 Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
}
           

運作結果:

1)keil  memroy視窗顯示 ID位址處資料:

stm32f4xx 加密

2)序列槽列印:

stm32f4xx 加密

由上可知:該stm32晶片的96位 iD号  0x39353633      32334712   0025002a 

二、加密措施

簡單方法: 主程式運作前,對比讀取ID号 與設定ID是否一緻。問題:每個stm32都需要單獨配置ID比較值.如何解決?

參考:http://www.61ic.com/Technology/embed/201311/50853.html,待完善。