DS28E01一般應(yīng)用在加密保護,防止產(chǎn)品被輕易copy盜版,目前深圳維動智芯科技已成功破解上百顆DS28E01芯片,歡迎有需求的客戶與我們聯(lián)系。
 
 
簡單介紹DS28E01:
 
DS28E01通過1條單總線與MCU通信,單總線不多說了,要求時間非常嚴格,精確到us級別。
 
DS28E01有四個存儲區(qū):
 
數(shù)據(jù)存儲器(EEPROM)(共分4頁,每頁32個字節(jié))
 
密鑰存儲器(secret)(8字節(jié))
 
含有特定功能和用戶字節(jié)的寄存器頁(register page)
 
易失性暫存器(scratchpad)(8字節(jié))
 
 
 
MCU通過單總線只能讀寫暫存器,而不能直接讀寫其它存儲區(qū)。
 
向數(shù)據(jù)存儲器寫數(shù)據(jù)、載入初始密鑰或者向寄存器頁寫數(shù)據(jù)時,先把數(shù)據(jù)寫入暫存器,然后通過相應(yīng)的命令,讓芯片自行從暫存器拷貝數(shù)據(jù)至目的地址。
 
 
工作原理:
 
芯片內(nèi)部有一個SHA-160加密模塊,參與SHA算法的為55字節(jié)特定格式的數(shù)據(jù),
 
這些數(shù)據(jù)包含8字節(jié)密鑰,5字節(jié)用戶指定的隨機數(shù),32字節(jié)EEPROM內(nèi)容,7字節(jié)ROMID,2字節(jié)固定數(shù)據(jù)(0xFF)和1字節(jié)EEPROM的地址TA1。
 
MCU可以讀取芯片通過SHA加密后的20字節(jié)哈希值,并與MCU自己通過同樣的算法計算出的哈希值進行比對。
 
既然MCU要進行同樣的加密操作,要么肯定要生成與芯片內(nèi)部完全相同的55字節(jié)消息,怎么得來的呢?
 
8字節(jié)密鑰是自己生成并寫進去的.               ->OK
 
5字節(jié)隨機數(shù)是在芯片執(zhí)行SHA之前寫進暫存器的值.   ->OK
 
32字節(jié)EEPROM數(shù)據(jù),在讀回20字節(jié)哈希值之前,芯片會傳回這32字節(jié)內(nèi)容。 ->OK
 
7字節(jié)ROMID,可以在任何時候讀到芯片的ROMID.   ->OK
 
2字節(jié)固定值,看手冊可以知道   ->OK
 
1字節(jié)TA1,自己寫進去的.   ->OK
 
 
典型應(yīng)用過程:
 
過程一:初始化DS28E01密鑰
 
初始化密鑰只在產(chǎn)品出產(chǎn)前在工廠進行操作,只需要操作一次即可。
 
程序流程:
 
1.讀取芯片ROMID
 
2.通過一定的算法生成一個唯一的64位的密鑰,保證每塊主板產(chǎn)生的密鑰各不相同。
 
3.將密鑰寫入芯片暫存區(qū),并讀回驗證寫入是否正確
 
4.執(zhí)行芯片加載密鑰命令,讓芯片將暫存區(qū)中的64位密鑰保存至密鑰存儲區(qū)
 
5.完成。
 
 
過程二:驗證DS28E01密鑰
 
驗證密鑰是在產(chǎn)品應(yīng)用程序中進行,每次啟動產(chǎn)品時都會驗證DS28E01密鑰是否正確,
 
驗證通過則正常運行,驗證不正確則通過一定手段讓產(chǎn)品工作不正常。
 
程序流程:
 
1.讀取芯片ROMID
 
2.通過與初始化過程中相同的算法,生成64位密鑰
 
3.向芯片暫存區(qū)寫入8字節(jié)隨機數(shù)(只用到其中5個字節(jié)),并讀回驗證
 
4.向芯片發(fā)加密認證命令,可以讀回32字節(jié)EEPROM數(shù)據(jù)和20字節(jié)哈希值
 
5.用上面讀到數(shù)據(jù),生成55字節(jié)摘要消息,并進行SHA1運算
 
6.比較自己計算出的哈希值和從芯片讀回的哈希值是否一致
 
 
破解方法:
 
從上面的應(yīng)用過程可以看出,這里的關(guān)鍵算法是SHA1,而參與SHA計算的數(shù)據(jù)有兩份,一份在芯片內(nèi)部,我們是無法讀出的,
 
但是另一份卻是在MCU內(nèi)部生成的,所以只要獲取到MCU內(nèi)部生成消息的過程就有破解的可能性。
 
而其中關(guān)鍵數(shù)據(jù)是8字節(jié)的密鑰,因為這8字節(jié)密鑰是一般情況是綁定的ROMID和CPUID的,
 
因此首先必須要能從芯片中讀取到程序的二進制代碼, 再通過反匯編并分析出密鑰生成的算法才能達到破解的目的,
 
然而反匯編分析出算法也是相當不容易的。
 
 
 
結(jié)論:
 
加密芯片+MCU的保護方案雖然從原理上是可以破解的,再復(fù)雜的加密算法也只是增加了反匯編破解的難度,并沒有從根本上解決問題。
 
然而也可以通過設(shè)計出復(fù)雜度較高的密鑰管理算法,還是可以提高破解的難度,從而提高破解成本,讓對手放棄克隆出你的產(chǎn)品。
 
從根本上防止產(chǎn)品被破解/盜版的方法只有一個:那就是防止從產(chǎn)品中讀取到正確二進制代碼,。
 
 
 
加密與解密就像矛與盾,是一對永恒的對立面,此增彼長,無窮無盡。