袁一泳


【摘要】 本文提供了一種對手機的代碼的合法性進行鑒定的管理方法,利用Nand Flash的OTP(One Time Programmable)區域來存放hash簽名中的密鑰。在手機啟動時對手機運行代碼進行認證,可以確保手機代碼沒有經過攻擊者的修改,避免了手機被惡意修改從而被非法使用的現象。
【關鍵字】 OTP區 安全認證
一、技術領域
本文涉及嵌入式系統技術,更具體地,涉及對手機安全啟動的技術。
二、背景技術
隨著移動通訊技術的發展,手機已經進入千家萬戶。手機的代碼卻有著一定的脆弱性,市場上的某些人可能將手機的存儲介質中的代碼進行修改,以達到一定的目的。或者手機可能被非法下載其他代碼。所有這些對于手機設備商或運營商而言都是不希望看到的。有鑒于此,本文提出了一種可以對手機中將要運行的代碼進行認證的方法,如果是設備商認可的代碼,則可以允許該代碼在手機中運行,如果該代碼不能通過手機的安全認證,則不允許該代碼在手機中啟動運行。OTP區,在一般的NAND FLASH器件上都會有一塊OTP區域,OTP含義是 One Time Programmable,即一次可編程區,OTP(一次可編程)存儲區的特性與一般FLASH存儲器不同,一般FLASH存儲器可以通過擦除命令恢復出廠狀態(0xFF),然后可以重新寫入數據,而OTP存儲區一旦寫入數據后,就無法通過擦除命令恢復出廠狀態,即對于每個bit位,只能從“1”改寫為“0”,而不能從“0”改寫為“1”,即不可逆。存儲器廠家保證OTP區域的可使用性,不會有壞塊的情況。
三、具體內容
為了解決現有技術中的問題,本方法提供了一種手機安全啟動的方法,手機的啟動過程同大多數嵌入式式系統一樣,分為boot階段和OS操作系統階段。不論是手機產品還是嵌入式系統,都需要一個OS系統(或封閉式OS系統,或開發式OS系統),系統上電后,總是先運行啟動代碼boot,完成CPU的初始化,以及各種外設和外部存儲器(NandFlash,Sdram)然后將處理權交給OS系統,運行各式應用程序。這一段啟動代碼就是我們通常所說的boot代碼。此處所講的OS代碼,不僅僅指的是手機的嵌入式操作系統,還有與之相關的在該操作系統上運行的其他應用任務程序代碼。正常的手機啟動過程是手機上電,系統自動將boot代碼加載到ram中運行,此時boot的任務就是初始化CPU,初始化NandFlash,Sdram,加載下一級運行代碼OS到Sdram中。等到OS加載完成后,從boot手中將CPU控制權交到OS控制,開始執行OS代碼。但是在有些非法使用者在拿到手機后會用一些手段防止有些手機在未經授權的情況下被非法用戶通過強力手段,通過TRACE32或類似的擦寫Flash的方法將原來存在的代碼擦除掉,然后再將修改過的或者未經授權認證的代碼下載到手機中使用。
本方法的一個方面提供了一種在手機啟動時boot階段對手機即將運行的操作系統及相關應用代碼進行安全認證的方法。本方法將boot階段認證操作系統及相關應用代碼認證的密鑰存放在NAND FLASH的OTP區域,該區域不存在壞塊問題,可以確保密鑰不會遭到非法修改。
對OTP區的讀寫操作同其他的NAND FLASH的block不同,對于sumsung的Nand Flash對OTP區域的讀寫命令。OTP(One Time Programmable)block是Nand Flash里一個隱藏的block,該block必須使用特殊的指令來存取,以三星的Nand Flash為例,對普通block的一個page進行讀操作的時序其指令部分只有一個字節(0x00),對OTP block的一個page進行讀操作的時序其指令部分有三個字節(0x30,0x65和0x00)。對普通block的一個page進行寫操作的時序其指令部分只有一個字節(0x80), 對OTP block的一個page進行寫操作的時序其指令部分有三個字節(0x30,0x65和0x80)。通過這種不同的讀寫操作,OTP區域page的讀寫與普通的block的page讀寫區別開來。所以我們可以將密鑰存儲在OTP區域中,不會擔心會被正常的NandFlash讀寫操作所訪問到,確保該密鑰是安全的,而且由于OTP區域的信息是一次寫好的,如果對它進行修改的話也是不成功的。
下面分別介紹這種安全啟動的方法:
一般的手機啟動過程分為2個階段,Boot階段和操作系統運行階段。手機上電后首先將Boot代碼從NandFlash中加載到內部Ram或者外部Sdram中進行運行,主要內容就是將系統的硬件部分進行初始化,初始化NandFlash,初始化Sdram,還有與系統相關的一些寄存器,在這部分完成后,Boot代碼還需要將操作系統相關的代碼從NandFlash中拷貝到Sdram中。然后將指令執行權交還給操作系統,運行應用程序。在此過程中很有可能出現一些使用者非法下載一些未經過運營商或設備商許可的軟件版本在手機中運行, 或者修改部分代碼內容在手機中運行。為了防止這種現象發生,我們提出了一種安全的手機啟動方法,在手機出廠前對手機中的操作系統及相關應用代碼進行hash運算,得到簽名結果后附加在操作系統及相關應用代碼之后下載到手機NandFlash中,在手機啟動過程中,Boot階段加入對操作系統及相關應用程序代碼的認證過程,在拷貝這部分代碼到Sdram時通過獲取NandFlash的OTP區域中的密鑰對代碼進行認證運算,若認證結果通過,說明該代碼是經過運營商或設備商許可的軟件,可以在手機中運行;如果認證未通過,則該代碼可能是經過修改的非法代碼,禁止其在手機中運行。這樣做可以使一些經過修改的未通過運營商或設備商許可的代碼不能在手機中運行,保護了設備商和運營商的利益。
因而,采用本方法,實現了以下的優點:
可以有效地保證手機中運行代碼的可靠性,確保不會有經過非法修改的軟件代碼在手機中運行。防止有些手機在未經授權的情況下被非法用戶通過強力手段,通過TRACE32或類似的擦寫Flash的方法將原來存在的代碼擦除掉,然后再將修改過的或者未經授權認證的代碼下載到手機中使用。
四、具體實施方式
圖1是根據本方法對OS代碼在出廠前簽名過程的流程圖。
如圖1所示,該操作包括以下步驟:
步驟S101,手機在設備商開發工作完成后確定手機的OS最終代碼;
步驟S102,在設備廠商的簽名服務器上存放著簽名密鑰K,將OS出廠代碼通過簽名服務器進行簽名運算;
步驟S103,通過服務器的簽名服務器運算得到簽名結果M;
步驟S104,將簽名結果附加到OS代碼的最后;
圖2是根據本方法在手機啟動時boot過程中對OS代碼合法性進行認證的流程圖。
如圖2所示,該操作包括以下步驟:
步驟S201,手機上電啟動,運行boot代碼,初始化NandFlash相關配置寄存器;
步驟S202,通過配置參數對系統所使用的外部Sdram進行配置;
步驟S203,從NandFlash中讀取出手機的OS代碼并拷貝到Sdram中;
步驟S204,從NandFlash的OTP區域中讀取出認證密鑰K;
步驟S205,對Sdram中的OS代碼進行認證算法運算,得到認證值N;
步驟S206,將認證算法運算得到的認證值N與附加到OS代碼后的簽名值M進行比較。
步驟S206,將認證算法運算得到的認證值N與附加到OS代碼后的簽名值M進行比較。
步驟S207,若值M與值N相等,則證明該OS代碼是經過設備商認證的合法代碼,手機可以繼續運行。
步驟S208,若值M與值N不相等,則證明該OS代碼不是是經過設備商認證的合法代碼,手機關機。
綜上所述,采用本方法,可以對手機的運行代碼進行檢查,防止使用經過修改的非法代碼在手機中運行,能夠有效地保證手機運行的安全性。