找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3950|回復(fù): 13
收起左側(cè)

STM32單片機(jī)利用唯一ID加密代碼的量產(chǎn)方案思路

  [復(fù)制鏈接]
ID:997026 發(fā)表于 2023-6-6 19:57 | 顯示全部樓層 |閱讀模式
大家好,

看到網(wǎng)上很多利用唯一ID加密代碼的方案,大部分都是要先知道芯片的ID,然后在代碼中與讀出的ID對比,如果一致就往下執(zhí)行,不一致則不執(zhí)行。
如果是單個(gè)芯片自己玩玩還可以,如果涉及到大批量量產(chǎn),比如有1萬片需要生產(chǎn),我不可能提前去讀出每一片的ID吧,工作量太大了。

有沒有一種方法,可以通過軟件實(shí)現(xiàn),量產(chǎn)時(shí)直接燒錄代碼就行了,然后由代碼去自動(dòng)完成內(nèi)部ID的讀取和比對,并且可以實(shí)現(xiàn)被人復(fù)制代碼到其他芯片上無法使用的方案?

希望大神提供思路。

提前感謝
回復(fù)

使用道具 舉報(bào)

ID:879348 發(fā)表于 2023-6-7 09:39 | 顯示全部樓層
在燒錄文件中沒有使用的區(qū)域加入一個(gè)密碼,第一次開機(jī)讀取正確密碼,讀取ID重新加密數(shù)組保存,然后清除密碼以后只能讀ID和加密數(shù)組對比,不正確就不執(zhí)行,不要直接用ID比對,不加密作用不大
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2023-6-7 10:50 | 顯示全部樓層
將合法的ID做個(gè)結(jié)合A,將結(jié)合告知STM32單片機(jī)。這是唯一的方式!
你只能在【A如何做?如何告知于STM32單片機(jī)】上想辦法。不要有其它幻想,不會出奇跡的。
通常的做法,不用ID碼!改用EPC碼!
道理很簡單,ID不可改動(dòng),也即A是既定的,STM32沒有機(jī)動(dòng)權(quán)!
而EPC是可能改動(dòng)的,只要EPC碼符合某種約定就可以達(dá)成樓主的目的。至于如何約定涉及機(jī)密,需要技術(shù)咨詢。
回復(fù)

使用道具 舉報(bào)

ID:68189 發(fā)表于 2023-6-7 10:59 | 顯示全部樓層
wufa1986 發(fā)表于 2023-6-7 09:39
在燒錄文件中沒有使用的區(qū)域加入一個(gè)密碼,第一次開機(jī)讀取正確密碼,讀取ID重新加密數(shù)組保存,然后清除密碼 ...

這個(gè)燒錄文件,,,隨便用,,,,沒有意義。
回復(fù)

使用道具 舉報(bào)

ID:1082543 發(fā)表于 2023-6-7 11:35 | 顯示全部樓層
wpppmlah 發(fā)表于 2023-6-7 10:59
這個(gè)燒錄文件,,,隨便用,,,,沒有意義。

那這一段可以留著它,還是去掉啊哥
回復(fù)

使用道具 舉報(bào)

ID:68189 發(fā)表于 2023-6-7 13:42 | 顯示全部樓層
燒錄器讀取芯片ID,計(jì)算出密碼,存儲到固件一個(gè)特定的區(qū)。再燒錄。這樣燒錄器是關(guān)鍵。。。有這樣的燒錄器嗎,肯定有的。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2023-6-7 23:08 | 顯示全部樓層
如果你能控制燒錄時(shí)代碼不會被泄露,那么沙發(fā)的辦法是最理想的。
回復(fù)

使用道具 舉報(bào)

ID:879348 發(fā)表于 2023-6-8 08:19 | 顯示全部樓層
wpppmlah 發(fā)表于 2023-6-7 10:59
這個(gè)燒錄文件,,,隨便用,,,,沒有意義。

那你想燒錄的人都沒權(quán)限,那只能從其他方面下手了,反正道理都是一樣的,就是要有一個(gè)步驟激活讀取ID的程序,這個(gè)東西可以在燒錄時(shí)加入標(biāo)記,可以按鍵輸入密碼,可以U盤激活,可以無線激活,甚至聯(lián)網(wǎng)激活,這些原理都是一樣的
回復(fù)

使用道具 舉報(bào)

ID:962286 發(fā)表于 2023-6-8 10:07 | 顯示全部樓層
成熟的批量燒錄器是有UID加密功能的。通常它要填這幾個(gè)參數(shù):
1. 存放加密值地址,暫時(shí)把這個(gè)地址叫做Addr;
2. 加密的一個(gè)系數(shù),暫時(shí)把它叫做Val;
3. UID的排列號。通常UID是12個(gè)字節(jié),將這個(gè)原生的12個(gè)字節(jié)進(jìn)行打亂,得到一個(gè)新的d_UID;
4. 公式號,燒錄器提供有幾百種公式。它就是將:Val,d_UID(UID經(jīng)過自定義打亂)帶入然后算出加密值X,最后燒錄器再Addr;

程序的操作:
1. 讀出UID,按照自己的定義打亂UID,得到d_UID;
2. 自己定義一個(gè)常數(shù)Val;
3. 選一個(gè)燒錄器廠家提供的公式(要記住公式號),然后將d_UID和Val帶入,得出加密值Y;
4. 讀取燒錄器設(shè)置的存加密值X的地址Addr的值,對比加密值X和自己算出來的加密值Y是否相等,如果相等,就執(zhí)行程序,如果不相等就直接while(1);

這種加密方式要破解,太難還是挺大的。
回復(fù)

使用道具 舉報(bào)

ID:962286 發(fā)表于 2023-6-8 10:12 | 顯示全部樓層
wpppmlah 發(fā)表于 2023-6-7 13:42
燒錄器讀取芯片ID,計(jì)算出密碼,存儲到固件一個(gè)特定的區(qū)。再燒錄。這樣燒錄器是關(guān)鍵。。。有這樣的燒錄器嗎 ...

你說的就是正解!有這個(gè)功能的燒錄器。
回復(fù)

使用道具 舉報(bào)

ID:74687 發(fā)表于 2023-12-15 10:09 | 顯示全部樓層
一種思路,定義個(gè)static const 變量,比如值為0xffeeaaCC,燒錄后第一次運(yùn)行,初始化的時(shí)候進(jìn)行這個(gè)值的判斷,如果是這個(gè)值,那么讀取芯片ID并加密,通過修改flash區(qū)域?qū)⑦@個(gè)值改為ID加密后的數(shù)據(jù)。

后面運(yùn)行的時(shí)候,初始化的時(shí)候?qū)@個(gè)值進(jìn)行判斷,是否是芯片ID加密后的數(shù)據(jù),如果不是清空FLASH區(qū)域,或者進(jìn)行其他操作。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2023-12-15 14:17 | 顯示全部樓層
MCU_FANS 發(fā)表于 2023-6-8 10:07
成熟的批量燒錄器是有UID加密功能的。通常它要填這幾個(gè)參數(shù):
1. 存放加密值地址,暫時(shí)把這個(gè)地址叫做Addr ...

你這辦法跟沙發(fā)的說法沒有任何不同之處。關(guān)鍵是燒錄器無法讀UID并修改燒寫文件那么只能用沙發(fā)的辦法。
回復(fù)

使用道具 舉報(bào)

ID:382632 發(fā)表于 2024-2-16 18:11 | 顯示全部樓層
請問你后面怎么做到
回復(fù)

使用道具 舉報(bào)

ID:1093268 發(fā)表于 2024-2-18 16:07 | 顯示全部樓層
Hephaestus 發(fā)表于 2023-12-15 14:17
你這辦法跟沙發(fā)的說法沒有任何不同之處。關(guān)鍵是燒錄器無法讀UID并修改燒寫文件那么只能用沙發(fā)的辦法。

比如創(chuàng)芯工坊、軒微這種專門做第三方燒錄器的,都有這個(gè)功能,用了好多年了。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表