如今,一款新產品剛推出不久,市場上往往就會出現仿冒的產品,給先期研發的企業和個人造成知識產權的侵犯和經濟利益的損害。作為工程師,在產品設計初期應該盡量考慮到產品被抄襲的可能,選擇一款具有良好保密性的單片機并對單片機系統進行加密設計,防止競爭對手的抄襲。 破解單片機程序的方法 對單片機內的程序竊取主要有兩種方法:侵入式和非侵入式。侵入式的方法是破壞芯片的封裝,并利用半導體測試設備、顯微鏡和微定位器等儀器找到芯片內保護熔絲的位置并將其擦除,使其變成未經加密的芯片,然后用編程器將程序讀出,或者直接將探針放在芯片內部總線上讀出存儲器中的程序。非侵入式的方法是利用芯片設計或芯片編程時序中的某些漏洞對芯片進行解密,例如針對早期的AT89C系列芯片在擦除操作時序設計上的漏洞,使用自編程序在擦除加密鎖定位后停止下一步擦除片內程序存儲器數據的操作,從而使加密的單片機變成沒加密似的,然后利用普通編程器就可讀出片內的程序了。 可以看到,使用侵入式的解密方法需要使用昂貴的設備,并且需要花費較長的時間,其解密成本較高;而使用非侵入式的解密方法需要的設備相對較廉價,只要能找出芯片設計中的漏洞就有可能實現解密,但是需要解密者有深厚的專業知識。 圖1:NEC 78K系列單片機的保密功能。 NEC單片機的保密設計 理論上來說,單片機的程序不可能做到百分之百的保密,對單片機程序進行加密只是為了提高破解成本。當一個產品的破解成本高到和自主設計一個相同產品的成本相當的時候,便沒人會有興趣破解此產品。 產品設計中,為了避免增加外圍硬件從而增加產品成本,產品軟件的保密通常主要依靠所選用單片機的保密性來保證,因此選用一款保密性良好的單片機來提高抄襲者的破解成本就顯得尤為重要。NEC(日電電子)在其FLASH型的78K系列單片機中設計了充足的保護措施來保證單片機程序代碼的安全。 通常除了開發者的原因外,單片機程序目標文件的泄露無外乎三個原因:1.量產時程序燒寫過程中目標文件被竊取;2.產品上市后被竊密者拿到,利用侵入式或非侵入式的方法獲取單片機內的目標文件;3.使用BootLoader程序通過串口、CAN接口等進行產品現場升級時應用程序目標文件被竊取。 圖2:量產編程器的加密設置。 量產編程時的程序保密 第三方為NEC設計的量產編程器FL-G03可以支持對8片芯片的同時燒寫。開發工程師使用128位密鑰將原始HEX文件加密,并將該密鑰固化到編程中用于燒寫時的解密,工程師還可在編程器上設置燒寫芯片的數量限制,然后將編程器和加密過的HEX文件提供給程序燒寫人員。這樣避免了其它人員接觸原始HEX文件,且最多只能燒寫設定數量的芯片。 圖3:即使保密位被破壞也無法讀出程序。 防止侵入式和非侵入式的程序竊取 侵入式的破解方法可以將加密過的芯片變成非加密的芯片,然后用編程器讀出程序,當然也可以用探針從芯片內部總線讀取程序,但這樣做的成本相當之高;非侵入式的破解方法最后一般都要通過編程器將程序讀出。NEC的78K系列單片機沒有PROGRAM READ功能,因此無法利用編程器將程序讀出。(注:用編程器給芯片編程時的校驗功能并不是將程序讀出來進行校驗,而是編程器將數據送給芯片,由芯片內核獨立完成與存儲區數據的比較,然后將比較結果返回給編程器)。 圖4:使用加密的目標文件進行現場升級。 產品現場升級時的程序保密 如果單片機程序設計者使用了BootLoader功能,則可以在產品售出后方便地通過串口等通訊口對單片機程序進行升級,但是這也給竊密者留下了可乘之機,新版本的應用程序目標文件有可能被泄露。解決辦法是設計者將應用程序的目標文件按自定義的某種算法進行加密,并將解密算法放在BootLoader程序中。升級的時候BootLoader程序對目標文件進行解密,然后寫入目標FLASH區。這可以避免原始的目標文件泄露出去。 防止芯片程序被意外擦除或改寫 除了上面談到的防止程序被泄露或破解的措施外,78K系列單片機還采取了多項措施來保證程序不會被意外擦除或者改寫。78K系列單片機可以在編程時通過編程軟件對FLASH進行如下安全設置: 1. 禁止全片擦除操作。 2. 禁止塊擦除操作。 3. 禁止寫操作。 4. 禁止改寫boot cluster0區。 這些設置可以禁止通過編程器對芯片進行擦除和寫入操作,但是芯片內的用戶程序仍然可以對FLASH區進行擦除和寫入操作。一旦設置了“禁止全片擦除操作”后,芯片內的程序將不可再被擦除和改寫,此設置也無法再被取消。 各項安全設置與操作命令的關系見表1。 表1: 各項安全設置與操作命令的關系。 結語 NEC的78K系列單片機從多個方面采取措施使得單片機程序的保密性得到加強,尤其它沒有READ命令,無法將程序數據讀出到片外的特點使得其破解成本大大提高,有效地保護設計者的知識產權。 |