• 密码学学习整理三


    密码学学习整理三

    一. 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 的使用方式更为常用

  • 相关阅读:
    mac下更改MySQL的默认编码
    pycharm使用gitlab输错密码解决办法
    Django中form组件的is_valid校验机制
    装饰器整理
    粘包
    MySQL常见数据库引擎及对比
    jtag、在线仿真器
    《如何高效学习》-整体性学习策略
    keil5到iar8的使用配置迁移
    Python3学习(1)——初步了解
  • 原文地址:https://www.cnblogs.com/FZfangzheng/p/9214317.html
Copyright © 2020-2023  润新知