昨天寫(xiě)了一種常用的單片機(jī)加密手段,受到很多電子同行的反響,也引起來(lái)很多此類話題討論,是我沒(méi)想到的。由于現(xiàn)在的公眾號(hào)還沒(méi)開(kāi)通原創(chuàng)功能,沒(méi)辦法針對(duì)同學(xué)們的提問(wèn)進(jìn)行解答,而且內(nèi)容也比較復(fù)雜,所以我單獨(dú)再開(kāi)一章來(lái)講解關(guān)于單片機(jī)加密方面,大家普遍比較關(guān)心的問(wèn)題。
第一:昨天的那種常用方法,有部分同學(xué)擔(dān)心量產(chǎn)效率問(wèn)題。效率肯定是影響的,既要保證安全性,必然要犧牲少許效率,但是影響遠(yuǎn)遠(yuǎn)比同學(xué)們想象的影響低。
其實(shí)就是燒寫(xiě)兩次程序,首先,寫(xiě)一個(gè)讀取芯片ID,然后根據(jù)我們?cè)O(shè)計(jì)的算法計(jì)算出來(lái)數(shù)據(jù),并且寫(xiě)入到EEPROM里數(shù)據(jù)的這樣一個(gè)程序1,我們的功能程序作為程序2。那燒寫(xiě)程序時(shí),我們先燒寫(xiě)程序1進(jìn)入單片機(jī),固話好我們的數(shù)據(jù)后,再然后燒寫(xiě)程序2到單片機(jī);或者采用流水線式工作,工作人員甲專門(mén)燒寫(xiě)程序1來(lái)一遍,工作人員乙燒寫(xiě)程序2來(lái)一遍。程序1的功能其實(shí)非常簡(jiǎn)單,因此燒寫(xiě)起來(lái)肯定很快,不管如何影響到一定的效率,但是影響是非常小的。
第二:昨天的那種方法,就可以確保萬(wàn)無(wú)一失了么?當(dāng)然不是。這個(gè)世界上就不存在絕對(duì)安全的東西,就看付出多大的代價(jià)。據(jù)稱STM32的某些型號(hào)內(nèi)部的96位的ID是燒寫(xiě)在system區(qū)域,而破解者找到了原廠的調(diào)試工具,可以直接燒錄改變這個(gè)ID。在利益面前,總是會(huì)有人去做這種事情,甚至說(shuō)這種原廠調(diào)試工具的泄露,不排除是他們自己人做的。
那我們電子工程師的勞動(dòng)成果就這么白白竊取,我們無(wú)能為力么?當(dāng)然不是了。安全和攻擊一直在較量著,我們只需要多方面增強(qiáng)我們產(chǎn)品的安全性,讓破解著花費(fèi)的代價(jià),超過(guò)了重新開(kāi)發(fā)出來(lái)花費(fèi)的代價(jià),那就可以讓破解著直接望而卻步了。我們一個(gè)產(chǎn)品可以采用多層加密的手段來(lái)做,這樣就可以盡可能的加大破解者的難度,提高我們產(chǎn)品的安全性能。
------------------------------------------------------------------
下面我給大家介紹幾種安全加密方面的方法,由于部分方法詳細(xì)講解比較復(fù)雜,我只是簡(jiǎn)單給大家介紹一下原理,先讓各位同學(xué)漲一下見(jiàn)識(shí),讓你知道有這么回事。當(dāng)你真的要去采用這種方法去加密的時(shí)候,你再專門(mén)到網(wǎng)絡(luò)上查找詳細(xì)辦法的資料進(jìn)行學(xué)習(xí)研究,最終應(yīng)用在你的產(chǎn)品上。
一、打磨芯片。如果我們的用量比較少,幾百片的應(yīng)用,那產(chǎn)品做好以后,我們只需要用砂紙把芯片上的絲印給磨掉就行了,這個(gè)事情比較麻煩,只適合小批量的產(chǎn)品來(lái)做。當(dāng)?shù)綆浊臅r(shí)候,你采購(gòu)芯片的時(shí)候,可以讓一些代理商幫你用激光打掉或者修改芯片上的絲印,這種方法一般會(huì)略微收點(diǎn)費(fèi)用,如果你覺(jué)得劃算就可以做。打掉芯片型號(hào)可以增加破解者難度,他需要猜測(cè)所用的芯片型號(hào),修改芯片絲印可以混淆他的破解方向。當(dāng)你的用量非常大的時(shí)候,我想你有資本讓芯片經(jīng)銷商或者廠家?guī)湍阈薷慕z印。
二、加密芯片。市面上有一些專門(mén)做加密的公司,他們的加密算法都是非常專業(yè)的,起碼比我們做電子產(chǎn)品開(kāi)發(fā)的人專業(yè)的多,我們可以購(gòu)買加密芯片來(lái)進(jìn)行加密,可以盡可能選擇偏門(mén)并且價(jià)格不貴的加密芯片來(lái)進(jìn)行加密,同樣芯片要磨掉絲印,這樣再次提高你的產(chǎn)品加密等級(jí)。
三、自己做一個(gè)假的“唯一ID”。方法和昨天的方法類似,燒寫(xiě)方法和上邊講的方法一樣,只需要我們燒錄程序1的時(shí)候,每燒錄一個(gè)設(shè)備,這個(gè)特定的數(shù)據(jù)加1一次燒寫(xiě)到下個(gè)設(shè)備中,這樣我們的設(shè)備就帶了唯一ID了。同時(shí)根據(jù)這個(gè)“假唯一ID”生成一個(gè)數(shù)字,也存在EEPROM另外一個(gè)地方,其他的理論和昨天的唯一ID類似,這樣我們的設(shè)備就自動(dòng)帶了我們自己設(shè)計(jì)的唯一ID。這個(gè)是什么意思呢?我們?cè)谖覀儼遄由系拇鎯?chǔ)器,或者是單片機(jī)的內(nèi)部存儲(chǔ)器的一個(gè)特定地址,比如內(nèi)部存儲(chǔ)器0x00001234這個(gè)地址,這地址只有我們開(kāi)發(fā)者知道,我們?cè)谶@里藏了一個(gè)唯一的ID。當(dāng)上電程序運(yùn)行的時(shí)候,可以來(lái)讀取這個(gè)“假唯一ID”進(jìn)行計(jì)算,計(jì)算完了結(jié)果和我們的存儲(chǔ)在別處的預(yù)先數(shù)據(jù)進(jìn)行比較,比較結(jié)果,結(jié)果一樣才運(yùn)行程序。
當(dāng)然,這個(gè)方法和真實(shí)的唯一ID同時(shí)使用,這個(gè)時(shí)候他即使破解了并且改變了單片機(jī)內(nèi)部的硬件唯一ID,那么程序他依然不能用起來(lái)我們的設(shè)備。這個(gè)方法看起來(lái)簡(jiǎn)單,但是破解難度極大,理由是破解者很難猜測(cè)到你居然還自己加了一個(gè)唯一ID,他想不到這一層,他就難以找到正確的破解思路,而且這個(gè)和真實(shí)唯一ID一起運(yùn)用,可以在上邊講的程序1里一次性完成,程序1的程序復(fù)雜度沒(méi)增加多少,但是加密性卻增加了很多。
四、利用偏門(mén)的價(jià)格便宜的單片機(jī),這種單片機(jī)往往知道的人少,并且打磨掉絲印的前提下,用擴(kuò)頻碼進(jìn)行通信校驗(yàn)加密。這個(gè)用法比較復(fù)雜,需要了解擴(kuò)頻碼的人來(lái)用,而且你得找一個(gè)很冷門(mén)的不容易被破解掉的小芯片作為自己?jiǎn)为?dú)的加密芯片,偶爾用在FPGA的加密中,因?yàn)镕PGA自己不帶程序空間。擴(kuò)頻序列是這樣一種序列,他是一種算法,只要你給他一個(gè)初值,按照他的算法去計(jì)算,他可以通過(guò)賦給他的初值,產(chǎn)生2的n次方個(gè)數(shù)字后,才能再次重復(fù),其他的不屬于擴(kuò)頻算法的數(shù)字,給了初值后,很快就會(huì)重復(fù),這就是擴(kuò)頻碼的特殊性。
那好了,我們找一個(gè)n是50的這樣一個(gè)編碼,這樣可以產(chǎn)生2的50次方個(gè)數(shù)字。系統(tǒng)上電后,初始化完畢,產(chǎn)生一個(gè)隨機(jī)數(shù)字,這個(gè)隨機(jī)數(shù)字主單片機(jī)和加密單片機(jī)共同獲取,這個(gè)冷門(mén)的單片機(jī)就以1秒一個(gè)數(shù)字的速度,以這個(gè)隨機(jī)數(shù)字為基準(zhǔn)開(kāi)始產(chǎn)生擴(kuò)頻碼,發(fā)送給主芯片進(jìn)行校驗(yàn)。主芯片1秒校驗(yàn)一次,正確則繼續(xù)工作,不正確停止工作。如果不是把主單片機(jī)和加密單片機(jī)同時(shí)破解的前提下,要把擴(kuò)頻加密的這組碼字給完全讀下來(lái)需要2的50次方秒,大概需要幾千年才能完全徹底分析出來(lái)。
加密手段其實(shí)也有很多,我所講到的只是我所了解的電子工程師一些簡(jiǎn)單實(shí)用的常規(guī)手段,更為復(fù)雜的我也不懂,得咨詢專業(yè)的加密解密的工作人員。
--------------------------------------------------------
這里再多講兩句,有的工程師給別人代開(kāi)發(fā)產(chǎn)品,開(kāi)發(fā)個(gè)樣品什么的,簡(jiǎn)單的東西用不到這么復(fù)雜的手段,但是又得給對(duì)方做小批量實(shí)驗(yàn),怎么辦呢?簡(jiǎn)單實(shí)用的辦法教大家一招,你只需要在程序里加一個(gè)運(yùn)行次數(shù)限制,或者是運(yùn)行時(shí)間限制,這樣就可以讓對(duì)方實(shí)驗(yàn),實(shí)驗(yàn)沒(méi)問(wèn)題了,給錢(qián)了,你就可以去掉這個(gè)限制,這是保護(hù)我們工程師成果的一個(gè)簡(jiǎn)單手段。這里就不用擔(dān)心他們?cè)偃テ平饬?,再去破解還不如直接給你開(kāi)發(fā)費(fèi)來(lái)的便宜。
--------------------------------------------------------------
任何加密手段都不是絕對(duì)加密的,退一萬(wàn)步講,即使你的加密系統(tǒng)再完善,那如果你的員工把你的加密手段泄密出去,那也一樣被破解。所以我們能做的就是多層次,多方位做加密,讓破解者破解起來(lái)無(wú)比困難,覺(jué)得破解不劃算,還不如購(gòu)買我們的產(chǎn)品或者重新開(kāi)發(fā)來(lái)的劃算,這個(gè)時(shí)候我們的目的就達(dá)到了。
聯(lián)系客服