4.2.1 数字签名的过程
数字签名体制又称做数字签名方案,一般由两部分组成,即签名算法和验证算法。签名算法或签名密钥是由签名者秘密保有的,而验证算法或验证密钥应当公开,以方便他人进行验证。一般来讲,数字签名方案包括3个过程:系统的初始化过程、签名生成过程和签名验证过程。
在系统的初始化过程中,需要产生数字签名所需要的基本参数,包括秘密的参数和公开的参数。这些基本参数为(M, S, K, SIG, VER),其中,M代表明文空间,S代表签名空间,K代表密钥空间,SIG为签名算法集合,VER为验证算法集合。
在签名生成过程中,用户利用某种特定的算法对消息进行签名从而产生签名消息,这种签名方案可以是公开的也可以私密的。该过程主要包含两个步骤:第一,选取密钥k∈K;第二,计算消息摘要,并对该摘要进行签名。
在签名验证过程中,验证者利用公开的验证方法对消息签名进行验证,从而判断签名的有效性。首先,验证者获得签名者的可信公钥;然后,根据消息产生摘要并对该摘要利用验证算法进行验证;最后,比较由验证算法计算出的消息与原始消息是否一致,若一致则该签名为有效,否则,签名无效。
数字签名在具体实施过程中,发送方对信息进行数学变换,使所得信息与原始信息唯一地对应;接收方进行逆变换,得到原始信息。只要数学变换优良,变换后的信息在传输过程中就具有很强的安全性,可以有效地防止干扰者的破译和篡改。该数学变换过程就是签名过程,通常对应某种加密措施;而在接收方的逆变换过程为验证过程,通常对应某种解密措施(如图4-1所示)。
在传递签名时,通常要把签名附在原始消息之后一起传送给接收者。为了使签名方案在实际中便于使用,要求它的每一个签名算法Sigsk∈SIG和验证算法Verpk∈VER都是多项式时间的算法。 4.2.2 签名技术的要求
基于数字签名的功能和应用,可以归结出对数字签名技术的具体要求:
? 数字签名是比特的模式,且依赖于所签的消息。因为数字签名需要能够在网络中传输,因此它
应该是比特的模式,即二进制代码,且数字签名是对整个消息进行某种运算得到的结果,因此它需要依赖于所签的消息。
? 数字签名对于签名者来说必须具有一些独一无二的信息,以此来防止伪造和抵赖。因为数字签
名需要达到的重要目的之一就是不可抵赖性,签名必须是对签名者的表征,因此每个人的数字签名必须是唯一的。
? 产生数字签名的过程应该是容易实施的。考虑到可行性,数字签名的生成必须是简单易行的,
而且过于复杂的系统其生命力都是脆弱的。
? 对签名的识别和验证的过程也必须是容易实施的。
? 伪造一个合法的数字签名必须是计算上不可行的。不管这种伪造是通过利用已有的数字签名来
构造一个新的消息,还是由一个消息来构造一个新的合法的签名,在计算上都是不可行的。 ? 在存储器中存储数字签名的拷贝必须是可实施的。因为有了数字签名的拷贝,就可以在需要的
时候出示给第三方进行仲裁使用。
一种内嵌有安全散列函数的数字签名方案可以满足以上要求。值得一提的是并非任何一种加密算法都可以应用于数字签名,它必须满足以下条件:Epk(Dsk(m))=m。其中,Epk和Dsk为公钥加密系统的加密变换和解密变换。
4.2.3 数字签名的分类
数字签名的分类有很多种方法,这里主要介绍四种方式:
? 基于数学难题。基于离散对数问题的签名方案和基于素因子分解难题的签名方案。
? 基于签名用户。根据签名方案中签名用户的数目分为单用户数字签名和多用户数字签名。 ? 基于数字签名所具有的性质。根据数字签名方案中是否具有消息自动恢复机制可分为带消息自
动恢复的数字签名和不带消息自动恢复的数字签名。
? 基于签名方式。根据签名方式可分为直接签名方式和具有仲裁的签名方式。 4.3 直接方式的数字签名技术
直接数字签名方案中参与的实体只包括通信收发双方,通常使用公钥密码技术作为数字签名的基础。假设接收方知道发送方的公钥,数字签名就是将消息用发送方的私钥进行加密,或者是用私钥对经过Hash(散列)运算后的消息所产生的摘要进行加密运算。在此,利用RSA公钥密码体制来说明直接数字签名的大概过程,较为详细的介绍将在4.5节进行。
若选择发送方的公钥e=17,模n=143,私钥d=113,待签名的消息m=7,则发送方的签名为
s=md mod n=7113 mod 143=24
然后将签名s=24和原始消息m=7都发送给接收方。接收方收到这些信息后,根据发送方的公钥和模可以对签名进行验证,如果
m'=se mod n=2417 mod 143=7=m
成立,则签名有效,否则,签名无效。
消息的保密性可以通过使用接收方的公钥或者两者共有的密钥进行加密来实现。值得注意的是,必须先进行数字签名然后再实施保密性加密措施。这是因为如果发生纠纷,第三方必须可以读取签名和消息。而如果之前的签名是在加密的消息上进行的,那么第三方还需要借助于收发双方的密钥才可以读取消息本身。然而,如果签名是在加密之后进行的,那么可以直接由接收方提供的他所接收到的消息明文和签名给第三方来进行签名的验证。
所有的直接签名方式都存在一个弱点,就是签名方案的有效性取决于发送方私有密钥的安全性。如果发送方随后称他的私有密钥被窃了,那么他就可以对自己所签署的文件予以否认,因为其他人可以利用他丢失的私钥构造出合法的签名。私有密钥管理机构对此现象可能会起到一定的管制作用,但是却不能解决这个问题。一个较好的解决方案是要求签名者对签署消息的日期和时间都进行签名,并且私钥丢失需要及时报送给密钥管理中心。然而随之也会产生这样一种威胁:一些私钥的确在某一时刻被窃取了,然后盗窃者可以用该密钥伪造一个签名并且把签署时间改成盗窃之前的时刻。 4.4 具有仲裁方式的数字签名技术
在直接签名方式中数字签名者能够否认他的签名,这个问题可以在系统中添加仲裁者来解决。仲裁数字签名是在数字签名者、数字签名接收者和仲裁者之间进行的,其中仲裁者是数字签名者和数字签名接收者所共同信任的第三方。 4.4.1 仲裁方式的一般实施方案
仲裁数字签名是一种要求无条件信任的第三方(仲裁者)作为签名生成和验证的一部分的数字签名机制。正如直接数字签名一样,仲裁数字签名技术也有很多种实施方案。但是一般情况下,所有的方案都是这样进行的:每一个已签名的消息都发送给仲裁者,由仲裁者对消息和签名进行验证以确认消息的来源和内容。通过验证后,仲裁者将消息标上日期然后送给接收者,并且附上一个说明表示该消息已经通过仲裁者的验证(如图4-2所示)。仲裁者的出现解决了直接数字签名中的签名否认和信息伪造的问题。