周健
上海地鐵維護保障有限公司車輛分公司,上海,200233
現(xiàn)代嵌入式軟件系統(tǒng)越來越復(fù)雜,開發(fā)成本高,放在Flash中的程序容易被拷貝,PCB電路板也很容易被復(fù)制。為了保護產(chǎn)品免遭克隆,保護企業(yè)的知識產(chǎn)權(quán)免受侵害,有必要在系統(tǒng)中使用秘鑰認(rèn)證技術(shù)。
目前在芯片加密方面主要有使用專用密鑰認(rèn)證芯片,如Atmel AT88系列。其次就是使用不可破解的芯片,如EPLDEPM7128,Actel公司的CPLD,或使用MASK(掩膜)IC,一般來說MASK IC要比可編程芯片難破解。
本文介紹的ATSHA204A是Atmel公司推出的一款專用加密芯片,采用SHA-256公鑰算法,具有體積小、功耗低、安全性高等一系列特點,價格也較低,使用范圍廣泛。
ATSHA204A加密芯片內(nèi)部包含Static RAM和EEPROM,RAM主要用來存儲輸入命令以及輸出結(jié)果,EEPROM總大小為4.5 kB,包含數(shù)據(jù)區(qū)、配置區(qū)以及OTP(一次性編程)區(qū)域[1]。
數(shù)據(jù)(data)區(qū):數(shù)據(jù)區(qū)的總大小是512 kB,包含16個通用的容量為32字節(jié)的數(shù)據(jù)槽。這些數(shù)據(jù)槽可用來存儲秘鑰、校準(zhǔn)數(shù)據(jù)以及型號信息。每個數(shù)據(jù)槽可通過配置區(qū)配置成只讀、可讀寫、不可訪問三種方式。
配置(config)區(qū):配置區(qū)的大小為88字節(jié),配置區(qū)包含芯片的序列號、ID信息以及每個數(shù)據(jù)槽的訪問權(quán)限信息。
一次性編程(OTP)區(qū):大小為64字節(jié),在鎖定OTP區(qū)域之前,可以通過寫命令對OTP區(qū)域進行寫入操作。
ATSHA204A是Atmel高安全性硬件認(rèn)證器件系列的一個新成員,它擁有一個靈活的指令集,支持眾多應(yīng)用[2]。
防偽:可用于驗證某個可移除、可更換或耗材型客戶端的真實性。這些客戶端的例子包括:打印機墨盒、電子子卡或其他備件。此外,它還可用于驗證某個軟件或固件模塊或存儲元件。
保護固件或媒體文件:可在開機時驗證閃存中的代碼,以防止代碼在未經(jīng)授權(quán)的情況下被修改;對下載的媒體文件進行加密,并以獨特方式加密代碼圖像,使它們只能在一個系統(tǒng)中使用。
交換會話密鑰:可安全、方便地交換串流加密密鑰,以供系統(tǒng)微處理器中的一個加密/解密引擎用于管理保密通信信道或加密的下載內(nèi)容等。
安全數(shù)據(jù)存儲:可存儲供標(biāo)準(zhǔn)微處理器中的加密加速器使用的密鑰。此外,它還可用于存儲少量的配置和校準(zhǔn)用數(shù)據(jù)、電子錢包數(shù)據(jù)、消費數(shù)據(jù)和其他機密信息。通過加密/認(rèn)證讀寫操作提供可編程的保護功能。
用戶密碼檢查:在不暴露預(yù)期值的情況下驗證用戶輸入的密碼,將簡單的密碼映射為復(fù)雜的密碼,并與遠(yuǎn)端系統(tǒng)安全地交換密碼值。
有保障的序列號:每個器件都有一個唯一的72位序列號。
高質(zhì)量的隨機數(shù)發(fā)生器:內(nèi)置高質(zhì)量的隨機數(shù)發(fā)生器(ENG)。
ATSHA204A不僅有軟件加密,內(nèi)部還有高質(zhì)量硬件加密,可使用SHA-256 Hash算法。每個ATSHA204A出廠時都具有一個唯一的9字節(jié)的序列號,兼容標(biāo)準(zhǔn)I2C總線通信時序。
為了簡化編程,ATSHA204A支持標(biāo)準(zhǔn)的摘要/答應(yīng)協(xié)議,主機發(fā)送一個挑戰(zhàn)(challenage)到ATSHA204A芯片,芯片將挑戰(zhàn)信息和存儲在芯片內(nèi)的秘鑰一起通過哈希算法計算出一個摘要(digest),然后發(fā)回到主機。主機只發(fā)送摘要信息到設(shè)備上面,避免了通過總線時序觀察到秘鑰數(shù)據(jù)的可能性。主機控制器也通過相關(guān)的公鑰算法計算出摘要,與設(shè)備發(fā)送回來的摘要對比,實現(xiàn)認(rèn)證。
哈希(Hash)算法,即散列函數(shù),是一種單向密碼體制。它是一個從明文到密文的不可逆的映射,只有加密過程,沒有解密過程[3]。同時,哈希函數(shù)可以將任意長度的輸入經(jīng)過變化以后得到固定長度的輸出。哈希函數(shù)的這種單向特征和輸出數(shù)據(jù)長度固定的特征使得它可以生成消息或者數(shù)據(jù)。
根據(jù)輸出消息的數(shù)據(jù)位的不同,哈希算法包含MD5、SHA-1、SHA-2、SHA-25、SHA-512等。SHA-256具有256位的信息摘要長度。該算法的簡要處理流程包括以下幾步:消息填充、附加消息長度、初始化緩存、迭代壓縮、得出哈希結(jié)果。
消息鑒別碼(MAC)實現(xiàn)鑒別的原理是,用公開函數(shù)和密鑰產(chǎn)生一個固定長度的值作為認(rèn)證標(biāo)識,用這個標(biāo)識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數(shù)據(jù)塊,即MAC,并將其加入到消息中,接收方利用與發(fā)送方共享的密鑰進行鑒別認(rèn)證。
ATSHA204A中的MAC命令使用SHA-256哈希算法,以88字節(jié)的信息量作為輸入,并產(chǎn)生一個32字節(jié)的報文摘要,以供認(rèn)證和鑒別。
2.2.1 加密概述
加密是隱秘信息,使其在沒有正確的密鑰情況下,變得難以讀取的過程。在簡單的對稱加密中,同一個密鑰被用于加密和解密。在非對稱加密中,可以使用用戶的公鑰對信息加密,使得只有對應(yīng)私鑰的擁有者才能讀取它。加密算法是可逆的,每個加密算法都會有一個解密算法,原文與密文一一對應(yīng)。
2.2.2 認(rèn)證概述
認(rèn)證是呈現(xiàn)信息,使其抗篡改,同時也證明它起源于預(yù)期發(fā)送者的過程。Hash算法特別的地方在于它是一種單向算法,用戶可以通過Hash算法對目標(biāo)信息生成一段特定長度的唯一Hash值,卻不能通過這個Hash值重新獲得目標(biāo)信息。哈希算法是不可逆的,不同的消息經(jīng)過哈希算法后可能會得到相同的結(jié)果。
2.2.3 方案對比
加密無法保證信息來源的合法性,使用Hash算法的認(rèn)證方案可以確認(rèn)數(shù)據(jù)提供者是否合法,以及確保信息的完整性、沒有被他人篡改過。
為實現(xiàn)車門軟件與門控器硬件之間的認(rèn)證,車門控制器使用一片ATSHA204A,作為認(rèn)證的Client,DSP28335作為Host,執(zhí)行認(rèn)證流程[4]。若認(rèn)證成功,則認(rèn)為車門軟件與門控器匹配,正常運行;若認(rèn)證失敗,則車門軟件進入死循環(huán),不再執(zhí)行任何功能,認(rèn)證方式如圖1所示。
ATSHA204A包含一個可以用來存儲密鑰數(shù)據(jù)的EEPROM陣列,包含16個數(shù)據(jù)槽,每個數(shù)據(jù)32個字節(jié),這16個數(shù)據(jù)槽都可以用來保存秘鑰。寫完秘鑰數(shù)據(jù)后,配置數(shù)據(jù)槽的權(quán)限為不可讀,不可寫,實現(xiàn)加密功能。車門控制器在出廠前,需要提前燒錄秘鑰數(shù)據(jù),將執(zhí)行車門功能的應(yīng)用程序與秘鑰程序分開。
為防止認(rèn)證過程中IIC總線上數(shù)據(jù)被捕獲后,偽造數(shù)據(jù)實現(xiàn)認(rèn)證,每次認(rèn)證過程需要有不同的挑戰(zhàn)信息。ATSHA204A包含一個隨機數(shù)發(fā)生器,可以獲得一個32字節(jié)的隨機數(shù)。DSP通過隨機數(shù)發(fā)生器獲得此隨機數(shù)后,組成一個88字節(jié)的挑戰(zhàn)信息發(fā)送給ATSHA204A執(zhí)行認(rèn)證流程。
SHA-256算法容易獲得,但算法中涉及以字節(jié)(8bit)為最小單位的連續(xù)存儲空間的操作。DSP可以定義char型的8bit變量,但是最小存儲單位是16bit,存儲空間不連續(xù)。因此移植算法時需要將數(shù)據(jù)進行處理,保證存儲空間的連續(xù)性。
DSP與ATSHA204A通過IIC總線進行通訊,DSP將Challeng發(fā)送給ATSHA204A,ATSHA204 A執(zhí)行完MAC指令之后,發(fā)回response,DSP進行對比,如果匹配成功,則程序繼續(xù)運行[5],如果失敗,則程序終止運行,從而實現(xiàn)認(rèn)證的目的。程序包括兩部分:認(rèn)證流程設(shè)計和SHA-256算法移植。
4.1.1 Write命令
命令格式如表1所示。
表1 Write命令列表
參數(shù)1的Zone.bit0和Zone.bit1配置寫入數(shù)據(jù)的區(qū)域是配置區(qū)、OTP區(qū)還是數(shù)據(jù)區(qū),Zone.bit6配置寫入數(shù)據(jù)是否需要加密,Zone.bit7配置數(shù)據(jù)長度是4字節(jié)還是32字節(jié)。若寫入數(shù)據(jù)無需加密,則數(shù)據(jù)2長度為0字節(jié)。
4.1.2 Read命令
命令格式如表2所示。
表2 Read命令列表
與寫命令類似,參數(shù)1的Zone.bit0和Zone.bit1配置寫入數(shù)據(jù)的區(qū)域是配置區(qū)、OTP區(qū)還是數(shù)據(jù)區(qū),Zone.bit7配置數(shù)據(jù)長度是4字節(jié)還是32字節(jié)。若讀命令正確執(zhí)行,芯片將返回4字節(jié)或者32字節(jié)數(shù)據(jù)。
4.1.3 Nonce命令
命令格式如表3所示。
表3 Nonce命令列表
隨機命令目的在于更新芯片中的TempKey值。TempKey相當(dāng)于程序中的臨時變量,用來保存一些中間結(jié)果,但這個TempKey值不能被訪問,只能芯片內(nèi)部本身使用。Nonce命令也是其余多數(shù)命令執(zhí)行前都要執(zhí)行的一個命令。
參數(shù)1的模式如果設(shè)置為0或者1的時候,要求輸入一個20字節(jié)的隨機數(shù),而后更新芯片內(nèi)的seed,更新seed能使內(nèi)部產(chǎn)生的隨機數(shù)質(zhì)量更高。如果設(shè)置為3,就要求輸入32字節(jié)的隨機數(shù),直接寫在TempKey中。
4.1.4 MAC命令
命令格式如表4所示。
表4 MAC命令列表
模式的詳細(xì)含義如表5所示。
表5 MAC模式列表
使用MAC命令可以讓ATSHA204A生成一個摘要。
4.1.5 CheckMAC命令
命令格式如表6所示。
模式的詳細(xì)含義如表7所示。
使用CheckMAC命令可以驗證秘鑰。例如有一個主設(shè)備,它把秘鑰存在slot0里面,有一些從設(shè)備,要輸入正確的密鑰才能使用主設(shè)備提供的服務(wù)。這種工況下就能夠用這種方式,在總線上也不會傳輸密碼,而且將密碼存儲在ATSHA204A里面更安全。
表6 CheckMAC命令列表
表7 CheckMAC模式列表
主控DSP通過IIC總線與芯片相連,首先在ATSHA204A芯片的slot0中寫入一個32字節(jié)的秘鑰,設(shè)置為不可讀。在啟動時候,先獲取芯片序列號,然后發(fā)送一個隨機數(shù)生成命令給ATSHA204A,讓其更新內(nèi)部的TempKey中的值。DSP內(nèi)部也根據(jù)Nonce的模式計算TempKey的值,稱之為host_tempKey。若上述步驟執(zhí)行正常,那么TempKey和host_tempKey中的值是一致的。接下來DSP本身就能夠根據(jù)host_tempKey、序列號、以及秘鑰計算出一個摘要digest,稱之為digest1。再給ATSHA204A發(fā)送MAC命令,ATSHA204A根據(jù)存儲在slot0區(qū)域中的秘鑰來計算digest2并返回給DSP,DSP判斷digest1和digest2是否匹配,若不匹配則將程序掛起[6]。認(rèn)證流程如圖2所示。
根據(jù)軟件流程設(shè)計,列出需實現(xiàn)的函數(shù),以及函數(shù)功能的描述,如表8所示。
表8 函數(shù)列表
將以上函數(shù)編碼完成后,軟件可實現(xiàn)認(rèn)證功能。
設(shè)計的認(rèn)證程序流程,如圖3所示。
在完成軟件編碼后,需要對認(rèn)證功能進行驗證。DSP計算的摘要與ATSHA204A返回的摘要一致。
其中,秘鑰數(shù)據(jù)在芯片配置時已經(jīng)寫入,保存于slot1的秘鑰數(shù)據(jù)和32字節(jié)的挑戰(zhàn)碼如表9所示。
表9 數(shù)據(jù)信息列表
查詢A T S HA 20 4 A芯片配置區(qū)序列號,Serial Number[0],Serial Number[1]和Serial Number[8]都為固定值,數(shù)據(jù)分別是01、23、EE。通過SHA-256算法獲得的32字節(jié)摘要數(shù)據(jù)如表10所示。
表10 摘要信息列表
根據(jù)MAC命令格式得出DSP軟件發(fā)送到ATSHA204A的數(shù)據(jù)如表11所示。
ATSHA204A芯片會使用芯片內(nèi)的SN[0]、SN[1]、SN[8]、SLOT1數(shù)據(jù),接收到的挑戰(zhàn)碼,KeyID(即01 00),MAC命令碼(08)和mode(00)做一次SHA-256哈希算法,結(jié)果是一組32字節(jié)的校驗碼,并回傳給DSP(需要執(zhí)行一次讀回狀態(tài)包操作)。
表11 數(shù)據(jù)信息列表
調(diào)用認(rèn)證函數(shù),使用串口調(diào)試,測試數(shù)據(jù)如圖4所示,DSP計算所得摘要信息與ATSHA204A返回的信息一致,認(rèn)證通過。
ATSHA204A芯片內(nèi)共有16個數(shù)據(jù)槽,上述方案只是使用了一個數(shù)據(jù)槽保存一個秘鑰,如果使用多組秘鑰,執(zhí)行多次認(rèn)證,那么安全性將得到提高。芯片還提供一個64字節(jié)的一次性編程區(qū),寫入數(shù)據(jù)后,通過配置,僅允許執(zhí)行加密讀的操作獲取數(shù)據(jù)。因此可將控制系統(tǒng)中較為關(guān)鍵的參數(shù)保存在此區(qū)域,首次上電通過加密讀獲取,而IIC總線上不會直接出現(xiàn)這些數(shù)據(jù)。
另外,在一些應(yīng)用中,每次都使用相同的秘鑰可能也會帶來風(fēng)險,而ATSHA204A芯片可以對秘鑰進行更新。例如在使用一次秘鑰進行認(rèn)證后,當(dāng)前秘鑰可以被SHA-256算法的摘要信息和特定的信息合并形成后覆蓋,這些特定信息可以配置為常量、時間數(shù)據(jù)或者隨機數(shù)。這樣處理后,原始的秘鑰將被滾動的秘鑰取代,秘鑰數(shù)據(jù)無法被追溯,由此提高了系統(tǒng)的安全性。