SKF密码设备研究
密碼設(shè)備
mToken GM3000 國密身份認證鎖是龍脈科技自主研發(fā)設(shè)計支持國密算法、完全遵照國家密碼管理局頒布的《智能IC卡及智能密碼鑰匙密碼應(yīng)用接口規(guī)范》要求設(shè)計的USB Key,采用國產(chǎn)高性能智能卡芯片,內(nèi)置SSF33、SM1、SM2、SM3、SM4等國產(chǎn)算法,支持高速數(shù)據(jù)國密算法加解密,提供CSP以及PKCS11和國密接口,完全符合國家密碼管理局關(guān)于“密鑰不落地”的技術(shù)規(guī)范要求,是電子政務(wù)、電子軍務(wù)、CA廠商首選的USB Key產(chǎn)品。
適用范圍:主要是用作基于公鑰體系PKI的數(shù)字證書和私鑰的安全載體。
使用目的:學習使用key導入數(shù)字證書等功能
SKF密碼設(shè)備
SKF密碼設(shè)備使用的是SKF接口,SKF接口是國密標準中智能密碼鑰匙的C語言應(yīng)用開發(fā)接口標準,目前很多國內(nèi)密碼密碼設(shè)備廠商都為其產(chǎn)品提供了SKF接口的開發(fā)包。開發(fā)者可以通過統(tǒng)一的SKF接口開發(fā)密碼應(yīng)用,訪問來自不同設(shè)備供應(yīng)商的USB-Key、TF卡、智能卡等不同形態(tài)的密碼設(shè)備,而無需和某一個設(shè)備供應(yīng)商的專屬設(shè)備或?qū)俳涌诮壎ā?/p>
GmSSL項目從2.0版本開始,以Engine的方式增加了對SKF設(shè)備的完善支持。GmSSL通過在libcrypto密碼庫中引入SKF框架,實現(xiàn)了對不同廠商SKF設(shè)備的支持。通過將SKF接口封裝為SKF Engine,使得上層應(yīng)用和SSL庫可以直接通過EVP接口動態(tài)調(diào)用不同SKF設(shè)備。
GmSSL通過ENGINE機制支持密碼硬件。鑒于《智能IC卡及智能密碼鑰匙密碼應(yīng)用接口規(guī)范》標準中公布了訪問國密硬件的C語言API (下面簡稱SKF API),GmSSL通過ENGINE機制訪問支持國密SKF API的國產(chǎn)密碼硬件。一個SKF API設(shè)備中可以包含一個或多個應(yīng)用(Application),每個應(yīng)用可以包含一個獲多個容器(Container),每個容器中可以存放兩對分別用于加密和簽名的密鑰對,以及兩個相應(yīng)的證書或證書鏈。每一個容器只能為ECC或RSA一種類型,一個容器中不能混用ECC密鑰和RSA密鑰。
SKF密碼設(shè)備管理
通過gmssl命令行工具的skf命令可以訪問和管理SKF設(shè)備,通過gmssl的pkey、pkeyutl和req等命令及SKF引擎可以密碼計算、公鑰導出、證書生成等功能。我按照文章http://gmssl.org/docs/skf.html所介紹的方法,對mToken GM3000在Linux下進行管理,需要在Linux下先安裝mToken GM3000的驅(qū)動程序。
dpkg -i LM-mPluginV4-V4.0.0.0.amd64.deb 命令用來安裝插件
插件安裝成功后,要想進行設(shè)備管理,需要獲得由廠商提供的針對該類型設(shè)備的動態(tài)庫,這個動態(tài)庫通常隨廠商的開發(fā)SDK提供,在Linux操作系統(tǒng)中以so為擴展名,在skf命令中,通過參數(shù)-lib指定廠商的SKF動態(tài)庫。剛開始我并沒有找到廠商提供的動態(tài)庫,在網(wǎng)頁中的命令如下:
$ ln -s /path/to/vendors/skf/libSKF.so ./libskf.so
$ gmssl skf -lib ./libskf.so -vendor wisec -listdevs
Device 0 : /media/guanzhi/99E1-9854
其中,-lib參數(shù)用來指定廠商的SKF動態(tài)庫,在提供的中間件文件夾中mToken-GM3000中的skf\api\linux\x86,最后找到了該動態(tài)庫名為libgm3000.1.0.so。所以對該動態(tài)庫進行重命名,用./libskf.so命名。
查看skf的相關(guān)命令gmssl skf -help
后來發(fā)現(xiàn)可以使用skf命令查看設(shè)備信息等功能
gmssl skf -lib ./libskf.so -vendor wisec -listdevs
gmssl skf -lib ./libskf.so -dev $設(shè)備名稱 -devinfo
進行應(yīng)用管理的時候包含創(chuàng)建應(yīng)用、枚舉應(yīng)用、刪除應(yīng)用。首先,我們可以通過-listapps指令枚舉指定設(shè)備中的應(yīng)用,普通用戶在拿到設(shè)備時,可能已經(jīng)有預(yù)先設(shè)備好的應(yīng)用。
gmssl skf -lib ./libskf.so -dev $DEV -authkey $AUTHKEY -listapps
在文檔中看到設(shè)備認證的流程:
gmssl skf -lib ./libskf.so -dev $DEV -authkey $AUTHKEY -listapps
使用命令查看設(shè)備的應(yīng)用時,出現(xiàn)錯誤
秘鑰容器管理
SKF設(shè)備中以密鑰容器的方式管理私鑰,一個應(yīng)用中可以建立多個密鑰容器,每個密鑰容器中可以裝載同類型的2對公私鑰對,其中一個為簽名密鑰對,一個為加解密或密鑰交換密鑰對。簽名密鑰對只能在SKF設(shè)備內(nèi)部生成而無法由外部導入,而加解密或密鑰交換密鑰只能從外部導入而無法在設(shè)備內(nèi)部生成。在完成密鑰生成或?qū)牒?#xff0c;密鑰對中只有公鑰可以導出,私鑰是無法導出的。密鑰容器還支持證書的存儲,一個密鑰容器中可以存儲兩個證書或兩條證書鏈,分別對應(yīng)兩個密鑰對。
證書生成
用戶秘鑰及證書生成過程如下:
mkdir demoCA
cd demoCA
mkdir certs crl newcerts private
touch index.txt
od -vAn -N4 -tx1 < /dev/urandom |tr -d ’ ’ > serial
echo “good” >> testPage.txt
gmssl sm2 -genkey -out private/cakeyGM.pem
生成SM2自簽證書作為根CA
gmssl req -new -x509 -key private/cakeyGM.pem -out cacertGM.crt
生成用戶SM2密鑰對
cd …
gmssl sm2 -genkey -out wzz.com.key
生成證書請求
gmssl req -new -key wzz.com.key -out wzz.com.csr
利用CA進行簽名
sudo gmssl ca -in wzz.com.csr -out wzz.com.crt -cert demoCA/cacertGM.crt -keyfile demoCA/private/cakeyGM.pem
驗簽
gmssl verify -verbose -x509_strict -CAfile demoCA/cacertGM.crt wzz.com.crt
生成PKCS12格式的證書文件
cd demoCA
sudo gmssl pkcs12 -export -in cacertGM.crt -inkey private/cakeyGM.pem -out wzzRootCA.p12
導入證書
登錄管理工具
導入證書,選擇剛剛在Linux下生成的證書
可以導入PCKS12格式的證書
最后可以實現(xiàn)安裝證書
總結(jié)
- 上一篇: 编译Android版本TensorFlo
- 下一篇: gradle之gradlew最全指令攻略