第四讲 消息认证/数字签名
无线网络安全技术
songyubo@
mailto:songyubo@
mailto:songyubo@
消息认证和散列函数
消息认证的概念
散列函数概念
MD5算法
SHA算法
消息鉴别码
网络通信环境下的攻击类型:
1.泄露(Disclosure)
2.传输分析(Traffic analysis)
3.伪装(Masquerade)
4.内容篡改(Content modification)
5.顺序修改(Sequence modification)
6.计时修改(Timing modification)
7.发送方否认(Source repudiation)
8.接收方否认(Destination repudiation)
机密性
消息认证 数字签名
特定的数字签名机制
消息认证——
验证收到的消息确实来自声明的发送方且未
被修改
消息认证也可以验证消息的顺序和时间
数字签名——
一种认证技术,包含了防止发送方否认的方
法
认证要求
数据完整性
不可否认性
认证函数
消息认证或数字证书可以看作有两层:
下层: 需要某种函数用于产生一个认证码,这个码用
于认证消息。
• 产生认证码的函数实现问题
上层:将下层函数作为原语用于认证协议中。
• 认证协议的设计问题
认证函数类型:
消息加密
• 密文作为认证码
消息认证码 (MAC)
• 函数输入为消息和密钥,生成值为一定长的值
散列函数
• 将一个消息映射为一个定长的摘要值
消息加密
对称加密
对称加密算法本身提供认证
要求接收者对解密后的数据能做出正确
判断是否是合法明文还是无意义的二进
制数。
• 要求明文具有某种易于识别的结构:加密前
添加校验和
• 利用通信协议设定消息格式,密文一旦被修
改则解密后的内容无法正常解析
添加校验和
设定消息格式
用公钥加密算法提供认证
用自己的私钥加密:若接收者能判断解密
后的消息是否合法,则可以提供认证
Message Authentication Code (MAC):利用共享
密钥生成一固定长度的字段 (记为MAC)
MAC = C (K,M)
M: 输入消息
C:MAC函数
K:共享密钥
MAC:消息认证码
消息认证码
• 可以确认:
• 消息不被修改
• 消息来源于宣称的发送方
• 消息的发送顺序未被改变(要求消息中包含序列号)
• 与加密函数的区别:
• MAC不需要解密,即MAC函数无需可逆性
• MAC函数为多对一的映射关系
消息认证码的安全性要求
攻击者攻击目标:不再是获得秘钥K,而是寻找可
生成相同认证码的消息。
为何使用MAC
为什么不利用加密实现认证
明文形式没有改变
MAC的实现代价更低
用于只需认证无需加密的场合
• 广播
• 执行代码的认证
某些希望把加密和认证分开的场合,保密周
期和认证周期不一样。(例如:档案)
散列函数
单向散列函数(HASH函数)
将一个长度可变的消息M转换为一个固定长
度的输出,称之为散列码或摘要
与MAC的区别:没有使用密钥,函数输入参
数只有一个
可以检测出消息是否发生变化
和加密结合可以用于认证
加密消息及散列码:E(K,M || H(M))
对称加密散列码:M || E(K,H(M))
E(K,H(M)) 即为一MAC函数
公钥加密散列码:M || E(PRa,H(M))
典型的数字签名方案
散列函数
h = H(M)
M 为一变长消息
h 为一固定长度的HASH值
H 为散列函数
使用方法:将散列值附于消息后发送,接收者根据收到
的消息重新计算散列值,并和收到的散列值进行比较。
由于散列函数本身不存在保密性,需要某种方法来保护
散列值。
对散列函数的要求
1. H 可应用于任意大小的数据块
2. H 产生一固定长度的输出
3. 对于任意给定的x,H(x)的值都是容易计算的。
4. H是单向的, 即给定h, 找到任何一个满足h = H(x)的
x在计算上不行
5. H有弱抗碰撞性:即给定x,找到任何一个满足H(x) =
H(y)的 y,y x 在计算上是不可行的。
• 满足性质4和5的函数称为弱单向函数
6. H有强抗碰撞性,找到任何两个满足H(x) = H(y)的x
和y在计算上是不可行的。
• 满足性质4、5和6的函数称为强单向函数
对散列函数的要求
单向的特性是认证所必需的。
弱抗碰撞性对于防止伪造是必需的
强抗碰撞性对于抵抗生日攻击是非常
重要的
生日攻击
生日问题1:当你走进教室的时候,问教室
里要有多少人使得存在跟你生日相同的人
的概率超过50%?
答案是:253
生日问题2:一个教室内,要有多少人才能
使至少有二人的生日在同一天的概率大于
等于1/2?
(1-1/365)
生日攻击
(1-
2/365)
…… (1-(k-1)/365)
生日攻击
23
针对散列函数的生日攻击
假定函数H有2m 个可能输出值,有k个随
机输入,问当k为多少的时候至少有一个
重复输出出现,即对任意x,y有 H(x) =
H(y)
k 2m/2
如果使用64bit长的散列码,则所需代价
的数量即为232
b
Y0
nIV=
CV0
f
b
Y1
n f
b
YL-1
n
CVL-1
f
CV1
n n
IV = 初始值
CV = 链接值
Yi = 第i 个输入数据块
f = 压缩算法
n = 散列码的长度
b = 输入块的长度
安全Hash函数的一般结构
CVL
CV0=IV= initial n-bit value
CVi=f(CVi-1, Yi-1) (1 i L)
H(M) = CVL
……
Hash函数
24
MD5 算法
MD: Message Digest,消息摘要
输入:任意长度的消息
输出:128位消息摘要
处理:以512位输入数据块为单位
MD5 (RFC 1321) developed by Ron Rivest
(“R” of the RSA )at MIT in 90’s.
25
MD5 算法流程
26
SHA-1 算法
SHA(Secure Hash Algorithm,安全哈希算
法 )由美国国家标准技术研究所NIST开发,
作为联邦信息处理标准于1993年发表(FIPS
PUB 180),1995年修订,作为SHA-1(FIPS
PUB 180-1),SHA-1基于MD4设计。
输入:最大长度为264位的消息;
输出:160位消息摘要;
处理:输入以512位数据块为单位处理.
27
SHA-1一个循环 MD5一个循环
28
比较SHA1/ MD5
散列值长度
MD5 128bits SHA1 160bits
安全性
SHA1看来好些,但是SHA1的设计原则没有公开
速度
SHA1慢些 (openssl speed md5/sha1:)
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192
bytes
md5
sha1
29
HMAC
把HASH值和一个Key结合起来
没有使用加密算法
标准
RFC 2104
• HMAC:Keyed-Hashing for Message Authentication
FIPS 198
• The Keyed-Hash Message Authentication Code(HMAC)
目标
既能使用当前的HASH函数,又可容易升级为新的HASH
函数,并能保持散列函数的安全性
简单,并易进行密码学分析
30
数字签名
签名的含义
签名者慎重表达认可文件内容的意向的行为
为什么需要数字签名:
报文认证用以保护双方之间的数据交换不被第
三方侵犯;但它并不保证双方自身的相互欺骗。
假定A发送一个认证的信息给B,双方之间的争
议可能有多种形式:
• B伪造一个不同的消息,但声称是从A收到的。
• A可以否认发过该消息,B无法证明A确实发
了该消息。
特性
不可伪造,特异性
不可重用,日期和时间相关性
不可改变,能发现涂改、转移意义或用途
不可抵赖,能够质证
可仲裁的,可做为法律证据
手写签名
纸版文件
手写签名
同一页纸
数字签名
数字文件
数字小文件
如何绑定
如何实现数字签名
数学支持-签名函数
被签署的是文件(大文件)
签名生成另外一个文件(小文件)
签名过程一定有签署人的身份和某种秘密(别
人不知的)参与
简单易行
• 计算和存储
手写签名的数字化改造
签名函数报文
报文
签名
身份和秘密
数字签名
满足条件
必须是跟消息相关的二进制位
必须是发送方独有的信息,以防伪造和否认
必须易于产生
必须易于验证和识别
必须使得伪造在计算上不可行
必须使得保存签名的拷贝可行
Digital Signatures
先对消息M作一个摘要H(M)
然后发送方用自己的私钥对H(M)进行加密,得到
签名EKRa(H(M))
连同消息M一起,发送出去
B收到复合的消息之后,把签名提取出来
B用A的公钥对签名解密得到H’
B计算所收到消息的摘要H(M’)
如果H’=H(M’),则消息确实是A产生的
数字签名的应用
用来对禁止核试验条约的验证:
美国和前苏联互相允许把地震仪放入另一个国
家中,以便对核试验进行监控。
利用签名技术保证数据来源的可靠性以及数据
没有被篡改。
公钥证书
公钥分发问题
公钥算法允许参与者在不受保护的信道上
共享秘密
适用于开发式的网络
如何分发公钥?
需解决公钥的合法性问题
• 身份绑定
证书
公钥必须被认证
例如:可以通过一个可信任的第三方宣布“公
钥PA是用户Alice的”。
Alice PKa [Alice,PKa]PRc CA
用户Alice使
用的公钥
公钥机构的名
称
用户Alice的身
份标示
证书机构对
Alice和她公
钥的签名
认证服务
的发布历史:
1988年,首次发布;
1993年,修正版本发布;
1995年, Version 3;
2000年,再次发布。
基于公钥密码体制和数字签名。公钥
密码推荐使用RSA,数字签名需要用到hash
函数。
公钥证书的产生过程
没有签名的证书:包
含用户ID,用户公钥
H
生成没有签名
证书的散列码
E
签过名的证书,接
收者可用认证机构
的公钥来检查签名
用认证机构的
私钥来加密散
列码生成签名
格式格式
证书的标示
证书颁发者的姓名
用户名
用CA私钥加密的散列值
CA<<A>> = CA {V, SN, AI, CA, TA, A, AP}
认证机构CA颁发的用户A证书
Y{I} = Y对I的签名
被加密后的散列代码
若拥有CA的公钥,则可以得到用户的公钥
只有证书机构(CA)可以生成或修改证书
证书不需要专门保护