发明内容
本发明的目的是提供一种各类应用软件可通过支持RSA算法的标准密码应用编程接口(如Windows CryptoAPI、PKCS#11等),自动而透明地调用ECC、IBE等目前标准密码接口尚未明确支持的新近公开密钥加密算法进行密码运算的基于伪RSA密钥的新近公开密钥加密算法的应用实现方法。
本发明的关键是借助于伪RSA密钥(伪RSA公钥、伪RSA私钥),使得对伪RSA密钥的使用转化为对相应的新近公开密钥加密算法的密钥(如ECC公钥、私钥)的使用。这里所说的伪RSA密钥,包括伪RSA公钥和伪RSA私钥,是这样的一种密钥,它的密钥数据在数据结构上与RSA密钥(公钥、私钥)的一样,但它的密钥数据中存放的不是真正的RSA密钥数据,而是对应的新近公开密钥加密算法(如ECC、IBE)的密钥数据(如ECC公钥、IBE私钥)。
为了实现上述目的,本发明所采用的技术方案是:
一种基于伪RSA密钥的新近公开密钥加密算法的应用实现方法,包括数据加密***,所述数据加密***由如下几部分组成:
密码模块:一个实现了支持RSA加密算法功能调用的标准密码模块接口(如CryptoSPI、PKCS#11)的软件或软硬模块,它提供对新近公开密钥加密算法的密码功能调用,包括新近公开密钥加密算法的密钥操作,如密钥产生、导出、导入和删除等,以及基于新近公开密钥加密算法的密码运算,如数据加密、解密,数字签名、签名验证等。
IBE密钥服务器(Key Server):只有所述密码模块提供IBE加密算法功能时才需要该密钥服务器,它负责验证、维护用户与其身份标识间的对应关系,为用户产生其身份标识对应的IBE私钥。
伪RSA数字证书签发工具或***:基于伪RSA公钥生成伪RSA数字证书。
加密应用软件:通过标准密码应用编程接口调用所述密码模块,使用新近公开密钥加密算法进行数据加密、解密,数字签名、签名验证的软件程序或***。
以上所述新近公开密钥加密算法是指RSA、DSA算法之外的其他新近提出、使用的公开密钥加密算法,如ECC、IBE。
所述伪RSA数字证书是基于X509的标准格式的数字证书,只是证书上的证书拥有者的RSA公钥不是真正的RSA公钥,而是所述伪RSA公钥。
所述伪RSA数字证书签发工具或***与通常的数字证书签发工具或***的功能类似,其主要差别在于它是用于签发伪RSA数字证书,而不是通常的数字证书。
本发明的整体工作原理和过程描述如下。
加密应用软件按通常的方式,通过标准密码应用编程接口,调用密码模块的RSA加密算法的密码功能,如密钥产生、导出、导入和删除等密钥操作,以及数据加密、解密,数字签名、签名验证等密码运算。
对于产生RSA密钥对的接口函数调用,所述密码模块并不产生真正的RSA密钥对,而是产生所述新近公开密钥加密算法的密钥对。若所述密码模块实现的是IBE加密算法,则所述密码模块在产生IBE密钥对时,并不直接为用户产生IBE私钥,而是同IBE密钥服务器交互,在完成用户身份鉴别和身份标识归属性验证、确认后,由IBE密钥服务器为用户产生其身份标识对应的IBE私钥,然后,在此基础上生成IBE密钥对。
对于导出RSA密钥(RSA公钥、RSA私钥)的接口函数调用,若要导出的密钥对应的是所述新近公开密钥加密算法的密钥,则所述密码模块并不导出RSA密钥,而是导出该新近公开密钥加密算法的密钥对应的伪RSA密钥(伪RSA公钥、伪RSA私钥);否则,按通常的方式导出RSA密钥。
对于导入RSA密钥(RSA公钥、RSA私钥)的接口函数调用,所述密码模块首先检查要导入的RSA密钥是否是一伪RSA密钥,若是,则所述密码模块从要导入的伪RSA密钥中分离出对应的新近公开密钥加密算法的密钥,并将其导入到密码模块中;否则,所述密码模块按通常的方式导入RSA密钥。
对于使用RSA密钥(公钥或私钥)进行密码运算(如数据加密、解密,数字签名、签名验证等)的接口函数调用,所述密码模块首先确定要使用的RSA密钥是一个真正的RSA密钥,还是对应一个新近公开密钥加密算法的密钥(如ECC、IBE密钥),如果是一个真正的RSA密钥,则按RSA加密算法使用该RSA密钥进行相关密码运算;否则,采用对应的新近公开密钥加密算法及对应的新近公开密钥加密算法的密钥进行相关密码运算。
目前的加密应用软件对RSA密钥(公钥、私钥)的使用通常不是直接使用的,而是通过RSA数字证书来进行的。在本发明中,为了使得应用软件能透明地使用新近公开密钥加密算法的密钥(如ECC公钥、私钥),同样需要借助于RSA数字证书,具体的做法是,对于每一对所述新近公开密钥加密算法的密钥对,由伪RSA数字证书签发工具或***签发一张X509格式的数字证书,证书上的证书持有者(证书拥有主体)的公钥是该密钥对对应的伪RSA公钥,即生成一张与所述新近公开密钥加密算法的密钥对相对应的伪RSA数字证书。通过该伪RSA数字证书的使用,加密应用软件将按通常的方式调用密码模块提供的基于RSA加密算法的密码运算功能(如加密、解密,签名签名验证),而密码模块实际上将使用伪RSA证书对应的新近公开密钥加密算法的相应密钥,完成基于新近公开密钥加密算法的密码运算。
本发明的创新性在于:借助伪RSA密钥,提供新近公开密钥加密算法(如ECC、IBE)功能的密码模块,可通过标准的、支持RSA算法功能的密码模块接口,如Windows CryptoSPI、PKCS#11,对外提供新近公开密钥加密算法的密码运算功能;于此同时,应用软件可以通过相应的支持RSA算法功能的标准密码应用编程接口,如WindowsCryptoAPI、PKCS#11,使用新近公开密钥加密算法进行数据加密和解密、数字签名和签名验证等密码运算,而且这个使用新近公开密钥加密算法的过程对应用软件是透明的,即它们无需做任何修改,也不知晓正在使用新近公开密钥加密算法。
本发明的方法很好地解决了目前的标准密码接口、操作***以及应用软件不能很好地支持ECC、IBE等新近公开密钥加密算法的技术问题,即解决了新近公开密钥加密算法在具体应用和实现方面所面临的技术问题。
具体实施方式
下面结合附图对本发明的具体实施作进一步的说明。
如图1所示,基于本发明的数据加密***由如下几部分组成:
密码模块,一个实现了支持RSA加密算法功能调用的标准密码模块接口(如CryptoSPI、PKCS#11)的软件或软硬模块,它提供对新近公开密钥加密算法的密码功能调用,其功能包括新近公开密钥加密算法的密钥操作,如产生、导出、导入和删除等,以及基于新近公开密钥加密算法的加密运算,如数据加密、解密,数字签名、签名验证等。
IBE密钥服务器(Key Server),只有在所述密码模块提供IBE加密算法功能才需要该密钥服务器,它负责验证、维护用户与其身份标识间的对应关系,为用户产生其身份标识对应的I BE私钥。
伪RSA数字证书签发工具或***,基于伪RSA公钥生成伪RSA数字证书。
加密应用软件,通过标准密码应用编程接口调用所述密码模块,使用新近公开密钥加密算法进行数据加密、解密,数字签名、签名验证的软件程序或***。
密码模块需要实现支持RSA算法功能调用的标准密码模块接口(如Windows CryptoSPI、PKCS#11等),要实现这一点并不困难,只需依据相应的密码模块接口规范即可。
IBE密钥服务器是一个基于C/S模式的服务***,其客户端即是所述加密模块。IBE密钥服务器可采用常见的信息***开发技术,如C/C++或C#,Net或J2EE开发语言及环境,以及有关的数据库开发技术;其IBE密钥的生成可参照有关规范实现,如RFC5091。IBE密钥生成既可在软件中实现,也可以用硬件实现。IBE密钥服务器与加密模块间的信息交互可采用已有的安全信息通道技术,如SSL等。
伪RSA数字证书签发工具或***的实现,可基于OpenSSL工具库或者Windows CryptoAPI提供的密码功能开发实现;或者,通过对现有数字证书签发***进行改造实现。
对于应用软件来说,不需要进行任何修改,它们按通常使用RSA密钥或RSA数字证书的方式使用RSA加密算法进行有关的数据加密、解密,数字签名、签名验证等密码运算。
本发明的相关功能的具体实现描述如下。
对于产生RSA密钥对的接口函数调用,所述密码模块根据其实现的新近公开密钥加密算法是否为IBE算法,其处理过程有所不同:
情形1.若密码模块实现的新近公开密钥加密算法不是IBE算法,则所述密码模块按如下方式进行有关操作:
产生一个新近公开密钥加密算法(如ECC算法)的密钥对,在内存或存储介质中生成相应的密钥对对象,然后返回密钥对对象的句柄、指针或引用。
情形2.若所述密码模块实现的新近公开密钥加密算法是IBE算法,则所述密码模块和IBE密钥服务器按如下工作流程进行有关操作:
步骤A1.密码模块通过专门的人机界面,提示用户输入其身份标识;
步骤A2.用户输入、提交身份标识后,密码模块连接IBE密钥服务器;
步骤A3.IBE密钥服务器要求对用户进行身份鉴别;
步骤A4.密码模块通过人机界面,提示用户提交或选择其身份凭证(如用户名/口令、数字证书);
步骤A5.密码模块利用用户提交或选择的身份凭证及其相关私密数据(如口令、证书私钥),同IBE密钥服务器交互,完成用户身份鉴别;
步骤A6.用户身份鉴别通过后,IBE密钥服务器进一步确认用户是身份标识的真正拥有者;
步骤A7.用户是身份标识拥有者验证通过后,IBE密钥服务器产生用户身份标识对应的IBE私钥,然后,将IBE私钥返回给密码模块;
步骤A8.密码模块基于IBE密钥服务器返回的IBE私钥,生成对应的IBE公钥,然后,在内存或存储介质中产生相应的IBE密钥对对象,最后,返回IBE密钥对对象的句柄、指针或引用。
在以上步骤A5,IBE密钥服务器对用户的身份鉴别可根据具体的安全要求,采用基于用户名/口令、动态口令或身份数字证书等的身份鉴别技术;若用户的身份凭证是身份数字证书,则密码模块不一定能直接获得保存在其他密码模块或存储介质(如智能卡、USB Key)中的用户身份数字证书的私钥,但它可以通过相应的密码接口使用该证书的私钥完成用户身份鉴别所需的密码运算操作,如对IBE密钥服务器发送的随机挑战信息进行数字签名。
在以上步骤A6,IBE密钥服务器确定用户是身份标识的真正拥有者有很多种途径,如身份标识包含在身份凭证中(比如,它就是用户在IBE服务器上的帐户名,或是数字证书中的用户通用名,或是证书中的电子邮箱地址等),或者,用户在IBE密钥服务器进行注册时输入了其身份标识,且该标识由用户拥有已通过其他可靠途径验证、确认,比如,若身份标识是移动电话号码或电子邮箱地址,则可向相应的移动手机或电子邮箱发送确认码进行验证等。
对于导出RSA密钥(公钥或私钥)的接口函数调用,所述密码模块进行如下操作:
确定要导出的RSA密钥是一个真正的RSA密钥,还是对应一个新近公开密钥加密算法的密钥(如ECC、IBE密钥),若是一个真正的RSA密钥,则按通常的RSA密钥导出完成有关操作;否则,产生一个RSA密钥(公钥或私钥)数据结构,将要导出的RSA密钥对应的新近公开密钥加密算法的密钥(如对应的IBE公钥或私钥)放入到该RSA密钥数据结构中,然后,在该RSA密钥数据结构中未使用的特定数位中放入预先约定的特征数位值,之后,将该RSA密钥数据结构作为导出的密钥数据返回。
对于以上后一种情况,即导出的密钥是对应一个新近公开密钥加密算法的密钥的情形,返回的密钥的密钥数据结构具有与通常的RSA密钥相同的密钥数据结构,但其中包含的不是真正的RSA密钥,而是对应的新近公开密钥加密算法的密钥,因此,该返回的密钥是伪RSA密钥。而这里,伪RSA密钥的密钥数据结构中的特定数位的特征数位值,或者是特别的数位串,或者,由相应的新近公开密钥加密算法的的密钥经过特定的运算(如散列运算)产生。
要实现在RSA密钥(公钥或私钥)数据结构中嵌入新近公开密钥加密算法的密钥(如ECC公钥或私钥),并在该数据结构中未使用的特定数位中加入预先约定的特征数位值并不困难,因为,具有一定密钥强度(如224位、192位)的ECC、IBE等新近公开密钥算法的密钥(公钥和私钥)的密钥数据结构所占用的数位比具有相当密钥强度(如2048位、1024位)的RSA密钥(公钥和私钥)的密钥数据结构所占用的数位要少许多,因此,可以容易地在密钥强度相当的RSA密钥的密钥数据结构中放入对应的新近公开密钥加密算法的相应密钥数据,并在多余的、未使用的特定数位中加入预先预定的特征数位值。若某一密钥强度的RSA密钥的密钥数据结构不足以存放相应的非RSA密钥数据,则可以采用密钥强度更高的RSA密钥。
对于导入RSA密钥(公钥或私钥)的接口函数调用,所述密码模块按如下方式进行操作:
检查要导入的RSA密钥的密钥数据结构中的特定数位,看其值是否为预先约定的特征数位值,即检查要导入的RSA密钥是否是伪RSA密钥,若是,则从导入的密钥数据中分离出对应的新近公开密钥加密算法的相应密钥(如相应的ECC公钥或私钥);否则,按通常的RSA密钥完成导入操作。
需说明的是,在IBE数据加密中,通常我们把身份标识就称为公钥,但仅有身份标识是不足以完成有关的数据加密运算的,还需有相关的IBE公开参数(如相应的椭圆曲线参数及完成双线性映射所需的IBE公开参数等),因此,在本发明中所说的IBE公钥不但包括身份标识,而且包括完成密码运算所需的相关IBE公开参数。
对于使用RSA密钥(公钥或私钥)进行密码运算(如数据加密、解密,数字签名、签名验证等)的接口函数调用,所述密码模块按如下方式进行操作:
确定要使用的RSA密钥是一个真正的RSA密钥,还是对应一个新近公开密钥加密算法的密钥(如ECC、IBE密钥),如果是一个真正的RSA密钥,则按RSA加密算法使用该RSA密钥进行相关密码运算;否则,采用对应的新近公开密钥加密算法及对应的新近公开密钥加密算法的密钥进行相关密码运算。
对于伪RSA数字证书的签发,其具体实施方法如下:
若所述密码模块实现的新近公开密钥加密算法不是IBE算法,则由所述伪RSA数字证书签发工具或***,以前面所述的密码模块的导出RSA密钥的接口函数调用导出的伪RSA公钥为证书持有者公钥,签发一张X509格式的数字证书,供加密应用软件使用。
若所述密码模块实现的新近公开密钥加密算法是IBE算法,则数据加密方和加密数据解密方通过伪RSA数字证书签发工具或***,各自独立地生成相应的伪RSA数字证书,供加密应用软件使用。为了实现这一目的,所述加密模块除了实现所述标准密码模块接口所规定的接口函数外,还有专门的额外接口函数用于产生、导出身份标识(也即IBE公钥)对应的伪RSA公钥,供数据加密方生成伪RSA数字证书。所述加密模块按如下过程处理对该接口函数的调用:
步骤B1.通过专门的人机界面,提示用户输入(加密数据接收方,即数据解密方的)身份标识;
步骤B2.根据IBE公开参数和用户输入的身份标识生成身份标识对应的IBE公钥;
步骤B3.产生一个RSA公钥数据结构,将步骤B2产生IBE公钥放入到该RSA公钥数据结构中,并在该RSA公钥数据结构中未使用的特定数位中放入预先约定的特征数位值,之后,将该RSA公钥数据结构作为导出的公钥数据返回。
有了以上额外的用于产生、导出身份标识对应的伪RSA公钥的接口函数,IBE密钥对对应的伪RSA数字证书的产生过程如下:
数据加密方利用前面所述的密码模块的产生、导出身份标识对应的伪RSA公钥的额外接口函数,获得解密方身份标识(即IBE公钥)对应的伪RSA公钥,并以此伪RSA公钥生成一张伪RSA数字证书;加密数据解密方,即身份标识的拥有者,通过密码应用编程接口调用前面所述的密码模块的产生RSA密钥对的接口函数,产生自身身份标识相应的IBE密钥对,然后以前面所述的密码模块的导出RSA密钥的接口函数调用,以导出RSA公钥的方式导出IBE公钥对应的伪RSA公钥,即身份标识对应的伪RSA公钥,并以此伪RSA公钥生成一张伪RSA数字证书;加密数据加密方、解密方各自独立生成的伪RSA数字证书可以是自签名的证书,也可以是非自签名的证书,但两者各自独立生成的伪RSA数字证书具有相同的主题名(Subject Name)、颁发者名(Issuer Name)和序列号(Serial Number)。
在通常的数字证书签发***中,用户提交的数字证书签发请求不但包含有用户公钥,而且要用该公钥对应的私钥对证书签发请求进行数字签名;而证书签发***在签发数字证书前,需要用证书签发请求中的公钥验证证书签发请求的数字签名。在本发明中,数字证书中的用户RSA公钥是伪RSA公钥,对此,伪RSA数字证书签发工具或***可采用如下两种方式之一对证书签发请求中的数字签名进行处理:
方式1.不使用证书签发请求中的RSA公钥对证书签发请求的数字签名进行验证,该数字签名的值可以是随机数值,或者是预先约定的特定值;或者,
方式2.检查证书签发请求中的RSA公钥数据的特定数位的值是否是特征数位值,从而确定其是否是伪RSA公钥,若是,则从该伪RSA公钥中分离出相应的新近公开密钥算法的公钥,并用分离出的公钥对证书签发请求中的数字签名进行验证;否则,直接使用证书签发请求中的RSA公钥按通常的方法验证证书签发请求中的数字签名。
使用新近公开密钥加密算法(如ECC、IBE等)进行数据块加密时,将解密所需的随机性参数同时保存在加密数据块中。由于一个新近公开密钥加密算法的加密数据块的长度通常远远小于同等密码强度的RSA加密数据块的长度,为了使得采用新近公开密钥加密算法加密后的数据块的边界与相应的RSA加密数据块(如1024位)的边界对齐,可在一个或多个新近公开密钥加密算法的加密数据块后添加随机字节串。
本说明书未说明的具体技术实施,对于相关领域的技术人员而言是众所周知,不言自明的。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。