数字签名的目的是保护通信双方中的一方防止另一方的欺骗或伪造。数字签名应该具有以下的性质:
因此,数字签名具有消息认证功能。为实现上诉三条性质,数字签名应该满足以下要求:
1.签名的产生必须使用发方独有的一些信息以防伪造和否认
2.签名的产生比较容易
3.签名的识别和验证应该较为容易
4.对已知的数字签名伪造一个新的消息或对已知的消息伪造一个假冒的数字签名在计算上是不可行的
数字签名的产生可用加密算法或特定的签名算法。
利用加密算法产生数字签名是指将消息或消息的摘要加密后的密文作为对该消息的数字签名,其用法又根据单钥加密还是公钥加密有所不同。
数字签名产生过程如图所示:
消息发送者A根据单钥加密算法用与消息接受者B共享的密钥K对明文消息M加密后的密文作为对M的数字签名发往B。这里的数字签名就是明文消息M的密文。
认证性:该体制下能够向B保证收到的消息是来自A的,因为只有A知道密钥K。
保密性:B解密恢复出明文M后,可以相信M未被篡改,因为加密密钥K只有B和A知道。
当B执行解密运算后得到的消息Y是合法消息M加密后的密文X,则B解密得到的消息Y就是明文消息M,否则Y是毫无意义的比特序列
没有保密性的数字签名产生过程:
消息发送者A使用自己的私钥SKA对消息M加密后的密文但作为对M的数字签名,B使用A的公钥PKA对消息解密。
认证性:由于只有A才有私钥SKA,因此B可以相信收到的消息来自A
保密性:由于A的公钥所有人都可以获得,因此该方法没有保密性
有保密性的数字签名产生过程:
消息发送者A先使用自己的私钥SKA对消息M加密得到密文ESKA(M),为了保证保密性,在密文ESKA(M)上的基础上用收方B的公钥PKB又进行了一次加密得到数字签名。
由于对消息用PKB进行加密,因此对数字签名的解密操作只有B才能解开,因此保证了保密性
这里以RSA签名体制为例,说明数字签名的产生过程
1.选择参数:选择两个保密的大素数p和q,计算n=p×q,φ(n)=(p-1)(q-1);选一个整数e,满足1
3.验证过程:收方在收到消息M和签名σ后,验证M ≡ σe mod n是否成立,若成立则签名有效,否则无效
由加密算法产生数字签名又分为外部保密方式和内部保密方式,外部保密方式是指数字签名直接对需要签名的消息生成数字签名,而内部保密方式是指对已经加密的消息生成数字签名。
在第三方处理争议时,需要得到明文消息及其数字签名,因此外部保密方式便于解决争议。若采用内部加密方式,第三方必须得到解密密文消息的密钥(即收方B的私钥SKB)才能得到明文消息,因此在解决争议时常用外部保密方式
签名算法可用多项式时间算法的三元组(SigGen,Sig,Ver)表示。其中:
SigGen(密钥生成):是一个随机化方法,输入安全参数κ,输出密钥对(vκ,sk),其中sk是签名密钥,vκ是验证密钥
Sig(签名):是一个随机化算法,输入签名密钥sk和要签名的消息M,输出一个签名σ(σ=Sigsk(M))
Ver(验证):是一个确定性算法,输入验证密钥vκ、签名的消息M和签名σ。输出True或者是False(True表示签名有效)
算法的安全性在于已知签名消息M和签名σ,难以推出密钥x或伪造一个消息M’,使得(σ,M’)被验证为真
数字签名的执行方式有两类,直接方式和具有仲裁的方式
直接方式是指数字签名的执行过程只有通信双方参与,并假定双方有共享的私钥或者接收方知道发方的公钥。
因此直接方式的缺点是签名的有效性取决于发送方私钥的安全性。若发送方想要否认自己发出的消息,只要声称自己的私钥丢失或被盗即可。虽然可以采取某些措施,但是不能完全避免这种情况。且发方私钥被盗的情况也可能存在
直接方式的数字签名所具有的不安全性都可通过使用仲裁者得以解决。
具体步骤是:
1.发方A对发往收方B的消息M签名后,将消息M和签名先发给仲裁者X
2.仲裁者X对消息和签名进行验证,验证通过后,仲裁者再连同一个表示已通过验证的指令一起发往收方B
由于仲裁者的存在,发方X无法对自己发送的消息予以否认。但是具有仲裁的方式对仲裁者有很高的要求,其应该取得所有用户的信任
实例1—单钥加密算法的数字签名:
签名过程如下:
其中E是单钥加密算法,KAX和KXB分别是A与X共享的密钥和X与B共享的密钥,H(M)是消息M的哈希值,T是时间戳,IDA是A的身份
验证过程:
在出现争议时,收方B可声称自己的消息M来自发方A,并将收到的消息P=EKXB[IDA||M||EKAX[IDA||H(M)]]发给仲裁X。
仲裁X用KXB解密消息P,再用KAX解密EKAX[IDA||H(M)],并对H(M)进行验证,从而验证A的签名
该例子中由于消息是明文传输的,因此不能提供保密性
实例2
签名过程如下:
其中KAB是发方A和收方B共享的密钥,其余符号和实例1含义相同。
该例子中由于明文消息M进行加密操作,因此仲裁者X不能读取明文M,在实例1的基础上提供了保密性,但是存在这样一个问题:即仲裁者可和发送方共谋以否认发方A发送过的消息,也可以和收方B共谋以伪造发方A的签名
实例3—采用公钥机密技术的数字签名
签名过程如下:
其中SKA和SKX分别是A和X的私钥,PKB是B的公钥。签名步骤:
1.A用自己的私钥和B的公钥对消息进行加密后得到数字签名EPKB[ESKA[M]],将其和自己的身份用私钥加密后和自己的身份一起发送给仲裁者
2.仲裁者X收到发方的内容后,用发方A的公钥对ESKA[IDA||EPKB[ESKA[M]]]进行解密,并将解密得到的IDA和收到的IDA进行比较,从而验证该消息的来源是否是发方A。
3.验证通过后,仲裁者X将A的身份IDA和收到的A的数字签名以及时间戳经过私钥加密后发往收方B
该实例的优点:
1.在协议执行之前,双方都不需要有共享的信息,因此可以防止共谋
2.只要仲裁者的私钥不被泄露,任何人(包括发方)都不能发送重放的消息
3.对于第三方(也包括仲裁者X)来说,消息M都是保密的