Skip to content

gakki-zone/PKI-and-Cryptography

Repository files navigation

摘要算法

什么是单向散列函数

称输入为消息,输出为散列值,经过单向散列函数,单向散列函数就是根据输入的消息,输出根据消息计算出来的散列值。

单向散列函数的性质:

  1. 根据任意长度的消息计算出固定长度的散列值
  2. 能够快速计算出散列值
  3. 消息不同散列值不同
  4. 具备单向性
  • 为了能够确认完整性,消息中哪怕只有1 比特的改变,也会有很高的概率产生不同的散列值
  • 两个不同的消息产生同一个散列值的情况成为碰撞。难以发现碰撞的性质成为抗碰撞性
  • 弱抗碰撞性:要找到和该条消息具有相同散列值的另外一条消息是非常困难的
  • 强碰撞性:要找到两条具有相同散列值的消息是非常困难的
  • 密码技术中使用的单向散列函数都是要求具备弱抗碰撞性以及强抗碰撞性的
  • 单向性是指:无法通过散列值反算出消息的性质

单向散列函数的实际应用

  1. 检测软件是否被篡改
  2. 基于口令的加密
  3. 消息验证码
  4. 数字签名
  5. 伪随机数生成器
  6. 一次性口令

主要的几种单向散列函数

  • 图来自维基百科 sha家族

  • SM3

    中国国家商用密码算法

    摘要长度为256bit


Keccak


对于单向散列函数的攻击

    • 暴力破解

    不停尝试,试图找到与目标信息散列值相同的不同信息。
    试图破解单向散列函数的"弱抗碰撞性"的攻击

    • 生日攻击

    N位长度的哈希表可能发生碰撞的测试次数不是2[^N]次而是2[^N/2]次。

    试图破解单向散列函数的"强抗碰撞性"的攻击


单向散列函数不能解决的问题

能够辨别出篡改,不能辨别出伪装,因此还需要认证。认证技术有 消息验证码以及数字签名


消息认证码


消息认证码的应用实例


消息认证码的实现方法


HMAC


对消息认证码的攻击


消息认证码不能解决的问题


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published