散列值(消息摘要)
认证协议
双向认证
单向认证(如CA)
DSS签名标准
核心是RSA算法
它使用安全散列算法
一、数字签名(Digital Signature)
1、定义
1、确认消息发送者的身份
2、对消息进行多次签名
2、基本要求
1、当双方不能完全信任的情况,需要除了认证以外的方法,就是数字签名
2、数字签名不可伪造
3、发生争议时,可以有第三方协商
3、基本形式
1、签名和消息认证的区别
认证是保证消息没有被修改,但是签名是解决收发放的冲突
2、签名的两种方法
对消息的整个签名
对消息摘要进行签名
3、两类数字签名
确定性签名:明文与签名一一对应
概率性签名:由于散列值多对一的特性,一个明文可以有多个合法的数字签名
其他分类
直接数字签名
仲裁数字签名
一般不对消息直接签名而是对它的哈希函数签名
不同长度的消息输入会获得定长的hash函数输出,更加适合签名
hash函数具有单向性,可以体现签名的唯一性
二、认证协议
身份认证(通信对象)和报文认证(报文认证)
保证:信息的真实性 存储数据的真实性 接收方提供回执(接收方要应答) 发送方不可否认(单向认证) 时效性和公正可能性
防窃听,防假冒, 防窃取
单向认证(对称加密,一次一密的变形 改进口令方式 有密钥加密送B,B用A的公开密钥验证
使用公开密钥方法,A想B生成是A,B则向A送一随机数R,A用其私钥
双向认证(对称密钥(三次握手) , 公开密钥方式,AB双方采取不同的随机值, 时标方式
可信中继 使用KDC密钥分发中心, 通过DASS(如CA)
群认证
双向认证协议可以市通信双方达成一致并交换回话密钥
(以下考)
重放攻击:合法的签名消息被拷贝后重新送出
双向认证:防止重放
使用序列号(面向连接的TCP协议
使用时间戳(需要同步时钟
挑战应答(使用单独的nonce)
对称加密实现双向验证
1、使用两层传统的加密密钥结构保证分部环境中通信的保密性
2、通常需要可信密钥分发中心KDC
每一方与KDC共享主密钥
KDC产生双方通信要用的会话密钥
用主密钥来分发会话密钥
ELGamal的数据加密算法(考):用公钥加密私钥解密
AB 共享大素数q,本原元素 a,明文m:0<= m <=q-1
1、A选取随机数XA作为私钥,其中0<= XA <=q-1
2、A求公钥,并发布
YA = a^XA mod q
公钥 = {YA,a,q}
3、B使用A的公钥加密
(1)首先算出加密密钥K
(2)B选取任意k( 0<= k <=q-1)
(3)K = YA^k mod q
(4)加密分别为加密密钥和加密明文
C1 = a^k mod q, C2 = MK mod q
4、A接收消息后解密
先求出密钥K = C1^XA mod q C1^XA mod q = a^k*XA mod q = YA^k mod q = K
再求出明文M = (C2*K^-1) mod q
ELGamal的数字签名算法(考):用私钥加密公钥解密
首先从有限域GF(q)的本原根序列中选取一个本原根a
A选择XA
则YA = a^XA mod q
则A的私钥为XA,公钥为{q,a,YA}
签名过程:注意m是明文,hm是明文的散列值,考试的时候是用hm替代m的
A选择K,要与q-1互素
S1 = aK mod q
K*K^-1(K的逆元)mod (q-1)=1 求K关于q-1的乘法逆元
S2 = K^-1(m - XA - S1) mod (q-1)
验证签名过程
V1 = a^m mod q
V2 = (YA)^S1 * (S1)^S2 mod q
V1 = V2
A为B签署m,0<=m<=p-1
A随机选择k[0,p-1],gcd(k, p-1) = 1
计算:
eg p=17, a =3 XA = 2, XB = 5, m =11, k =5 ,求签名及验证