安全增强的基于RSA可验证门限签名方案(精)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

安全增强的基于RSA可验证门限签名方案
摘要本文提出一种验证功能完善、安全性更高的门限RSA签名方案。

该门限签名方案利用有理数域上的插值公式,Shamir秘密共享方案以及改进的门限RSA签名方案等理论,解决了在中对元素求逆和代数结构扩张的问题以及共享服务器合谋的问题。

关键词门限密码体制,门限签名,RSA算法,门限RSA签名方案
1 引言
门限签名是门限密码学的主要研究内容之一,最初由Desmedt和Frankel等人引进的,并基于ElGamal密码方案建立了第一个(t,n)门限密码体制。

在(t,n)门限签名方案中,n个成员共享群体的签名密钥,使得任何不少于t个成员的子集可以代表群体产生签名,而任何少于t个成员的子集则不能产生签名。

门限签名方案的基本假设是:在系统生命周期中,至少有(t-1)个非诚实成员。

由于RSA算法满足构成门限密码体制的同态性要求,并且在CA中被广泛使用,所以这里选择基于RSA的门限签名方案。

但是对于RSA密码系统,情况要复杂一些。

首先剩余环
Shamir的秘密共享方案为基础,将改进的门限RSA签名体制、两方共享与(t,n)门限方案相结合,提出了一个需要可信任中心的安全性增强的基于门限RSA签名方案。

利用由hash函数建立的特殊形式的RSA
2 门限秘密共享方案分析
通过前面的分析我们知道门限秘密共享方案是构成门限签名方案的基础。

现有的许多门限签名方案采用的是ITTC项目中的方案,采用随机和的拆分方法,也就是将秘密密钥d按多种(t,t)共享方案分割,每种分割称为一种联合,每种联合含有t份子密钥,这t份子密钥分别存储在n个服务器中的t个不同共享服务器上,不同的子密钥联合对应不同的t个共享服务器组合。

这种
方案具有方法简单,运算效率高的特点,但是它的子密钥分发和管理都比较困难。

它需要客户机或是组合者指定共享服务器而不具有任意性,对于客户机的要求很高,实现起来比较困难。

本文采用有理数域上的插值公式和经典的Shamir(t,n)秘密共享方案作为构造门限签名方案的理论基础。

这是因为Shamir门限体制具有以下特点:
(1)增加新的子密钥不用改变已有的子密钥。

在参与者P
1, P
2
,…,
P
n
中成员总数不超过q的条件下可以增加新的成员而不用重新撤销以前分发的
子密钥。

当系统需要增加共享服务器时,我们只需要对新增加的服务器分发新的子密钥,而不需要将已经分发的子密钥一起替换掉,这样可以减少系统的工作,提高系统效率。

(2)可以通过选用常数项不变的另一(t-1)次新的多项式,将某个成员的子密钥作废。

当某个共享服务器被攻破时,需要作废它的子密钥,我们可以采用这种方法。

(3)组合者可以任意选择共享服务器的子密钥进行密钥恢复而不需要指定它们。

这是我们选择Shamir(t,n)秘密共享方案的一个重要原因。

当共享服务器完成部分签名后组合者Combiner可以在n个服务器中任意选择t个进行最后的组合,而不需要去指定由某些服务器的部分签名构成最后的签名。

这里我们给出这样一个假设:任意t个共享组件所构成的信息与n个共享组件所构成的信息应该是完全等价的。

在此基础上给出本文的基于RSA门限签名方案。

3 基于RSA门限签名方案设计
3.1 密钥初始化
定义5-1可信任中心A(Administrator)指将签名私钥分给n个秘密共享者的组件。

可信任暗含了A一定能确保秘密信息不会被泄漏,并且在执行完密钥的分发后将签名私钥和其它信息一起销毁。

(1)假设可信任中心A选择好N,公钥e和私钥d以及
(2)取定一个固定的正整数k
(3)d1为随机数,
3.2 子密钥的生成与验证
可信任中心A按如下步骤将签名密钥d2分发给n个共享服务器Share
Server
i。

(1)A随机选取多项式
其中g是可信任中心A随机选取的信息样本
A将d2i秘密地发送给i,而将N,n,e,h公开,将所有的g,c i,y i广播给各Share Server i,p,q不再使用将其销毁。

(2)各共享服务器Share Server
i
(i=1,2,…,n)收到可信任中心A发
送来的子密钥d2i后,利用已广播的公开信息验证子密钥d2i的正确性,方法如下:
①每个共享服务器Share Server
i
判断下面的式子是否成立:
②由于(5-4)
可以验证,故称为公开验证部分;式(5-5)由每个共享服务器自己验证,故称为
秘密验证部分。

对于Share Server
i
来说,秘密验证就是用自己的子密钥d2i和收到的g计算y i并与从可信中心A发送的y i比较是否一致来判断d2i的正确性。

Share
Server
i
宣布可信任中心A发放的子密钥是错误的,于是可信任中心A被认为是不合格的,协议至此中止。

可信任中心A将重新选择N和密钥对(d,e)重复上面的步骤发放新的密钥,否则可信任中心A分发密钥成功,可以进行下面步骤。

这时可信任中心A销毁所分发的密钥,以防止密钥泄露。

3.3 部分签名的生成与验证
首先密钥服务器K利用密钥m的hash函数值进行签名
共享服务器Share Server
i
m的部分签名后,本文借助交互
验证协议来验证Share Server
i
的部分签名是否正确。

在交互验证协议中可以由任何一方来验证部分签名的正确性,这里为了方便后面系统设计故规定共享
服务器Share Server
i 的部分签名是由Share Server
i+1
来验证。

若协议成功,
则Share Server
i+1确信Share Server
i
的部分签名S
2i
是正确的;否则S
2i
是不
正确的。

方法如下:
(1)Share Server
i+1任意选取
R
[1,N],计算出
(2)Share Server
i
收到R
(3)Share Server
i+1
收到
N为两个安全素数p,q之积。

若非诚实验证者P不能攻破RSA系统,则上述验证RSA部分签名的交互式协议满
足以下性质:
(1)完备性若P, Share Server
i 都是诚实的,则Share Server
i
总是
接受P的证明。

(2)合理性非诚实证明者P使Share Server
i
接受不正确部分签名的成
功率是可忽略的。

(3)零知识性非诚实验证者除了能知道部分签名是正确外,不能获得其
他任何信息。

因此由这样的交互式协议验证为正确的部分签名基本可以认为是正确的。

3.4 签名的生成与验证
若已有t个部分签名
(1)Combiner将x i(i=1,2看作整数环Z上的元素,在整数环Z
上计算。

(2)S2的计算公式如下:
最后系统的签名为
(3)接着Combiner,按下式来验证门限签名(m,S)的
正确性,若成立则接受S为m的合法签名。

3.5 签名算法
这里给出了门限签名方案的实现算法,其中需要运用java.io.*;
java.security.*; java.math.*; javax.crypto.*; javax. crypto.spec.*;java.security.spec.*;java.security. interfaces.*;
java.util.*; javax.crypto.interfaces.*等系统提供的类和方法。

(1) RSA签名私钥生成算法:
public class RSA { KeyPairGenerator kpg=KeyPairGenerator.getInstance ("RSA");
kpg.initialize(1024);
KeyPair kp=kpg.genKeyPair();
PublicKey pbkey=kp.getPublic();
PrivateKey prkey=kp.getPrivate();
//保存RSA公钥
FileOutputStream f1=new FileOutputStream("skey_
RSA_pub.dat");
ObjectOutputStream b1=new ObjectOutputStream (f1);
b1.writeObject(pbkey);
//保存RSA私钥
FileOutputStream f2=new FileOutputStream("skey_
RSA_priv.dat");
ObjectOutputStream b2=new ObjectOutputStream (f2);
b2.writeObject(prkey);
}
(2)子密钥生成算法:
public class shareRSA {//读取私钥d及RSA参数
FileInputStream f=new FileInputStream ("skey_
RSA_priv.dat");
ObjectInputStream b=new ObjectInput
Stream(f);
RSAPrivateKey prk=(RSAPrivateKey)
b.readObject();
BigInteger
d=prk.getPrivateExponent();
BigInteger n=prk.getModulus();
byte[] x=new byte[16];。

相关文档
最新文档