SKF接口是國密標準中智能密碼鑰匙的C語言應用開發接口標準,目前不少國內密碼密碼設備廠商都爲其產品提供了SKF接口的開發包。開發者能夠經過統一的SKF接口開發密碼應用,訪問來自不一樣設備供應商的USB-Key、TF卡、智能卡等不一樣形態的密碼設備,而無需和某一個設備供應商的專屬設備或專屬接口綁定。html
GmSSL項目從2.0版本開始,以Engine的方式增長了對SKF設備的完善支持。GmSSL經過在libcrypto密碼庫中引入SKF框架,實現了對不一樣廠商SKF設備的支持。經過將SKF接口封裝爲SKF Engine,使得上層應用和SSL庫能夠直接經過EVP接口動態調用不一樣SKF設備。GmSSL項目還修改了gmssl命令行工具中全部相關功能,使得enc、dgst、pkeyutl、sm2utl等命令均可以支持SKF引擎,gmssl命令行工具還新增長了skf命令提供SKF設備的管理功能。應用開發者在經過命令行工具完成對SKF設備的初始化以後,能夠直接經過SKF引擎爲現有的密碼應用提供SKF設備的支持,只須要提供一個SKF引擎的配置文件,而幾乎無需進行任何代碼開發,能夠大大節省密碼設備開發的工做量。算法
GmSSL經過ENGINE機制支持密碼硬件。鑑於《智能IC卡及智能密碼鑰匙密碼應用接口規範》標準中公佈了訪問國密硬件的C語言API (下面簡稱SKF API),GmSSL經過ENGINE機制訪問支持國密SKF API的國產密碼硬件。
一個SKF API設備中能夠包含一個或多個應用(Application),每一個應用能夠包含一個獲多個容器(Container),每一個容器中能夠存放兩對分別用於加密和簽名的密鑰對,以及兩個相應的證書或證書鏈。每個容器只能爲ECC或RSA一種類型,一個容器中不能混用ECC密鑰和RSA密鑰。所以,在SKF API中提供公鑰密碼計算的接口經過Container Handle來引用公鑰,容器的特性使得應用無需區分簽名密鑰和加密密鑰,SKF API的實現會自動從容器中選擇對應類型的密鑰。
在使用公鑰及訪問容器時,應用須要進行兩級認證,第一級爲設備認證,第二級應用認證。設備認證須要全設備惟一的設備認證密鑰,設備認證密鑰是固定長度的對稱密鑰。訪問某個具體的應用須要提供該應用的專有口令進行認證,認證的口令是可變長度的口令字符串。安全
開發者在得到密碼設備後,首先須要對密碼設備進行初始化,如設置密碼、生成密鑰容器、導入密鑰和證書等。
經過gmssl命令行工具的skf命令能夠訪問和管理SKF設備,經過gmssl的pkey、pkeyutl和req等命令及SKF引擎能夠密碼計算、公鑰導出、證書生成等功能,本節主要介紹skf命令的功能和用法。SKF接口包含設備管理、應用管理、密鑰容器管理、數據對象管理等功能,skf命令封裝了SKF接口的上述功能,能夠完成枚舉設備、建立應用和密鑰容器,建立簽名私鑰、導入解密私鑰、導入證書等功能。能夠經過-help打印skf命令的全部選項。
框架
設備管理包括枚舉設備、打印設備信息、設置設備標籤、修改設備認證密鑰和發送測試報文等功能。工具
應用管理包含建立應用、枚舉應用、刪除應用。測試
SKF設備中以密鑰容器的方式管理私鑰,一個應用中能夠創建多個密鑰容器,每一個密鑰容器中能夠裝載同類型的2對公私鑰對,其中一個爲簽名密鑰對,一個爲加解密或密鑰交換密鑰對。簽名密鑰對只能在SKF設備內部生成而沒法由外部導入,而加解密或密鑰交換密鑰只能從外部導入而沒法在設備內部生成。在完成密鑰生成或導入後,密鑰對中只有公鑰能夠導出,私鑰是沒法導出的。密鑰容器還支持證書的存儲,一個密鑰容器中能夠存儲兩個證書或兩條證書鏈,分別對應兩個密鑰對。經過skf命令能夠完成密鑰容器的枚舉、建立和刪除。加密
SKF應用支持存儲若干數據對象,因爲應用是受到PIN保護的,所以用戶程序能夠將須要保護的用戶數據、配置文件等安全敏感數據以數據對象的方式保存到SKF設備中。可是因爲SKF設備的內部存儲空間較小,一般只有幾十KB到數百KB,所以只能存儲較少數據。經過skf命令能夠實現數據對象的枚舉、導入、導出和刪除。.net
實驗環境:Ubuntu1804命令行
gmssl req -new -x509 -key private/cakeyGM.pem -out cacertGM.crt
gmssl sm2 -genkey -out ly.com.key
gmssl req -new -key ly.com.key -out ly.com.csr
sudo gmssl ca -in ly.com.csr -out ly.com.crt -cert demoCA/cacertGM.crt -keyfile demoCA/private/cakeyGM.pem
gmssl verify -verbose -x509_strict -CAfile demoCA/cacertGM.crt ly.com.crt
demoCA
目錄下執行sudo gmssl pkcs12 -export -in cacertGM.crt -inkey private/cakeyGM.pem -out lyRootCA.p12
環境:WIN10
KEY型號:mToken-GM30003d