亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于OpenCryptoki實現(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實驗室(RSA Laboratories)發(fā)布,為加密令牌定義了一組平臺無關(guān)的API,如USBKEY、密碼TF卡和智能卡等。當(dāng)前,PKCS#11已經(jīng)發(fā)展成為一個通用的加密令牌的抽象層。OpenCryptoki是PKCS#11標(biāo)準(zhǔn)規(guī)范的一個具體實現(xiàn)源碼,實現(xiàn)了協(xié)議規(guī)定的槽管理、對象管理、會話管理、算法功能及密碼管理體系等。

        為了提高國密算法應(yīng)用的接口標(biāo)準(zhǔn)化,基于OpenCryptoki將國密算法集成到PKCS#11密碼體系中,實現(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),將其作為一個設(shè)備令牌掛載在槽[1](slot)上的,最大可支持6個槽,如圖1所示。

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

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

        圖1 工程架構(gòu)

        1.2 工程體系機制

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

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

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

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

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

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

        圖2 實現(xiàn)流程

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

        3.1 算法定義擴展

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

        算法類型CKK_XXX是對算法種類名稱的定義,如DSA、RSA、AES等。算法機制為一個描述組,包含算法模式類型CKM_XXX,是對一種算法的不同模式的定義,如DES_CBC、SHA256_HMAC等;算法可支持的最大和最小密鑰長度支持;算法功能CKF_XXX是對該算法模式的加解密,簽名多項功能類型的說明,如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ī)范)。完成算法描述擴展后,才能使OpenCryptoki識別一種新的算法。

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

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

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

        此處以摘要初始化接口擴展國密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:機制結(jié)構(gòu)體指針;

        mechanism:機制,可使用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ū)分,擴展定義了新算法類型,并對pMechanism機制進(jìn)行特殊定義以滿足參數(shù)輸入,以此來完成適配。其余加解密、簽名驗證算法接口適配方式與上同,均使用對應(yīng)標(biāo)準(zhǔn)密碼接口,擴展新功能定義,此處不再累述。

        3.2.2 國密算法擴展接口

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

        擴展函數(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:機制結(jié)構(gòu)體指針;

        mechanism:CKM_SM2_POINT_MULT;

        pParameter:傳入公鑰;

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

        hKey:私鑰句柄;

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

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

        3.3 令牌庫實現(xiàn)

        3.3.1 實現(xiàn)原理

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

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

        令牌庫結(jié)構(gòu),如圖3所示。令牌庫位于主機系統(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ù)接口實現(xiàn)

        業(yè)務(wù)適配層函數(shù)已由OpenCryptoki工程定義好,具體為token_specific_xxx,不需要重新實現(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é)議幀實現(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)每個字段域意義進(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ù)(可選)主要完成每個業(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 密碼卡固件實現(xiàn)

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

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

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

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

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

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

        3.5.2 固件處理流程

        如圖6所示,固件設(shè)計采用中斷子程序加主循環(huán)程序的結(jié)構(gòu)。中斷子程序用來處理指定事件,主要是SD通信數(shù)據(jù)接收和回復(fù),實現(xiàn)與主機的數(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)的算法資源,完成指定安全算法功能,向主機返回處理結(jié)果等。設(shè)計主循環(huán)程序與中斷子程序通過一個數(shù)據(jù)接收標(biāo)志進(jìn)行狀態(tài)轉(zhuǎn)換和調(diào)度,數(shù)據(jù)傳遞和交互通過定義兩個讀寫RAM空間實現(xiàn),兩個程序分時獨立訪問和操作管理。

        圖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é) 語

        本文介紹了一種實現(xiàn)方法可以實現(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è)備國密改造方法探究
        動態(tài)令牌分配的TCSN多級令牌桶流量監(jiān)管算法
        計算機工程(2018年8期)2018-08-17 00:26:54
        基于國密算法的銀行移動營銷終端安全系統(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ù)
        亚洲在线视频一区二区| 人妻无码aⅴ不卡中文字幕| 青青草国产成人99久久 | 精品高清国产乱子伦| 久久99精品久久只有精品| 亚洲av中文无码乱人伦在线咪咕| 亚洲av无码不卡| 国产精品高潮av有码久久| 日本91一区二区不卡| 国产爆乳美女娇喘呻吟| 国产精品无码一区二区三区免费| 国产精品视频免费的| 中文字幕日本在线乱码| 97一期涩涩97片久久久久久久| www国产无套内射com| 白白色免费视频一区二区| 国产视频在线观看一区二区三区 | 婷婷丁香91| 男女啪啪免费视频网址| 中文无码av一区二区三区| 国产成人av性色在线影院色戒| 无遮挡中文毛片免费观看| 久久久国产精品首页免费| 免费人成小说在线观看网站| 天美传媒精品1区2区3区| 亚洲乱在线播放| 亚洲一区二区三区成人网| 又爽又黄又无遮挡网站| 精品日韩国产欧美在线观看| 青青草视频在线你懂的| 人妻精品在线手机观看| 免费看泡妞视频app| 99re国产电影精品| 国产精品一区二区久久久av| 亚欧免费无码aⅴ在线观看| 精品国产群3p在线观看| 精品在线亚洲一区二区三区| 色偷偷偷在线视频播放| 亚洲欧美精品伊人久久| 精品国产乱码久久免费看| 日日噜噜夜夜狠狠久久丁香五月|