關 閉

        新聞中心

        EEPW首頁 > 安全與國防 > 設計應用 > 基于國密算法的設備安全認證系統設計

        基于國密算法的設備安全認證系統設計

        作者:許小波 (上海交通大學電子系,上海 200240) 時間:2021-04-15 來源:電子產品世界 收藏
        編者按:本文針對電子產品主機與設備之間的安全認證,提出國密算法用于安全認證,設計出通過兩次簽名驗證完成主機對設備和設備對主機的認證方法,并以手機主機對電池的認證進行示例演示。


        本文引用地址:http://www.104case.com/article/202104/424485.htm

        0   引言

        我們日常生活中使用的電子產品常常是主機帶有設備,如打印機與墨盒,蘋果手機與數據線。這些主機與設備之間一般都有一個過程,即認證該設備是否合法,只有合法的設備接入主機才允許使用,以此保證產品安全可靠地運行。在方法上,文獻[1]中討論了使用國際安全算法SHA-256 和ECDSA 的實現方式,并且只包含了主機對設備的,并沒有設備對主機的安全認證,屬于單向認證。本文首先討論了基于算法的設備安全認證方式,然后設計出基于算法的設備單、雙向安全認證系統。

        作者簡介:許小波(1982—),男,碩士生,主要研究方向為嵌入式系統安全,Email: xuxiaobo1997@163.com。

        1   算法安全認證方式

        國密算法中包含對稱密鑰算法SM1、SM4 等和非對稱密鑰算法[2],對稱算法即消息發送和接收雙方使用相同的密鑰進行運算,其好處是運算速度快,缺點是需要嚴格保管好該密鑰。非對稱密鑰算法即消息發送和接收雙方使用不同的密鑰進行運算,消息發送方使用私鑰簽名,消息接收方使用公鑰驗證簽名,其特點與對稱密鑰算法正好相反,運算速度稍慢,但只需要保管好私鑰就行了,公鑰是可以公開的。基于上述特點,在我們的討論的主機與設備的安全認證中,若是采用對稱算法,即主機與設備都使用相同的的密鑰,這就要求設備端的密鑰不能被竊取,大大增加設備端的安全保護難度。

        因此,我們采用國密非對稱算法

        2   國密算法安全認證系統設計

        首先,預置認證公鑰。我們產生一對認證的密鑰對Authentication_Private_Key 和Authentication_Public_Key。在設備生產工廠的安全環境下,將認證公鑰Authentication_Public_Key 預置到設備里,其次,用認證私鑰對設備唯一性數據進行簽名。設備里產生一對設備的SM2 密鑰對Device_Private_Key 和Device_Public_Key。導出設備的Device_Public_Key 和設備序列號等設備唯一性數據,由認證私鑰Authentication_Private_Key 對其簽名,將簽名信息再置入到設備里,預置后的設備所含數據如圖1 所示。以上兩步都是設備生產工廠的安全環境下進行,同時要求設備出廠后對置入的認證公鑰和簽名信息、設備的SM2 密鑰對、設備序列號等唯一性數據不可更改。最后,設備出廠后認證方法如下。

        主機端預置認證公鑰證書Authentication_Public_Key,讀取設備里的認證公鑰信息進行比較,不一致則認證失敗;若一致則繼續讀取設備里的設備公鑰Device_Public_Key、序列號等唯一性數據和簽名信息,進行SM2 簽名驗證。若簽名驗證失敗則設備認證失敗;若簽名驗證通過,則進一步地向設備發送一個設備認證隨機數,設備端用設備私鑰Device_Private_Key 對該隨機數進行SM2 簽名,返回該隨機數的簽名信息給主機,主機端用前面讀取的設備公鑰Device_Public_Key 對其進行SM2 簽名驗證。若簽名驗證失敗則設備認證失敗;若簽名驗證通過,則主機對設備認證成功。整個處理流程如圖2 所示。

        image.png

        對于更高安全級別的系統,設備端也可以對主機進行認證,即雙向認證系統,其方法為:主機端除了預置認證公鑰證書Authentication_Public_Key,還預置有一對主機端的SM2 密鑰對Host_Private_Key 和Host_Public_Key,并且預置認證私鑰Authentication_Private_Key 對Host_Public_Key 的簽名信息。然后,主機將Host_Public_Key 和該簽名信息發送給設備進行SM2簽名驗證。若驗證通過,主機再向設備請求一個主機認證隨機數,然后主機端用主機端的SM2 私Host_Private_Key 對該隨機數進行SM2 簽名,再將其發送給設備進行SM2 簽名驗證。若驗證通過,則完成了設備對主機認證。整個處理流程如圖3 所示。

        image.png

        3   國密算法認證系統示例

        我們以手機主機對電池認證為例,在手機開機或充電時手機主機對電池設備進行安全認證,只有認證成功之后手機才能開機運行或對其充電。為此,我們需要在電池設備里增加一顆國密安全芯片,用于和手機主機進行數據交互,預置公鑰的安全存儲和國密算法的簽名驗簽等操作。這里我們選用上海愛信諾航芯電子科技有限公司的國密安全芯片ACL16,它采用32 位ARM Cortex-M0 內核,最高主頻48 MHz,集成國密、國際算法等多種安全算法模塊,電壓、頻率、溫度等安全檢測功能和主動金屬屏蔽層保護、總線加密串擾等多種保護功能,擁有USB、SPI、UART、I2C 等豐富的外設接口,內置RC振蕩器,專門面向低成本、低功耗的應用領域[3]

        硬件方面,我們采用兩線的I2C 做為手機主機與ACL16 的通訊接口,手機主機做為I2C 主設備,ACL16做為I2C 從設備,再加上電源和地線接口,ACL16 這邊就完成了。由于兩邊I/O 口電壓不同,還需要在手機主機端增加一顆電壓轉換芯片,以實現1.8~3.3 V 的電壓轉換。整個硬件框圖如圖4 所示。

        image.png

        軟件方面包括ACL16的安全固件和手機主機軟件,我們先來看ACL16 這邊的安全固件。ACL16 在上電后,首先進行系統初始化,開啟各安全檢測模塊,初始化I2C 接口,然后等待接收手機主機發送的命令。待接收完一包命令數據后,對命令數據進行完整性校驗,只有校驗通過后才對命令進行處理。最后,待命令處理完成,將命令響應數據發送給手機主機。

        手機主機方面的軟件分包括,處理與ACL16 通訊的Linux 驅動和Android Java 應用層代碼。在Linux 驅動里,主要完成向I2C 總線驅動上注冊驅動,注冊字符設備和在/dev 目錄創建設備文件authenticator,以使應用層對設備文件authenticator 的讀寫操作時進而對ACL16 進行發送命令和接收命令響應。Android 應用層代碼包括JNI 的so 庫和Java 應用,其中so 庫主要完成對authenticator 設備的打開、讀寫操作,為Java 層提供操作接口。Android Java 應用則主要通過調用so 庫的接口,實現手機主機對電池的認證操作流程和電池對主機的認證操作流程。對于JAVA 上的SM2 簽名、驗簽操作,其相關接口采用的是Bouncy Castle 加密庫bcprovjdk15to18-168.jar 中的SM2 接口。Bouncy Castle 加

        密庫是澳大利亞非營利組織Bouncy Castle 編寫的輕量級加密API[4],非常適合在手機上使用,最新版本為Version 1.68,包含了對最新CVE 漏洞的修復,以及對TLS 1.3 版本的支持。我們在手機演示界面上添加三個按鈕,分別執行主機認證設備、設備認證主機和清除顯示日志操作。其中點擊完“主機認證設備”按鈕后的界面如圖5 所示,點擊完“設備認證主機”按鈕后的界面如圖6 所示。

        image.png

        圖5 點擊主機認證設備按鈕后的界面

        image.png

        圖6 點擊設備認證主機按鈕后的界面

        4   結語

        具有國內自主知識產權的國密算法已經在金融領域開展使用,并逐步替代國際安全算法。本文提出了基于國密算法用于設備的安全認證系統,可取代現有的國際算法安全認證,并可在更廣泛的物聯網領域進行實際推廣應用。

        參考文獻:

        [1] D’ONOFRI M.通過設備認證杜絕造假[J].電子技術及信息科學,2015(01):32-34.

        [2] 國家密碼管理局.SM2橢圓曲線公鑰密碼算法[R/OL].[ 2010-12-17].https://www.oscca.gov.cn/sca/xxgk/2010-12/17/content_1002386.shtml.

        [3] ACL16_Datasheet_V2.0.pdf[Z].

        [4] Bouncy Castle Cryptography Library[R/OL].https://www.bouncycastle.org/java.html.

        (本文來源于《電子產品世界》雜志2021年3月期)



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 买车| 井陉县| 新乐市| 台中市| 杭州市| 天祝| 苍山县| 独山县| 浦城县| 玛沁县| 东辽县| 博兴县| 泸溪县| 九龙县| 额尔古纳市| 雅安市| 伊宁市| 新竹县| 垫江县| 绥江县| 米易县| 社旗县| 太原市| 兰州市| 江口县| 胶南市| 宿迁市| 大港区| 什邡市| 上虞市| 和田县| 宁陵县| 色达县| 晋城| 大方县| 巴马| 保德县| 鄂伦春自治旗| 巴彦淖尔市| 西峡县| 昌乐县|