密码学学习整理三

密码学学习整理三

一. Hash函数与消息认证码

  1. Hash函数
    1. 定义

      是一个将任意长度的消息映射成固定长度输出的函数

      Hash函数是一个具有压缩功能的函数

      • 设X是消息的集合,Y是散列值的集合
      • 我们总是假设|X|≥|Y|,并且经常假设更强的条件|X|≥2|Y|
      • 根据鸽巢原理:两个甚至多个消息会映射为同一个散列值
    2. 安全性

      • 原像稳固:给定散列值y,要找到一个x,使得H(x)=y是计算上不可行的
      • 第二原像稳固:给定消息x,找到另一个x’,使得H(x’)=H(x)是计算上不可行的
      • 碰撞稳固:找到两个不同的消息 x和x’ ,使得H(x)=H(x’)是计算上不可行的
    3. 对Hash函数的攻击实际就是 寻找一对碰撞 的过程

    4. 如果Hash函数 H 设计得“好”,对给定x,要想求得相应的散列值,必须通过计算H(x)才行。如果想绕过 H,而采用其他方法计算出散列值是非常困难的。即使在已知若干散列值H(x1),H(x2),…的情况下,仍是困难的,因此有H(x1)+H(x2)≠H(x1+x2) ,H(x1)H(x2)≠H(x1x2)

    5. 生日攻击告诉我们:为了能达到n-bit的安全性,你所选择的Hash函数的散列值长度应该是2n。如果你想让攻击者成功破译的可能性低于1/280,那么应该使用散列值长度是160-bit的Hash函数

    6. 著名的Hash函数MD5,SHA-0,SHA-1,SHA-2,SHA-3

      1. MD5
        1. 输入:将信息分为512bit一组处理
        2. 输出:散列值长度为128bit
        3. 速度快,不依赖任何密码模块和假设条件,特别适合32位计算机软件实现
      2. SHA系列
        1. 输入:SHA-1将消息分为512bit一组,整个消息长度小于2^64
        2. 输出:SHA-1散列值长度为160bit
        3. 速度比MD5慢
  2. 消息认证码
    1. 消息在传输过程中是否发生改变或被恶意篡改,我们怎么能知道?
      • 使用“数据完整性技术”当消息发生改变时,我们可以检查出来
    2. Hash函数能否保证数据的完整性 ?
      • 不能,举例:某公司经网络发送一张订单m,为防范遭恶意篡改,先用Hash函数计算订单散列值H(m),再将之与订单一起发送 [m,H(m)]。接收方计算收到订单m’的散列值H(m’),若与收到的散列值相同,则确信订单未被篡改。问此方法是否行得通?为什么?不行,攻击者可先篡改订单,再计算假订单的散列值 (接收方无法识别)。关键问题:Hash函数没有密钥 (给定消息,任何人都可以计算)。
    3. 可以看得出,如果设计一个带有密钥的算法,便可以解决这一问题,也就可以防范攻击者进行伪造 。消息认证码(MAC)算法便是这种带密钥的算法,它是实现数据完整性的重要工具 ,其产生的输出也相应地被称作MAC 。
    4. 安全性要求-抗伪造
      1. 在不知道密钥的情况下,给定任何消息,产生相应的MAC是计算上不可行的
      2. 即使已知很多消息及对应的MAC,对新消息产生MAC仍是计算上不可行的
    5. MAC构造-基于CBC模式构造
      1. 该方法对于定长消息是安全的
      2. 如果消息长度可变,即使密钥K没泄露,同样不安全
      3. CBC-MAC只有用于定长消息才能抗伪造
      4. ISO标准的CBC-MAC
  3. 消息认证

    1. 消息认证,又称数据源认证,它的重要目标

      1. 保证传输消息的完整性(检查消息是否被改动过)
      2. 保证消息是由指定发送者发来的
    2. 主要技术

      1. 基于 Hash函数和加密 的认证

    1. 基于 MAC 的认证

    1. 基于MAC的认证 (续)

      1. 如果Bob计算得到的MAC与接收到的MAC一致,则说明:

        1. Alice发送的消息未被篡改

          * 因为攻击者不知道密钥,无法在篡改消息后产生相应的MAC 
          
        2. Alice不是冒充的

          * 因为除收发双方外,没人知道密钥,攻击者无法冒充Alice发送合法的MAC 
          
      2. 提供机密性的消息认证(方案一)明文M先被加密,再与MAC一起发送

      3. 提供机密性的消息认证(方案二)明文M与MAC被一起加密

      4. 通常,我们希望直接对明文进行认证,因此 方案2 的使用方式更为常用

posted @ 2018-06-22 16:54  WhiteBlackCat  阅读(464)  评论(0编辑  收藏