目前市面上很多防抄板加密方案都是基于加密芯片的安全存儲和密文通訊來(lái)實(shí)現對主MCU方案的保護。比如把主MCU用到的一些參數、配置信息等存儲在加密芯片里面,然后通過(guò)芯片的ID、隨機數R等因子使用加密秘鑰Key計算臨時(shí)過(guò)程秘鑰Key’,再使用臨時(shí)過(guò)程秘鑰Key’對數據做加解密和密文通訊,這樣來(lái)做到每一顆芯片、每一次通訊的加密數據都是不一樣,防止數據在通訊線(xiàn)路上被破解。 如上圖,主MCU函數FUNC調用是的一些關(guān)鍵參數或數據Data沒(méi)有存儲在主MCU中,而是存儲在加密芯片里,主MCU要正確運行函數FUNC需要使用到加密芯片里的Data數據,這就需要先從加密芯片將Data數據讀取到主MCU。程序員為了增加加密方案可靠度,設計成讓主MCU的芯片序列號ID1、產(chǎn)生的隨機數R1和加密芯片的芯片序列號ID2、產(chǎn)生的隨機數R2參與計算臨時(shí)過(guò)程秘鑰,加密芯片使用秘鑰Key對(ID1⊕RAND1⊕ID2⊕RAND2)這些因子運算得到臨時(shí)過(guò)程秘鑰Key’,再使用Key’對數據Data做加密得到密文數據Data’。主MCU在收到密文數據Data’和ID2和R2后,使用同樣的方法計算得到臨時(shí)過(guò)程秘鑰Key’,在使用Key’對密文數據Data’解密得到明文數據Data。主MCU的FUNC調用Data后程序就能正常使用了。 上述加密方案貌似安全可靠,但實(shí)際上對于經(jīng)驗豐富的黑客來(lái)說(shuō)破解難度不大。 首先我們分析該方案最重要的技術(shù)點(diǎn)就是加解密使用的臨時(shí)秘鑰的因子由主MCU芯片和加密芯片的雙方的ID和隨機數參與,使得每次通訊線(xiàn)路上的密文都是變化的。但是主MCU反匯編程序和ID1、R1、Data’、ID2、R2還是很容易得到的,那么只要我們想辦法讓主MCU密文讀數據時(shí)固定發(fā)ID1和R1就行了,這時(shí)主MCU解密假加密芯片回的固定密文數據Data’是可以得到正確明文數據Data的。 實(shí)現上述破解方式的前提條件是主MCU的程序BIN或HEX碼是通過(guò)破解可以得到的,目前主流大多數MCU都是可以破解的,有很多專(zhuān)業(yè)的公司或團體做這方面的服務(wù)。拿到破解得到的BIN或HEX碼后,接下來(lái)我們分兩步走來(lái)實(shí)現破解主MCU和加密芯片的聯(lián)動(dòng)的整體加密方案,分別是固定主MCU的ID1和隨機數R1。下面以STM32來(lái)模擬解析整個(gè)破解過(guò)程。 芯片的唯一ID一般都是存儲在一個(gè)固定地址上連續存放的,知道芯片型號后這個(gè)ID1的存放地址很容易得到,我們在HEX碼中很容易得到這個(gè)地址。比如STM32的UID地址在0x1FFFF7E8(小端模式),這時(shí)我們在HEX碼中搜索E8F7FF1F(大端模式),如果找不到,可能是因為編譯優(yōu)化了,可以嘗試搜索高3字節F7FF1F或其中幾個(gè)字節,很容易就找到這個(gè)關(guān)鍵字,這時(shí)你只需要把HEX碼這個(gè)位置的UID地址值改成你的設定的Flash地址值0x00005000,再在這個(gè)地址上寫(xiě)上你的ID(比如1122334455667788)就能實(shí)現你想要的ID1值了。如下圖: 固定隨機數相對于ID有些難度,如果有隨機數發(fā)生器,那么把隨機數發(fā)生器產(chǎn)生隨機數值的地址改成你的固定地址,方法可以完全參照上面固定ID值得方法。如果沒(méi)有隨機數發(fā)生器,無(wú)非也是使用AC、DC等值作為因子,然后配合srand產(chǎn)生隨機數,想辦法在產(chǎn)生隨機數前把這些因子固定,那么主MCU的隨機數也可以做到的特定時(shí)間特定的代碼處產(chǎn)生的隨機數也是固定值。這個(gè)需要破解者有一定的反匯編能力,想辦法找到這些作為隨機數發(fā)生因子寄存器,用上述一樣的方法把這些調用的地方改成你的固定的Flash地址,并在這個(gè)地址上寫(xiě)上你的目標值。如下產(chǎn)生隨機數因子的樣例: 我們只需要在HEX里找到ADC1.DR的地址,把他改到一個(gè)固定的FLASH地址就可以了。如果找不到ADC1.DR的地址,可以嘗試去找ADC1的地址(0x40012400),把ADC1的地址改到一個(gè)固定地址(0x00005000),這樣就可以把該處調用ADC1產(chǎn)生隨機數因子的功能失效,這樣每次程序運行時(shí)在該處調用ADC1產(chǎn)生的隨機數因子是固定值,以達到固定每次產(chǎn)生隨機數的值。 通過(guò)上述方式把STM32的ID1和隨機數R1固定后,把新的HEX或BIN文件燒入到一顆新的STM32芯片,并把芯片貼裝的裝有原裝加密芯片的目標板上,目標板工作后,在線(xiàn)路上監控通訊數據,得到ID1,R1,ID2,R2和密文數據Data’。 得到數據后,再開(kāi)發(fā)一顆假加密芯片就可以了,假加密芯片收到的STM32發(fā)送固定的ID1和R1后只要回上述監控得到的固定的ID2,R2和密文數據Data’就可以了,STM32收到ID2,R2和Data’后就可以解密得到正確的Data。破解者使用固定ID1、隨機數R1的HEX或BIN下載文件和自己制作的假加密芯片就可以批量生產(chǎn)破解的目標板了。如下圖: 看了上述破解方式后是不是覺(jué)得這種貌似很安全的加密方案很容易就破解了?事實(shí)就是現在很多破解公司對主流MCU和加密芯片的破解能力都很強大,特別是針對主流MCU的反匯編和對邏輯加密芯片。特別是針對邏輯加密芯片,加密方式就是固定的幾種方式,只要破解了一種方式,那么只要使用這種邏輯加密芯片和這種加密方式的產(chǎn)品都很容易破解,就像上述破解方式,破解者不需要去破解加密芯片,只需要通過(guò)固定ID和隨機數的方式就能繞開(kāi)加解密算法和秘鑰。如果那使用了上述加密方法的,趕緊去檢查下你的HEX或BIN下載碼吧,看看是不是自己就能輕松破解自己的方案了。。。 那么有沒(méi)有好的方法來(lái)保護產(chǎn)品呢,對于使用邏輯加密芯片的加密方案,開(kāi)發(fā)者可以通過(guò)以下的一些小技巧來(lái)增加被破解的難度,比如: 1、主MCU訪(fǎng)問(wèn)ID或隨機數因子時(shí),盡量不要使用常量直接訪(fǎng)問(wèn)目的地址,可以使用一個(gè)假地址再通過(guò)變量異或、加減或其他算法來(lái)得到目的地址,以防止破解者輕易找到這個(gè)地址來(lái)竄改。 2、程序里確保每次產(chǎn)生的隨機數只能使用一次,使用后隨機數失效,下次要使用隨機數必須重新產(chǎn)生。程序對收到的外設發(fā)來(lái)的隨機數做緩存,如果隨機數有重復,做一些特殊處理,防反復跟蹤解析。 3、秘鑰值盡量不要連續存放在一個(gè)常量或變量數組里,盡量分開(kāi)存放,使用前通過(guò)一些算法計算再組成正確的秘鑰值。 4、主MCU程序做完整性校驗,完整性校驗綁定UID,防止主MCU程序被破解者破解得到后竄改來(lái)跟蹤、分析、破解。上面講的破解方法就是利用主MCU沒(méi)有做程序完整性校驗來(lái)固定ID和隨機數從而輕易破解的,如果有完整性校驗,破解難度就會(huì )增加。 5、設計加密方案時(shí)盡量不要使用判斷正確就繼續執行錯誤就報錯這種簡(jiǎn)單的判斷邏輯,可以設計成錯誤后繼續執行,只是在后續執行過(guò)程中在不特定的地方出不特定的錯誤。 6、加密方案里使用的一些校驗算法、加解密算法等,盡量不是用標準算法,可以使用這些算法的變異算法。 通過(guò)上述方式,設計的加密方案被破解的難度會(huì )大大提高。但是現在有很多專(zhuān)業(yè)的破解團隊,對主流芯片的反匯編能力超強,反匯編后還提供C代碼服務(wù)供破解者二次開(kāi)發(fā),上述加密方式通過(guò)超強的反匯編能力,還是可以做到破解的,只是代價(jià)會(huì )大大提高。那有沒(méi)有更加安全的加密方式呢?答案是有的,那就是采用可編程加密芯片! 可編程加密芯片可以理解成一種安全MCU,采用智能卡安全核,芯片本身安全可靠?删幊碳用苄酒藫碛羞壿嫾用苄酒墓δ芡膺具有可編程功能。把主MCU的部分功能或算法放到可編程加密芯片里去運行,比如主MCU里有原來(lái)一個(gè)計算一個(gè)圓的面積的功能,這時(shí)我們把計算圓的面積的功能代碼放到加密芯片里去,主MCU需要計算面積時(shí),只需要把半徑r傳遞給加密芯片,加密芯片收到半徑r后自己運算圓的面積S=πr²,然后把面積S返回給主MCU就可以了。這種方案相當于整個(gè)加密方案是雙MCU模式,即使主MCU被反匯編破解了,只要加密芯片安全可靠,破解者就無(wú)法得到計算圓面積的功能。使用這種可編程加密芯片的加密方案,破解者除了完全破解加密芯片的方法外,反匯編能力再強也無(wú)法破解整個(gè)加密方案,比使用邏輯加密芯片加密安全系數極大的提高。 目前市場(chǎng)上邏輯加密芯片比較多,可編程加密芯片比較少,像中巨偉業(yè)的SMEC98SP、SMEC80ST,就屬于可編程加密芯片。 |
這里發(fā)不了圖片,原文請移步: https://blog.csdn.net/SinormousTech/article/details/144674777 |