DS28E01一般應用在加密保護,防止產(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ù)寫入暫存器,然后通過相應的命令,讓芯片自行從暫存器拷貝數(shù)據(jù)至目的地址。
工作原理:
芯片內部有一個SHA-160加密模塊,參與SHA算法的為55字節(jié)特定格式的數(shù)據(jù),
這些數(shù)據(jù)包含8字節(jié)密鑰,5字節(jié)用戶指定的隨機數(shù),32字節(jié)EEPROM內容,7字節(jié)ROMID,2字節(jié)固定數(shù)據(jù)(0xFF)和1字節(jié)EEPROM的地址TA1。
MCU可以讀取芯片通過SHA加密后的20字節(jié)哈希值,并與MCU自己通過同樣的算法計算出的哈希值進行比對。
既然MCU要進行同樣的加密操作,要么肯定要生成與芯片內部完全相同的55字節(jié)消息,怎么得來的呢?
8字節(jié)密鑰是自己生成并寫進去的. ->OK
5字節(jié)隨機數(shù)是在芯片執(zhí)行SHA之前寫進暫存器的值. ->OK
32字節(jié)EEPROM數(shù)據(jù),在讀回20字節(jié)哈希值之前,芯片會傳回這32字節(jié)內容。 ->OK
7字節(jié)ROMID,可以在任何時候讀到芯片的ROMID. ->OK
2字節(jié)固定值,看手冊可以知道 ->OK
1字節(jié)TA1,自己寫進去的. ->OK
典型應用過程:
過程一:初始化DS28E01密鑰
初始化密鑰只在產(chǎn)品出產(chǎn)前在工廠進行操作,只需要操作一次即可。
程序流程:
1.讀取芯片ROMID
2.通過一定的算法生成一個唯一的64位的密鑰,保證每塊主板產(chǎn)生的密鑰各不相同。
3.將密鑰寫入芯片暫存區(qū),并讀回驗證寫入是否正確
4.執(zhí)行芯片加載密鑰命令,讓芯片將暫存區(qū)中的64位密鑰保存至密鑰存儲區(qū)
5.完成。
過程二:驗證DS28E01密鑰
驗證密鑰是在產(chǎn)品應用程序中進行,每次啟動產(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.比較自己計算出的哈希值和從芯片讀回的哈希值是否一致
破解方法:
從上面的應用過程可以看出,這里的關鍵算法是SHA1,而參與SHA計算的數(shù)據(jù)有兩份,一份在芯片內部,我們是無法讀出的,
但是另一份卻是在MCU內部生成的,所以只要獲取到MCU內部生成消息的過程就有破解的可能性。
而其中關鍵數(shù)據(jù)是8字節(jié)的密鑰,因為這8字節(jié)密鑰是一般情況是綁定的ROMID和CPUID的,
因此首先必須要能從芯片中讀取到程序的二進制代碼, 再通過反匯編并分析出密鑰生成的算法才能達到破解的目的,
然而反匯編分析出算法也是相當不容易的。
結論:
加密芯片+MCU的保護方案雖然從原理上是可以破解的,再復雜的加密算法也只是增加了反匯編破解的難度,并沒有從根本上解決問題。
然而也可以通過設計出復雜度較高的密鑰管理算法,還是可以提高破解的難度,從而提高破解成本,讓對手放棄克隆出你的產(chǎn)品。
從根本上防止產(chǎn)品被破解/盜版的方法只有一個:那就是防止從產(chǎn)品中讀取到正確二進制代碼,。
加密與解密就像矛與盾,是一對永恒的對立面,此增彼長,無窮無盡。