?

一種基于專用密鑰芯片的DSP代碼加密方案

2022-09-07 05:48周健
新型工業化 2022年6期
關鍵詞:哈希字節密鑰

周健

上海地鐵維護保障有限公司車輛分公司,上海,200233

0 引言

現代嵌入式軟件系統越來越復雜,開發成本高,放在Flash中的程序容易被拷貝,PCB電路板也很容易被復制。為了保護產品免遭克隆,保護企業的知識產權免受侵害,有必要在系統中使用秘鑰認證技術。

目前在芯片加密方面主要有使用專用密鑰認證芯片,如Atmel AT88系列。其次就是使用不可破解的芯片,如EPLDEPM7128,Actel公司的CPLD,或使用MASK(掩膜)IC,一般來說MASK IC要比可編程芯片難破解。

本文介紹的ATSHA204A是Atmel公司推出的一款專用加密芯片,采用SHA-256公鑰算法,具有體積小、功耗低、安全性高等一系列特點,價格也較低,使用范圍廣泛。

1 芯片簡介

1.1 芯片組成

ATSHA204A加密芯片內部包含Static RAM和EEPROM,RAM主要用來存儲輸入命令以及輸出結果,EEPROM總大小為4.5 kB,包含數據區、配置區以及OTP(一次性編程)區域[1]。

數據(data)區:數據區的總大小是512 kB,包含16個通用的容量為32字節的數據槽。這些數據槽可用來存儲秘鑰、校準數據以及型號信息。每個數據槽可通過配置區配置成只讀、可讀寫、不可訪問三種方式。

配置(config)區:配置區的大小為88字節,配置區包含芯片的序列號、ID信息以及每個數據槽的訪問權限信息。

一次性編程(OTP)區:大小為64字節,在鎖定OTP區域之前,可以通過寫命令對OTP區域進行寫入操作。

1.2 主要特性

ATSHA204A是Atmel高安全性硬件認證器件系列的一個新成員,它擁有一個靈活的指令集,支持眾多應用[2]。

防偽:可用于驗證某個可移除、可更換或耗材型客戶端的真實性。這些客戶端的例子包括:打印機墨盒、電子子卡或其他備件。此外,它還可用于驗證某個軟件或固件模塊或存儲元件。

保護固件或媒體文件:可在開機時驗證閃存中的代碼,以防止代碼在未經授權的情況下被修改;對下載的媒體文件進行加密,并以獨特方式加密代碼圖像,使它們只能在一個系統中使用。

交換會話密鑰:可安全、方便地交換串流加密密鑰,以供系統微處理器中的一個加密/解密引擎用于管理保密通信信道或加密的下載內容等。

安全數據存儲:可存儲供標準微處理器中的加密加速器使用的密鑰。此外,它還可用于存儲少量的配置和校準用數據、電子錢包數據、消費數據和其他機密信息。通過加密/認證讀寫操作提供可編程的保護功能。

用戶密碼檢查:在不暴露預期值的情況下驗證用戶輸入的密碼,將簡單的密碼映射為復雜的密碼,并與遠端系統安全地交換密碼值。

有保障的序列號:每個器件都有一個唯一的72位序列號。

高質量的隨機數發生器:內置高質量的隨機數發生器(ENG)。

1.3 認證流程

ATSHA204A不僅有軟件加密,內部還有高質量硬件加密,可使用SHA-256 Hash算法。每個ATSHA204A出廠時都具有一個唯一的9字節的序列號,兼容標準I2C總線通信時序。

為了簡化編程,ATSHA204A支持標準的摘要/答應協議,主機發送一個挑戰(challenage)到ATSHA204A芯片,芯片將挑戰信息和存儲在芯片內的秘鑰一起通過哈希算法計算出一個摘要(digest),然后發回到主機。主機只發送摘要信息到設備上面,避免了通過總線時序觀察到秘鑰數據的可能性。主機控制器也通過相關的公鑰算法計算出摘要,與設備發送回來的摘要對比,實現認證。

2 技術綜述

2.1 哈希算法與消息鑒別碼

哈希(Hash)算法,即散列函數,是一種單向密碼體制。它是一個從明文到密文的不可逆的映射,只有加密過程,沒有解密過程[3]。同時,哈希函數可以將任意長度的輸入經過變化以后得到固定長度的輸出。哈希函數的這種單向特征和輸出數據長度固定的特征使得它可以生成消息或者數據。

根據輸出消息的數據位的不同,哈希算法包含MD5、SHA-1、SHA-2、SHA-25、SHA-512等。SHA-256具有256位的信息摘要長度。該算法的簡要處理流程包括以下幾步:消息填充、附加消息長度、初始化緩存、迭代壓縮、得出哈希結果。

消息鑒別碼(MAC)實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,并將其加入到消息中,接收方利用與發送方共享的密鑰進行鑒別認證。

ATSHA204A中的MAC命令使用SHA-256哈希算法,以88字節的信息量作為輸入,并產生一個32字節的報文摘要,以供認證和鑒別。

2.2 加密與認證

2.2.1 加密概述

加密是隱秘信息,使其在沒有正確的密鑰情況下,變得難以讀取的過程。在簡單的對稱加密中,同一個密鑰被用于加密和解密。在非對稱加密中,可以使用用戶的公鑰對信息加密,使得只有對應私鑰的擁有者才能讀取它。加密算法是可逆的,每個加密算法都會有一個解密算法,原文與密文一一對應。

2.2.2 認證概述

認證是呈現信息,使其抗篡改,同時也證明它起源于預期發送者的過程。Hash算法特別的地方在于它是一種單向算法,用戶可以通過Hash算法對目標信息生成一段特定長度的唯一Hash值,卻不能通過這個Hash值重新獲得目標信息。哈希算法是不可逆的,不同的消息經過哈希算法后可能會得到相同的結果。

2.2.3 方案對比

加密無法保證信息來源的合法性,使用Hash算法的認證方案可以確認數據提供者是否合法,以及確保信息的完整性、沒有被他人篡改過。

3 需求分析

為實現車門軟件與門控器硬件之間的認證,車門控制器使用一片ATSHA204A,作為認證的Client,DSP28335作為Host,執行認證流程[4]。若認證成功,則認為車門軟件與門控器匹配,正常運行;若認證失敗,則車門軟件進入死循環,不再執行任何功能,認證方式如圖1所示。

3.1 秘鑰管理

ATSHA204A包含一個可以用來存儲密鑰數據的EEPROM陣列,包含16個數據槽,每個數據32個字節,這16個數據槽都可以用來保存秘鑰。寫完秘鑰數據后,配置數據槽的權限為不可讀,不可寫,實現加密功能。車門控制器在出廠前,需要提前燒錄秘鑰數據,將執行車門功能的應用程序與秘鑰程序分開。

3.2 隨機數產生

為防止認證過程中IIC總線上數據被捕獲后,偽造數據實現認證,每次認證過程需要有不同的挑戰信息。ATSHA204A包含一個隨機數發生器,可以獲得一個32字節的隨機數。DSP通過隨機數發生器獲得此隨機數后,組成一個88字節的挑戰信息發送給ATSHA204A執行認證流程。

3.3 SHA-256算法

SHA-256算法容易獲得,但算法中涉及以字節(8bit)為最小單位的連續存儲空間的操作。DSP可以定義char型的8bit變量,但是最小存儲單位是16bit,存儲空間不連續。因此移植算法時需要將數據進行處理,保證存儲空間的連續性。

4 軟件設計

DSP與ATSHA204A通過IIC總線進行通訊,DSP將Challeng發送給ATSHA204A,ATSHA204 A執行完MAC指令之后,發回response,DSP進行對比,如果匹配成功,則程序繼續運行[5],如果失敗,則程序終止運行,從而實現認證的目的。程序包括兩部分:認證流程設計和SHA-256算法移植。

4.1 操作命令

4.1.1 Write命令

命令格式如表1所示。

表1 Write命令列表

參數1的Zone.bit0和Zone.bit1配置寫入數據的區域是配置區、OTP區還是數據區,Zone.bit6配置寫入數據是否需要加密,Zone.bit7配置數據長度是4字節還是32字節。若寫入數據無需加密,則數據2長度為0字節。

4.1.2 Read命令

命令格式如表2所示。

表2 Read命令列表

與寫命令類似,參數1的Zone.bit0和Zone.bit1配置寫入數據的區域是配置區、OTP區還是數據區,Zone.bit7配置數據長度是4字節還是32字節。若讀命令正確執行,芯片將返回4字節或者32字節數據。

4.1.3 Nonce命令

命令格式如表3所示。

表3 Nonce命令列表

隨機命令目的在于更新芯片中的TempKey值。TempKey相當于程序中的臨時變量,用來保存一些中間結果,但這個TempKey值不能被訪問,只能芯片內部本身使用。Nonce命令也是其余多數命令執行前都要執行的一個命令。

參數1的模式如果設置為0或者1的時候,要求輸入一個20字節的隨機數,而后更新芯片內的seed,更新seed能使內部產生的隨機數質量更高。如果設置為3,就要求輸入32字節的隨機數,直接寫在TempKey中。

4.1.4 MAC命令

命令格式如表4所示。

表4 MAC命令列表

模式的詳細含義如表5所示。

表5 MAC模式列表

使用MAC命令可以讓ATSHA204A生成一個摘要。

4.1.5 CheckMAC命令

命令格式如表6所示。

模式的詳細含義如表7所示。

使用CheckMAC命令可以驗證秘鑰。例如有一個主設備,它把秘鑰存在slot0里面,有一些從設備,要輸入正確的密鑰才能使用主設備提供的服務。這種工況下就能夠用這種方式,在總線上也不會傳輸密碼,而且將密碼存儲在ATSHA204A里面更安全。

表6 CheckMAC命令列表

表7 CheckMAC模式列表

4.2 認證流程

主控DSP通過IIC總線與芯片相連,首先在ATSHA204A芯片的slot0中寫入一個32字節的秘鑰,設置為不可讀。在啟動時候,先獲取芯片序列號,然后發送一個隨機數生成命令給ATSHA204A,讓其更新內部的TempKey中的值。DSP內部也根據Nonce的模式計算TempKey的值,稱之為host_tempKey。若上述步驟執行正常,那么TempKey和host_tempKey中的值是一致的。接下來DSP本身就能夠根據host_tempKey、序列號、以及秘鑰計算出一個摘要digest,稱之為digest1。再給ATSHA204A發送MAC命令,ATSHA204A根據存儲在slot0區域中的秘鑰來計算digest2并返回給DSP,DSP判斷digest1和digest2是否匹配,若不匹配則將程序掛起[6]。認證流程如圖2所示。

4.3 認證函數

根據軟件流程設計,列出需實現的函數,以及函數功能的描述,如表8所示。

表8 函數列表

將以上函數編碼完成后,軟件可實現認證功能。

4.4 軟件流程圖

設計的認證程序流程,如圖3所示。

5 軟件驗證

在完成軟件編碼后,需要對認證功能進行驗證。DSP計算的摘要與ATSHA204A返回的摘要一致。

其中,秘鑰數據在芯片配置時已經寫入,保存于slot1的秘鑰數據和32字節的挑戰碼如表9所示。

表9 數據信息列表

查詢A T S HA 20 4 A芯片配置區序列號,Serial Number[0],Serial Number[1]和Serial Number[8]都為固定值,數據分別是01、23、EE。通過SHA-256算法獲得的32字節摘要數據如表10所示。

表10 摘要信息列表

根據MAC命令格式得出DSP軟件發送到ATSHA204A的數據如表11所示。

ATSHA204A芯片會使用芯片內的SN[0]、SN[1]、SN[8]、SLOT1數據,接收到的挑戰碼,KeyID(即01 00),MAC命令碼(08)和mode(00)做一次SHA-256哈希算法,結果是一組32字節的校驗碼,并回傳給DSP(需要執行一次讀回狀態包操作)。

表11 數據信息列表

調用認證函數,使用串口調試,測試數據如圖4所示,DSP計算所得摘要信息與ATSHA204A返回的信息一致,認證通過。

6 結語

ATSHA204A芯片內共有16個數據槽,上述方案只是使用了一個數據槽保存一個秘鑰,如果使用多組秘鑰,執行多次認證,那么安全性將得到提高。芯片還提供一個64字節的一次性編程區,寫入數據后,通過配置,僅允許執行加密讀的操作獲取數據。因此可將控制系統中較為關鍵的參數保存在此區域,首次上電通過加密讀獲取,而IIC總線上不會直接出現這些數據。

另外,在一些應用中,每次都使用相同的秘鑰可能也會帶來風險,而ATSHA204A芯片可以對秘鑰進行更新。例如在使用一次秘鑰進行認證后,當前秘鑰可以被SHA-256算法的摘要信息和特定的信息合并形成后覆蓋,這些特定信息可以配置為常量、時間數據或者隨機數。這樣處理后,原始的秘鑰將被滾動的秘鑰取代,秘鑰數據無法被追溯,由此提高了系統的安全性。

猜你喜歡
哈希字節密鑰
幻中邂逅之金色密鑰
幻中邂逅之金色密鑰
基于特征選擇的局部敏感哈希位選擇算法
No.8 字節跳動將推出獨立出口電商APP
哈希值處理 功能全面更易用
密碼系統中密鑰的狀態與保護*
文件哈希值處理一條龍
No.10 “字節跳動手機”要來了?
Android密鑰庫簡析
巧用哈希數值傳遞文件
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合