第十三章 数字签名和认证协议
数字签名是一种认证机制,使得消息的产生者可以添加一个起签名作用的码字。通过计算消息的散列值并用产生者的私钥加密散列值来生成签名。签名保证了消息的来源和完整性。
互相认证协议使得通信的各方对互相的身份感到放心,并交换会话密钥。
单向认证时,接收方想确信消息确实来自声称的发送方。
数字签名标准DSS是NIST标准,它使用安全散列算法(SHA)。
消息认证可以保护信息交换双方不受第三方的攻击,但是它不能处理通信双方自身发生的攻击。
对数字签名的要求:
① 它必须能验证签名者、签名日期和时间。
② 它必须能认证被签的消息内容。
③ 签名应能由第三方仲裁,以解决争端。
因此,数字签名具有认证功能。
数字签名应满足的条件:
① 签名必须是与消息相关的二进制位串。
② 签名必须使用发送方某些独有的信息,以防伪造和否认。
③ 产生数字签名比较容易。
④ 识别和验证签名比较容易。
⑤ 伪造签名在计算式不可行。
⑥ 保存数字签名的拷贝是可行的。
数字签名可分为两类:直接数字签名和仲裁数字签名。
1 直接数字签名
先进行签名,然后才执行外层的加密,这样在发生争执时,第三方可以查看消息及其签名。
若先对消息加密,然后对消息的密文签名,那么第三方必须知道解密密钥才能读取原始信息。
2 仲裁数字签名
从发送方X到接收方Y的每条已签名信息都先发给仲裁者A,A对消息及其签名进行检查以验证消息源及其内容,然后给消息加上日期并发给Y,同时指明该消息已通过仲裁者的检验。
认证协议
相互认证是一个重要的应用领域,相互认证协议可以使通信双方确信对方的身份并交换会话密钥。
保密性和及时性是认证的密钥交换中两个重要的问题。
对付重放攻击的方法之一是,在每个用于认证交换的消息后附加一个序列号,只有序列号正确的消息才被接收。
① 时间戳:需要时钟同步。
② 挑战/应答:临时交易号。
时间戳方法不适用于面向连接的应用。
挑战/应答不适用于无连接的应用。
单向认证
“信封”的头必须是明文形式,这样,简单邮件传输协议SMTP或X.400这样的存储~转发电子邮件协议才能够对它们进行处理。
数字签名标准DSS
DSS使用的是只提供数字签名功能的算法。与RSA不同,DSS是一种公钥方法,但不能用于加密或密钥分配。
RSA方法中,散列函数的输入是要签名的消息,输出定长的散列码,用发送方的私钥对该散列码进行加密形成签名,然后发送消息及其签名。
DSS方法中,产生的散列码和为此次签名而产生的随机数k作为签名函数的输入,签名函数依赖于发送方的私钥和一组参数。
数字签名算法DSA
DSA建立在求离散对数的困难性上。
1 全局公钥组成。
p是素数,其中 2L -1<p< 2 L , 512≤L≤1024且L是64的倍数,即L的位长在512至1024之间并且其增量为64位q(p-1)的素因子,其中2159<q<2160;即位长为160位g=h(p-1)/q mod p,其中h是满足1<h<(p-1),并且h(p-1)/q mod p > 1的任何整数。
2 用户是私钥
x为随机或伪随机整数,且0<x<q
3 用户的公钥
y = gx mod p
4 与用户每条消息有关的秘密值
k 等于随机或伪随机整数,且0<k<q
5 签名
r = (gk mod p) mod q s = [k-1 (H(M) + xr)] mod q
签名 = (r, s)
6 验证
w = (s’)-1 mod q
u1 = [H(M’) w] mod q
u2 = (r’) w mod q
v = [(gu1yu2) mod p] mod q 验证:v = r’