一种安全的数字签名系统及其数字签名方法
技术领域
本发明涉及网络通信安全技术,更确切地说是涉及一种能容忍入侵的确保数字签名安全的系统与方法。
背景技术
数字签名(Digital Signature)是当今网络通信安全中最基本的技术,是利用非对称算法(Asymmetric Algorithm),来达到其他人可以验证该签名但却无法假冒该签名的目的。最常用的非对称算法有RSA、DSA和椭圆曲线算法等,目前不少数字签名系统都是基于RSA算法的。
所谓非对称算法,就是一个人无法通过已知的正向计算参数推导出反向计算的参数,即已知正向计算过程,无反向计算能力。这种非对称算法本身是公开的,但每个人可以选择不同的参数,参数不同,所构成的变换函数就不同。对某个人来说,他可以选择一组参数,其中一部分是用于逆向计算的,称为秘密参数,技术上称为保密密钥或私钥;另一部分是用于正向计算的,是公开的参数,技术上称为公开密钥或公钥。
数字签名就是基于这种非对称算法得以实施的。一方面保护自己的秘密参数-私钥,以保证他人无法冒充自己进行签名,另一方面通过公开可以公开的部分-公钥,供相关人士能够验证该签名(从理论上说,利用公开的参数来推导秘密的参数,在计算上是不可行的)。
数字签名首先是网络通信与交互的保证,可以保证通信对方是真实的,可以保证在网上的就是自己,还可作为签署电子文档时的工具,以保护自己的文档与签名。当今许多国家,已将数字签名视作手写签名,两者具有同样的法律效率。
数字签名算法还可以用于协商秘密(secret)参数。如A用户需要与B用户进行秘密通信时,A用户可以先设定一些秘密参数,然后用B用户的公开密钥(公钥)作用一下,此时只有B用户能够恢复原来的值,因为只有B用户知道自己的保密(private)密钥(私钥)。
此外,数字签名还可以用于需要保密的场所、需要身份认证的场所及其他需要不可否认服务的场所。
现在国际上大力推行的PKI(Public Key Infrastructure:公开密钥基础设施)就是数字签名的一种应用,是网络数字社会中最重要的一种基础设施,这种技术的重要性,就象电力基础设施对于工业的作用一样。
为了保证数字签名的安全和速度,在签名前,必须对所签的内容进行HASH计算,求出一个HASH值M(HASH值有时又叫文摘值或杂凑值),然后利用保密密钥(私钥)对文摘结果作变换得到签名值;验证签名时,先对内容作HASH计算,然后再用公开的参数(公钥)作用于签名值,再将得到的结果与上述HASH结果进行比较,若相等,就表示签名正确,否则为验证不通过。
然而,当一用户A有了自己的私钥并公开了公钥时,如果有一个攻击者B重新生成公钥和私钥,并用攻击者B的公钥替换了A用户公开的公钥,此时A用户的朋友发给A用户的信息就只有攻击者B知道了,因为A用户已无法知道由攻击者B假冒的公钥所对应的私钥。这时就需要由一个CA(CertificateAuthority:证书权成或证书机构),来证明哪个公钥是A用户的,或者证明哪个公钥不是A用户的。
CA拥有一个比一般用户私钥更长的私钥,也就是说,CA的私钥更安全,而CA的公钥可以通过各种方式广为人知,这样各个用户就可以验证什么是CA所签发的。当一个用户将其身份与其公钥绑定在一起,并由CA签名后,就得到了一个电子证书。这个证书能够证明该公钥拥有者的身份,且任何人都可以验证而任何人却都不能假冒。
目前,电子证书已成为PKI基础设施中最为关键的部分,CA是PKI中最为重要的基本单元。利用电子证书,就可以有效解决网络上的保密性、完整性以及不可否认性等安全问题。
基于PKI的安全性,最终都会归结到对CA私钥的保护,一旦CA的私钥泄露,由CA所颁发的所有证书就都必须作废,整个由CA管辖的网络安全就会变得毫无安全可言。随着网络上各种攻击手段的不断增加,系统漏洞不断被发现,因此如何保证既能在线提供数字签名服务又能保证安全,已成为现代网络安全研究的一个重要课题。
对RSA算法来说,秘密的密钥一般记为d,是一个可以长达2048bits的整数(一般认为,1024bits长度的私钥已经能够保证安全,但对CA来说,采用2048bits或以上则是必须的)。在RSA算法中,用到了对一个数N的模幂计算,即求Md mod N,该计算是完成数字签名所需要的,当所需公开的参数(公钥)公开后,保护数字d就是保护了私钥。
安全的数字签名所追求的目标是既完成签名又不能泄露私钥,针对该课题国际上已有许多理论方面的研究,其中不少理论与方法因难度太大而无法实现。另一方面,国际上目前开发的重点也是如何实现相互兼容的数字签名产品,而在入侵容忍的安全签名方面则开发的非常少,工业界也没有推出相关的产品。所谓入侵容忍(Intrusion Tolerance)是相对于从检测入侵出发来保证CA安全的技术而言的,即在系统的部分部件被攻击或被占领后,仍不会暴露CA系统的机密信息。
综上所述,PKI是基于公开密钥密码算法的,在PKI系统中,CA又是一个域中的信任中心,网络上设备或个人间的通信与验证都依赖于CA颁发的数字证书(签名)。数字证书是一个将公开密钥与个人身份绑在一起、用CA的私钥签名后得到的数据。在一方要验证通信对方的身份时,可以通过两个步骤完成,首先验证对方的证书签名是否正确(签名只能由CA的私钥完成,只有CA才能够进行签名);再验证对方是否拥有与证书中公钥相对应的私钥,如果两项都能成立,则对方的身份就能被确定,是可以信任的。
因此CA的私钥是CA安全的核心,保护其不泄露是整个CA域安全的基础。一般来说,CA必须是一个在线的网络设备,特别是直接面向用户以便提供相应证书服务的CA,则其遭遇网络攻击就不可避免,当一个黑客成功攻击一台CA时,攻击者就可能获得它的内部资源,从而找到CA的私钥,会给PKI系统造成致命打击,同时在PKI系统的内部雇员完全控制一台CA设备的情况下,为预防起见,也应该确保其没有得到CA的私钥。
下面仅从将签名等价于实现公式Md mod N(其中d为应该保密的私钥)方面,说明现有的几种安全数字签名方法。
参见图1,图中示出美国Stanford大学的ITTC项目方案的原型系统框图。该系统通过门槛密码学技术实现系统入侵容忍,系统包括签名方(Clients)、服务器方(Servers)和管理方(Admin)。签名方的Web Server是指需要签名的Web服务器,CA是证书权威或证书机构;服务器方包括多个分享服务器(ShareServer,也可称分享计算器或分享运算器),如图中的分享服务器1至3,负责进行安全的数字签名;管理方(Admin)是一个可选的用于管理各分享服务器的设备。该方案的特点是:结构简单和具有很好的安全性,系统中采用了成单层结构的多个分享服务器。
该系统实现安全性的原理是:先将私钥d分解成t个数的和:d=d1+d2+...+dt;再将各数(di)分配到各个分享服务器中。当需要签名时,客户机(Web或CA)将需要的签名信息-HASH结果M值发给t个分享服务器;各分享服务器再将计算结果
送回客户机(Web或CA);由客户机(Web或CA)进行乘法计算:
就得到了需要的结果。
由于不能实现冗余,可进一步采用多组方程来产生冗余配置,即随机找到若干组数,如:
第一组:d=d11+d12+...+d1t;
第二组:d=d21+d22+...+d2t;
.........,
然后将多组数(d
ij)分到不同的分享服务器中,每个分享服务器得到多个d
ij,但只得到同组数据中的一个数据(如分享服务器1得到一个第一组数据d
11和另一个第二组数据d
23)。如,对于有4个分享服务器的情况,在t=3时,可以按下表进行分配:
分享服务器1 |
分享服务器2 |
分享服务器3 |
分享服务器4 |
d11 |
d12 |
d13 |
d13 |
d23 |
d21 |
d22 |
d23 |
当客户机(Web或CA)需要计算时,由客户机(Web或CA)选定t个完好的分享服务器,然后告诉这些分享服务器使用第几组数据(参数),然后,分享服务器就可以计算相应的签名了。
该技术方案的优点是明显的,其不足之处有如下几点:
1.密钥的分发和管理比较困难,当增加一个分享服务器时,必须对每一个在线的分享服务器分配密钥数据,同时还要让客户机也知道这个增加;
2.当分享服务器很多时,会迅速增加分享服务器的密钥存储量,若设分享服务器的总数量为k,要求完好的分享服务器的总数量为t,则每个分享服务器存储密钥的数量至少为Ck t-1个(C表示组合),当k=10,t=3时,每个分享服务器存储密钥的数量就为45个;
3.存在必须先同步的问题,在进行计算前,客户机必须先选定t个分享服务器,当t个分享服务器选择完成后,还必须找到与这t个分享服务器匹配的数据组并通知他们,当其中有一个服务器被破坏时必须重复上述选择分享服务器的整个过程;
4.让客户机(CA或Web服务器)记住每次分享服务器的改变是困难的,不容易进行管理与扩展,当客户机在线时,扩展就更加困难,导致每次改变分享服务器时都必须更新客户机。
IBM Research-Zurich研究院的Victor Shoup,在2000年的欧洲密码学年会上发表了名称为“Practical threshold signatures”的文章,介绍的也是一种理论上的方案。该方案使用RSA强素数,其保密的素数p=2p’+1,q=2q’+1。所有的插值方程都在模m=p’q’的环中进行。因为M4m模N等于1,分开计算时增加一次平方,由合成器(Combiner)再分别对各个结果平方一次,从而得到M4(gm+d)。其中Δ=(k!)2,而g为整数。该方案中ca是由合成器(Combiner)完成的,从而消除了计算前的同步问题,但带来了合成器的计算难度,并使计算性能下降。如合成器必须计算:
其中yi为各分享服务器的计算结果,λ=k!。
可以看出该方案的特点及存在的不足是:
1.仍是一种由各分享服务器组成的单层式分享结构,其合成器不存储任何秘密,可以由任何设备完成合成工作;
2.合成器的计算量接近或相当于t次签名,这样的计算量远远大于分享服务器的计算量,即使能实现该算法,也是不能用于实际签名的;
3.要求使用强素数,会对某些应用带来限制;
4.仅从理论上说明当增加或删除分享服务器时不会影响其他设备,但只提供了数学公式,没有任何实现上和系统结构上的说明。
纽约CertCo公司的Yair Frankel等人提出了又一种方案,但没有提供系统实现的框架和细节。在他们的方案中,提出让多项式的系数ai在{0,L,...,2L3N2+et}中,其中L=k!。并取xi属于[1,2,...,k-1]。由于所有f(xi)都能够整除以L,故bi的计算去掉了求逆的操作,可以在整数中进行。该方案可以用一般的RSA算法进行而不需要RSA的强素数。由于其参数的选取大大受限,带来了算法原理及安全证明的复杂性。当分享服务器计算bi时,因为bi依赖xi的选取,也存在着同步问题。
从其数学方案的描述中可以看出,该方案具有以下缺点:
1.采用平等的秘密分享,即分享为单层式结构;
2.参数的选取是受限的,证明其安全性十分复杂,增加了出现漏洞的可能性;
3.存在着需要同步的问题,而如果去掉同步,则又会大大增加合成器的计算量。
以上IBM Research-Zurich研究院的方案及纽约CertCo公司的方案,都是基于Shamir秘密共享的方案,使用LaGrange插值方程。在原Shamir秘密共享方案中,任意取t个密钥就能够生成秘密密钥。但在原Shamir方案中必须先恢复秘密密钥,这是任何方案都不希望的。因为安全签名方案必须首先保证在任何一台设备内都不能恢复出秘密密钥。
这种基于Shamir秘密共享方案的基本原理是:
给出一个多项式
利用LaGrange插值公式,有:
任选t个xi和f(xi),可以得到:
可以设置a0为秘密密钥d,此时,对一个HASH值M的签名计算为: 其中
这样就可以将秘密密钥d分到k个分享服务器中去(k≥t)。每个分享服务器计算
然后由一个合成器将各个分享服务器的计算结果乘起来,就得到M
d,而任何分享服务器都不会泄露秘密密钥d。由于式(4)的b
i中有除法计算,这很容易让人想到找一个域或环Z
v来进行计算。其中,必须满足的条件是:v为素数,或者保证所有由x
i构成的t阶(Vandermonde)矩阵的行列式的值与v互素。
在一般情况下,分开计算
后带来的结果就是要做乘法:
如何去掉v的影响,许多人想到了用Φ(N),因为MΦ(N)=1。但选择v=Φ(N)会使xi的选取大大受限于上述条件,并且知道了某元素o与其对Φ(N)的逆o-1,就可以求出Φ(N),显然这是不安全的。
因此,从理论上可以看出上述方案都有明显的弱点,距离实际应用还有很多问题需要解决。
发明内容
本发明的目的是设计一种安全的数字签名系统及其安全签名方法,是一种入侵容忍的安全签名系统与方法,在现有实现CA安全的基本原理基础上,消除预先同步的问题,能满足在线CA的安全要求,当系统的部分部件被攻击或被占领,或当系统的部分关键部件进行合谋时也能确保系统机密不泄露,同时还能在减少系统部件的同时使各部件的任务均衡。
本发明的安全数字签名方法,CA以RSA算法为基础。该方法至少应该满足以下条件:
1.入侵者虽然攻击或占有了系统中的若干部件,或某些关键部件合谋起来进行攻击,也不能得到私钥,且使用的关键部件相对较少,各关键部件的工作任务基本均衡;
2.系统很容易扩充,当需要增加一个分享运算器时,不影响整个系统的工作;
3.运行时的管理简单,管理包括增加,撤除,修改服务硬件与软件等,在有系统管理与配置活动时,不能影响系统运行;
4.一个或多个设备损坏时不影响正常的服务;
5.当一个分享运算器损坏时,整个系统的运行效率不会降低太多,即任务分配单元不需要知道任务执行者的任何信息;
6.开始计算时,任何设备都不需要知道他的合作者是谁,故不需要一个合作群的指定机构(预先同步);
7.该系统的算法和原理都应该非常简单;
8.设计完成后,整个系统的运行效率应该与常规系统保持在同一个档次。
实现本发明目的的技术方案是这样的:一种安全的数字签名系统,其特征在于:
包括至少一个在线的任务分配器、k个在线的秘密分享运算器、m个在线的秘密分享合成器和离线的子密钥分发器;在线的任务分配器通过第一广播信道与k个秘密分享运算器连接,k个秘密分享运算器通过第二广播信道与m个秘密分享合成器连接,离线的子密钥分发器在系统初始化或进行系统配置时与k个秘密分享运算器及m个秘密分享合成器分别连接,k、m为正整数。
还包括一单独设置的输出接口设备,通过第三广播信道与m个秘密分享合成器连接。
所述在线的任务分配器中还设置有一输出接口设备,通过所述的第一广播信道与所述的m个秘密分享合成器连接。
所述的至少一个在线的任务分配器、k个在线的秘密分享运算器、m个在线的秘密分享合成器、离线的子密钥分发器均采用普通计算机或服务器。
所述的第一广播信道、第二广播信道及第三广播信道是物理相连的一个信道或完全不相连的独立信道。
实现本发明目的的技术方案还是这样的:一种安全的数字签名方法,包括子密钥的发放和计算数字签名,其特征在于:
所述的子密钥的发放包括以下处理步骤:
A.设置一个安全数字签名系统,包括在线的任务分配器、在线的k个秘密分享运算器、在线的m个秘密分享合成器、广播信道和离线的子密钥分发器,k、m为正整数;
B.离线的子密钥分发器将保存的数字签名私钥d表示成由t个第一子密钥dji及一个第二子密钥ca的和,d、t、c、j、i均为正整数并让t<k,j是第j个秘密分享运算器的机器代号,i是机器内的密钥号,j=1,2,...k,i=1,2,...I;
C.离线的子密钥分发器将k×I个随机数作为第一子密钥dji,对应分发到k个秘密分享运算器中,每个秘密分享运算器存储I个第一子密钥dji,并根据步骤B中的和式通过相减获得一组第二子密钥ca及其方程组合表示,根据各方程组合表示求出其等价组合集,将全部等价组合集放在一个大组中;
D.离线的子密钥分发器按合成器安全条件对该大组中的全部等价组合集进行穷搜,从每个等价组合集中取出一个组合作代表,并将全部等价组合集的代表放入m个分组中,获得m个分组的第二子密钥ca及其方程组合表示:
E离线的子密钥分发器将m个分组的第二子密钥ca及其方程组合表示对应送到m个秘密分享合成器中预存;
所述的计算数字签名包括以下处理步骤:
F.在线的任务分配器将需要签名的HASH值M通过广播数据包经第一广播信道送往k个秘密分享运算器;
G.k个秘密分享运算器中的t个或t个以上的秘密分二争运算器根据接收的M值计算升幂
并将本秘密分享运算器的代号j、需要签名的HASH值M、机器内的密码号i及I个计算结果
通过广播数据包经第二广播信道送往m个秘密分享合成器;
H.m个秘密分享合成器将接收结果与预存分组的第二子密钥c
a的方程组合表示进行比较,找到可以匹配的方程组合表示并得到相应的第二子密钥c
a,再将与组合匹配的t个秘密分享运算器的升幂运算结果相乘得到结果R,根据找到的第二子密钥c
a求出
最后将
与R相乘得到数字签名S=M
d。
所述的步骤A中还包括给在线的任务分配器任意给定一个代号、给k个秘密分享运算器分别给定不相同的代号、给m个秘密分享合成器分别给定不相同的代号和设定t的初始值。
所述的步骤B中,dji的比特数至少比ca的比特数小4倍。
c1.由离线的子密钥分发器取k×I个小于d/t的随机数作为第一子密钥dji,由离线的子密钥分发器通过管理许可的方式将k×I个第一子密钥dji对应送到k个秘密分享运算器中;
c2.离线的子密钥分发器先按组合式Ck t求出全部机器组合,再对每一个机器组合扩展求出它的等价组合集,每个等价组合集中含有It个组合,每个组合含有t个由两个数字ji组成的项:
c3.将全部等价组合集放在一个大组中。
所述的等价组合集是具有相同秘密分享运算器机器代号的组合的集合。
所述的步骤D进一步包括:
d1.将大组中的等价组合集随机排序,将各等价组合集中的组合随机排序,设定一个空的分组为当前分组;
d2.按排序顺序从所述的大组中取出一个等价组合集,按排序顺序从该等价组合集中取出一个组合,判断其能否满足放入当前分组中的合成器安全条件,如果满足合成器安全条件则将该组合放入该分组中并抛弃该等价组合集,如果不能满足合成器安全条件则将该分组仍放回原等价组合集中;
d3.继续执行步骤d2,直至该等价组合集中的组合全部被操作完,如果没有组合能够放入当前分组,则将该等价组合集退回大组中;
d4.再从所述的大组中依序取出另一个等价组合集,并继续执行步骤d2、d3;
d5.检查大组中是否还有等价组合集,如果有,则重新建立一个空的分组作为当前分组,并继续执行步骤d2、d3、d4,直至大组中没有等价组合集时;
d6.统计存有组合的分组个数m,并将各分组中的组合对应送m个秘密分享合成器中。
所述的步骤d6,还包括在m分组中各增加能满足合成器安全条件的冗余的组合。
所述的合成器安全条件,是一个分组内任意两个组合方程的线性组合得到的方程,其变量的个数大于t。
所述的步骤E,由离线的子密钥分发器通过管理允许的方式将所述m个分组的第二子密钥ca及其对应的方程组合表示对应分送到所述的m个秘密分享合成器中。
所述的离线的子密钥分发器在执行完步骤A、B、C、D、E完成子密钥的分发后,处于物理隔离状态或处于关机状态。
所述的步骤F进一步包括:
f1.由在线的任务分配器接收数字签名任务,并进行安全检查与核对;
f2.由在线的任务分配器为该任务确定一个在预定的时间内对任务分配器是唯一的任务号;
f3.由在线的任务分配器将其代号及任务号随需要签名的HASH值M组成所述的广播数据包广播到所述的第一广播信道上;
所述的步骤G进一步包括:
g1.接收到广播后的t个或t个以上的秘密分享运算器向该在线的任务分配器发出已经接收的通知;
g2.t个或t个以上的秘密分享运算器检查任务的唯一性,在确定为新任务时进行所述升幂的计算;
g3.t个或t个以上的秘密分享运算器还将该在线的任务分配器的代号、任务的任务号随本秘密分享运算器的代号j、需要签名的HASH值M、I个密钥号及对应的I个结果
组成所述的广播数据包广播到所述的第二广播信道上;
所述的步骤H,进一步包括:
h1.接收到广播的秘密分享合成器将具有相同任务分配器代号及任务号的广播数据包放在一组中;
h2.上述秘密分享合成器至少找出t个广播数据包,再从中找出与所述预存的方程组合表示匹配的一个方程组合表示,并得到对应的第二子密钥ca。
所述的步骤F、G、H是顺序执行完成数字签名的计算操作。
所述的步骤H后还包括一步骤I,由在线的秘密分享合成器,将数字签名S=Md与任务分配器代号、任务号组成广播数据包广播到一在线的输出接口设备上,并由该输出接口设备用公开密钥检查签名结果,是正确时结束数字签名,是错误时进行错误处理或告警。
所述步骤I,是由在线的秘密分享合成器通过一第三广播信道将所述的广播数据包广播到一单独设置的在线的输出接口设备上。
所述步骤I,是由在线的秘密分享合成器通过所述的第一广播信道将所述的广播数据包广播到设置在任务分配器中的输出接口设备上。
本发明的安全的数字签名系统及方法,基于RSA算法,通过一种不平衡的双层结构的秘密分享,克服了背景技术中系统管理与实现上的困难,达到发明的目的。
本发明的方法与系统具有下列特点:
1.在线的任务分配器无须选定秘密分享运算器和指定密钥就可以广播数字签名任务,在系统更新时可保证不影响在线任务分配器的工作,在某台秘密分享运算器突然损坏时也不会影响广播任务的执行时间(如果指定由某台秘密分享运算器计算,而此台设备最后并没有响应,则必须重新指定设备与密钥并重新开始);
2.在增加一台秘密分享运算器时只需给它生成一个子密钥,离线的子密钥分发器会根据新加的秘密分享运算器的序号与已有的秘密分享运算器的序号进行方程组合,计算出相应的第二子密钥ca,然后将这些新增的方程组合表示与计算出的ca以密钥管理认可的方式添加到秘密分享合成器中去,这种添加是不影响系统工作的;
3.在撤除一台秘密分享运算器时,只需关闭该设备,为保证效率起见,可以删除秘密分享合成器中有关该秘密分享计算器序号的组合表示和相应的ca;
4.同时,本发明同其他背景技术一样,也具有入侵容忍的能力,当小于t台秘密分享计算器被入侵以后,不会泄露系统秘密d,而且由于增加了秘密分享合成器的结构,即使所有的秘密分享计算器都被入侵,也不会泄露系统秘密d(从理论上也可以证明,攻击秘密分享合成器也无法得到系统秘密d,尽管方程个数很多,但所有方程的系数矩阵的秩小于变量的个数);
5.可抵制秘密分享运算器与秘密分享合成器合谋对系统的攻击,即当一台秘密分享运算器与一台秘密分享合成器联合攻击系统时也不能求出秘密d,且使用的秘密分享合成器与同类技术方案相比可大大减少,如当k=5、t=3时,只需使用2台秘密分享运算器,秘密分享合成器的工作任务与秘密分享运算器的工作任务基本相当,没有不均衡的现象。
附图说明
图1是Stanford大学研究的ITTC项目方案中关于CA系统的原型结构示意图。
图2是本发明的一种安全数字签名系统的结构示意图。
图3是本发明的另一种安全数字签名系统的结构示意图。
图4是一种秘密分享运算器的实施流程框图。
图5是一种秘密分享合成器的实施流程框图。
具体实施方式
参见图2,图中示意出一种安全的数字签名系统结构,该系统结构采用RSA算法为基本算法。
该结构中包含一台离线的子密钥分发机(器,以下同)21,至少一台在线的任务分配机22、k台在线的秘密分享运算器23、m台在线的秘密分享合成器24和一台独立设置的在线的输出接口设备25。这些设备都可以由不同的普通计算机或服务器来担任。在线的任务分配机22通过广播信道B1(如UDP协议信道)与k台子秘密分享运算器23连接,k台子秘密分享运算器23通过广播信道B2与m台秘密分享合成器24连接,m台秘密分享合成器24通过广播信道B3与输出接口设备25连接,离线的子密钥分发机21在系统初始化或进行系统配置时分别连接k台子秘密分享运算器23及m台秘密分享合成器24(如图中虚线所示)。
离线的子密钥分发器21保存秘密d,不与其他系统有网络连接。广播信道B1、B2、B3可以是物理相连的一个广播信道或完全不相连、彼此独立的广播信道。
实现整个系统结构的基础原理是将一个大整数表示成若干个整数的和,采用
的表达式,用d
ji表示方程中
至
中的任意一项,将数字签名中的私钥设为方程中的d,d
ji的个数有t个,d、d
ti、c
a均为正整数,d
ji采用随机数以实现简单管理。该方程表达式不同于背景技术中方程表达式d=d
1+d
2+d
3+...+d
t的地方是增加了一个c
a项(a=1,2,...,n),从而形成一种新的安全的且易于管理的系统结构。
该系统结构对秘密d的分享采用由两层部件共同作用完成,一层部件是由简单的秘密分享运算器23组成的,另一层部件是由秘密分享合成器24组成的,在秘密分享运算器23中分别保存多于一个的dji项,在秘密分享合成器中保存ca项,从而形成两层式的秘密分享结构,这两层设备中都存有子密钥,分别为第一子密钥dji与第二子密钥ca。第一子密钥dji采用两位数作下标,其中第一位数j为秘密分享运算器23的序号,即秘密分享运算器23的机器代号,j=1、2、...、k,第二位数i为秘密分享运算器23内的密钥号,i=1、2、...、I,如当秘密分享运算器23中保存两个dji项时,则其第一子密钥分别为dj1和dj2,如d11、d12表示的是第一号秘密分享运算器中保存的两个第一子密钥。
该两层式的分享结构还表现在:只有第一层的秘密分享运算器完成计算后,第二层的秘密分享合成器才能开始工作;由于秘密分享合成器中也保存有子密钥ca,因而秘密分享合成器是不可能被其他设备取代的。
系统首先完成子密钥的分发,其中第一子密钥的分发,采用的操作过程如下:
第一子密钥的分发是由离线的子密钥分发器21为每台秘密分享运算器23产生I个随机的dji,对于有k台秘密运算分享器23的系统来说,就会有k×I个第一子密钥dji,j=1,2,3,4,...,k。如在I=2时(为方便叙述),通过密钥管理认可的方式分别将d11、d12送第一台秘密运算分享器23,将d21、d22送第二台秘密运算分享器23,......,依此类推,直至将dk1、dk2送至第k台秘密分享运算器23。
需预先设计合适的t,t的含义就是当t-1台秘密分享运算器23被入侵后不会影响系统的安全性。应该保证t<k,以保证系统可以从k个秘密分享运算器23中取到t种结果完成运算。
其中第二子密钥的分发处理过程是:离线的子密钥分发器21从k×I个第一子密钥中取出t个,根据方程
再通过作减法可以求出c
a,共有
种取法,故可以计算出
个方程的c
a。这里,
代表组合,表示有n个c
a值和n个方程组合表示,每一个方程组合表示是所对应的t个第一子密钥d
ji下标标号(或者说是变量的序号)的组合,这样的一个方程所对应的密钥d
ji的标号为密钥组合。显然,一个方程组合内的不同的第一子密钥是在不同的秘密分享运算器内,方程组合表示只与第一子密钥d
ji下标标号两位数字ji有关,不泄露任何子密钥的信息。如每个方程组合表示含t个项,每个项的数字是第一子密钥d
ji的下标标号ji,如(12,23,31)就表示t=3时的一个方程组合表示。
在说明本发明的组合计算过程前,先将机器标号相同的组合定义为等价组合,如(
12,
33,
41)(
11,
31,
42)(
12,
33,
42)为三个等价组合的集合。等价组合的意义在于:由于容错和抗入侵是针对机器的,对某台机器来说,取哪个子密钥对其后续的计算影响并不大,设置等价组合只是为了冗余,上例中只要在三个等价组合中取出任意一个组合,就可表示只要有三台机器(秘密分享运算器)正常时就能够求出组合结果。当然,秘密分享运算器计算的其他结果对该组合来说就没有用处了。
离线的子密钥分发器21对所有的方程组合表示、等价组合集以及对应的ca值,按合成器简化安全条件通过穷搜进行分组,每一分组内的方程组合表示是有限的,再按分组的个数(m)对应设置秘密分享合成器(m个),来对应存储这些分组的方程组合表示以及对应的ca值。
我们只要从每个等价组合的集合中取出一个组合作代表,然后将所有等价组合集合的代表组合放到秘密分享合成器中,就可以针对每种机器组合得到正确的签名结果。
如何分组是实施本发明方案的关键问题。从秘密分享合成器24看来,其ca是已知的,其他都是未知的变量。合成器安全条件是根据其方程和系统安全性要求提出的,即:一个秘密分享合成器内所含方程经线性组合得到的新的方程,其变量的个数大于t。
满足该条件,就可以避免合成器与分享运算器对系统的合谋攻击。但是,该条件过于复杂,无法用程序或流程实现。因此为了实现安全的合成,必须有一个可行的算法。
利用方程的特殊性,可使安全条件简化为:一个合成器内由任意两个方程的线性组合得到的方程,其变量的个数大于t。
以下仍以t=3、K=5为例说明子密钥分发器计算并分发组合表示的步骤:第一步,先忽略一个秘密分享运算器有多个第一子密钥的问题,根据Ck t求解全部10种机器组合:(1,2,3)、(1,2,4)、(1,2,5)、(1,3,4)、(1,3,5)、(1,4,5)、(2,3,4)、(2,3,5)(2,4,5)、(3,4,5),是5台秘密分享运算器任选3台的组合结果;
第二步,对上述求出的10种结果进行扩展,即对每个结果求出等价组合,形成10个等价组合集,当每个秘密分享运算器有两个机内密码号时,每个结果还有2t-1个等价的组合,求出这些组合并将他们放在一个等价组合集里,即每个等价组合集中有2t个等价的组合,可随机排序,如结果(1,2,3)的等价组合及随机排序为:(11,21,31)(12,21,31)(11,22,31)(12,22,31)(11,21,32)(12,21,32)(11,22,32)(12,22,32),形成一个等价组合集;
第三步,将所有的等价组合集放在一个大组中,随机排序,并准备若干个分组;
第四步,从大组中依序取出一个等价组合集,从该等价组合集里依序找出一个组合,根据简化的安全条件,通过穷搜进行分组,即看这个组合能不能放到第一个分组里:如果能,则将该组合放入第一分组里,且一个等价组合集中只要有一个组合放入了一个分组中,就抛弃该等价组合集;如果不能,仍将其放回到该等价组合集里,并重新从该等价组合集中依序取出下一个组合,再根据简化的安全条件,看它能不能放到第一个分组里,如果所有该等价组合集里的组合都不能符合简化的安全条件即不能放到第一个分组中,用同样的方法试第二个分组,如果还不行,试第三个分组,依次下去,执行完该过程后,将所有不空分组的组合表示取出,每个分组中的组合表示通过管理允许的方式对应预存入一个秘密分享合成器中;
第五步,重复第四步,直到大组中所有的等价组合集均被取走到分组中为止;
第六步,统计有多少个分组中有组合,并将一个分组中的组合对应送入一个秘密分享合成器中预存;
第七步,在每个有组合的分组中,增加一些能满足安全条件的其他组合,以增加冗余。但在增加冗余的过程中,当一个等价组合集中有一个组合放入了一个分组中时,是不抛弃该等价组合集的。
通过上述步骤,对于图中5个秘密分享运算器23,每个运算器存有两个第一子密钥的机内密码的情况,计算结果如下:
第一个分组内的9个组合为:
(11,21,31)
(11,22,41)
(11,32,42)
(21,32,41)
(12,21,51)
(12,31,52)
(22,31,51)
(21,42,52)
(12,22,32)
第二个分组中的12个组合为:
(11,41,51)
(31,41,52)
(11,21,42)
(12,31,42)
(21,32,41)
(11,22,52)
(12,32,51)
(21,31,51)
(22,42,51)
(32,42,52)
(12,22,41)
(12,21,52)
上述结果说明,只要有两个秘密分享合成器24就能够对付5个秘密分享运算器。因为实际的等价集合只有10个,而现在两个秘密分享合成器中已经放置了共21个组合,说明已经增加了很多冗余。
当选择6台秘密分享运算器,每个秘密分享运算器存两个第一子密钥的机内码时,第一个分组中可有16个组合,第二个分组中有18个组合。两个秘密分享合成器已经能够产生足够的冗余(由于组合数太多,在此不列举)。
实施时可取dji的比特数远小于(至少小于4倍,)ca的比特数,如当d为2048bits的数时,ca为2048bits的数,dji为500bits的数或更少,以保证秘密分享运算器23的运算速度,从而提高整个数字签名系统的运算速度。
每个秘密分享合成器24并不存储针对所有子密钥dji的所有组合,但所有秘密分享合成器24存储内容和的结果能保证包含针对秘密分享运算器的所有dji组合。
系统进行计算数字签名的操作过程,运算时,秘密分享运算器23针对其拥有的第一子密钥dji计算升幂,秘密分享合成器寻找匹配组合,计算并合成结果。
计算数字签名时:任务分配器将需要签名的HASH值M,经广播信道B1通过广播方式送往k个秘密分享运算器23,只要有超过t个正确的秘密分享运算器(指未被攻击的秘密分享运算器)收到数据就可以保证得到计算结果;
秘密分享运算器接收任务后,针对其所有的第一子密钥计算升幂,如第j个秘密分享运算器在收到数据后计算升幂
即每一个秘密分享运算器针对其拥有的所有第一子密钥计算升幂,如对两个子密钥的第一台秘密分享计算器来说,就是求出
和
然后将这两个计算结果
和
连同各自的子密钥代号11、12(ji)、需要签名的HASH值M及任务号,任务分配器代号,自己的机器代号打成数据包经广播信道B2通过广播方式送到秘密分享合成器24,可以一次发送,也可以在计算完一个结果后就发送一个结果,以提高效率。
秘密分享合成器24对接收的数据包按任务存放,采用遍历方法与自己预存的方程组合表示进行比较,找到可以匹配的t个组合表示并得到相应的子密钥c
a,再将经组合匹配后的几个升幂结果相乘得到结果R,再根据找到的c
a求出
最后将
与R相乘就得到应该得到的数字签名S=M
d;
秘密分享合成器24将数字签名结果S送到输出接口设备25,输出接口设备25根据公开密钥检查签名结果的正确性。
以上计算流程中,所有广播的数据包内还应包括:任务分配器的代号,任务分配器分配的任务代号等。以保证系统能够区分不同的任务,支持多任务并行操作。
参见图3,是一个安全数字签名系统的实施例结构,使用一台离线的子密钥分发器31,5台秘密分享运算器33(k=5),二台秘密分享合成器34,一台在线的任务分配器32并兼做输出接口设备,在线的任务分配器32通过广播信道B1与5台秘密分享运算器33连接,5台秘密分享运算器33通过广播信道B2与二台秘密分享合成器34连接,五台秘密分享合成器34还通过广播信道B1与在线的任务分配器32连接,一台离线的子密钥分发器31在系统初始化或系统配置时分别连接5台秘密分享运算器33及两台秘密分享合成器34。
先进行子密钥的发放操作:
给定在线的任务分配器32任意一个代号,如22,给定各秘密分享计算器33一个代号,如1,2,3,4,5,给定各秘密分享合成器34一个代号,如1,2,系统设定初始值t=3,由离线的子密钥分发器31掌握秘密密钥d;
离线的子密钥分发器31任意选定10个小于d/3(d/t)的随机数d11,d12,d21,d22,d31,d32,d41,d42,d51,d52,通过某种管理许可的方式将d11,d12送到1号秘密分享计算器,将d21,d22送到2号秘密分享计算器,将d31,d32送到3号秘密分享计算器,将d41,d42送到4号秘密分享计算器,将d51,d52送到5号秘密分享计算器;
根据
通过作减法可以求出ca,根据Ck t个结果扩展求出Ck t个等价组合集,将所有的等价组合集放在一个大组中,;
按分享器安全条件通过穷搜获得二个分组及其ca的组合表示;
离线的子密钥分发器31将这二个分组的ca值及相应的方程组合表示一起以管理允许的方式对应送到二个秘密分享合成器34中,即第一个秘密分享合成器34中有9个方程组合表示和九个对应的ca值,第二个秘密分享合成器34中有12个方程组合表示和12个对应的ca值。
子密钥发放完成后,离线的子密钥分发器31就可以关机了。
计算数字签名的工作流程为:
由在线的任务分配器32接收必须签名的任务,并做相应的安全检查和核对,然后求需要签名的HASH值M;
由在线的任务分配器32为当前的签名确定一个任务号,该任务号应该在一定时间范围内(如两天)对该任务分配器来说是唯一的;
任务分配器将自己的代号(22),该任务的任务号,HASH值M组成一个数据包广播到广播信道B1上;
秘密分享计算器j(秘密分享计算器33中的至少3个秘密分享计算器,t=3)收到广播后,通知任务分配器32已经成功接收;
秘密分享计算器j检查任务的唯一性,当该任务为新任务时,计算
秘密分享计算器j将自己的代号ji,任务分配器代号22,任务号,HASH值M和计算结果
向广播信道B2广播;
秘密分享合成器34接收该广播数据包,并将具有相同任务分配器代号和任务号的信息放在同一组中;
秘密分享合成器34在一组结果中检查是否有三个以上结果且有3个与存储的方程组合表示匹配,如果有,找到相应匹配的方程组合表示,得到对应的c
a,根据c
a求
然后计算R(是对应的三个与组合表示匹配的结果的乘积),最后将
与R相乘就得到应该得到的数字签名S=M
d;
秘密分享合成器34将任务分配器的代号,任务号和数字签名结果S=Md送到广播信道B1上;
任务分配器32接收数字签名结果后,用公开密钥检查签名结果是否正确,如果错误,进入错误处理或告警,如果检查合格即结束计算任务。
本实施例中各细化的执行步骤同样适用于图2实施例。
本发明的方法能有效地抵制秘密分享合成器和秘密分享计算器联合时对系统的合谋攻击。如上例中,任何一个分享合成器要与至少三台秘密分享运算器合谋才能得到秘密d。而能有力地抵制分享合成器与分享运算器的合谋攻击,且只使用两台秘密分享合成器。
参见图4、图5,分别为图2、图3中秘密分享运算器和秘密分享合成器的实施流程框图,是一种具体的实用流程。其实现是采用多线程技术,即计算机操作系统中使用的多任务并行技术,如图中所示的三个线程:任务处理程序、监听程序和界面程序,来实现一个秘密分享运算器或秘密分享合成器。所有需要计算的任务由一个任务队列来进行管理,而计算所需的系统参数(包括子密钥)也是三个线程都能够存取的。
其中的任务处理程序是专门用于计算的,由于计算是最费时的一项工作,所以单独创建一个线程进行计算,以保证在计算时能够继续保持与用户间的交互,同时能够保持对网络数据的监听从而不丢失网络数据。该线程首先利用事件同步机制进行等候,可以在没有任务的时候节约CPU的时间,可以使用象NT中的EVENT之类的系统事件来进行同步;当任务执行线程被唤醒后,它扫描系统的任务队列,找到应该处理的任务进行处理,包括应该重新发送的数据包的发送。
监听程序是为了保证网络通信的数据不丢失而设置的,单独采用一个线程来监听网络的广播数据,该流程只进行简单的任务处理,如删除一个任务或增加一个任务,当有新的计算任务时,唤醒任务处理线程。
界面程序用于用户界面处理,也单独采用一个线程,以保证在不影响系统运行的情况下修改系统的参数、增加子密钥等。
本发明的系统结构简单,易于实现,有入侵容忍能力,虽然签一次名的总工作量与一般签名相比是增加了,但是能确保系统安全,通过采用并行计算并使dji的比特数远小于ca的比特数(至少4倍),而能使总的签名时间基本与一般签名时间相等,更重要的是能对付秘密分享运算器与秘密分享合成器联合对系统的攻击。
在现今的商业模式下,随着社会分工的不断细化,广大企事业单位完全可以公用提供安全功能的数字签名设备。为此,可以利用本发明的系统与方法设计多企业的技术方案。包括:每个设备针对每个企业存储一套相应数据;任务分配器在广播任务时就将企业代号放在数据包中,以区分不同的企业;秘密分享计算器根据企业代号找到相应的密钥并计算;计算结果连同企业代号一起送往合成器。
整个系统增加企业代号的管理以后,系统可以成为多个不同层次的用户、企业的代理,代理他们进行安全的数字签名。而密钥分发器和任务分配器可以由企业或个人自己控制。
在这种结构下,就构成了多个密钥分发中心,多个任务分配器,多个密钥分享计算器,多个合成器的格局。成为一完善的安全签名服务体系。