密码学基础

550 阅读2分钟

单向散列函数

1)目标

解决“完整性”问题

2)概念

单从字面上来看,我们先分两部分来理解:单向函数、散列函数

单向函数(One-way function)

从输入计算出结果比较容易,但是从结果推导出输入比较困难。

(单向函数可能根本不存在,但是……管它呢,我们要的是现在难以解决)

散列函数(Hash function)

又称散列算法、哈希函数,是把任意长度的输入通过散列算法,转变成固定长度的输出,该输出被称为散列值(或哈希值),通常为字母与数字的组合。

散列函数有一个特点,如果经过同一个散列函数计算,两个散列值是不相同的,那么这两个散列值的原始输入也是不相同的。但是由于输入值可以是任意长度的,而输出的长度又是固定的,所以势必会存在不同的输入经过散列函数得到相同散列值的情况,这被称为“散列值碰撞”。

“散列值碰撞”是一个必然事件,所以我们在衡量一个散列函数的好坏时,可以以散列值是否均匀分布来判断。当散列值分布不均匀(即一部分散列值出现概率高一部分出现概率低)时,我们称之为“碰撞攻击”。

单向散列函数

也称杂凑函数、Hash函数,一个单向散列函数既是一个单向函数,也是一个散列函数,简单来说它要符合两个条件:

  • 从结果难以推导输入值
  • 散列值碰撞概率低

那么如何衡量一个单向散列函数的好坏呢?这就是接下来要说的“雪崩效应”,

雪崩效应(Avalanche Effect): 是指输入数据的微小变换,就会导致输出数据的巨大变化,它是密码学算法常见的一个特点。严格的雪崩效应指的是,如果输入数据的一位反转,输出数据的每一位都有 50% 的概率会发生变化。

雪崩效应的数据变化概率越大,说明这个单向散列函数出现散列值碰撞的概率就越低。

3)常见算法:

  • MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,可以用来把不同长度的数据块进行暗码运算成一个128位的数值。

  • SHA(Secure Hash Algorithm),可以对任意长度的数据运算生成一个160位的数值。

  • MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数。

  • CRC(Cyclic Redundancy Check),循环冗余校验码,实现简单,检错能力强。

学习链接:time.geekbang.org/column/intr…