◆曹黎敏
?
服務(wù)器密碼機對稱加解密及會話密鑰導入導出測試方法研究
◆曹黎敏
(無錫航天江南數(shù)據(jù)系統(tǒng)科技有限公司 江蘇 214122)
網(wǎng)絡(luò)與信息安全是國家信息化戰(zhàn)略的重要組成部分,其中密碼工作直接關(guān)系國家政治安全、經(jīng)濟安全、國防安全和信息安全。隨著國家對網(wǎng)絡(luò)信息安全的重視,對密碼產(chǎn)品的功能要求也越來越嚴格,本文針對服務(wù)器密碼機對稱加解密,會話密鑰導入導出功能提出了測試思路
服務(wù)器密碼機;對稱加解密;會話密鑰;句柄
服務(wù)器密碼機是按照《GM/T 0030-2014 服務(wù)器密碼機技術(shù)規(guī)范》要求設(shè)計的密碼產(chǎn)品,能夠?qū)ν馓峁ΨQ加解密[1][2][3](SM1、SM4算法)功能,對稱加解密算法的密鑰為會話密鑰,該密鑰是在密碼機內(nèi)部臨時生成存儲的,使用完成后需要銷毀,根據(jù)《GM/T 0018-2012密碼設(shè)備應(yīng)用接口規(guī)范》說明,用戶不能獲取會話密鑰明文,而是通過句柄的形式來使用會話密鑰的,且在使用過程中會涉及會話密鑰的導入導出(密文)。導入導出應(yīng)用場景:通信雙方A、B使用會話密鑰進行加解密通訊前,A生成會話密鑰并將會話密鑰加密導出,B導入后解密使用。導出操作得到的是會話密鑰密文和本會話密鑰本地存儲的句柄,導入操作得到的是會話密鑰句柄。
傳統(tǒng)的功能測試過程中,將對稱加解密算法和會話密鑰導出導入操作作為兩個獨立的功能進行驗證,并不能驗證會話密鑰導出導入后是否保持不變,該功能一般只能在設(shè)備互聯(lián)互通測試過程中驗證,使得發(fā)現(xiàn)問題的時機滯后,導致代碼更動工作量增加。
本測試方法能夠在密碼機軟件研制過程中,使用一臺密碼機快速有效地驗證會話密鑰導出導入過程的正確性和導出導入后會話密鑰的正確性,同時驗證對稱加解密算法的正確性。涉及的導入導出過程可以分為以下三類:
2.1 密鑰加密密鑰加密導出導入會話密鑰正確性驗證。
圖1 密鑰加密密鑰加密導出導入會話密鑰驗證流程
步驟1:調(diào)用標準接口“生成會話密鑰并用密鑰加密密鑰加密輸出”SDF_GenerateKeyWithKEK(void *hSessionHandle, unsigned int uiKeyBits, unsigned int uiAlgID,unsigned int uiKEKIndex, unsigned char *pucKey, unsigned int *pucKeyLength, void **phKeyHandle),得到會話密鑰密文pucKey[],以及該會話密鑰在密碼機中的句柄hKeyHandle1=*phKeyHandle。
步驟2:將步驟1中得到的密文pucKey[]作為輸入,調(diào)用標準接口“導入會話密鑰并用密鑰加密密鑰解密”SDF_ImportKeyWithKEK(void *hSessionHandle, unsigned int uiAlgID,unsigned int uiKEKIndex, unsigned char *pucKey, unsigned int uiKeyLength, void **phKeyHandle),得到導入會話密鑰在密碼機中的句柄hKeyHandle2=*phKeyHandle。
步驟3:選定一組明文數(shù)據(jù),作為輸入pucData[],將步驟1得到的會話密鑰句柄hKeyHandle1作為輸入hKeyHandle,調(diào)用“對稱加密”SDF_Encrypt(void *hSessionHandle,void *hKeyHandle,unsigned int uiAlgID,unsigned char *pucIV,unsigned char *pucData,unsigned int uiDataLength,unsigned char *pucEncData,unsigned int *puiEncDataLength)得到對稱加密后的數(shù)據(jù)pucEncData[]。
步驟4:將步驟2得到的會話密鑰句柄hKeyHandle1作為輸入hKeyHandle,將步驟3得到的對稱加密后的數(shù)據(jù)pucEncData[]作為輸入pucEncData,調(diào)用“對稱解密”SDF_Decrypt(void *hSessionHandle,void *hKeyHandle,unsigned int uiAlgID,unsigned char *pucIV,unsigned char *pucEncData,unsigned int uiEncDataLength, unsigned char *pucData,unsigned int *puiDataLength)得到解密數(shù)據(jù)pucData[]。
步驟5:比較步驟3的輸入數(shù)據(jù)(對稱加密前的明文數(shù)據(jù))和步驟4的輸出數(shù)據(jù)(解密得到的解密數(shù)據(jù))pucData[]是否一致。一致說明對稱加解密功能正確,使用的會話密鑰相同,使用密鑰加密密鑰導出導入會話密鑰功能正確。
步驟6:調(diào)用SDF_DestroyKey(void *hSessionHandle, void *hKeyHandle)銷毀上述會話密鑰。
注意:
①步驟1、步驟2中使用的算法uiAlgID要保持一致,且測試時需要考慮多種算法情況;
②步驟3、步驟4中使用的算法uiAlgID要保持一致;
③所有的會話密鑰均需要銷毀。
2.2 生成會話密鑰并用外部ECC公鑰加密[4]輸出、導入會話密鑰并用內(nèi)部ECC私鑰解密正確性驗證。
測試步驟同樣是上述6個步驟,只是測試步驟1、2調(diào)用的標準接口分別為“生成會話密鑰并用外部ECC公鑰加密輸出”SDF_GenerateKeyWithEPK_ECC(void *hSessionHandle, unsigned int uiKeyBits, unsigned int uiAlgID, ECCrefPublicKey *pucPublicKey,ECCCipher *pucKey, void **phKeyHandle)和“導入會話密鑰并用內(nèi)部ECC私鑰解密”SDF_ImportKeyWithISK_ECC(void*hSessionHandle, unsigned int uiISKIndex, ECCCipher *pucKey,void** phKeyHandle)。
注意:步驟1的外部公鑰pucPublicKey與步驟2用的ID號為uiISKIndex的私鑰必須為一對。
2.3 生成會話密鑰并用內(nèi)部ECC公鑰加密[4]輸出、導入會話密鑰并用內(nèi)部ECC私鑰解密正確性驗證。
測試步驟同樣是上述6個步驟,只是測試步驟1、2調(diào)用的標準接口分別為“生成會話密鑰并用內(nèi)部ECC公鑰加密輸出”SDF_GenerateKeyWithIPK_ECC(void *hSessionHandle, unsigned int uiIPKIndex, unsigned int uiKeyBits, ECCCipher *pucKey,void **phKeyHandle)和“導入會話密鑰并用內(nèi)部ECC私鑰解密”SDF_ImportKeyWithISK_ECC(void *hSessionHandle, unsigned int uiISKIndex, ECCCipher *pucKey, void** phKeyHandle)。
注意:步驟1和步驟2用的密鑰ID號uiIPKIndex和uiISKIndex必須保持一致。
對稱加解密功能屬于服務(wù)器密碼機的基本功能,也是數(shù)據(jù)加密通信的基礎(chǔ),文中從算法正確性和會話密鑰導出導入正確性兩個方面入手,總結(jié)了多種導出導入會話密鑰的正確性驗證方法,包括使用密鑰加密密鑰導出導入,外部公鑰導出、內(nèi)部私鑰導入,內(nèi)部公鑰導出、內(nèi)部私鑰導入會話密鑰的情況,供大家討論參考。
[1]王曉霞.關(guān)于密碼學技術(shù)應(yīng)用于網(wǎng)絡(luò)信息安全的分析[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2019(02):17-18.
[2]劉倍雄,肖巧玲,張毅,陳孟祥.基于優(yōu)化對稱加密算法的網(wǎng)絡(luò)密碼安全傳輸研究[J].信息與電腦(理論版),2018(22):55-59.
[3]董永為.數(shù)據(jù)加密技術(shù)在計算機網(wǎng)絡(luò)通信安全中的應(yīng)用分析[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2016(04):39-40.
[4]趙夢婷,李斌勇,李文皓,閻澤誠,高家奇,齊佳昕,廖懷凱.ECC加密算法分析及應(yīng)用研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2018(12):35-36.