入门密码学②Hash

2022-03-16  本文已影响0人  _涼城

单向散列函数(哈希函数)

单向散列函数 有一个输入和一个输出,其中输入称为消息,输出称为散列值,也就是Hash。散列值的长度和消息的长度无关,单向散列函数都会计算出固定长度的散列值。

单向散列函数

单向散列函数的性质

散列冲突

如果不同的输入得到了同一个散列值,就发生了散列冲突(哈希碰撞)。难以发现碰撞的性质称为抗碰撞性,单向散列函数必须确保要找到和该消息具有相同散列值的另外一条消息是非常困难的,这一性质称为弱抗碰撞性。要找到散列值相同的两条不同的消息是非常困难的性质称为强抗碰撞性

单向散列函数的抗碰撞性

实际应用

常见的单向散列函数

单向散列函数的缺点

HMAC

什么是消息认证码

消息认证码(Message Authentication Code) 是一种确认完整性并进行认证的技术,简称为 MAC。 消息认证码的输入包括任意长度的消息和一个发送者与接受者之前共享的密钥,它可以输出固定长度的数据,这个数据称为 MAC 值。可以理解为,消息认证码是一种密钥相关联的单向散列函数

什么是 HMAC

HMAC 是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写,是一种使用单向散列函数来构造消息认证码的方法(RFC2104),例如:使用 SHA-1 构造的 HMAC,称为 HMAC-SHA-1HMAC 运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出

HMAC 的步骤

  1. 定义两个不同的固定字符串 ipadopad 如下(“i”和“o”表示内部和外部):

     ipad=一个字节(byte)的0x36 (00110110)重复B次,达到分组长度
     opad=一个字节(byte)的0x5C (01011100)重复B次,达到分组长度
    
  2. 密钥填充
    如果密钥比单向散列函数的分组长度更短,则需要在末尾填充,直到与单向散列函数的分组长度一致

  3. 填充后的密钥与 ipad 进行 XOR 运算,得到 ipadKey

  4. 与消息组合
    ipadKey 与消息进行组合。

  5. 计算散列值 a
    对组合的值输入单向散列函数,得到散列值 a

  6. 填充后的密钥与 opad 进行 XOR 运算,得到 opadKey

  7. 与散列值组合
    将散列值 a 拼接到 opadKey 后面

  8. 计算散列值,得到最终的 MAC 值。

HMAC的步骤

HMAC 的应用

HMAC主要应用在身份验证中,它的使用方法是这样的:

  1. 客户端发出登录请求(假设是浏览器的GET请求)
  2. 服务器返回一个随机值(一般是时间戳,防止重放攻击),并在会话中记录这个随机值
  3. 客户端将该随机值作为密钥,用户密码进行hmac运算,然后提交给服务器.
  4. 服务器读取用户数据库中的用户密码和步骤2中发送的随机值做与客户端一样的hmac运算,然后与用户发送的结果比较,如果结果一致则验证用户合法。

消息认证码的缺点

数字签名

什么是数字签名

数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于生成数字签名,另一个用于验证数字签名。数字签名是非对称密钥加密技术与数字摘要技术的应用

公钥密码与数字签名

类型 私钥 公钥
公钥密码 解密时使用 加密时使用
数字签名 生成签名时使用 验证签名时使用

数字签名的过程

数字签名的过程.png

数字签名的应用

上一篇下一篇

猜你喜欢

热点阅读