文章參考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
程式:
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位址處資料:
2)序列槽列印:
由上可知:該stm32晶片的96位 iD号 0x39353633 32334712 0025002a
二、加密措施
簡單方法: 主程式運作前,對比讀取ID号 與設定ID是否一緻。問題:每個stm32都需要單獨配置ID比較值.如何解決?
參考:http://www.61ic.com/Technology/embed/201311/50853.html,待完善。