国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

兩種密碼中間件模塊標準SKF 和PKCS#11 的對比分析

2020-03-05 09:33陳琢陳強
現(xiàn)代計算機 2020年2期
關鍵詞:調用密鑰容器

陳琢,陳強

(成都衛(wèi)士通信息產業(yè)股份有限公司,成都610041)

0 引言

隨著信息安全需求的發(fā)展,密碼技術已得到廣泛的使用,成為信息時代中不可獲缺的組成部分。同時,為了提高密碼運算的性能,提高密鑰等關鍵信息的安全性,例如USBKey、加密TF 卡、貼芯卡等專門的密碼設備應運而生,越來越多的系統(tǒng)使用這些密碼設備來分擔密碼運算操作。為了給應用開發(fā)人員便利地調用這些密碼設備,多個國際、國內的加密API 標準隨即出現(xiàn)。這類標準為應用隱藏了密碼設備的實現(xiàn)細節(jié),為應用開發(fā)者提供統(tǒng)一的方式來使用不同的密碼設備,大大增強了應用的可擴展性[1]。其中,PKCS#11[2]和SKF[3]是使用較廣泛的兩種。

1 SKF和PKCS#11標準介紹

1.1 SKF簡介

國家密碼管理局于2010 年首次發(fā)布《智能IC 卡及智能密碼鑰匙密碼應用接口規(guī)范》,即SKF 接口標準。之后于2012 年11 月更新為GM/T0016-2012《智能密碼鑰匙密碼應用接口規(guī)范》發(fā)布。目前很多國內密碼設備廠商都為其產品提供了SKF 接口的開發(fā)包。隨著國密技術的發(fā)展,SKF 接口在加密模塊和軟件上的使用已越發(fā)廣泛。

在SKF 接口規(guī)范中,一個設備中存在一個設備認證密鑰和多個應用,應用之間相互獨立,并具有各自的管理員PIN、用戶PIN 和權限。應用邏輯結構如圖1所示。

圖1 SKF設備的應用邏輯結構圖

以數(shù)據加密調用過程為例,SKF 接口使用的一個典型流程如下:

(1)枚舉設備:SKF_EnumDev

(2)連接設備:SKF_ConnectDev

(3)枚舉應用:SKF_EnumApplication

(4)打開應用:SKF_OpenApplication

(5)驗證應用PIN 碼:SKF_VerifyPIN(6)枚舉容器:SKF_EnumContainer

(7)打開容器:SKF_OpenContainer

(8)設置會話密鑰:SKF_SetSymmKey

(9)加密初始化:SKF_EncryptInit

(10)加密多個數(shù)據包:SKF_EncryptUpdate

(11)加密多個數(shù)據包結束:SKF_EncryptFinal

(12)關閉容器:SKF_CloseContainer

(13)關閉應用:SKF_CloseApplication

(14)斷開設備連接:SKF_DisConnectDev

1.2 PKCS#11簡介

公鑰密碼標準PKCS(Public-Key Cryptography Standards)是RSA 實驗室與本行業(yè)、學術界以及政府的代表一起合作推出的一套規(guī)范,它包含一系列規(guī)范,其中PKCS#11 是加密設備接口標準。該標準詳細規(guī)定了密碼令牌接口Cryptoki(Cryptographic Token Interface)的編程接口,現(xiàn)在由OASIS(Organization for the Advancement of Structured Information Standards,結構化信息標準促進組織)技術委員會管理,最新的正式版本是2.40。

PKCS#11 定義了會話(session)、槽(slot)、令牌(token)、對象(object)的概念,用于抽象密碼設備的使用過程。其中會話抽象應用與設備的連接,槽抽象卡槽或讀卡器等安全設備,令牌抽象加密TF 卡等密碼設備,對象抽象在密碼操作中使用和產生各種數(shù)據結構[4]。

使用PKCS#11 標準的密碼設備中,邏輯結構如圖2 所示。

圖2 PKCS#11設備的邏輯結構圖

以數(shù)據加密調用過程為例,Cryptoki 使用的一個典型流程如下:

(1)初始化接口庫:C_Initialize

(2)獲取密碼設備的槽位:C_GetSlotList

(3)選擇使用的槽位,創(chuàng)建會話:C_OpenSession

(4)登錄設備:C_Login

(5)查找已有的密鑰或生成新密鑰:

①查找初始化:C_FindObjectsInit

②進行查找:C_FindObjects

③結束查找:C_FindObjectsFinal

④生成:C_GenerateKey 或C_GenerateKeyPair

(6)加密初始化:C_EncryptInit

(7)加密多個數(shù)據包:C_EncryptUpdate

(8)加密多個數(shù)據包結束:C_EncryptFinal

(9)退出登錄:C_Logout

(10)關閉會話:C_CloseSession

(11)退出庫調用狀態(tài):C_Finalize

2 SKF和PKCS#11的對比分析

SKF 和PKCS#11 均是密碼設備對外提供的接口標準,為外部開發(fā)者調用密碼設備提供統(tǒng)一的、便利的途徑。本節(jié)對兩種接口的差異進行比較。

2.1 權限管理的不同

在SKF 標準中,權限分為設備權限、用戶權限和管理員權限。在特定操作中(包括創(chuàng)建應用、刪除應用和修改設備認證密鑰),需要設備權限。在SKF 設備中,每個應用都有自己的PIN 碼(包括用戶PIN 碼和管理員PIN 碼),因此,各應用可獨立地使用設備,獲取權限。

在PKCS#11 中,沒有設備權限,僅有用戶權限和管理員權限。設備上僅有一個用戶PIN 和一個管理員PIN。因此,當一個應用使用正確的PIN 碼登錄后,即通過了整個設備的權限認證。

2.2 設備初始化過程的不同

對于SKF 設備,應用在開始使用時需要在設備中創(chuàng)建好相應的應用。因此,在正確枚舉出設備后,應用可能涉及到的操作包括:設備認證、創(chuàng)建應用、打開應用、驗證PIN 碼(創(chuàng)建容器需要用戶權限)、創(chuàng)建容器。之后,可以此容器中進行密鑰操作和調用密碼算法。

相對地,對于PKCS#11 設備,應用在正確枚舉到設備后,需要的操作包括打開會話和登錄。之后即可進密鑰操作和調用密碼算法。

2.3 密鑰及數(shù)據的管理方式上的不同

SKF 接口通過應用和容器來組織密鑰。在同一個設備中,可存在多個應用,而每個應用各自擁有若干個容器。一個容器可存放一對加密公私鑰對和一對簽名公私鑰對,以及對應的加密證書和簽名證書。在這些公私鑰對和證書生成或導入后,設備將它們保存起來,直到通過接口函數(shù)將它們刪除。在設備使用過程中產生的會話密鑰,僅在會話期間有效。當會話關閉(如關閉容器)后,這些會話密鑰不會保存。因此,SKF 接口中,以非對稱密鑰和會話密鑰的操作為主,不支持對稱密鑰的存儲。其他數(shù)據可作為文件存儲于應用中,通過SKF 的文件操作相關接口來進行讀寫和控制。

相對地,PKCS#11 沒有應用和容器的概念。它通過定義多種對象來組織密碼設備上的數(shù)據,包括數(shù)據對象、證書對象和密鑰對象[5]。PKCS#11 為每類對象定義了豐富詳細的屬性參數(shù),使開發(fā)者可根據需求定義每個對象的屬性,例如是否在設備中保存、對象的標識、是否可導出、是否可用于加解密、是否可用于打包其他密鑰,等等。在應用調用PKCS#11 過程中,通過會話(session)來管理臨時產生的對象。在一個session中產生的臨時對象(session object),僅在此會話中可以使用。當此session 關閉時,這些對象都將消失。而保存于設備上的對象,所有應用都有同樣的權限。

2.4 支持算法的不同

SKF 接口以支持國密算法為主,包括SM1、SM2、SM3、SM4,同時包括部分國際算法:RSA、SHA1 和SHA256。PKCS#11 支持多種國際算法,但可通過自定義機制進行擴展。

3 基于PKCS#11接口的SKF接口設計思路

當前,部分密碼設備提供PKCS#11 接口,不提供SKF 接口。在這種情況下,由于PKCS#11 接口更具普遍性,將PKCS#11 作為較低一層,可以實現(xiàn)SKF 接口,擴大密碼設備的適用范圍。

基于PKCS#11 實現(xiàn)SKF 接口,主要需要解決上節(jié)中分析的SKF 與PKCS#11 的差異處。PKCS#11 對象中豐富的屬性,可用于建立與SKF 類似的應用結構。

在調用SKF 接口時,為找到可用的設備,設備管理類的函數(shù)往往最先調用,主要包括枚舉設備、連接設備、斷開設備、獲取設備狀態(tài)等)。對應到PKCS#11 接口中,可在此階段進行庫的初始化,查找設備和獲取設備信息??赏ㄟ^C_Initialize、C_GetSlotList 等接口獲取。

由于SKF 和PKCS#11 中的權限管理不同,在這個階段中,除了進行初始化,可完成PKCS#11 設備的登錄。此后不使用PKCS#11 設備上的PIN。例如,在連接設備時,在已知密碼設備PKCS#11 的PIN 碼的情況下,調用PKCS#11 的登錄接口。

SKF 中設備認證密鑰、應用、容器及文件,由于在PKCS#11 無對應的概念,可通過在PKCS#11 設備中存儲為對象來實現(xiàn)。對應的層次及結構關系,通過PKCS#11 對象可定義的豐富的屬性來實現(xiàn)。例如,可通過定義特定的CKA_APPLICATION 或CKA_LABEL來標識出設備認證密鑰,如下:

類似地,應用、應用PIN、容器、文件、證書均使用PKCS#11 數(shù)據對象存儲,容器中的密鑰對應使用PKCS#11 密鑰對象存儲。可使用以下屬性來建立關系。

●應用和應用PIN:在創(chuàng)建應用時,使用PKCS#11接口創(chuàng)建數(shù)據對象存儲??墒褂靡粋€對象。使用CKA_APPLICATION 標識為SKF 相關對象。將接口中傳入的應用名稱(szAppName)存入CKA_LABEL。PIN和PIN 的剩余可用次數(shù)及權限控制作為對象值寫入。

●容器:創(chuàng)建容器時,使用PKCS#11 接口創(chuàng)建數(shù)據對象存儲。使用CKA_APPLICATION 標識為某應用的容器。CKA_LABEL 中存儲容器名稱。

●文件:創(chuàng)建文件時,使用PKCS#11 接口創(chuàng)建數(shù)據對象存儲。使用CKA_APPLICATION 標識為某應用的文件。CKA_LABEL 中存儲文件名稱。其他內容,包括文件大小,讀寫權限及文件內容存入CKA_VALUE 中。

●證書:在證書導入時,使用PKCS#11 接口創(chuàng)建數(shù)據對象存儲。使用CKA_APPLICATION 存儲應用名、容器名及證書標識。CKA_LABEL 中存儲證書類型(加密證書或簽名證書)。證書內容存入CKA_VALUE中。

●密鑰:在密鑰產生時,使用PKCS#11 接口創(chuàng)建密鑰對象存儲。使用CKA_ID 存儲應用名、容器名、密鑰類型(加密密鑰或簽名密鑰)。

4 結語

隨著密碼設備的廣泛使用,使用統(tǒng)一的、標準的密碼設備接口越來越關鍵。SKF 和PKCS#11 接口標準作為兩種主流接口,很好地解決了這個問題,增強了應用程序的可移植性。本文對比分析了兩種標準的差異性,并提出基于PKCS#11 實現(xiàn)SKF 的一種方案,為使用SKF 和PKCS#11 的開發(fā)人員提供參考。

猜你喜歡
調用密鑰容器
幻中邂逅之金色密鑰
幻中邂逅之金色密鑰
難以置信的事情
Android密鑰庫簡析
基于Android Broadcast的短信安全監(jiān)聽系統(tǒng)的設計和實現(xiàn)
液體對容器底及容器對桌面的壓力和壓強
取米
利用RFC技術實現(xiàn)SAP系統(tǒng)接口通信
一種新的動態(tài)批密鑰更新算法
C++語言中函數(shù)參數(shù)傳遞方式剖析