• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于OpenCryptoki實(shí)現(xiàn)國密算法功能的研究*

      2018-12-19 01:55:44魏貴鵬
      通信技術(shù) 2018年12期
      關(guān)鍵詞:國密令牌固件

      謝 演,劉 陟,魏貴鵬

      (成都三零嘉微電子有限公司,四川 成都 610041)

      0 引 言

      在密碼系統(tǒng)中,PKCS#11是公鑰加密標(biāo)準(zhǔn)(Public-Key Cryptography Standards,PKCS) 中的一份子,由RSA實(shí)驗(yàn)室(RSA Laboratories)發(fā)布,為加密令牌定義了一組平臺無關(guān)的API,如USBKEY、密碼TF卡和智能卡等。當(dāng)前,PKCS#11已經(jīng)發(fā)展成為一個(gè)通用的加密令牌的抽象層。OpenCryptoki是PKCS#11標(biāo)準(zhǔn)規(guī)范的一個(gè)具體實(shí)現(xiàn)源碼,實(shí)現(xiàn)了協(xié)議規(guī)定的槽管理、對象管理、會話管理、算法功能及密碼管理體系等。

      為了提高國密算法應(yīng)用的接口標(biāo)準(zhǔn)化,基于OpenCryptoki將國密算法集成到PKCS#11密碼體系中,實(shí)現(xiàn)了通過PKCS#11標(biāo)準(zhǔn)接口進(jìn)行密鑰證書管理,可調(diào)用支持國密算法的安全硬件設(shè)備內(nèi)部算法資源,使業(yè)務(wù)和應(yīng)用得到了國密算法的安全保障。

      1 OpenCryptoki說明

      1.1 工程架構(gòu)

      OpenCryptoki工程架構(gòu)為主庫和令牌庫的雙庫式架構(gòu),業(yè)務(wù)應(yīng)用加載主API庫libpkcs11.so(以下簡稱主API庫)。根據(jù)配置文件,主庫自主加載令牌庫(libtoken.so),將其作為一個(gè)設(shè)備令牌掛載在槽[1](slot)上的,最大可支持6個(gè)槽,如圖1所示。

      主API庫:實(shí)現(xiàn)協(xié)議規(guī)范的控制和管理,向上層提供標(biāo)準(zhǔn)密碼函數(shù)接口,向下調(diào)用令牌庫。

      令牌庫:實(shí)現(xiàn)與硬件密碼設(shè)備的交互和適配,完成對PKCS#11規(guī)范及功能的支撐。

      圖1 工程架構(gòu)

      1.2 工程體系機(jī)制

      OpenCryptoki工程自帶一套本地機(jī)制實(shí)現(xiàn)了PKCS#11規(guī)范。當(dāng)在無任何槽掛載條件下,OpenCryptoki使用缺省本地機(jī)制(如openssl、軟件算法、本地存儲等)支持PKCS#11標(biāo)準(zhǔn)規(guī)范。如果用戶開發(fā)新的令牌庫完成與對應(yīng)硬件安全設(shè)備適配后,主API庫會自主加載用戶令牌庫,調(diào)用用戶令牌庫實(shí)現(xiàn)的功能。由于架構(gòu)的靈活性,它可以實(shí)現(xiàn)管理功能函數(shù)功能,使用缺省本地機(jī)制。令牌庫僅實(shí)現(xiàn)其余密碼接口功能。

      令牌庫為用戶自行實(shí)現(xiàn),由主API庫加載。令牌庫可以是純軟件實(shí)現(xiàn)的軟令牌,也可以是能提供密碼安全服務(wù)的硬件密碼設(shè)備(如USBKEY、智能卡、密碼TF卡等),且OpenCryptoki已定義了用戶擴(kuò)展能力(VERDOR_DEFINED),可方便基于原架構(gòu)和體系進(jìn)行擴(kuò)展開發(fā),支撐新的密碼能力。

      2 實(shí)現(xiàn)原理及方式

      本文以成都三零嘉微公司研制已獲得國家密碼管理局認(rèn)證的商用密碼TF卡(以下簡稱密碼卡)作為硬件密碼設(shè)備,并以集成SM2/SM3/SM4和ZUC具體算法為例。

      原OpenCryptoki已實(shí)現(xiàn)了對PKCS#11規(guī)范的體系架構(gòu)和功能,并且設(shè)計(jì)了擴(kuò)展能力來支撐新的密碼及功能。因此,基于OpenCryptoki架構(gòu)可以方便地實(shí)現(xiàn)對國密算法的支持。

      主體實(shí)現(xiàn)策略:密碼卡實(shí)現(xiàn)和提供國密算法(加解密、摘要、簽名驗(yàn)證功能)、PIN和登錄功能,以SD接口實(shí)現(xiàn)與主機(jī)的通信通路,并掛載于主機(jī)文件系統(tǒng)下;實(shí)現(xiàn)密碼卡令牌,完成與密碼卡適配,并實(shí)現(xiàn)PIN、登陸和國密算法功能,供主API庫調(diào)用。主API庫實(shí)現(xiàn)API接口對國密算法的適配,包含國密算法定義擴(kuò)展、標(biāo)準(zhǔn)接口新增國密功能和重新擴(kuò)展新國密算法接口。會話管理、對象管理和槽管理使用原OpenCryptoki現(xiàn)成的缺省本地機(jī)制,無需重新實(shí)現(xiàn)。如圖2所示,該方式依托OpenCryptoki擴(kuò)展能力和缺省本地機(jī)制,設(shè)計(jì)簡單,對嵌入式密碼卡的CPU和存儲資源要求不高,密碼設(shè)備執(zhí)行效率高。

      圖2 實(shí)現(xiàn)流程

      3 國密算法功能實(shí)現(xiàn)

      3.1 算法定義擴(kuò)展

      原生OpenCryptoki對算法種類和使用有明確的定義和說明,每種算法由算法類型和算法機(jī)制進(jìn)行描述和定義。國密算法在原生OpenCryptoki中沒有定義,因此需要利用用戶擴(kuò)展定義(VERDOR_DEFINED)新增算法定義。

      算法類型CKK_XXX是對算法種類名稱的定義,如DSA、RSA、AES等。算法機(jī)制為一個(gè)描述組,包含算法模式類型CKM_XXX,是對一種算法的不同模式的定義,如DES_CBC、SHA256_HMAC等;算法可支持的最大和最小密鑰長度支持;算法功能CKF_XXX是對該算法模式的加解密,簽名多項(xiàng)功能類型的說明,如CKF_ENCRYPT、CKF_SIGN、CKF_DIGEST、CKF_GENERATE_KEY_PAIR等。以集成SM4算法為例,算法類型定義為CKK_SM4,算法模式類型定義為CKM_SM4_CBC、CKM_SM4_EBC、CKM_SM4_OFB[2]等,最大和最小密鑰支持均填16,算法功能定義為CKF_ENCRYPT|CKF_DECRYPT|CKF_WARP|CKF_UNWARP(詳細(xì)WARP描述請參考PKCS#11規(guī)范)。完成算法描述擴(kuò)展后,才能使OpenCryptoki識別一種新的算法。

      3.2 密碼函數(shù)功能擴(kuò)展

      標(biāo)準(zhǔn)PKCS#11整套密碼服務(wù)功能包括密鑰(對)生成、加解密、簽名驗(yàn)證和摘要等。密碼體系規(guī)范除隨機(jī)數(shù)生成。密鑰(對)生成功能外加解密、簽名驗(yàn)證、摘要均使用三段式(init-update-final)和兩段式(init-func)結(jié)構(gòu)。國密算法使用模式可無縫對接,基于算法定義擴(kuò)展,采用標(biāo)準(zhǔn)密碼API函數(shù)接口基礎(chǔ)上擴(kuò)展新的功能定義進(jìn)行支持,無法兼容標(biāo)準(zhǔn)API重新擴(kuò)展新的API功能函數(shù)接口。

      3.2.1 標(biāo)準(zhǔn)密碼接口擴(kuò)展國密算法功能

      此處以摘要初始化接口擴(kuò)展國密SM3和ZUCHASH算法舉例說明。

      標(biāo)準(zhǔn)函數(shù)原型:CK_DEFINE_FUNCTION(CK_RV,C_DigestInit)(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism)

      參數(shù):

      hSession:會話句柄;

      pMechanism:機(jī)制結(jié)構(gòu)體指針;

      mechanism:機(jī)制,可使用CKM_ZUC_EIA[3]、CKM_HMAC_SM3[4]和 CKM_HASH_SM3;

      pParameter:傳入存放IV或WorkKey數(shù)據(jù)空間指針;

      ulParameterLen:傳入pParameter所指向空間的數(shù)據(jù)的長度;

      SM3-HASH:不需要任何IV和WorkKey,pParameter為 NULL;

      SM3-HMAC:pParameter指 向 WorkKey數(shù) 據(jù)空間;

      ZUC-EIA:pParameter指 向 IV(16B)+WorkKey(16B)(IV在前)的數(shù)據(jù)空間。

      SM3算法和ZUC-HASH算法均可以兼容使用PKCS#11標(biāo)準(zhǔn)摘要密碼接口。而對于差異和區(qū)分,擴(kuò)展定義了新算法類型,并對pMechanism機(jī)制進(jìn)行特殊定義以滿足參數(shù)輸入,以此來完成適配。其余加解密、簽名驗(yàn)證算法接口適配方式與上同,均使用對應(yīng)標(biāo)準(zhǔn)密碼接口,擴(kuò)展新功能定義,此處不再累述。

      3.2.2 國密算法擴(kuò)展接口

      國密算法點(diǎn)乘[5]功能并沒有現(xiàn)成的標(biāo)準(zhǔn)接口可以直接適配,因此需進(jìn)行新接口擴(kuò)展,具體擴(kuò)展說明如下。

      擴(kuò)展函數(shù)原型:

      CK_DEFINE_FUNCTION(CK_RV,C_PointMultiply)

      (CK_SESSION_HANDLE hSession,CK_MECHANISM_PTR pMechanism,CK_OBJECT_HANDLE hKey, CK_BYTE_PTR pOutData,CK_ULONG_PTR pOutLen)

      參數(shù):

      hSession:會話句柄;

      pMechanism:機(jī)制結(jié)構(gòu)體指針;

      mechanism:CKM_SM2_POINT_MULT;

      pParameter:傳入公鑰;

      ulParameterLen:傳入公鑰長度,即64字節(jié);

      hKey:私鑰句柄;

      pOutData:得到點(diǎn)乘結(jié)果;

      pOutLen:得到點(diǎn)乘結(jié)果長度。

      3.3 令牌庫實(shí)現(xiàn)

      3.3.1 實(shí)現(xiàn)原理

      密碼卡通過SD接口掛載于主機(jī),令牌庫通過操作SD接口與密碼卡進(jìn)行數(shù)據(jù)交互,實(shí)現(xiàn)PIN管理、登陸以及各類算法業(yè)務(wù)功能,即可實(shí)現(xiàn)向下對密碼卡的適配。同時(shí),將已在OpenCryptoki定義好的令牌功能函數(shù)(token_specific_xxx)入口地址賦值給庫函數(shù)列表(結(jié)構(gòu)體指針),供主API初始化即可向上實(shí)現(xiàn)套接,不需或未實(shí)現(xiàn)的函數(shù)指針賦值為NULL,主API調(diào)用判斷為NULL則使用缺省機(jī)制功能,不為NULL則向下調(diào)用令牌庫功能函數(shù)。

      3.3.2 結(jié)構(gòu)層級實(shí)現(xiàn)

      令牌庫結(jié)構(gòu),如圖3所示。令牌庫位于主機(jī)系統(tǒng)的標(biāo)準(zhǔn)文件系統(tǒng)和文件操作之上,分為設(shè)備通信層和業(yè)務(wù)適配層。

      圖3 令牌庫結(jié)構(gòu)

      設(shè)備通信層以系統(tǒng)文件操作fopen、fwrite、fread、fclose為基礎(chǔ),建立與密碼卡的通信通路,設(shè)立統(tǒng)一的通信格式,并將各業(yè)務(wù)交互數(shù)據(jù)按通信協(xié)議封包發(fā)送,接收設(shè)備處理結(jié)果,判定通信狀態(tài)。

      業(yè)務(wù)適配層主要完成業(yè)務(wù)數(shù)據(jù)轉(zhuǎn)接和適配,以約定的業(yè)務(wù)數(shù)據(jù)處理格式進(jìn)行緩存封包處理、參數(shù)及安全檢查,然后交給通信層獲得處理的數(shù)據(jù)或結(jié)果。

      3.3.3 函數(shù)接口實(shí)現(xiàn)

      業(yè)務(wù)適配層函數(shù)已由OpenCryptoki工程定義好,具體為token_specific_xxx,不需要重新實(shí)現(xiàn)直接使用即可。

      設(shè)備通信層函數(shù)接口:

      登錄管理類

      CK_INT AG_Device_Init(void)

      CK_INT AG_Login(CK_BYTE *pinBuf,CK_UINT inLen)

      ……

      密碼功能類:

      CK_INT AG_SM2_DSA_Init(void)

      CK_INT AG_SM2_Sign (CK_BYTE *pinBuf,CK_UINT iLen,CK_BYTE *poutBuf,CK_UINT iOutLen)

      ……

      (由于篇幅此處不累述)

      3.4 通信協(xié)議幀實(shí)現(xiàn)

      通信協(xié)議幀由兩部分組成:業(yè)務(wù)數(shù)據(jù)(payload)和控制頭(ctrl_head)。業(yè)務(wù)數(shù)據(jù)緊跟在控制頭之后,業(yè)務(wù)數(shù)據(jù)最大僅支持4 096 B,如圖4所示。

      圖4 協(xié)議幀

      控制頭(必須)主要完成主體業(yè)務(wù)功能定義,結(jié)構(gòu)體內(nèi)每個(gè)字段域意義進(jìn)行統(tǒng)一的宏定義,庫和固件均按該控制頭協(xié)議及定義進(jìn)行解析和處理,結(jié)構(gòu)如下:

      typedef struct_ctrl_

      {

      unsigned int direction;//傳輸方向

      unsigned int cmd_id;//業(yè)務(wù)功能命令碼

      unsigned int alg_id;//算法類型

      unsigned int mode;//算法模式

      unsigned int length;//業(yè)務(wù)數(shù)據(jù)長度

      unsigned int result;//處理結(jié)果

      unsigned int reserved_1;

      unsigned int reserved_2;

      }CTRL_INFO;

      業(yè)務(wù)數(shù)據(jù)(可選)主要完成每個(gè)業(yè)務(wù)具體數(shù)據(jù)的格式約定。由于PKC11業(yè)務(wù)功能多,不同業(yè)務(wù)類型數(shù)據(jù)含義不一致,因此業(yè)務(wù)數(shù)據(jù)也需要約定。

      由于篇幅限制,此處以pin碼管理的set_pin(設(shè)置pin碼)舉例說明。從用戶端輸入的新pin和老pin的業(yè)務(wù)數(shù)據(jù)按此數(shù)據(jù)域和順序組合:oldpinlen(4)+oldpin(pinlen)+newpinlen(4)+newpin(pinlen);固件端解析完控制頭協(xié)議為set_pin操作命令后,后續(xù)業(yè)務(wù)數(shù)據(jù)按上述格式進(jìn)行解析和處理完成set_pin功能,其余業(yè)務(wù)數(shù)據(jù)的格式自行約定。

      3.5 密碼卡固件實(shí)現(xiàn)

      3.5.1 固件主體結(jié)構(gòu)

      密碼卡作為從設(shè)備的角色來響應(yīng)主機(jī)下發(fā)的數(shù)據(jù)命令,只負(fù)責(zé)接收主機(jī)端的命令數(shù)據(jù),協(xié)議幀解析,并完成指定的功能和處理,向主機(jī)端上傳狀態(tài)、結(jié)果、數(shù)據(jù)等。整個(gè)固件設(shè)計(jì)結(jié)構(gòu)為簡單的主循環(huán)調(diào)用,層級如圖5所示。

      驅(qū)動(dòng)庫直接操作和訪問硬件模塊寄存器,可提供各硬件模塊的驅(qū)動(dòng)接口函數(shù),供業(yè)務(wù)調(diào)用。

      業(yè)務(wù)功能基于模塊驅(qū)動(dòng)實(shí)現(xiàn)主要業(yè)務(wù)函數(shù)及功能,包含SD通信、初始化配置、pin碼設(shè)置管理、登錄及狀態(tài)管理、國密算法加解密、簽名驗(yàn)證、摘要等處理(SM2/SM3/SM4和ZUC等)、密鑰(密鑰對)生成和隨機(jī)數(shù)生成等主要功能。

      圖5 主體結(jié)構(gòu)

      主調(diào)用即固件主體調(diào)度主函數(shù),主要實(shí)現(xiàn)初始化及配置,讓固件進(jìn)入正常工作狀態(tài),并對下發(fā)數(shù)據(jù)進(jìn)行協(xié)議解析,然后按解析結(jié)果調(diào)用具體業(yè)務(wù)函數(shù)實(shí)現(xiàn)業(yè)務(wù)功能,并上報(bào)結(jié)果。

      3.5.2 固件處理流程

      如圖6所示,固件設(shè)計(jì)采用中斷子程序加主循環(huán)程序的結(jié)構(gòu)。中斷子程序用來處理指定事件,主要是SD通信數(shù)據(jù)接收和回復(fù),實(shí)現(xiàn)與主機(jī)的數(shù)據(jù)交互;主循環(huán)程序?qū)邮盏臄?shù)據(jù)進(jìn)行解析和處理,并準(zhǔn)備處理后數(shù)據(jù)或結(jié)果數(shù)據(jù),主要功能有通信協(xié)議解析,對各業(yè)務(wù)的數(shù)據(jù)按約定數(shù)據(jù)域進(jìn)行分析和處理,調(diào)用相對應(yīng)的算法資源,完成指定安全算法功能,向主機(jī)返回處理結(jié)果等。設(shè)計(jì)主循環(huán)程序與中斷子程序通過一個(gè)數(shù)據(jù)接收標(biāo)志進(jìn)行狀態(tài)轉(zhuǎn)換和調(diào)度,數(shù)據(jù)傳遞和交互通過定義兩個(gè)讀寫RAM空間實(shí)現(xiàn),兩個(gè)程序分時(shí)獨(dú)立訪問和操作管理。

      圖6 固件處理流程

      3.5.3 固件功能函數(shù)接口

      登錄管理類

      UINT16 bs_system_init(void)

      UINT16 bs_system_finalize(void)

      UINT16 bs_user_login(UINT8 *pinbuf,UINT32 length)

      ……

      密碼功能類:

      UINT16 bs_sm2_dsa_init(void)

      UINT16 bs_sm2_signature(UINT8 *pinbuf,

      UINT32 length,UINT8 *outbuf,UINT32 *pout_len)

      ……

      (由于篇幅此處不累述)

      4 結(jié) 語

      本文介紹了一種實(shí)現(xiàn)方法可以實(shí)現(xiàn)PKCS#11接口對國密算法體系的集成和支撐,由庫層進(jìn)行高效管理,嵌入式密碼安全設(shè)備處理具體安全密碼業(yè)務(wù),既保證了算法安全性,又對嵌入式密碼安全設(shè)備要求低,占用資源少,執(zhí)行高效,且使用統(tǒng)一的接口規(guī)范,極大地提高了國密接口友好性和開發(fā)者的效率,促使國密算法得到更廣泛的推廣和應(yīng)用。

      猜你喜歡
      國密令牌固件
      稱金塊
      國密技術(shù)在智能燃?xì)獗硐到y(tǒng)的應(yīng)用與分析
      煤氣與熱力(2021年7期)2021-08-23 01:11:14
      Hyperledger Fabric平臺的國密算法嵌入研究
      基于路由和QoS令牌桶的集中式限速網(wǎng)關(guān)
      自助終端設(shè)備國密改造方法探究
      動(dòng)態(tài)令牌分配的TCSN多級令牌桶流量監(jiān)管算法
      基于國密算法的銀行移動(dòng)營銷終端安全系統(tǒng)研究
      電子測試(2018年9期)2018-06-26 06:45:40
      基于固件的遠(yuǎn)程身份認(rèn)證
      提取ROM固件中的APP
      電腦愛好者(2015年7期)2015-04-09 08:54:02
      一種通過USB接口的可靠固件升級技術(shù)
      嘉荫县| 芜湖市| 凉山| 南充市| 寿宁县| 思南县| 平罗县| 太原市| 温泉县| 永清县| 门头沟区| 桐乡市| 佳木斯市| 琼海市| 得荣县| 阳东县| 囊谦县| 鹤庆县| 那曲县| 福泉市| 大邑县| 南岸区| 横峰县| 隆化县| 长白| 宁陵县| 会同县| 梓潼县| 高邮市| 秀山| 汕尾市| 阳信县| 通榆县| 会宁县| 康平县| 乐至县| 临猗县| 中江县| 屏山县| 甘孜| 平谷区|