消息认证
用来验证消息完整性的一种机制或服务。消息认证确保收到的数据确实和发送时的一样(没有修改、插入、删除或者重放),且发送方声称的身份是真实有效的。
什么是消息认证
用来验证消息完整性的一种机制或服务。消息认证确保收到的数据确实和发送时的一样(没有修改、插入、删除或者重放),且发送方声称的身份是真实有效的。
消息认证关心的问题
- 保护消息的完整性
- 验证发起方身份
- 消息源的不可否认
消息认证的方法
消息加密
- 对称加密
- 要求明文具有某种易于识别的结构,如在加密前对每个消息符加一个帧校验序列FCS(分为先加密再FCS和先FCS再加密)
公钥加密作为认证手段
- 若要提供认证,发送方用自己的私钥对消息加密,接收方用发送方的公钥解密(认证),就提供了认证功能
- 如果发送方用私钥加密消息,再用接收方的公钥加密,就实现了既保密又认证的通信
- 既保密又认证的通信的代价是需要执行四次复杂的公钥算法而不是两次
消息认证码(MAC)
MAC不提供数字签名,因为双方共享密钥
MAC的特点
- 使用一个私密密钥K,浓缩一个变长的消息M,产生一个固定长度的认证子
- MAC是一种多对一的函数(若N为100,n为10,共有 2 2 条不同的消息, 2 2 种不同的MAC,平均而言同一MAC可由 2 2 / 2 2 = 2 2 条不同的消息产生,若密钥长度为5,则从消息集合到MAC的值的集合有 2 2 = 32 32 不同的映射)
- CBC加密方式
- 三种认证方式
- 直接生成MAC加到报文后面发送
- 生成MAC加到报文之后再加密发送
- 先对报文进行加密再把生成的MAC加到加密后的报文后面发送
MAC应具有以下性质
- 如果一个攻击者得到M和 CK(M) C K ( M ) ,则攻击者构造一个消息M’,使得 CK(M′)=CK(M) C K ( M ′ ) = C K ( M ) 应在计算上不可行
- CK(M) C K ( M ) 应均匀分布,即随机选择消息M和M’, CK(M)=CK(M) C K ( M ) = C K ( M ) 的概率应该是 2 2 ,其中n是MAC的位数
- 令M’为M的某些变换,即 M′=f(M) M ′ = f ( M ) ,在这种情况下 Pr(CK(M)=CK(M′))=2 P r ( C K ( M ) = C K ( M ′ ) ) = 2 −n − n
哈希函数(散列函数)
H(M):输入为任意长度的消息M,输出为一个固定长度的散列值,称为消息摘要
H(M)是消息M的所有位的函数并提供错误检测能力:消息中的任何一位或多位的变化都将导致该散列值的变化
六种方式
- 先把散列值加到明文后面再加密发送
- 先对散列值进行加密再加到明文后面发送
- 先对散列值用发送方的私钥加密再加到明文后面发送
- 先对散列值用发送方的私钥加密再加到明文后面然后再加密发送
- 明文先与一个发送方和接收方都知道的一个秘密值S连接作为输入值产生哈希值,然后加到明文后面
- 明文先与一个发送方和接收方都知道的一个秘密值S连接作为输入值产生哈希值,然后加到明文后面再加密发送
散列函数的要求
- H能用于任意大小的分组
- H能产生定长的输出
- 对任何给定的X,H(X)要相对容易计算,使得硬件和软件实现成为实际可能
- 对任何给定的码h,寻找x使得H(x)=h在计算上是不可行的,即单向性
- 对任何给定的分组x,寻找不等于x的y,使得H(x)=H(y)在计算上是不可行的
- 寻找对任何的(x,y)对使得H(x)=H(y)在计算上是不可行的,即强抗冲突性
生日攻击
给定一个散列函数,有n个可能的输出,输出值为H(x),如果H有k个随机输入,k必须为多大才能使至少存在一个输入y,使得H(y)=H(x)的概率大于0.5
对长度为m位的散列码,共有
2m
2
m
个可能的散列码,若要使任意的x,y,有H(x)=H(y)的概率为0.5,只需
k=2
k
=
2
m/2
m
/
2
哈希函数的分类
根据安全水平
- 弱无碰撞:给定消息 x x ∈,在计算上几乎找不到异于 x x 的∈ X X 使
- 强无碰撞:在计算上几乎找不到异于 x x 的∈ X X 使
根据是否使用密钥
- 带密钥的Hash函数:消息的散列值由只有通信双方知道的私密密钥K控制。此时散列值叫做MAC
- 不带私密密钥的Hash函数:消息的散列值的产生无需使用密钥。此时散列值称为MDC