密码学---数字签名和认证协议---数字签名的基本概念

本文详细介绍了数字签名的概念、目的及应具备的性质,包括身份验证、消息完整性和可验证性。数字签名的产生可以通过加密算法,如单钥加密和公钥加密,以及特定的签名算法。文中以RSA为例,展示了不同加密方式下的数字签名生成过程。同时,讨论了直接方式和具有仲裁方式的数字签名执行,以及它们各自的优缺点。通过仲裁者可以提高签名的安全性和防止否认。
摘要由CSDN通过智能技术生成

数字签名应该满足的条件

数字签名的目的是保护通信双方中的一方防止另一方的欺骗或伪造。数字签名应该具有以下的性质:

  1. 能够验证签名产生者的身份,以及产生签名的日期和时间
  2. 能用于证实被签消息的内容
  3. 数字签名可由第三方验证,从而能够解决通信双方的争议

因此,数字签名具有消息认证功能。为实现上诉三条性质,数字签名应该满足以下要求:

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<e<φ(n),且gcd(φ(n),e)=1;由d·e≡1 mod φ(n)计算d。以PK={n,e}为公钥,SK={d,n}为私钥
2.签名过程:设明文消息为M,对其签名为σ=Md mod n
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都是保密的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值