若至多可以用来对一个消息进行签名,否则签名就可能被伪造,我们称这种签名为一次性数字签名。Rabin的一次签名方案是最早的签名方案之一,但该方案中签名的验证需要签名者和验证者合作才能完成。
1979年,Lamport使用单向函数提交密钥的方式构造了一次签名方案,这之后,这种方案被许多人研究。下面简单介绍一个一次性签名的方案。
(1)产生签名密钥。签名方随机产生2t个密钥作为签名用的密钥,所以这些密钥需要保密,2t个密钥为K1,K2,…,K2t。
(2)产生用于验证签名的数据信息。首先产生2t个随机数:u1,u2,…,u2t;然后用Kt分别加密随机数ui,i=1,2,…,2t,得到2t个密文数据U1,U2,…,U2t,其中,Ui=E(ui,Ki),i=1,2,…,2t。公开这2t个随机数和2t个密文数据,作为用于验证签名的数据。需要注意的是,公布的ui序列和Ui序列的排列顺序应与K1,K2,…,K2t的顺序一致。
(3)签名过程。签名分别用Ki对报文M的压缩码C(M)加密获得:S=(E(C(M),K1),E(C(M),K2),…,E(C(M),K2t)),简记为S=(S1,S2,…,S2t),其中,C表示压缩函数,E表示加密。签名者把消息和签名(M,S)发送给验证者。(www.daowen.com)
(4)验证方索取t个密钥。验证者收到签名消息后,随机产生一个长为2t的比特串,要求其中包含t个比特0,t个比特1。然后把该比特串发送给签名者。签名者收到该长为2t的比特串之后,发送回t个密钥。发送原则是:如果比特串的第i位为1,则签名方把Ki发送给对方。发送也要求按顺序完成。
(5)验证签名。验证方收到签名方的t个密钥之后,就可以验证签名的有效性。验证方法可以如下表示:
其中,Ki表示接收方收到签名方的t个密钥,i=j1,j2,…,jt。如果对于所有的t个密钥上面两式成立,则签名有效,否则签名无效。
一次性数字签名在公钥签名体制中要求对每一个消息都使用一个新的公钥来作为验证参数,适用于计算复杂性低的芯片卡中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。