第七章 消息认证与数字
签名
回顾与总结
对称密码算法
? – 运算速度快、密钥短、多种用途、历史悠久
? – 密钥管理困难(分发、更换)
非对称密码算法
? – 只需保管私钥、可以相当长的时间保持不变、
需要的数目较小
? – 运算速度慢、密钥尺寸大、历史短
信息安全的需求
保密性( Confidentiality)
完整性( Integrity)
? – 数据完整性,未被未授权篡改或者损坏
? – 系统完整性,系统未被非授权操纵,按既定
的功能运行
可用性( Availability)
不可否认性( Non-repudiation)
? – 防止源点或终点的抵赖
7.1 信息认证
保证信息的完整性和抗否认性
通过信息认证和数字签名来实现
通信系统典型攻击
窃听
消息篡改
? 内容修改:消息内容被插入、删除、修改。
? 顺序修改:插入、删除或重组消息序列。
? 时间修改:消息延迟或重放。
冒充:从一个假冒信息源向网络中插入消

抵赖:接受者否认收到消息;发送者否认
发送过消息。
消息认证( Message Authentication),
? 是一个证实收到的消息来自可信的源点且未被
篡改的过程。(防范第三方攻击)
数字签名( Digital Signature)
? 是一种防止源点或终点抵赖的鉴别技术。(防
范通信双方的欺骗)
认证的目的
认证模型
认证函数
信息认证
认证的目的
验证信息的完整性,在传送或存储过程中
未被篡改,重放或延迟等。
认证系统的组成
认证编码器和鉴别译码器可抽象为认证函数。
一个安全的认证系统,需满足
? 意定的接收者能够检验和证实消息的合法性,
真实性和完整性
? 除了合法的消息发送者,其它人不能伪造合法的消息
首先要选好恰当的鉴别函数,该函数产生一个鉴
别标识,然后在此基础上,给出合理的认证协议
(Authentication Protocol),使接收者完成消息
的认证。
认证函数
可用来做鉴别的函数分为三类,
(1) 消息加密函数 (Message encryption)用
完整信息的密文作为对信息的鉴别。
(2) 消息认证码 MAC(Message
Authentication Code)公开函数 +密钥 产生
一个固定长度的值作为鉴别标识
(3) 散列函数 (Hash Function)是一个公开
的函数,它将任意长的信息映射成一个固
定长度的信息。
7.1.1消息加密
消息的自身加密可以作为一个鉴别的度量。
对称密钥模式和公开密钥模式有所不同
对称密码体制加密认证
? 发送者 A,接受者 B,双方共同拥有密钥
? A把加密过的信息传送给 B
? 攻击者不知道如何改变密文
? B只要能顺利解出明文,就知道信息在中途没
有被人更改过。
公钥密码体制加密认证
? A用私钥对明文的信息加密
? 由于攻击者没有 A的私钥,不知道如何改变密

? B能用 A的公钥解出明文,说明没有被人更改。
? 这种方式既能提供认证,又能够提供数字签名。
7.1.2 消息认证码
使用一个密钥生成一个固定大小的小数据
块,附加在消息后,称 MAC ( Message
Authentication Code),或密码校验和
( cryptographic checksum)
? MAC = FK(M)
收到消息后,只需要根据密钥和消息来计
算 MAC是否等于传过来的 MAC。
1、接收者可以确信消息 M未被改变。
2、接收者可以确信消息来自所声称的发送
者;
MAC函数类似于加密函数,但不需要可逆
性。因此在数学上比加密算法被攻击的弱
点要少。
只提供认证,不提供保密和数字签名
Why?
为何要使用消息认证码
根本上,信息加密提供的是保密性而非真实

加密代价大 (公钥算法代价更大 )
认证函数与保密函数的分离能提供功能上
的灵活性
某些信息只需要真实性,不需要保密性
? 广播的信息难以使用加密 (信息量大 )
? 网络管理信息等只需要真实性
? 政府 /权威部门的公告
7.2散列函数 Hash Function
H(M),输入为任意长度的消息 M; 输出为一个固定
长度的散列值,称为消息摘要 (Message Digest)。
这个散列值是消息 M的所有位的函数并提供错误
检测能力:消息中的任何一位或多位的变化都将
导致该散列值的变化。
又称为:哈希函数、数字指纹( Digital finger
print)、压缩( Compression)函数、紧缩
( Contraction )函数、数据鉴别码 DAC( Data
authentication code)、篡改检验码
h=H(M)
H公开,散列值在信源处被附加在消息上
接收方通过重新计算散列值来确认消息未
被篡改
如果要提供保密性,需要对散列值提供另
外的加密保护
5.2.1 散列函数的性质
目的:产生文件、报文或其它数据块的
“指纹”
可以提供保密性、认证、数字签名的作用
如果不要求提供保密性,可以采用不对整
条报文加密而只对 Hash码(也称作报文摘
要)加密的方法
基本性质
能用于任何长度的数据分组
对于任何给定的 x,H(x)要易于计算
对于任何给定的 h,寻找 x都是不可能的
对于任何给定的 x,找不到 x不等于 y,但是
H(x)=H(y)
寻找任何( x,y),使得 H(x)=H(y)在计算上不
可行。
散列码的不同使用方式
使用对称密码体制对附加了散列码的消息进行加
密(提供认证及保密性)
使用对称密码仅对附加了散列码进行加密(提供
认证)
使用公钥密码体制,只对散列码进行加密(提供
认证及数字签名)
发送者将消息 M与通信各方共享的一个秘密值 S串
联后计算出散列值,将此值附在消息后发出去,
则攻击者无法产生假消息(提供认证)
不同使用方式
提供认证
? A->B,M||H(M||S)
提供认证和保密性
? A->B,E(M||H(M),K)
提供认证和数字签名
? A->B,M||D(H(M),KdA)\
提供认证、数字签名和保密性
? A->B,E(M||D(H(M),KdA),K)
几种常用的 HASH算法
MD5
SHA-1
RIPEMD-160
MD5简介
Merkle于 1989年提出 hash function模型
Ron Rivest于 1990年提出 MD4
1992年,MD5 (RFC 1321) developed by Ron
Rivest at MIT
MD5把数据分成 512-bit块
MD5的 hash值是 128-bit
在最近数年之前,MD5是最主要的 hash算法
现行美国标准 SHA-1以 MD5的前身 MD4为基础
2004年 8月 17日的美国加州圣巴巴拉,正在
召开的国际密码学会议( Crypto’2004)。
来自山东大学的王小云教授做了破译 MD5、
HAVAL-128,MD4和 RIPEMD算法的报告。
Secure Hash Algorithm简介
1992年 NIST制定了 SHA(128位 )
1993年 SHA成为标准( FIPS PUB 180)
1994年修改产生 SHA-1(160位 )
1995年 SHA-1成为新的标准,作为 SHA-1(FIPS
PUB180-1)
SHA-1要求输入消息长度 <264
输入按 512位的分组进行处理的
SHA-1的摘要长度为 160位
基础是 MD4
RIPEMD-160简介
欧洲 RIPE项目的结果
RIPEMD为 128位
更新后成为 RIPEMD-160
基础是 MD5
hash函数小结
hash函数把变长信息映射到定长信息
hash函数不具备可逆性
hash函数速度较快
hash函数与对称密钥加密算法有某种相似性
对 hash函数的密码分析比对称密钥密码更困难
hash函数可用于消息摘要
hash函数可用于数字签名
7.3 数字签名 digital signature
消息认证用以保护双方之间的数据交换不
被第三方侵犯;但它并不保证双方自身的
相互欺骗。
用户 A 用户 B MAC
用户 C
篡改、冒充
假定 A发送一个认证的信息给 B,双方之间
的争议可能有多种形式,
? A可以否认发过该消息,B无法证明 A确实发了
该消息。
? B伪造一个不同的消息,但声称是从 A收到的。
用户 A 用户 B
MAC
伪造 否认
例如:对合同书的抵赖;股票交易指令亏损后抵赖
所以用到“数字签名”这种方式
保证信息的抗否认性
SIGA
用户 A 用户 B
无法伪造 SIGA 无法抵赖 SIGA
传统签名的基本特点,
? 能与被签的文件在物理上不可分割
? 签名者不能否认自己的签名
? 签名不能被伪造
? 容易被验证
数字签名是传统签名的数字化,基本要求,
? 能与所签文件, 绑定,
? 签名者不能否认自己的签名
? 签名不能被伪造,容易被自动验证
? 存在仲裁机构
签名者 时间 签名有效
源文件被修改后,签
名无效
数字签名应具有的性质
必须能够验证作者及其签名的日期时间;
必须能够认证签名时刻的内容;
签名必须能够由第三方验证,以解决争议;
因此,数字签名功能包含了认证的功能
WHY?
数字签名的设计要求
依赖性:签名必须是依赖于被签名信息的一个比
特模式
唯一性:签名必须使用某些对发送者是唯一的信
息,以防止双方的伪造与否认;
可验性:必须相对容易识别和验证该数字签名;
抗伪造:伪造该数字签名在计算上具有不可行性,
? 对一个已有的数字签名构造新的消息
? 对一个给定消息伪造一个数字签名
可用性:在存储器中保存一个数字签名副本是现
实可行的
数字签名分类
以方式分
? 直接数字签名 direct digital signature
? 仲裁数字签名 arbitrated digital signature
以安全性分
? 无条件安全的数字签名
? 计算上安全的数字签名
以可签名次数分
? 一次性的数字签名
? 多次性的数字签名
直接数字签名的缺点
验证模式依赖于发送方的保密密钥;
? 发送方要抵赖发送某一消息时,可能会声称其私有密
钥丢失或被窃,从而他人伪造了他的签名。
? 通常需要采用与私有密钥安全性相关的行政管理控制
手段来制止这种情况,但威胁依然存在。
? 改进的方式,例如可以要求被签名的信息包含一个时间
戳(日期与时间)
A的某些私有密钥确实在时间 T被窃取,敌方可以
伪造 A的签名及早于或等于时间 T的时间戳。
仲裁数字签名
引入仲裁者
? 所有从发送方 A到接收方 B的签名消息首先送到仲裁者
S,S将消息及其签名进行一系列测试,以检查其来源
和内容,然后将消息加上日期并与已被仲裁者验证通
过的指示一起发给 B。
用户 A 用户 B
SIG
仲裁者 S
验证通过
仲裁者在这一类签名模式中扮演敏感和关
键的角色。
所有的参与者必须极大地相信这一仲裁机
制工作正常。( trusted system)
仲裁者 S
7.3.2 RSA数字签名
回顾,RSA的加密方法
? C=Me mod n
? M=Cd mod n
? 公钥 Ke,{e,n}
? 私钥 Kd,{d,n}
用户 A对明文 M的签名过程是,
? SA=D(M,KdA)=(Md)mod n
? 实际上是用私钥解密的过程
用户 B验证签名的过程
? E(SA,KeA)=(SA)emodn=M
如果要同时确保数据的秘密性和真实性,
可以采用先签名后加密的方法
实际使用过程
将要签名的消息作为散列函数的输入,产
生定长的散列码
对散列码进行签名,并将签名附在消息后

验证者解密(验证)签名
计算出消息的散列码,和解密后的数据相
比较(认证)