一种基于标识的椭圆曲线密码系统的制作方法

文档序号:7774907阅读:265来源:国知局
一种基于标识的椭圆曲线密码系统的制作方法
【专利摘要】本发明涉及一种基于标识的椭圆曲线密码系统,所述系统包括伪公钥、伪数字证书、ECC密钥生成系统、伪数字证书签发系统、伪数字证书签发客户端、密码模块、密码应用程序。所述密码系统通过将对应一个身份标识的伪公钥与密码模块中对应同一身份标识的ECC公钥组和ECC私钥组相对应,从而将使用伪公钥的密码运算自动转化成使用对应ECC公钥组中相应公钥的运算;将使用伪公钥对应私钥的密码运算自动转化成使用对应ECC私钥组中对应私钥的运算;且在没有对应ECC公钥或私钥时,由密码模块自动获取对应的ECC公钥或私钥。本发明的系统具有IBC的部分特点,但密码算法比IBC简单,且易于得到客户端密码硬件的支持,并能减少密钥更新过程中用户的干预。
【专利说明】—种基于标识的椭圆曲线密码系统【技术领域】
[0001]本发明属于信息安全【技术领域】,是一种具有IBCXIdentity Based Cryptography)部分特点的基于标识的的椭圆曲线密码系统。
【背景技术】
[0002]在非对称密钥密码体制(Asymmetric Key Cryptography)中,采用两个不同但相互关联的密钥(密钥对),其中一个可公开,称为公钥(Public Key),用于数据加密或签名验证,另一不公开,称为私钥(Private Key),用于数据解密或数字签名,私钥须由密钥对的拥有者安全保管。由于一个密钥可公开,因此,非对称密钥密码体制又称为公开密钥密码体制(Public Key Cryptography),其中的密钥对又称为公开密钥对。相应地,非对称密钥密码体制中的密码算法称为非对称密钥密码算法或公开密钥密码算法。目前获得广泛应用的公开密钥密码算法包括以三个发明人Rivest, Shamir和Adleman命名的RSA算法,以及DSA(Digital Signature Algorithm)算法等;而 ECC (Elliptic CurveCryptography)捕圆曲线密码算法也是最近几年获得重视并逐步获得应用的公开密钥密码算法。
[0003]相对于数据加密方和解密方使用同一个密钥的对称密钥密码体制,公开密钥密码算法具有密钥分发容易(公钥可公开发布)的优点,但其也存在算法实现较复杂、运算速度较慢的缺点。故此,在数据加密应用中,通常将二者结合起来使用:使用随机生成的对称密钥和对称密钥密码算法对数据加密,然后使用数据解密方的公钥、应用公开密钥密码算法对随机产生的对称密钥加密,之后将加密的数据和对称密钥一起传递给数据解密方;数据解密方接收到加密后的数据和对称密钥后,先用自己的私钥解密加密的对称密钥,然后用解密后的对称密钥解密数据。
[0004]在公开密钥密码体制中,一方要向另一方发送加密数据,必须事先获得对方的公钥,因此,公钥的拥有者(即加密数据的接收者)需通过一定的安全途径发布其公钥(防止攻击者假冒他人发布公钥),以使得其他人(或实体)能够使用其公钥向其发送加密数据。为了解决这一问题,人们提出了公开密钥基础设施(Public Key Infrastructure, PKI)安全技术体系。在PKI体系中,由一个数字证书认证中心(Certification Authority,CA)作为可信的第三方签发数字证书(Digital Certificate)来进行用户(实体)公钥的发布(如通过LDAP 目录服务,Lightweight Directory Access Protocol)。CA签发的数字证书除了包含证书持有人的公钥外,还包含有证书持有人的其他身份信息,如姓名、所属组织、电子邮件地址等。这样,在PKI体系中,一方要向另一方发送加密数据,发送者需先通过一定的途径,如从CA的公开证书目录服务(LDAP),获取接收者的(加密)数字证书,然后从数字证书中提取接收者的公钥。
`[0005]在PKI体系中,要发送加密数据,必须事先获取接收方的(加密)数字证书,这对于许多普通用户来说不是一件容易的事,这也是PKI技术体系在实际应用中存在的一个比较突出的问题,为了解决这一问题,人们提出了基于身份标识的密码体制(Identity BasedCryptography, IBC)(也称基于标识的密码体制)。在IBC中,一个实体(如人)的一个身份标识就构成了一个公钥(IBC公钥),用于数据加密或签名验证,并对应一个私钥(IBC私钥),用于数据解密或数字签名。身份标识对应的私钥是由一个称为私钥生成器(Private KeyGenerator, PKG)的一个IBE密钥服务器产生的。严格地说,IBC公钥是由一个身份标识和一组IBC公开参数所组成,而IBC私钥是由一个身份标识对应的私密数据和一组IBC公开参数所组成。IBC用于数据加密称为IBE (Identity Based Cryptography,基于身份标识的加密);IBC用于数字签名称为IBS (Identity Based Signature)。但是,有时候人们把IBE与IBC等同(IBE同时包括加密与签名,因为签名、签名验证同样可看作一种加密、解密运算)。
[0006]使用IBC进行数据加密时,数据加密方无需事先获得数据解密方的数字证书或公钥,只需事先知道唯一标识对方身份的一个标识(如身份证号、电子邮件地址等),然后基于这个身份识别结合一组公开参数就可以进行数据加密(通常是先用随机产生的对称密钥加密数据,然后用IBE公钥加密随机产生的对称密钥)。由于无需事先获得数据解密方的数字证书或公钥,这就大大提供了数据加密的易用性、方便性。进一步,除了易用性外,与PKI/CA相比,IBC具有如下有点:
[0007]I)密钥管理与服务系统要简单很多,只需一个用户和标识管理系统加上一个PKG即可;
[0008]2)由于用户的IBC私钥是由PKG动态计算出来的,在用户私钥丢失时可方便地为用户(在线)恢复私钥,不像PKI/CA需要一个复杂的KMC (Key Management Center)系统为所有用户生成、保存并恢复加密数字证书的私钥(密钥对),其中保存大量的用户私钥增加了系统的复杂性,以及增加了对系统安全性、可靠性的要求。
[0009]IBC还可以与各种身份标识或密钥限定策略结合使用,形成各种基于策略(PolicyBased)的数据加密(或签名),其中最常用的是将一个身份标识与一个时间段限定策略结合(时间策略),形成一个如下所示的扩展身份标识:
[0010]〈身份标识>I〈时间段〉,
[0011]这里,< 身份标识 > 指身份标识对应的字串,< 时间段 > 指相应时间段信息的字串(如用2013-8-28:2013-9-28,表示时间段2013年8月28日到2013年9月28,但这种表示不是唯一的,可根据需要约定),“ I I”表示身份标识字串和时间段字串的组合(可以是简单的字串连接、合并,或者其他约定的组合方式,只要能唯一区分、表示扩展身份标识即可),时间段既可以是一个时间区间,也可以是一个时刻(起止时间相同)。扩展身份标识被当作一个通常的身份标识对应有一个IBC私钥,并用于密码运算。增加了时间段的扩展身份标识及其对应的私钥仅在一段时间内使用,这相当于用时间段对身份标识及其私钥的使用进行了限定(限定身份标识和/或其私钥仅在对应的时间段使用和有效)。通过时间段限定的扩展身份标识所对应的私钥一旦被泄露,则仅会对相应时间段内的密码数据造成影响。时间段的长短可根据安全要求结合使用方便性综合考虑,如可以按年、月、周、日更新。
[0012]除了采用时间段对身份标识的使用进行限定外,还可以增加其他的限定策略对标识的使用加以限定,如,
[0013]<身份标识> 11〈角色> 11〈时间段>,
[0014]这里,〈角色 > 是角色的字串表示,即限定只有拥有对应角色的用户才能使用扩展身份标识对应的私钥对加密数据进行解密,或者对数据进行数字签名。[0015]需指出的是,在IBC的实际密码运算中,并不是使用身份标识字串本身参与运算,而是使用身份标识的散列值=HASH (〈身份标识 >),这里HASH (…)表示散列值计算。
[0016]加了限定策略后,参与密码运算的是扩展身份标识,这时,参与运算的散列值有两种计算方式,一是采用如下的先拼接扩展身份标识,再计算散列值的方式:
[0017]HASH (<身份标识> I I〈时间段 >),或者,
[0018]HASH (<身份标识> I I〈角色> I I〈时间段? ;
[0019]二是采用如下先计算散列值,然后拼接,再计算散列值的方式:
[0020]HASH (HASH (< 身份标识 >)| HASH (< 时间段 >)),或者,
[0021]HASH (HASH (〈身份标识 >)I HASH (〈角色 >)| HASH (〈时间段 >))。
[0022]IBC有很多独特的优点,其中最突出的是改善用户公钥数据加密的易用性、方便性,但IBC应用也存在一定的问题,具体如下:
[0023]I)目前缺少统一的 密码算法国际标准,导致缺少统一的IBC密码产品认证标准,这样妨碍了密码设备的研制生产、销售和使用;
[0024]2)没有应用层的统一的标准(国际或工业标准),导致缺少应用支持,目前几乎所有的主流标准应用都不支持IBC ;
[0025]3)由于相对普通的公开密钥密码算法,IBC的密码运算多了复杂的配对运算,密码运算量比较大,若在密码硬件中进行密码运算,则对密码硬件的要求比较高,因此,目前还没有像RSA、ECC那样的进行客户端密码运算的合适的客户端密码硬件(如USB Key),目前的IBC USB Key基本上是不进行密码运算的密钥存储Key。
[0026]ECC (Elliptic Curve Cryptography)椭圆曲线密码算法是最近几年获得重视并逐步获得应用的公开密钥密码算法,与目前仍然广泛使用的RSA密码算法相比,ECC具有密钥长度短、运算量小等特点,已有相应的国际、国家、工业标准以及相应密码产品认证规范,以及客户端密码硬件(如支持ECC的USB KeyXECC密码算法是基于有限域(finite field)上的椭圆曲线的点所构成的加法群(Group)来实现密码运算。在ECC中,首先选定一条椭圆曲线,包括曲线格式、域(field)和曲线系数,并选定椭圆曲线上的一个称为基点(basepoint)的公共点计算G,选定的椭圆曲线的格式、域、系数以及基点G构成了 ECC的系统参数(System Parameters), ECC系统参数是可公开的(也称为ECC公开参数);在选定了 ECC系统参数后,一个用户ECC私钥是一个随机生成的整数d,其中d小于G的阶(Order) (G的阶是一个大素数);d对应的公钥是P=dG,其中dG是椭圆曲线上的点构成的加法群(group)中的倍乘(即d个G的累加和);(d,P)即构成了用户的ECC密钥对。
[0027]实际上,在ECC密码体制中,也可以通过将一个扩展身份标识与一个ECC私钥或密钥对相对应,使之具有IBC的部分性质,有关方案如下:
[0028]由一个密钥生成系统通过一个秘密的种子数据(如随机字串)与一个扩展身份标识通过运算(如合并后的散列运算)得到一个ECC私钥,并进而得到一个扩展身份标识对应的ECC公钥或密钥对;扩展身份标识中的限定策略用于限定ECC私钥的生成、使用;
[0029]一个身份标识的拥有者可从密钥生成系统获取其扩展身份标识对应的ECC私钥或密钥对;一个ECC公钥的信赖方,可从密钥生成系统获取其他个用户扩展身份标识对应的ECC公钥。
[0030]本发明的基于标识的椭圆曲线密码系统是在以上方案的基础上实现的。
【发明内容】

[0031]本发明的目的是主要针对企业、机构内部的应用,提出一种采用ECC椭圆曲线密码算法,具有IBC密码系统的部分特点,包括将一个ECC密钥对与一个(扩展)身份标识相对应,通过限定策略限定对应ECC密钥对的使用,由密码服务系统根据用户(扩展)身份标识计算生成或恢复对应的ECC私钥或密钥对,以及无需集中存储用户私钥等特点的基于标识的椭圆曲线密码系统。
[0032]为了实现上述目的,本发明所采用的技术方案是:
[0033]一种基于标识的椭圆曲线密码系统,所述密码系统包括如下组件或数据:
[0034]伪公钥:一种公钥数据结构,存放的不是数据结构标识的或约定的公开密钥密码算法的公钥数据,而是身份标识信息及ECC系统参数信息;所述身份标识信息指身份标识字串本身或其散列值,所述ECC系统参数信息包括ECC密码运算所采用的椭圆曲线格式、域、系数及基点的指示信息(如通过一个URL或版本号指示),即ECC系统参数的指示信息;一个所述伪公钥对应一个身份标识及其所有扩展身份标识;(比如一个公钥数据结构原本标识或约定是用来存放RSA或ECC公钥数据的,但实际上存放的不是RSA或ECC公钥的密钥数据,而是身份标识信息及ECC系统参数信息)
[0035]伪数字证书:一种X509格式的数字证书,数字证书上的证书持有者(主题名对应的实体)的公钥不是数字证书上所指示的公开密钥密码算法(如RSA或ECC)的公钥,而是证书持有者的身份标识所对应的伪公钥;一张伪数字证书及其伪公钥与证书持有者的身份标识及其所有扩展的身份标识相对应;所述伪数字证书的有效期长度及起始、终止时间的设定没有限定要求,只要超过伪数字证书所对应的身份标识的所有扩展身份标识所对应的ECC私钥或密钥对的使用期限即可(通常将有效期设置得很长,如50年,而将起始、终止时间固定);
[0036]ECC密钥生成系统:通过计算得到一个扩展身份标识对应的ECC公钥、ECC私钥或ECC密钥对的系统;所述ECC密钥生成系统设置有随机生成的用于ECC私钥生成计算的种子数据;
[0037]伪数字证书签发系统:生成并签发一个身份标识所对应的伪数字证书的系统;
[0038]伪数字证书签发客户端:供用户使用,用于从伪数字证书签发系统获取用户身份标识所对应的伪数字证书的用户端软件程序;
[0039]密码模块:提供密钥操作与密码运算功能的软件组件或软硬件组合,所述密钥操作包括密钥生成、导入、导出和删除,所述密码运算包括加密和解密,签名和签名验证;所述密码模块通过密码接口对外提供密钥操作与密码运算功能的调用;
[0040]密码应用程序:调用密码模块进行密钥操作(包括公钥、私钥或密钥对的密钥操作),包括生成、导出、导入和删除,以及调用密码模块使用公钥或私钥进行加密或解密,签名验证或数字签名密码运算的软件程序;
[0041]所述密码模块在存储介质中为用户或密码应用程序使用的每一个身份标识维护一个存放ECC公钥组的密钥对象,称为ECC公钥组密钥对象;所述ECC公钥组密钥对象的ECC公钥组中存放有一系列由同一个身份标识的扩展身份标识所生成的ECC公钥;一个所述ECC公钥组及其密钥对象与一个对应相同身份标识的伪公钥和伪数字证书相对应;所述ECC公钥组密钥对象作为一个密钥对象用一个密钥对象标识符(Key Object Identifier)标识;
[0042]当所述密码模块在存储介质中创建一个伪公钥的密钥对象时,将所创建的伪公钥密钥对象关联到对应的具有相同身份标识的ECC公钥组的密钥对象;密码应用程序通过使用伪公钥的密钥对象使用伪公钥对应的ECC公钥组密钥对象的ECC公钥组中的ECC公钥进行密码运算,包括数据加密和签名验证;所述密码模块所创建的伪公钥的密钥对象称为伪公钥密钥对象;
[0043]所述密码模块在存储介质中为用户或密码应用程序使用的每一个身份标识维护一个存放ECC私钥组或密钥对组的密钥对象,称为ECC私钥组或密钥对组密钥对象;所述ECC私钥组或密钥对组密钥对象的ECC私钥组或密钥对组中存放有一系列由同一个身份标识的一个扩展身份标识所生成的ECC私钥或公钥对;一个所述ECC私钥组或密钥对组及其密钥对象与一个对应相同身份标识的伪公钥和伪数字证书相对应;一个所述ECC私钥组或密钥对组密钥对象作为一个密钥对象用一个密钥对象标识符标识,并通过密钥对象标识符被当作对应的伪公钥和伪数字证书的对应私钥或密钥对使用(称为影子私钥或影子密钥对);
[0044]所述ECC公钥组或ECC私钥组或密钥对组的密钥对象数据中,除了保存有每个扩展身份标识对应的ECC公钥或ECC私钥或密钥对外,还保存有对应的身份标识信息以及每个ECC公钥或ECC私钥或密钥对所对应的扩展身份标识信息;
[0045]所述密钥对象指各种密钥包括公钥、私钥、密钥对以及对称密钥在密码模块中的数据存在形式;所述密钥对象包括存储在永久存储介质上(如硬盘、USB Key上)的永久密钥对象和存储在临时存储介质上(如内存中)的临时密钥对象,并分别对应有永久密钥对象标识符(通常是字串)和临时密钥对象标识符(通常是整数,即密钥对象句柄,简称密钥句柄);
[0046]所述密码模块和ECC密钥生成系统预定或配置有身份标识限定策略;密码模块处的身份标识限定策略规定或限定了在数据加密或数字签名时一个身份标识所对应的扩展身份标识,即规定或限定了在数据加密时所采用的ECC公钥所对应的扩展身份标识或在数字签名时所采用的ECC私钥所对应的扩展身份标识,也即在数据加密或数字签名时哪一个扩展身份标识所对应的ECC公钥或ECC私钥被采用;ECC密钥生成系统处的身份标识限定策略规定或限定了在生成一个扩展身份标识对应的ECC私钥时需要满足的必要条件;所述预定的身份标识限定策略指已编码在程序中的不能更改的身份标识限定策略;所述配置的身份标识限定策略指可修改、设定的身份标识限定策略;
[0047]所述密码应用程序按使用公钥及其对应私钥或密钥对的方式使用伪公钥及其对应的私钥或密钥对;
[0048]所述密码应用程序按使用数字证书及其对应私钥或密钥对的方式使用伪数字证书及其对应私钥或密钥对(如将证书上的持有者公钥导入到密码模块中用于数据加密或签名验证,或通过证书所关联的私钥或密钥对密钥对象的密钥对象标识符使用证书持有者的私钥,用于数据解密或签名验证);
[0049]若密码应用程序不使用数字证书而是直接使用公钥或私钥或密钥对进行数据加密和解密,签名和签名验证,则所述伪数字证书、伪数字证书签发系统以及伪数字证书签发客户端不再存在;[0050]若仅密码应用程序从所述伪数字证书签发系统获取伪数字证书,则所述伪数字证书签发客户端不再存在。
[0051]在大部分的密码模块实现中都采用了密钥对象的概念,在不产生歧义的情况下,可将公钥、私钥、密钥对、对称密钥与公钥对象、私钥对象、密钥对对象、对称密钥对象等同。永久存储介质上的密钥对象通常需要装载到临时存储介质中后通过相应的整数密钥标识符访问。
[0052]用户通过如下方式对密码应用程序的密钥或数字证书进行配置:
[0053]对于不使用数字证书的密码应用程序,用户通过如下方式进行密钥配置:
[0054]非身份标识的拥有者用户通过密码应用程序或其他密钥配置工具自动或在用户干预的情况下,生成身份标识对应的伪公钥,调用所述密码模块的ECC公钥组生成接口生成身份标识对应的ECC公钥组的密钥对象,然后将生成的伪公钥导入到密码模块中,将伪公钥配置为密码应用程序所用,包括用于数据加密和签名验证;
[0055]身份标识的拥有者用户通过密码应用程序或其他密钥配置工具自动或在用户干预的情况下,生成身份标识对应的伪公钥,调用所述密码模块的私钥或密钥对生成接口生成身份标识对应的ECC私钥组或密钥对组的密钥对象,然后将生成的伪公钥和ECC私钥组或密钥对组密钥对象作为配对的公钥和私钥配置为密码应用程序所用,包括用于数据加密和解密,签名和签名验证;
[0056]对于使用数字证书的密码应用程序,用户通过如下方式进行数字证书配置:
[0057]非身份标识的拥有者用户通过伪数字证书签发客户端或密码应用程序,进行如下密钥及证书生成和配置操作:
[0058]操作Q:调用所述密码模块的ECC公钥组生成接口,生成身份标识对应的ECC公钥组的密钥对象;
[0059]操作U:从伪数字证书签发系统获取身份标识对应的伪数字证书;
[0060]操作V:将生成的伪数字证书配置为密码应用程序所用,包括用于数据加密和签名验证;
[0061]身份标识的拥有者用户通过伪数字证书签发客户端或密码应用程序,进行如下密钥及证书生成和配置操作:
[0062]操作W:调用所述密码模块的私钥或密钥对密钥生成接口,生成身份标识对应的ECC私钥组或密钥对组的密钥对象;
[0063]操作X:从伪数字证书签发系统获取身份标识对应的伪数字证书;
[0064]操作Y:将操作W得到的密钥对象与操作X获取的伪数字证书关联(如何关联取决于具体应用的证书使用环境,通常是通过密钥对象标识符将一个私钥或密钥对密钥对象与一张数字证书关联),即将操作W生成的ECC私钥组或密钥对组密钥对象作为操作X获得的伪数字证书的私钥或密钥对密钥对象;
[0065]操作Z:将生成的伪数字证书配置为密码应用程序所用,包括用于数据加密和解密,签名和签名验证。
[0066]对于伪数字证书签发客户端或密码应用程序针对公钥或私钥或密钥对操作的接口调用,所述密码模块针对不同的接口操作调用分别按如下方式进行处理:
[0067]操作调用A:对于生成私钥或密钥对的接口调用,在存储介质中创建一个包括一个空的ECC私钥组或密钥对组的密钥对象,并将通过人机界面获得的身份标识信息保存在新生成的密钥对象中,然后将返回的密钥对象标识符指向新生成的ECC私钥组或密钥对组的密钥对象;或者生成一个伪公钥的数据结构所标识的或约定的公开密钥密码算法的私钥或密钥对的密钥对象,然后将返回的密钥对象标识符指向新生成的密钥对象(如,若伪公钥的数据结构所标识的或约定的算法是RSA,则生成一个RSA私钥或密钥对);
[0068]操作调用B:对于生成私钥组或密钥对组的接口调用,在存储介质中创建一个包括一个空的ECC私钥组或密钥对组的密钥对象,并将通过调用接口或人机界面获得的身份标识信息保存在新生成的密钥对象中,然后将返回的密钥对象标识符指向新生成的ECC私钥组或密钥对组的密钥对象;
[0069]操作调用C:对于生成ECC公钥组的接口调用,在存储介质中创建一个包括一个空的ECC公钥组的密钥对象,并将通过调用接口或人机界面获得的身份标识信息保存在新生成的密钥对象中,然后将返回的密钥对象标识符指向新生成的ECC公钥组的密钥对象;
[0070]操作调用D:对于使用ECC私钥组或密钥对组密钥对象的密钥对象标识符导出私钥或密钥对的接口调用,返回出错;
[0071]操作调用E:对于使用ECC私钥组或密钥对组密钥对象的密钥对象标识符导出ECC私钥组或密钥对组的接口调用,返回密钥对象标识符指向的密钥对象的ECC私钥组或密钥对组中所有ECC私钥或密钥对,以及对应的身份标识和扩展身份标识信息;
[0072]操作调用F:对于使用ECC公钥组密钥对象的密钥对象标识符导出ECC公钥组的接口调用,返回密钥对象标识符指向的密钥对象的ECC公钥组中所有ECC公钥,以及对应的身份标识和扩展身份标识信息;
[0073]操作调用G:对于使用ECC私钥组或密钥对组密钥对象的密钥对象标识符导出公钥的接口调用,从密钥对象标识符指向的密钥对象中获取对应的身份标识,生成身份标识对应的伪公钥,然后返回生成的伪公钥;
[0074]操作调用H:对于导入ECC公钥组的接口调用,在存储介质中创建一个ECC公钥组的密钥对象,并将通过调用接口输入的要导入的ECC公钥组中的所有ECC公钥以及对应的身份标识和扩展身份标识信息加入到新创建的密钥对象中,然后将返回的密钥对象标识符指向新生成的ECC公钥组密钥对象;
[0075]操作调用1:对于导入ECC私钥组或密钥对组的接口调用,在存储介质中创建一个ECC私钥组或密钥对组的密钥对象,并将通过调用接口输入的要导入的ECC私钥组或密钥对组中的所有ECC私钥或密钥对以及对应的身份标识和扩展身份标识信息加入到新创建的密钥对象中,然后将返回的密钥对象标识符指向新生成的ECC私钥组或密钥对组的密钥对象;
[0076]操作调用J:对于使用ECC私钥组或密钥对组的密钥对象的密钥对象标识符删除私钥或密钥对密钥对象的接口调用,在存储介质中清除对象标识符所指的密钥对象;
[0077]操作调用K:对于使用ECC公钥组的密钥对象的密钥对象标识符删除公钥组的接口调用,在存储介质中清除密钥对象标识符所指的密钥对象;
[0078]操作调用L:对于导入公钥的接口调用,检查导入的公钥是否是伪公钥,如果不是,则按导入正常的公钥(即非伪公钥)的方式完成导入公钥的处理;否则,按如下方式处理:[0079]步骤L1:在存储介质中创建一个伪公钥的密钥对象,将要导入的伪公钥保存在创建的伪公钥密钥对象中;
[0080]步骤L2:从伪公钥中获取身份标识信息;
[0081]步骤L3:查看存储介质中是否已有身份标识对应的ECC公钥组密钥对象,若是,则将步骤LI创建的伪公钥的密钥对象与对应的ECC公钥组密钥对象相关联(如将ECC公钥组密钥对象的密钥对象标识符保存在创建的伪公钥密钥对象中),并将返回的密钥对象标识符指向创建的伪公钥的密钥对象,完成伪公钥的导入处理;否则,返回出错;
[0082]操作调用M:对于使用伪公钥密钥对象的密钥对象标识符导出公钥的接口调用,导出密钥对象标识符指向的伪公钥密钥对象中的伪公钥;
[0083]操作调用N:对于使用伪公钥密钥对象的密钥对象标识符删除公钥密钥对象的接口调用,在存储介质中清除密钥对象标识符所指的伪公钥密钥对象;
[0084]执行所述操作调用A是生成一个ECC私钥组或密钥对组的密钥对象,还是生成一个伪公钥的数据结构所标识的或约定的公开密钥密码算法的私钥或密钥对的密钥对象,由用户通过人机界面选择决定,或者由所述密码模块的配置信息决定,或者由密码模块程序固定设定。
[0085]操作调用A和操作调用B是两种不同的接口调用(操作调用A通常是标准的接口调用,而操作调用B是额外定义的接口调用);同样地,操作调用D和操作调用F是两种不同的接口调用(操作调用D通常是标准的接口调用,而操作调用F是额外定义的接口调用)。
[0086]以上针对密钥的操作,或者是针对永久存储介质上的密钥的操作,或者是针对临时存储介质上的密钥的操作;永久存储介质上(如硬盘)的密钥通常需要装载到临时存储介质中(如内存中)才能使用,这与具体实施有关。另外,在密码模块的具体实施中,除了以上所述针对公钥、私钥或密钥对的操作外,还需要实施针对其他密钥对象(如对称密钥)的密钥操作。
[0087]对于密码应用程序使用伪公钥密钥对象的密钥对象标识符调用所述密码模块进行数据加密的操作(通常是对随机对称密钥加密),所述密码模块按如下方式进行处理:
[0088]第I步:从密钥对象标识符所指的伪公钥密钥对象中获取对应的身份标识,用获取的身份标识生成一个与预定或配置的身份标识限定策略相对应的扩展身份标识;
[0089]第2步:查看密钥对象标识符指向的伪公钥密钥对象所关联的ECC公钥组密钥对象的ECC公钥组中是否有第I步生成的扩展身份标识对应的ECC公钥,若没有,转入第3步;若有,则使用对应的ECC公钥对数据进行加密,并将当前使用的ECC公钥对应的扩展身份标识的信息作为附加数据或填充数据附加或填充到被加密的数据中,完成处理后返回结果;
[0090]第3步:使用第I步生成的扩展身份标识从ECC密钥生成系统请求获取扩展身份标识对应的ECC公钥;
[0091]第4步:将获得的ECC公钥及对应的扩展身份标识及加入到当前使用的伪公钥密钥对象所关联的ECC公钥组密钥对象的ECC公钥组中;
[0092]第5步:使用获得的ECC公钥对数据进行加密,并将当前使用的ECC公钥对应的扩展身份标识的信息作为附加数据或填充数据附加或填充到被加密的数据中,完成处理后返回结果;
[0093]所述第2步或第5步中将当前使用的ECC公钥对应的扩展身份标识的信息作为附加数据或填充数据附加或填充到被加密的数据中的操作处理,是指将扩展身份标识信息加入到经ECC公钥密码运算后的数据本身中,而不是作为加密密钥的密钥标识信息或密钥标识信息的一部分放入到加密数据信封的接收者信息中(如RFC5652,CryptographicMessageSyntax (CMS)的 EnvelopedData 数据信封的 RecipientInfo 中)。
[0094]实际上,通常ECC公钥是用于加密随机产生的对称密钥,因此,通常情况下扩展身份标识的信息是附加或填充入到被加密的随机对称密钥数据中。
[0095]如何在一个身份标识的基础上生成一个与预定或配置的身份标识限定策略相对应的扩展身份标识,与具体的策略有关,与具体的策略实施方案有关。
[0096]对于密码应用程序使用ECC私钥组或密钥对组密钥对象的密钥对象标识符调用所述密码模块进行数据解密的操作,所述密码模块按如下方式进行处理:
[0097]第A步:通过加密数据的附加数据或填充数据获得数据加密时所用ECC公钥的对应扩展身份标识;
[0098]第B步:查看密钥对象标识符指向的密钥对象的ECC私钥组或密钥对组中是否有第A步获得的扩展身份标识对应的ECC私钥或密钥对,若没有,转入第C步;若有,则使用对应的ECC私钥或密钥对解密加密的数据,完成处理后返回结果;
[0099]第C步:使用第A步获得的扩展身份标识从ECC密钥生成系统请求获取扩展身份标识对应的ECC私钥或密钥对;
[0100]第D步:将获得的ECC私钥或密钥对及对应的扩展身份标识及加入到当前使用的ECC私钥组或密钥对组密钥对象的ECC私钥组或密钥对组中;
[0101]第E步:使用获得的ECC私钥或密钥对解密加密的数据,完成处理后返回结果。
[0102]对于密码应用程序使用ECC私钥组或密钥对组的密钥对象的密钥对象标识符调用所述密码模块对数据进行数字签名的操作,所述密码模块按如下方式进行处理:
[0103]步骤1:从密钥对象标识符所指的ECC私钥组或密钥对组密钥对象中获取的对应身份标识,用获取的身份标识生成一个与预定或配置的身份标识限定策略(即对应的ECC私钥的限定策略)相对应的扩展身份标识;
[0104]步骤2:查看密钥对象标识符指向的ECC私钥组或密钥对组密钥对象的ECC私钥组或密钥对组中是否有步骤I生成的扩展身份标识对应的ECC私钥或密钥对,若没有,转入步骤3 ;若有,则使用对应的ECC私钥或密钥对中的私钥对数据进行数字签名,并将当前使用的ECC私钥或密钥对所对应的扩展身份标识的信息作为附加数据或填充数据附加或填充到被签名的数据中,完成处理后返回结果;
[0105]步骤3:使用步骤I生成的扩展身份标识从ECC密钥生成系统请求获取扩展身份标识对应的ECC私钥或密钥对;
[0106]步骤4:将获得的对应ECC私钥或密钥对及对应的扩展身份标识及加入到当前使用的ECC私钥组或密钥对组中;
[0107]步骤5:使用获得的ECC私钥或密钥对中的私钥对数据进行数字签名,将当前使用的ECC私钥或密钥对所对应的扩展身份标识的信息作为附加数据或填充数据附加或填充到被签名的数据中,完成处理后返回结果;
[0108]所述步骤2或步骤5中将当前使用的ECC私钥或密钥对所对应的扩展身份标识的信息作为附加数据或填充数据附加或填充到被签名的数据中的操作处理,是指将扩展身份标识信息加入到经ECC私钥密码算后的数据本身中,而不是作为签名者密钥标识信息或密钥标识信息的一部分放入到签名后形成的数据结构的签名者信息中(如CMS中的SignedData的SignertInfo中)(实际上,签名是用ECC私钥针对签名数据的散列值进行密码运算,因此,扩展身份标识的信息是附加或填充到经ECC私钥密码运算后的散列值中)。
[0109]对于密码应用程序使用伪公钥密钥对象的密钥对象标识符调用所述密码模块对签名数据进行签名验证的操作,所述密码模块按如下方式进行处理:
[0110]步骤A:通过签名数据的附加数据或填充数据获得签名时所用ECC私钥的对应扩展身份标识;
[0111]步骤B:查看密钥对象标识符指向的伪公钥密钥对象所关联的ECC公钥组密钥对象的ECC公钥组中是否有步骤A中获得的扩展身份标识对应的ECC公钥,若没有,转入步骤C ;若有,则使用对应的ECC公钥对签名数据进行签名验证,完成处理后返回结果;
[0112]步骤C:使用步骤A获得的扩展身份标识从ECC密钥生成系统请求获取扩展身份标识对应的ECC公钥;
[0113]步骤D:将获得的对应ECC公钥及对应扩展身份标识及加入到当前使用的伪公钥密钥对象关联的ECC公钥组密钥对象的ECC公钥组中;
[0114]步骤E:使用获得的ECC公钥对签名数据进行签名验证,完成处理后返回结果。
[0115]在密码模块的具体实施中,除了以上针对公钥、私钥或密钥对密码运算外,还需要实施针对其他密钥对象(如对称密钥)的密码运算。
[0116]对于用户通过伪数字证书签发客户端或密码应用程序从所述伪数字证书签发系统获取一张身份标识对应的伪数字证书的请求,所述伪数字证书签发系统按如下步骤进行处理:
[0117]步骤1:查看内存或数据库中是否缓存或保存有请求中的扩展身份标识对应的伪数字证书,若有,则返回对应的伪数字证书;否则,转入步骤II ;
[0118]步骤I1:伪数字证书签发系统利用请求中的身份标识信息生成对应的伪公钥,然后使用伪数字证书签发CA的私钥签发一张证书持有者公钥是伪公钥的伪数字证书,,之后将签发的伪数字证书缓存在内存中或保存在数据库中,最后返回签发的伪数字证书;
[0119]所述伪数字证书签发系统针对同一身份标识所签发的伪数字证书的签发者名(Issuer Name)和序列号(Serial Number)相同(主题名,即Subject Name,可以同,也可以不同)。
[0120]若所述基于标识的椭圆曲线密码系统仅用于数据加密应用,则所述伪数字证书签发系统是一个独立运行的系统,或者与所述伪数字证书签发客户端合并为一个运行于用户端的伪数字证书签发工具;
[0121]若所述伪数字证书签发系统与所述伪数字证书签发客户端合并为一个运行于用户端的伪数字证书签发工具,则每个用户或密码应用程序通过所述伪数字证书签发工具独立生成加密或解密所需的伪数字证书,包括带私钥和不带私钥的伪数字证书;不同用户或密码应用程序通过所述伪数字证书签发工具针对同一个身份标识独立生成的伪数字证书的签发者名和序列号相同(主题名可以同,也可以不同);不同用户的伪数字证书签发工具所使用的证书签发CA及其上级CA的CA证书的签发者名、主题名和序列号相同,但证书签发CA及其上级CA的CA证书的密钥对不同。[0122]对于密码模块从ECC密钥生成系统请求获取一个扩展身份标识所对应的ECC公钥的请求,所述ECC密钥生成系统按如下步骤处理:
[0123]步骤一:查看内存或数据库中是否缓存或保存有请求中的扩展身份标识对应ECC公钥,若有,则返回对应的ECC公钥;否则,转入步骤二 ;
[0124]步骤二:将请求中的扩展身份标识与ECC密钥生成系统的种子数据通过运算生成扩展身份标识对应的ECC私钥(d),并进而计算得到对应的ECC公钥(dG),然后将计算得到的ECC公钥缓存在内存中或保存在数据库中,最后返回计算得到的对应的ECC公钥。
[0125]对于密码模块从ECC密钥生成系统请求获取一个扩展身份标识所对应的ECC私钥或密钥对的请求,所述ECC密钥生成系统按如下步骤处理:
[0126]第I步:验证和确认请求方的用户就是扩展身份标识对应的身份标识的拥有者,若验证通过,则转入第II步;否则,返回拒绝,并给出拒绝的原因;
[0127]第II步:根据请求中的扩展身份标识中的限定策略确定当前是否符合为用户生成扩展身份标识对应私钥的条件,若是,则转入第III步;否则,返回拒绝,并给出拒绝的原因;
[0128]第III步:将请求中的扩展身份标识与ECC密钥生成系统的种子数据通过运算生成扩展身份标识对应的ECC私钥(d),并返回生成的ECC私钥;
[0129]若请求是生成ECC密钥对,则由ECC密钥生成系统利用生成的ECC私钥(d)计算得到对应的ECC公钥(dG)并返回生成和计算得到的ECC私钥和公钥(即ECC密钥对),或者仅返回生成的ECC私钥,由调用方的密码模块利用获得的ECC私钥计算得到对应的ECC公钥。
[0130]如何根据请求中的扩展身份标识的限定策略确定当前是否符合为用户生成扩展身份标识对应私钥的条件,与具体的策略有关,与具体的策略实施方案有关。
[0131]若所述基于标识的椭圆曲线密码系统采用分割方式生成ECC密钥,则由两个或两个以上的采用相同ECC系统参数的ECC密钥生成系统分别生成一个扩展身份标识对应的ECC私钥,然后以分别生成的ECC私钥的代数和作为最终的ECC私钥;以每个ECC密钥生成系统分别生成的扩展身份标识对应的ECC公钥的椭圆曲线群和(椭圆曲线上的点构成的群的点加和)作为最终的ECC公钥;每个ECC密钥生成系统用于ECC私钥计算的种子数据各不相同。对不同ECC密钥生成系统分别生成的ECC私钥求代数和以及对不同ECC密钥生成系统分别生成的ECC公钥求椭圆曲线群和的运算由密码模块完成。
[0132]本发明的基于标识的椭圆曲线密码系统,通过将对应于一个身份标识的伪公钥与对应同一身份标识的ECC公钥组和ECC私钥组(或ECC密钥对组)相对应,从而将使用伪公钥进行数据加密或签名验证的密码运算自动转化成使用对应ECC公钥组中相应ECC公钥的运算;将使用伪公钥所对应的私钥(一个实际上不存在的影子私钥)进行数据解密或签名的运算自动转化成使用对应ECC私钥组(或ECC密钥对组)中对应私钥的运算;并且,在没有对应ECC公钥或私钥(密钥对)时,由密码模块自动获取对应的ECC公钥或私钥(密钥对)。这样的基于标识的椭圆曲线密码系统不但具有IBC密码系统的部分特点,包括将一个密钥对与一个(扩展)身份标识相对应,通过限定策略对身份标识对应密钥对的使用进行限定,由密钥生成系统根据用户的(扩展)身份标识计算生成或恢复对应的私钥或密钥对,无需集中存储用户数字证书和对应私钥等(从而大大降低了密钥管理和服务系统的复杂性),而且,密码算法比IBC简单,易于得到客户端密码硬件的支持,并通过密码模块自动获取或更新密钥,减少了密钥更新过程中用户的干预,给用户带来方便。
【专利附图】

【附图说明】
[0133]图1为本发明的密码系统的结构框图。
[0134]图2为本发明的密码模块中ECC密钥组(包括ECC公钥组、ECC私钥组或密钥对组)的实施示意图。
【具体实施方式】
[0135]下面结合附图和实施例对本发明作进一步的描述。
[0136]采用本发明的密码系统的结构框图如图1所示。
[0137]本发明的实施首先需要确定伪公钥的实施方案。本发明的伪公钥可以基于RSA公钥实施(伪RSA公钥),也可以基于ECC公钥实施(伪ECC公钥),或基于其他公开密钥密码算法的公钥实施。无论采用RSA公钥实施还是采用ECC公钥实施(或其他算法的公钥实施),都可以参考本发明专利申请的 申请人:在其专利“一种基于伪RSA密钥的新近公开密钥加密算法的应用实现方法”(专利号:201110248050.8)中所述的伪RSA密钥(针对公钥部分)的实施方案。这时,伪RSA公钥数据或伪ECC公钥数据中存放的身份标识信息是(基本)身份标识的散列数值(若存原始值,则有可能太长),以及ECC系统参数(包括椭圆曲线具体格式、域、系数和基点)的指示信息(通过版本号或URL),而不是椭圆曲线的具体格式、域、系数和基点数据本身。
[0138]在伪公钥的基础上可实施伪数字证书(如伪RSA数字证书或伪ECC数字证书)。实现所有伪数字证书的签发者名相同是很容易做到的,只要证书签发CA的CA证书的主题名不变或相同即可;为了保证针对同一个身份标识所生成签发的伪数字证书的序列号相同,可以用身份标识的散列值作为证书序列号。
[0139]证书主题名如何设置与具体密码应用有关,通常情况下根据密码应用的需要,身份标识需要作为主题名的一部分出现在主题名中,比如,如果身份标识是电子邮箱地址,则身份标识(即电子邮箱地址)要作为主题名(主题甄别名)的电子邮件字段(E字段)的值出现在主题名中。
[0140]伪数字证书的有效期可以设置得很长,比如50年,100年,且可将其起始、终止时间固定。
[0141]若伪数字证书签发系统是一个运行于用户端的伪数字证书签发工具,要做到不同用户的伪数字证书签发工具所使用的证书签发CA及其上级CA的CA证书的签发者名、主题名和序列号相同,而证书签发CA及其上级CA的CA证书的密钥对不同,不是一件困难的事情,只要每个用户端的伪数字证书签发工具各自独立地生成证书签发CA及其上级CA的CA证书(包括根CA证书)的密钥对,且使得各自生成的CA证书使用预先约定的签发者名、主题名和序列号即可。
[0142]由于目前的绝大部分密码应用程序和标准密码模块接口都支持RSA算法和RSA数字证书,而很多密码应用程序或标准密码模块接口尚不支持ECC算法和ECC数字证书,故现阶段最好采用RSA实施伪公钥和伪RSA数字证书。[0143]需要指出的是,如果基于RSA公钥实施本发明的用于ECC密钥操作和密码运算的伪公钥和伪数字证书,则实施得到的伪公钥和伪数字证书与发明“一种基于伪RSA密钥的新近公开密钥加密算法的应用实现方法”(专利号:201110248050.8)中针对ECC算法实施得到的伪RSA公钥和伪RSA数字证书是完全不同的,这是因为,本发明的伪公钥数据包括伪数字证书上的伪公钥数据中并没有包含真正的ECC公钥,而是身份标识及其他信息,而发明201110248050.8中针对ECC算法实施得到的伪RSA公钥数据包括伪RSA数字证书上的伪公钥数据中包含有真正的ECC公钥。
[0144]确定了伪公钥和伪数字证书的实施方案后,基于现有的信息系统开发技术,如C/C++、Java、C#.NET等,开发一个实现本发明所述功能的伪数字证书签发系统不是一件困难的事情。伪数字证书签发系统与伪数字证书签发客户端之间的协议可以自定义。
[0145]实施ECC密钥生成系统的关键是计算一个扩展身份标识对应的ECC密钥对的ECC私钥,并由此得到对应的ECC公钥或密钥对。对于一个扩展身份标识对应的ECC私钥,可以采用如下散列值计算方案获得:
[0146]HASH (<扩展身份标识> I I <种子数据>),
[0147]即将扩展身份标识与种子数据合并后计算散列值,然后从计算得到的散列值得到需要的ECC私钥,比如,若散列值是160位,而ECC私钥要求是128位,则可取散列值的前128位作为ECC私钥;若散列值是160位,而ECC私钥要求是160位,则可将散列值作为ECC私钥。采用的散列算法可以是SHA-1、MD5或其他散列算法。如果所采用的散列算法的散列值的长度小于期望的ECC私钥的长度(比如散列值是160位,ECC私钥的长度是192位),则可以用两个种子数据计算散列值,然后从两个散列值合并后的数据中导出ECC私钥。或者采用其他能够将一个扩展身份标识唯一映射到一个ECC私钥的算法。
[0148]实施密码模块是实施本发明的系统的关键。在实施时有一点需要注意,对于公开密钥密码算法而言,私钥数据通常包含有公钥,或者可以通过私钥直接计算得到公钥,因此,针对私钥的操作和运算与针对密钥对的操作与运算是等同的。
[0149]实施密码模块的一种方案是自定义密码调用接口,并实现本发明所述功能以及其他需要的功能,包括涉及对称密钥、散列计算的功能。但是,采用这种方案的缺点是大部分的密码应用程序将无法使用实施的密码模块进行数据加密、解密,签名、签名验证,这是因为大部分的密码应用程序是通过标准密码接口,如Windows CSP的CryptoSP1、PKCS#11等,来实现密码功能调用(Windows实际上是通过CryptoAPI调用CSPjS CSP需实现CryptoSPI)。为了使得这些密码应用程序能使用本发明的密码系统,故需要基于这些标准密码接口实施本发明的密码模块。下面以Windows CSP的CryptoSPI为例来说明,基于PKCS#11或其他标准密码接口的实施方式类似。
[0150]Windows CSP是Windows操作系统中的提供密码服务功能的模块,全称是Cryptographic Services Provider (密码服务提供者),它采用的密码接口为CryptoSPI。考虑到Windows的CSP架构目前还不能很好地支持ECC算法,故可以采用RSA CSP来实施本发明的内容,即所述伪公钥是伪RSA公钥,所述伪数字证书是伪RSA数字证书,而所述密码模块是一个支持RSA密码接口的CSP。
[0151]采用基于RSA密码接口的CSP实施本发明的密码模块时,所有与RSA密钥对有的密码调用需要根据本发明的内容作相应的改变和实施,实施要点如下:[0152]I )RSA CSP中的RSA密钥对密钥对象(或密钥容器)对应于本发明的ECC密钥组密钥对象;
[0153]2)RSA CSP中的RSA公钥密钥对象对应于本发明中的伪公钥密钥对象及其关联的ECC公钥组密钥对象;
[0154]3 )本发明中的密钥对象标识符或者对应于RSA CSP中的永久密钥对象的永久密钥对象标识符,或者对应于RSA CSP中的临时密钥对象的临时密钥对象标识符,即密钥句柄;相应地,针对密钥对象的操作或者是针对永久密钥对象,或者是针对临时密钥对象,取决于对应的RSA CSP调用接口采用的对象标识符和对应的密钥对象;
[0155]4) RSA CSP中初始化一个RSA密钥对的密钥容器的接口调用,对应的实施是在临时存储介质(内存)中创建一个临时的ECC私钥组或密钥对组密钥对象,包括将一个永久ECC私钥组或密钥对组密钥对象通过创建临时密钥对象的方式装载到临时存储介质中(供使用);
[0156]5)操作调用A对应于RSA CSP中创建一个RSA密钥对密钥对象的接口调用;
[0157]6)操作调用D对应于RSA CSP中导出一个RSA密钥对密钥对象(密钥容器中)的RSA密钥对的接口调用;
[0158]7)操作调用G对应于RSA CSP中从一个RSA密钥对密钥对象(密钥容器中)导出公钥的接口调用;
[0159]8)操作调用J对应于RSA CSP中删除永久存储介质上的一个RSA密钥对密钥对象或删除(释放)临时存储介质上(内存中)的一个RSA密钥对密钥对象的接口调用(取决于对应的RSA CSP接口调用);
[0160]9)操作调用L对应于RSA CSP中导入公钥的接口调用;
[0161]10)操作调用M对应于RSA CSP中针对RSA公钥密钥对象导出公钥的接口调用;
[0162]11)操作调用N对应于RSA CSP中删除RSA公钥密钥对象的接口调用;
[0163]12)操作调用B、操作调用C、操作调用E、操作调用F、操作调用H、操作调用1、操作调用K在RSA CSP中没有对应的接口调用,需要通过标准接口之外额外定义的接口实现;
[0164]13)其他与RSA密钥对有关的密钥操作调用,包括密钥参数查询,若无法实施,可以直接返回出错。
[0165]RSA CSP中所有与使用RSA公钥、私钥进行密码运算的操作,包括加密、解密,签名、签名验证,按本发明给出的相应方案实施。除此之外,还需要实施本发明中未描述但应用过程中需要的其他密码功能,包括与对称密钥、散列运算有关的密钥操作与密码运算功倉泛。
[0166]身份标识限定策略的实施,与具体的限定策略有关。最常用的身份标识限定策略是时间策略,通常是规定或限定扩展身份标识及其私钥每间隔一段就进行更新,这样在数据加密或数字签名时所用的扩展身份标识应该是覆盖当前时刻的扩展身份标识,对应的ECC公钥或私钥是覆盖当前时刻的扩展身份标识所对应的ECC公钥或私钥;而在生成扩展身份标识对应的ECC私钥时,当前时刻必须不早于扩展身份标识中的起始时刻(起始时间)。因此,对于时间策略,生成一个身份标识的与(预定或配置的)时间限定策略相对应的扩展身份标识,即用覆盖当前时刻的时间段形成对应的扩展身份标识;从ECC私钥生成系统获取ECC私钥时,ECC私钥生成系统根据当前时刻是否在扩展身份标识中的时间限定策略的起始时刻(起始时间)之后,来判断当前是否符合为用户生成扩展身份标识对应私钥的条件。
[0167]如果预定或配置有角色策略,则生成一个身份标识的与预定或配置的角色限定策略相对应的扩展身份标识即把对应的角色策略加入到生成的扩展身份标识中(以字串的形式);从ECC私钥生成系统获取ECC私钥时,ECC私钥生成系统根据当前用户是否拥有对应的角色来判断当前是否符合为用户生成扩展身份标识对应私钥的条件。
[0168]通过分析,可以发现,根据限定策略的取值,限定策略可分为两类:动态策略,静态策略;前者出现在扩展身份标识中的数据值是可变的(如时间策略),或者根据情况可出现或者不出现,后者是固定不变的(如角色)。故此,在生成一个身份标识与预定或配置的限定策略相对应的扩展身份标识的时候,需要根据当前的情况确定动态策略是否需要出现,或者当前出现的策略数据值是什么(如时间段的值),然后将需要出现的动态策略及其数据值按事先约定顺序的加入到扩展身份标识;对于静态策略总是将其按事先约定顺序的加入到扩展身份标识中;从ECC私钥生成系统获取ECC私钥时,ECC私钥生成系统根据当前情况判断扩展身份标识中出现的动态策略和静态策略的约束要求是否得到满足,从而判断当前是否符合为用户生成扩展身份标识对应私钥的条件(实施者可根据具体实施的限定策略的类型,以及自身的需要,确定如何根据当前情况判断扩展身份标识中出现的动态策略和静态策略的约束要求是否得到满足)。
[0169]关于通过策略对身份标识及其密钥的使用可参考其他文献。
[0170]对于将扩展 身份标识的信息作为附加数据或填充数据附加或填充到被加密的数据或被签名的数据中的实施方案描述如下。
[0171]若伪公钥和伪数字证书是基于RSA算法实现,则由于经RSA密钥密码运算后的数据,如RSA公钥加密后的对称密钥(加密数据),RSA私钥密码运算(签名)后的散列值(签名数据),比经ECC密钥密码运算后的对应数据要长很多,故可以采用将扩展身份标识的信息作为填充数据附加在经ECC密钥密码运算后的数据之后,使得填充后的经ECC密钥密码运算后的数据的长度与经RSA密钥密码运算后的数据具有同样的长度(边界对齐)。由于,密码应用程序通常是不会检查经RSA密钥密码运算后的数据的长度的(即是否具有固定),因此,可以将扩展身份标识的信息作为附加数据附加在经ECC密钥密码运算后的数据之后,而不用考虑长度或边界对齐的问题(若要考虑长度或边界对齐则是填充数据)。
[0172]若伪公钥和伪数字证书是基于ECC算法实现,则可将扩展身份标识的信息作为附加数据附加在经ECC密钥密码运算后的数据之后。
[0173]附加或填充到被加密的数据或被签名的数据中的扩展身份标识的信息,必须包括限定策略的原始信息(如时间区间),或者能够恢复限定策略原始信息的指示信息(如用数字0、1、3…代表不同的角色等);扩展身份标识对应的身份标识本身由于具有不固定的长度且可能很长,故扩展身份标识对应的身份标识本身是不放在被加密的数据或被签名的数据中的,可将其散列值放入其中。实际上,身份标识的散列值也可不放在被加密的数据或被签名的数据中,因为,数据解密方或签名验证方的密码应用程序可通过加密数据信封中或签名数据结构中的密钥标识信息(即数字证书的签发者名、证书序列号)找到对应的ECC私钥组(或密钥对组)密钥对象或者ECC公钥组密钥对象。
[0174]确定了伪公钥、伪数字证书、伪数字证书签发系统及协议、ECC密钥生成系统、密码模块的实施方案后,实施伪数字证书签发系统不是意见困难的事情,可以基于成熟的桌面软件开发技术,如c/C++、C#.NET。
[0175]对于技术实现的其他方面,对于相关领域的技术开发者而言是不言自明的。
【权利要求】
1.一种基于标识的椭圆曲线密码系统,所述密码系统包括如下组件或数据: 伪公钥:一种公钥数据结构,存放的不是数据结构标识的或约定的公开密钥密码算法的公钥数据,而是身份标识信息及ECC系统参数信息;所述身份标识信息指身份标识字串本身或其散列值,所述ECC系统参数信息包括ECC密码运算所采用的椭圆曲线格式、域、系数以及基点的指示信息,即ECC系统参数的指示信息;一个所述伪公钥对应一个身份标识及其所有扩展身份标识; 伪数字证书:一种X509格式的数字证书,数字证书上的证书持有者的公钥不是数字证书上所指示的公开密钥密码算法的公钥,而是证书持有者的身份标识所对应的伪公钥;一张伪数字证书及其伪公钥与证书持有者的身份标识及其所有扩展的身份标识相对应;所述伪数字证书的有效期长度及起始、终止时间的设定没有限定要求,只要超过伪数字证书所对应的身份标识的所有扩展身份标识所对应的ECC私钥或密钥对的使用期限即可; ECC密钥生成系统:通过计算得到一个扩展身份标识对应的ECC公钥、ECC私钥或ECC密钥对的系统;所述ECC密钥生成系统设置有随机生成的用于ECC私钥生成计算的种子数据; 伪数字证书签发系统:生成并签发一个身份标识所对应的伪数字证书的系统; 伪数字证书签发客户端:供用户使用,用于从伪数字证书签发系统获取用户身份标识所对应的伪数字证书的用户端软件程序; 密码模块:提供密钥操作与密码运算功能的软件组件或软硬件组合,所述密钥操作包括密钥生成、导入、导出和删除,所述密码运算包括加密和解密,签名和签名验证;所述密码模块通过密码接口对外提供密钥操作与密码运算功能的调用; 密码应用程序:调用密码模块进行密钥操作,包括生成、导出、导入和删除,以及调用密码模块使用公钥或私钥进行加密或解密,签名验证或数字签名密码运算的软件程序; 所述密码模块在存储介质中为`用户或密码应用程序使用的每一个身份标识维护一个存放ECC公钥组的密钥对象,称为ECC公钥组密钥对象;所述ECC公钥组密钥对象的ECC公钥组中存放有一系列由同一个身份标识的扩展身份标识所生成的ECC公钥;一个所述ECC公钥组及其密钥对象与一个对应相同身份标识的伪公钥和伪数字证书相对应;所述ECC公钥组密钥对象作为一个密钥对象用一个密钥对象标识符标识; 当所述密码模块在存储介质中创建一个伪公钥的密钥对象时,将所创建的伪公钥密钥对象关联到对应的具有相同身份标识的ECC公钥组的密钥对象;密码应用程序通过使用伪公钥的密钥对象使用伪公钥对应的ECC公钥组密钥对象的ECC公钥组中的ECC公钥进行密码运算,包括数据加密和签名验证;所述密码模块所创建的伪公钥的密钥对象称为伪公钥密钥对象; 所述密码模块在存储介质中为用户或密码应用程序使用的每一个身份标识维护一个存放ECC私钥组或密钥对组的密钥对象,称为ECC私钥组或密钥对组密钥对象;所述ECC私钥组或密钥对组密钥对象的ECC私钥组或密钥对组中存放有一系列由同一个身份标识的一个扩展身份标识所生成的ECC私钥或公钥对;一个所述ECC私钥组或密钥对组及其密钥对象与一个对应相同身份标识的伪公钥和伪数字证书相对应;一个所述ECC私钥组或密钥对组密钥对象作为一个密钥对象用一个密钥对象标识符标识,并通过密钥对象标识符被当作对应的伪公钥和伪数字证书的对应私钥或密钥对使用;所述ECC公钥组或ECC私钥组或密钥对组的密钥对象数据中,除了保存有每个扩展身份标识对应的ECC公钥或ECC私钥或密钥对外,还保存有对应的身份标识信息以及每个ECC公钥或ECC私钥或密钥对所对应的扩展身份标识信息; 所述密钥对象指各种密钥包括公钥、私钥、密钥对以及对称密钥在密码模块中的数据存在形式;所述密钥对象包括存储在永久存储介质上的永久密钥对象和存储在临时存储介质上的临时密钥对象,并分别对应有永久密钥对象标识符和临时密钥对象标识符; 所述密码模块和ECC密钥生成系统预定或配置有身份标识限定策略;密码模块处的身份标识限定策略规定或限定了在数据加密或数字签名时一个身份标识所对应的扩展身份标识,即规定或限定了在数据加密时所采用的ECC公钥所对应的扩展身份标识或在数字签名时所采用的ECC私钥所对应的扩展身份标识,也即在数据加密或数字签名时哪一个扩展身份标识所对应的ECC公钥或ECC私钥被采用;ECC密钥生成系统处的身份标识限定策略规定或限定了在生成一个扩展身份标识对应的ECC私钥时需要满足的必要条件;所述预定的身份标识限定策略指已编码在程序中的不能更改的身份标识限定策略;所述配置的身份标识限定策略指可修改、设定的身份标识限定策略; 所述密码应用程序按使用公钥及其对应私钥或密钥对的方式使用伪公钥及其对应的私钥或密钥对,包括使用伪公钥及其对应私钥或密钥对的密钥对象; 所述密码应用程序按使用 数字证书及其对应私钥或密钥对的方式使用伪数字证书及其对应私钥或密钥对,包括使用伪数字证书对应私钥或密钥对的密钥对象; 若密码应用程序不使用数字证书而是直接使用公钥或私钥或密钥对进行数据加密和解密,签名和签名验证,则所述伪数字证书、伪数字证书签发系统以及伪数字证书签发客户端不再存在; 若仅密码应用程序从所述伪数字证书签发系统获取伪数字证书,则所述伪数字证书签发客户端不再存在。
2.根据权利要求1所述的基于标识的椭圆曲线密码系统,其特征是: 当所述伪数字证书签发客户端或密码应用程序调用所述密码模块的密钥操作接口进行针对公钥或私钥或密钥对的密钥操作时,所述密码模块针对不同的密钥操作接口调用分别按如下方式进行处理: 操作调用A:对于生成私钥或密钥对的接口调用,在存储介质中创建一个包括一个空的ECC私钥组或密钥对组的密钥对象,并将通过人机界面获得的身份标识信息保存在新生成的密钥对象中,然后将返回的密钥对象标识符指向新生成的ECC私钥组或密钥对组的密钥对象;或者生成一个所述伪公钥的数据结构所标识的或约定的公开密钥密码算法的私钥或密钥对的密钥对象,然后将返回的密钥对象标识符指向新生成的密钥对象;所述操作调用是生成一个ECC私钥组或密钥对组的密钥对象,还是生成一个所述伪公钥的数据结构所标识的或约定的公开密钥密码算法的私钥或密钥对的密钥对象,由用户通过人机界面选择决定,或者由所述密码模块的配置信息决定,或者由密码模块程序固定设定; 操作调用B:对于生成私钥组或密钥对组的接口调用,在存储介质中创建一个包括一个空的ECC私钥组或密钥对组的密钥对象,并将通过调用接口或人机界面获得的身份标识信息保存在新生成的密钥对象中,然后将返回的密钥对象标识符指向新生成的ECC私钥组或密钥对组的密钥对象;操作调用C:对于生成ECC公钥组的接口调用,在存储介质中创建一个包括一个空的ECC公钥组的密钥对象,并将通过调用接口或人机界面获得的身份标识信息保存在新生成的密钥对象中,然后将返回的密钥对象标识符指向新生成的ECC公钥组的密钥对象; 操作调用D:对于使用ECC私钥组或密钥对组密钥对象的密钥对象标识符导出私钥或密钥对的接口调用,返回出错; 操作调用E:对于使用ECC私钥组或密钥对组密钥对象的密钥对象标识符导出ECC私钥组或密钥对组的接口调用,返回密钥对象标识符指向的密钥对象的ECC私钥组或密钥对组中所有ECC私钥或密钥对,以及对应的身份标识和扩展身份标识信息; 操作调用F:对于使用ECC公钥组密钥对象的密钥对象标识符导出ECC公钥组的接口调用,返回密钥对象标识符指向的密钥对象的ECC公钥组中所有ECC公钥,以及对应的身份标识和扩展身份标识信息; 操作调用G:对于使用ECC私钥组或密钥对组密钥对象的密钥对象标识符导出公钥的接口调用,从密钥对象标识符指向的密钥对象中获取对应的身份标识,生成身份标识对应的伪公钥,然后返回生成的伪公钥; 操作调用H:对于导入ECC公钥组的接口调用,在存储介质中创建一个ECC公钥组的密钥对象,并将通过调用接口输入的要导入的ECC公钥组中的所有ECC公钥以及对应的身份标识和扩展身份标识信息加入到新创建的密钥对象中,然后将返回的密钥对象标识符指向新生成的ECC公钥组密钥对象; 操作调用1:对于导入ECC私钥组或密钥对组的接口调用,在存储介质中创建一个ECC私钥组或密钥对组的密钥对象,并将通过调用接口输入的要导入的ECC私钥组或密钥对组中的所有ECC私钥或密钥对以及对应的身份标识和扩展身份标识信息加入到新创建的密钥对象中,然后将返回的密钥对象标识符指向新生成的ECC私钥组或密钥对组的密钥对象;` 操作调用J:对于使用ECC私钥组或密钥对组的密钥对象的密钥对象标识符删除私钥或密钥对密钥对象的接口调用,在存储介质中清除对象标识符所指的密钥对象; 操作调用K:对于使用ECC公钥组的密钥对象的密钥对象标识符删除公钥组的接口调用,在存储介质中清除密钥对象标识符所指的密钥对象; 操作调用L:对于导入公钥的接口调用,检查导入的公钥是否是伪公钥,如果不是,则按导入正常的公钥的方式完成导入公钥的处理;否则,按如下方式处理: 步骤L1:在存储介质中创建一个伪公钥的密钥对象,将要导入的伪公钥保存在创建的伪公钥密钥对象中; 步骤L2:从伪公钥中获取身份标识信息; 步骤L3:查看存储介质中是否已有身份标识对应的ECC公钥组密钥对象,若是,则将步骤LI创建的伪公钥的密钥对象与对应的ECC公钥组密钥对象相关联,并将返回的密钥对象标识符指向创建的伪公钥的密钥对象,完成伪公钥的导入处理;否则,返回出错; 操作调用M:对于使用伪公钥密钥对象的密钥对象标识符导出公钥的接口调用,导出密钥对象标识符指向的伪公钥密钥对象中的伪公钥; 操作调用N:对于使用伪公钥密钥对象的密钥对象标识符删除公钥密钥对象的接口调用,在存储介质中清除密钥对象标识符所指的伪公钥密钥对象。
3.根据权利要求1所述的基于标识的椭圆曲线密码系统,其特征是: 当所述密码应用程序使用伪公钥密钥对象的密钥对象标识符调用所述密码模块进行数据加密操作时,所述密码模块按如下方式进行处理: 第I步:从密钥对象标识符所指的伪公钥密钥对象中获取对应的身份标识,用获取的身份标识生成一个与预定或配置的身份标识限定策略相对应的扩展身份标识; 第2步:查看密钥对象标识符指向的伪公钥密钥对象所关联的ECC公钥组密钥对象的ECC公钥组中是否有所述第I步生成的扩展身份标识对应的ECC公钥,若没有,转入第3步;若有,则从所关联的ECC公钥组密钥对象的ECC公钥组中获得对应的ECC公钥,然后转入第5步; 第3步:使用所述第I步生成的扩展身份标识从ECC密钥生成系统请求获取扩展身份标识对应的ECC公钥; 第4步:将获得的ECC公钥及对应的扩展身份标识及加入到当前使用的伪公钥密钥对象所关联的ECC公钥组密钥对象的ECC公钥组中; 第5步:使用获得的ECC公钥对数据进行加密,并将当前使用的ECC公钥对应的扩展身份标识的信息作为附加数据或填充数据附加或填充到被加密的数据中,完成处理后返回结果; 所述第5步中将当前使用的ECC公钥对应的扩展身份标识的信息作为附加数据或填充数据附加或填充到被加密的数据中的操作处理,是指将扩展身份标识信息加入到经ECC公钥密码运算后的数据本身中,而不是作为加密密钥的密钥标识信息或密钥标识信息的一部分放入到加密数据信封的接收者信息中。
4.根据权利要求1所述的基于标识的椭圆曲线密码系统,其特征是: 当所述密码应用程序使用ECC私钥组或密钥对组密钥对象的密钥对象标识符调用所述密码模块进行数据解密操作时,所述密码模块按如下方式进行处理: 第A步:通过加密数据的附加数据或填充数据获得数据加密时所用ECC公钥的对应扩展身份标识; 第B步:查看密钥对象标识符指向的密钥对象的ECC私钥组或密钥对组中是否有所述第A步获得的扩展身份标识对应的ECC私钥或密钥对,若没有,转入第C步;若有,则从密钥对象标识符指向的密钥对象的ECC私钥组或密钥对组中获得对应的ECC私钥或密钥对,然后转入第E步; 第C步:使用所述第A步获得的扩展身份标识从ECC密钥生成系统请求获取扩展身份标识对应的ECC私钥或密钥对; 第D步:将获得的ECC私钥或密钥对及对应的扩展身份标识及加入到当前使用的ECC私钥组或密钥对组密钥对象的ECC私钥组或密钥对组中; 第E步:使用获得的ECC私钥或密钥对中的私钥解密加密的数据,完成处理后返回结果O
5.根据权利要求1所述的基于标识的椭圆曲线密码系统,其特征是: 当所述密码应用程序使用ECC私钥组或密钥对组的密钥对象的密钥对象标识符调用所述密码模块对数据进行数字签名操作时,所述密码模块按如下方式进行处理: 步骤1:从密钥对象标识符所指的ECC私钥组或密钥对组密钥对象中获取的对应身份标识,用获取的身份标识生成一个与预定或配置的身份标识限定策略相对应的扩展身份标识; 步骤2:查看密钥对象标识符指向的ECC私钥组或密钥对组密钥对象的ECC私钥组或密钥对组中是否有所述步骤I生成的扩展身份标识对应的ECC私钥或密钥对,若没有,转入步骤3 ;若有,则从密钥对象标识符指向的ECC私钥组或密钥对组密钥对象的ECC私钥组或密钥对组中获得对应的ECC私钥或密钥对,然后转入步骤5 ; 步骤3:使用所述步骤I生成的扩展身份标识从ECC密钥生成系统请求获取扩展身份标识对应的ECC私钥或密钥对; 步骤4:将获得的对应ECC私钥或密钥对及对应的扩展身份标识及加入到当前使用的ECC私钥组或密钥对组中; 步骤5:使用获得的ECC私钥或密钥对中的私钥对数据进行数字签名,将当前使用的ECC私钥或密钥对所对应的扩展身份标识的信息作为附加数据或填充数据附加或填充到被签名的数据中,完成处理后返回结果; 所述步骤5中将当前使用的ECC私钥或密钥对所对应的扩展身份标识的信息作为附加数据或填充数据附加或填充到被签名的数据中的操作处理,是指将扩展身份标识信息加入到经ECC私钥密码算后的数据本身中,而不是作为签名者密钥标识信息或密钥标识信息的一部分放入到签名后形成的数据结构的签名者信息中。
6.根据权利要求1所述的基于标识的椭圆曲线密码系统,其特征是: 当所述密码应用程序使用伪公钥密钥对象的密钥对象标识符调用所述密码模块对签名数据进行签名验证操作时,所述密码模块按如下方式进行处理: 步骤A:通过签名数据的附加数据或填充数据获得签名时所用ECC私钥的对应扩展身份标识; 步骤B:查看密钥对象标识符指向的伪公钥密钥对象所关联的ECC公钥组密钥对象的ECC公钥组中是否有所述步骤A中获得的扩展身份标识对应的ECC公钥,若没有,转入步骤C ;若有,则从所关联的ECC公钥组密钥对象的ECC公钥组中获得对应的ECC公钥,然后转入步骤E ; 步骤C:使用所述步骤A获得的扩展身份标识从ECC密钥生成系统请求获取扩展身份标识对应的ECC公钥; 步骤D:将获得的对应ECC公钥及对应扩展身份标识及加入到当前使用的伪公钥密钥对象关联的ECC公钥组密钥对象的ECC公钥组中; 步骤E:使用获得的ECC公钥对签名数据进行签名验证,完成处理后返回结果。
7.根据权利要求1所述的基于标识的椭圆曲线密码系统,其特征是: 当用户通过所述伪数字证书签发客户端或密码应用程序从所述伪数字证书签发系统请求获取一张身份标识对应的伪数字证书时,所述伪数字证书签发系统按如下步骤进行处理: 步骤1:查看内存或数据库中是否缓存有或保存有请求中的扩展身份标识对应的伪数字证书,若有,则返回对应的伪数字证书;否则,转入步骤II ; 步骤I1:利用请求中的身份标识信息生成对应的伪公钥,然后使用伪数字证书签发CA的私钥签发一张证书持有者公钥是伪公钥的伪数字证书,之后将签发的伪数字证书缓存在内存中或保存在数据库中,最后返回签发的伪数字证书; 所述伪数字证书签发系统针对同一身份标识所签发的伪数字证书的签发者名和序列号相同。
8.根据权利要求1所述的基于标识的椭圆曲线密码系统,其特征是: 若所述基于标识的椭圆曲线密码系统仅用于数据加密应用,则所述伪数字证书签发系统是一个独立运行的系统,或者与所述伪数字证书签发客户端合并为一个运行于用户端的伪数字证书签发工具; 若所述伪数字证书签发系统与所述伪数字证书签发客户端合并为一个运行于用户端的伪数字证书签发工具,则每个用户或密码应用程序通过所述伪数字证书签发工具独立生成加密或解密所需的伪数字证书,包括带私钥和不带私钥的伪数字证书;不同用户或密码应用程序通过所述伪数字证书签发工具针对同一个身份标识独立生成的伪数字证书的签发者名和序列号相同;不同用户的伪数字证书签发工具所使用的证书签发CA及其上级CA的CA证书的签发者名、主题名和序列号相同,但证书签发CA及其上级CA的CA证书的密钥对不同。
9.根据权利要求1所述的基于标识的椭圆曲线密码系统,其特征是: 当所述密码模块从ECC密钥生成系统请求获取一个扩展身份标识所对应的ECC公钥时,所述ECC密钥生成系统按如下步骤处理: 步骤一:查看内存或数 据库中是否缓存或保存有请求中的扩展身份标识对应ECC公钥,若有,则返回对应的ECC公钥;否则,转入步骤二 ; 步骤二:将请求中的扩展身份标识与ECC密钥生成系统的种子数据通过运算生成扩展身份标识对应的ECC私钥,并进而计算得到对应的ECC公钥,然后将计算得到的ECC公钥缓存在内存中或保存在数据库中,最后返回计算得到的对应的ECC公钥; 若所述基于标识的椭圆曲线密码系统采用由两个或两个以上的使用相同ECC系统参数和不同种子数据的ECC密钥生成系统通过分割方式生成ECC公钥,则每个ECC密钥生成系统生成的扩展身份标识对应的ECC公钥的椭圆曲线群和是最终的ECC公钥。
10.根据权利要求1所述的基于标识的椭圆曲线密码系统,其特征是: 当所述密码模块从ECC密钥生成系统请求获取一个扩展身份标识所对应的ECC私钥或密钥对时,所述ECC密钥生成系统按如下步骤处理: 第I步:验证和确认请求方的用户就是扩展身份标识对应的身份标识的拥有者,若验证通过,则转入下一步;否则,返回拒绝,并给出拒绝的原因; 第II步:根据请求中的扩展身份标识中的限定策略确定当前是否符合为用户生成扩展身份标识对应私钥的条件,若是,则转入下一步;否则,返回拒绝,并给出拒绝的原因; 第III步:将请求中的扩展身份标识与ECC密钥生成系统的种子数据通过运算生成扩展身份标识对应的ECC私钥,并返回生成的ECC私钥; 若请求是生成ECC密钥对,则由ECC密钥生成系统利用生成的ECC私钥计算得到对应的ECC公钥并返回生成和计算得到的ECC私钥和公钥,或者仅返回生成的ECC私钥,由调用方的密码模块利用获得的ECC私钥计算得到对应的ECC公钥; 若所述基于标识的椭圆曲线密码系统采用由两个或两个以上的使用相同ECC系统参数和不同种子数据的ECC密钥生成系统通过分割方式生成ECC私钥,则每个ECC密钥生成系统生成的扩展身份标识对应的EC`C私钥的代数和是最终ECC私钥的ECC私钥。
【文档编号】H04L9/30GK103560882SQ201310520985
【公开日】2014年2月5日 申请日期:2013年10月29日 优先权日:2013年10月29日
【发明者】龙毅宏 申请人:武汉理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1