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