当前位置:   article > 正文

密码技术之一认证_单向散列函数的消息认证方法

单向散列函数的消息认证方法

密码技术之一认证

一、单向散列函数

概念

单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性。
散列值跟用户输入长度无关,输出长度都是固定的;

单向散列函数也称为消息摘要函数( message digest function )、 哈希函数或者杂凑函数0
输入单向散列函数的消息也称为原像( pre-image )。

单向散列函数输出的散列值也称为消息摘要( message digest )或者指纹( fingerprint )。

实际用途

  • 检测软件是否被篡改

  • 基于口令的加密
    PBE 的原理是将口令和盐( salt, 通过伪随机数生成器产生的随机值 )混合后计算其散列
    值,然后将这个散列值用作加密的密钥。

  • 消息认证码HMAC
    使用单向散列函数可以构造消息认证码。
    消息认证码是将 “发送者和接收者之间的共享密钥” 和 “消息” 进行混合后计算出的散列
    值。使用消息认证码可以检测并防止通信过程中的错误、篡改以及伪装。

  • 数字签名
    数字签名是现实社会中的签名和盖章这样的行为在数字世界中的实现。数字签名的处理过
    程非常耗时,因此一般不会对整个消息内容直接施加数字签名,而是先通过单向散列函数计算
    出消息的散列值,然后再对这个散列值施加数字签名。

  • 伪随机生成器
    密码技术中所使用的随机数需要具备 “事实上不可能根据过去的随机数列预测未来的随机
    数列” 这样的性质。为了保证不可预测性,可以利用单向散列函数的单向性。

  • 一次性口令
    一次性口令经常被用于服务器对客户端的合法性认证。在这种方式中,通过使用单向散列函数可以保证口令只在通信链路上传送一次( one-time ),因此即使窃听者窃取了口令,也无法使用。

常见散列函数

MD4、MD5、SHA-1、SHA-256、SHA-384、SHA-512
SHA-256、 SHA-384 和 SHA-512都是由 NIST 设计的单向散列函数,它们的散列值长度分别为 256 比特、384 比特和 512 比特。这些单向散列函数合起来统称 SHA-2;

无法解决的问题

单向散列函数可以实现完整性的检查。单向散列函数能够辨别出 “篡 改”,但无法辨别出 "伪装”。
解决伪装,需要通过认证技术,如HMAC和数字签名;

消息认证码能够向通信对象保证消息没有被篡改,而数字签名不仅能够向通信对象保证消息没有被篡改,还能够向所有第三方做出这样的保证。

二、消息认证码

消息认证码( Message Authentication Code )是一种确认完整性并进行认证的技术,取三个
单词的首字母,简称为 MAC。

认证步骤

在这里插入图片描述
(1) 发送者 Alice 与接收者 Bob 事先共享密钥。
(2) 发送者 Alice 根据汇款请求消息计算 MAC 值( 使用共享密钥 )。
(3) 发送者 Alice 将汇款请求消息和 MAC 值两者发送给接收者 Bob。
(4) 接收者 Bob 根据接收到的汇款请求消息计算 MAC 值( 使用共享密钥 )。
(5) 接收者 Bob 将自己计算的 MAC 值与从 Alice 处收到的 MAC 值进行对比。
(6) 如果两个 MAC 值一致,则接收者 Bob 就可以断定汇款请求的确来自 Alice ( 认证成
功 );如果不一致,则可以断定消息不是来自 Alice( 认证失败 )。

应用

SWIFT/IP/SSL/TLS

问题

密码配送问题

HMAC

HMAC 是一种使用单向散列函数来构造消息认证码的方法( RFC2104 ),其中 HMAC 的 H
就是 Hash 的意思。
使用 SHA-1 、SHA-224、SHA-256、SHA-384、SHA-512 所构造的 HMAC, 分别称为 HMAC-SHA1、HMAC-SHA-224、HMAC-SHA-256、HMAC-SHA-384、HMAC-SHA-512。

计算步骤

在这里插入图片描述

不能解决的问题?

能够识别篡改和伪装,但不能解决“对第三方证明” 和 “防止否认”。

不能向第三方证明说这个消息一定是发送方发的,因为接收方有相同的密钥,也可以能是接收方伪造的;

三、数字签名

数字签名是利用了 “没有私钥的人事实上无法生成使用该私钥所生成的签名” 这一性质来
实现的。这里所生成的签名并非被用于保证机密性,而是被用于代表一种只有持有该密钥的人
才能够生成的信息。
识别篡改:对消息的更改会导致签名不一致,验签失败;
识别身份:因为使用私钥加签,私钥是自己保存的,所以能识别身份;

数字签名:使用私钥加签,公钥验证;
公钥加密:公钥加密,私钥解密;

加签过程

在这里插入图片描述

因为非对称算法速度慢的原因,所以一般不直接对消息进行加签,而是对消息的摘要进行加签。
在这里插入图片描述

RSA生成数字签名

在这里插入图片描述

无法解决的问题

用数字签名既可以识别出篡改和伪装,还可以防止否认。也就是说,我们同时实现了确认
消息的完整性、 进行认证以及否认防止。
是用于验证签名的公钥必须属于真正的发送者,即可能会有中间人攻击。

各种密码技术对比

在这里插入图片描述

四、证书

公钥证书( Public-Key Certificate, PKC )其实和驾照很相似,里面记有姓名、组织、邮箱
地址等个人信息,以及属于此人的公钥,并由认证机构( Certification Authority、Certifying
Authority, CA )施加数字签名 只要看到公钥证书,我们就可以知道认证机构认定该公钥的确
属于此人。公钥证书&简称为证书( certificate )。

应用场景

在这里插入图片描述
(1)Bob 生成密钥对
要使用公钥密码进行通信,首先需要生成密钥对。Bob 生成了一对公钥和私钥,并将私钥自行妥善保管。这里的密钥对是由 Bob 自己生成的,也可以由认证机构代为生成。

(2)Bob 在认证机构 Trent 注册自己的公钥
Bob 则将公钥发送给了认证机构 Trent, 这是因为 Bob 需要请认证机构 Trent 对他的公钥加上数字签名( 也就是生成证书 )。Trent 收到 Bob 的公钥后,会确认所收到的公钥是否为 Bob 本人所有。

(3)认证机构 Trent 用自己的私钥对 Bob 的公钥施加数字签名并生成证书Trent 对 Bob 的公钥加上数字签名。为了生成数字签名,需要 Trent 自身的私钥,因此 Trent需要事先生成好密钥对。

⑷ Alice 得到带有认证机构 Trent 的数字签名的 Bob 的公钥( 证书 )现在 Alice 需要向 Bob 发送密文,因此她从 Trent 处获取证书。证书中包含了 Bob 的公钥,并带有 Trent 对该公钥签署的数字签名。

(5)Alice 使用认证机构 Trent 的公钥验证数字签名,确认 Bob 的公钥的合法性
Alice 使用认证机构 Trent 的公钥对证书中的数字签名进行验证。如果验证成功,就相当于确认了证书中所包含的公钥的确是属于 Bob 的。到这里,Alice 就得到了合法的 Bob 的公钥。

⑹ Alice 用 Bob 的公钥加密消息并发送给 Bob
Alice 用Bob 的公钥加密要发送的消息,并将消息发送给 Bob。尽管这里写的是 “用公钥加密”

⑺ Bob 用自己的私钥解密密文得到 Alice 的消息
Bob 收到 Alice 发送的密文,然后用自己的私钥解密,这样就能够看到 Alice 的消息了。

公钥基础设施PKI

公钥基础设施( Public-Key Infrastructure )是为了能够更有效地运用公钥而制定的一系列规
范和规格的总称。公钥基础设施一般根据其英语缩写而简称为 PKI.
PKI 只是一个总称,而并非指某一个单独的规范或规格。例如,RSA 公司所制定
的 PKCS ( Public-Key Cryptography Standards, 公钥密码标准 )系列规范也是 PKI 的一种,X.509 这样的规范也是 PKI 的一种.

PKI 的组成要素

  • 用户—使用 PKI 的人
    用户就是像 Alice、Bob 这样使用PKI 的人。用户包括两种:一种是希望使用 PKI 注册自己的公钥的人,另一种是希望使用已注册的公钥的人。我们来具体看一下这两种用户所要进行的操作.

      **【 注册公钥的用户所进行的操作 】**
      	生成密钥对( 也可以由认证机构生成 )
      	在认证机构注册公钥
      	向认证机构申请证书
      	根据需要申请作废已注册的公钥
      	解密接收到的密文
      	对消息进行数字签名
      
      **【 使用已注册公钥的用户所进行的操作 】** 
      	将消息加密后发送给接收者
      	验证数字签名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 认证机构CA
    认证机构( Certification Authority, CA )是对证书进行管理的人。
    生成密钥对( 也可以由用户生成 )
    在注册公钥时对本人身份进行认证
    生成并颁发证书
    作废证书

  • 仓库一保存证书的数据库
    仓库( repository )是一个保存证书的数据库,PKJ 用户在需要的时候可以从中获取证书.

证书的层级

对自己的公钥进行数字签名的行为称为自签名( self-signature )。

认证过程

现在我们假设 Alice 要验证札幌办事处员工 Bob 的数字签名,那么 Alice 需要执行如下
步骤。

首先从最高级的认证机构( 根 CA )开始。如果连根 CA 的公钥都不合法的话,那么就无法
验证证书了,因此我们假设 Alice 所持有的东京总公司认证机构的公钥是合法的。

接下来,Alice 取得北海道分公司认证机构的公钥证书,这个证书上面带有东京总公司认证
机构的数字签名。Alice 用合法的东京总公司认证机构的公钥对数字签名进行验证。如果验证成
功,则说明 Alice 获得了合法的北海道分公司认证机构的公钥。

再接下来,Alice 取得札幌办事处认证机构的公钥证书,这个证书上面带有北海道分公司认
证机构的数字签名。Alice 用合法的北海道分公司认证机构的公钥对数字签名进行验证。如果验
证成功,则说明 Alice 获得了合法的札幌办事处认证机构的公钥。

最后,Alice 取得札幌办事处员工 Bob 的公钥证书,这个证书上面带有札幌办事处认证机构
的数字签名。Alice 用合法的札幌办事处认证机构的公钥对数字签名进行验证。如果验证成功,
则说明 Alice 获得了合法的札幌办事处员工 Bob 的公钥

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号