APP下载

服务器密码机对称加解密及会话密钥导入导出测试方法研究

2019-07-10曹黎敏

网络安全技术与应用 2019年7期
关键词:正确性私钥公钥

◆曹黎敏



服务器密码机对称加解密及会话密钥导入导出测试方法研究

◆曹黎敏

(无锡航天江南数据系统科技有限公司 江苏 214122)

网络与信息安全是国家信息化战略的重要组成部分,其中密码工作直接关系国家政治安全、经济安全、国防安全和信息安全。随着国家对网络信息安全的重视,对密码产品的功能要求也越来越严格,本文针对服务器密码机对称加解密,会话密钥导入导出功能提出了测试思路

服务器密码机;对称加解密;会话密钥;句柄

0 引言

服务器密码机是按照《GM/T 0030-2014 服务器密码机技术规范》要求设计的密码产品,能够对外提供对称加解密[1][2][3](SM1、SM4算法)功能,对称加解密算法的密钥为会话密钥,该密钥是在密码机内部临时生成存储的,使用完成后需要销毁,根据《GM/T 0018-2012密码设备应用接口规范》说明,用户不能获取会话密钥明文,而是通过句柄的形式来使用会话密钥的,且在使用过程中会涉及会话密钥的导入导出(密文)。导入导出应用场景:通信双方A、B使用会话密钥进行加解密通讯前,A生成会话密钥并将会话密钥加密导出,B导入后解密使用。导出操作得到的是会话密钥密文和本会话密钥本地存储的句柄,导入操作得到的是会话密钥句柄。

1 传统测试说明

传统的功能测试过程中,将对称加解密算法和会话密钥导出导入操作作为两个独立的功能进行验证,并不能验证会话密钥导出导入后是否保持不变,该功能一般只能在设备互联互通测试过程中验证,使得发现问题的时机滞后,导致代码更动工作量增加。

2 解决方法

本测试方法能够在密码机软件研制过程中,使用一台密码机快速有效地验证会话密钥导出导入过程的正确性和导出导入后会话密钥的正确性,同时验证对称加解密算法的正确性。涉及的导入导出过程可以分为以下三类:

2.1 密钥加密密钥加密导出导入会话密钥正确性验证。

图1 密钥加密密钥加密导出导入会话密钥验证流程

步骤1:调用标准接口“生成会话密钥并用密钥加密密钥加密输出”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[]作为输入,调用标准接口“导入会话密钥并用密钥加密密钥解密”SDF_ImportKeyWithKEK(void *hSessionHandle, unsigned int uiAlgID,unsigned int uiKEKIndex, unsigned char *pucKey, unsigned int uiKeyLength, void **phKeyHandle),得到导入会话密钥在密码机中的句柄hKeyHandle2=*phKeyHandle。

步骤3:选定一组明文数据,作为输入pucData[],将步骤1得到的会话密钥句柄hKeyHandle1作为输入hKeyHandle,调用“对称加密”SDF_Encrypt(void *hSessionHandle,void *hKeyHandle,unsigned int uiAlgID,unsigned char *pucIV,unsigned char *pucData,unsigned int uiDataLength,unsigned char *pucEncData,unsigned int *puiEncDataLength)得到对称加密后的数据pucEncData[]。

步骤4:将步骤2得到的会话密钥句柄hKeyHandle1作为输入hKeyHandle,将步骤3得到的对称加密后的数据pucEncData[]作为输入pucEncData,调用“对称解密”SDF_Decrypt(void *hSessionHandle,void *hKeyHandle,unsigned int uiAlgID,unsigned char *pucIV,unsigned char *pucEncData,unsigned int uiEncDataLength, unsigned char *pucData,unsigned int *puiDataLength)得到解密数据pucData[]。

步骤5:比较步骤3的输入数据(对称加密前的明文数据)和步骤4的输出数据(解密得到的解密数据)pucData[]是否一致。一致说明对称加解密功能正确,使用的会话密钥相同,使用密钥加密密钥导出导入会话密钥功能正确。

步骤6:调用SDF_DestroyKey(void *hSessionHandle, void *hKeyHandle)销毁上述会话密钥。

注意:

①步骤1、步骤2中使用的算法uiAlgID要保持一致,且测试时需要考虑多种算法情况;

②步骤3、步骤4中使用的算法uiAlgID要保持一致;

③所有的会话密钥均需要销毁。

2.2 生成会话密钥并用外部ECC公钥加密[4]输出、导入会话密钥并用内部ECC私钥解密正确性验证。

测试步骤同样是上述6个步骤,只是测试步骤1、2调用的标准接口分别为“生成会话密钥并用外部ECC公钥加密输出”SDF_GenerateKeyWithEPK_ECC(void *hSessionHandle, unsigned int uiKeyBits, unsigned int uiAlgID, ECCrefPublicKey *pucPublicKey,ECCCipher *pucKey, void **phKeyHandle)和“导入会话密钥并用内部ECC私钥解密”SDF_ImportKeyWithISK_ECC(void*hSessionHandle, unsigned int uiISKIndex, ECCCipher *pucKey,void** phKeyHandle)。

注意:步骤1的外部公钥pucPublicKey与步骤2用的ID号为uiISKIndex的私钥必须为一对。

2.3 生成会话密钥并用内部ECC公钥加密[4]输出、导入会话密钥并用内部ECC私钥解密正确性验证。

测试步骤同样是上述6个步骤,只是测试步骤1、2调用的标准接口分别为“生成会话密钥并用内部ECC公钥加密输出”SDF_GenerateKeyWithIPK_ECC(void *hSessionHandle, unsigned int uiIPKIndex, unsigned int uiKeyBits, ECCCipher *pucKey,void **phKeyHandle)和“导入会话密钥并用内部ECC私钥解密”SDF_ImportKeyWithISK_ECC(void *hSessionHandle, unsigned int uiISKIndex, ECCCipher *pucKey, void** phKeyHandle)。

注意:步骤1和步骤2用的密钥ID号uiIPKIndex和uiISKIndex必须保持一致。

3 结语

对称加解密功能属于服务器密码机的基本功能,也是数据加密通信的基础,文中从算法正确性和会话密钥导出导入正确性两个方面入手,总结了多种导出导入会话密钥的正确性验证方法,包括使用密钥加密密钥导出导入,外部公钥导出、内部私钥导入,内部公钥导出、内部私钥导入会话密钥的情况,供大家讨论参考。

[1]王晓霞.关于密码学技术应用于网络信息安全的分析[J].网络安全技术与应用,2019(02):17-18.

[2]刘倍雄,肖巧玲,张毅,陈孟祥.基于优化对称加密算法的网络密码安全传输研究[J].信息与电脑(理论版),2018(22):55-59.

[3]董永为.数据加密技术在计算机网络通信安全中的应用分析[J].网络安全技术与应用,2016(04):39-40.

[4]赵梦婷,李斌勇,李文皓,阎泽诚,高家奇,齐佳昕,廖怀凯.ECC加密算法分析及应用研究[J].网络安全技术与应用,2018(12):35-36.

猜你喜欢

正确性私钥公钥
比特币的安全性到底有多高
Spatially defined single-cell transcriptional profiling characterizes diverse chondrocyte subtypes and nucleus pulposus progenitors in human intervertebral discs
程序员把7500枚比特币扔掉损失巨大
神奇的公钥密码
一种基于虚拟私钥的OpenSSL与CSP交互方案
国密SM2密码算法的C语言实现
基于身份的聚合签名体制研究
浅谈如何提高水质检测结果准确性
“正确性”与“实用性”的初探
再议不能让孩子输在起跑线上