Day2单向散列函数、消息认证码、数字签名

论坛 期权论坛 期权     
包罗万想   2019-10-27 05:56   2986   0
对称加密下来一般是非对称加密,最重要的两个非对称加密算法是RSA和ECC椭圆曲线加密,本科学习过,RSA比较简单,ECC算法本身是需要一定数学基础的。留着过几天再认真研究。



这个网课比较偏实践,讲讲基本的原理,为什么要这样做,重点是Go语言的代码实现,其实也是调用了很多库。要么说市场上的课程和大学里的理论课程还是有差距的。不过好处是,简单明了。把问题说清楚。


这次的系列就简单整理一下概念,之后再继续刷理论版的密码学。



   

   

     

      
"单向散列函数 --- 获取消息的指纹"

     

   

   

  

   

   

     

      
"消息认证码 --- 消息被正确传送了吗?"

   

   

     

      
"数字签名 --- 消息到底是谁写的"

   

   

     

      
"证书 -- 为公钥加上数字签名"

   

   

     

      
"SSL/TLS --- 为了更安全的通信"

     

   

   

  






     

   

   

  
一、单向散列函数


1.1 概念
单向散列函数也称为消息摘要函数(message digest function)、哈希函数或者杂凑函数。输人单向散列函数的消息也称为 原像 (pre-image)。单向散列函数输出的散列值也称为消息摘要(message digest)或者指纹(fingerprint)。
完整性 也称为一致性。


1.2 单向散列函数的性质
  • 根据任意长度的消息计算出固定长度的散列值   
  • 能够快速计算出散列值   
  • 消息不同散列值也不同     
  • 难以发现碰撞的性质称为抗碰撞性(collisionresistance)      
  • 具备单向性


1.3 单向散列函数的实际应用
  • 检测软件是否被篡改
  • 消息认证码
  • 数字签名
  • 伪随机数生成器
  • 一次性口令


1.4 常用的单向散列函数
MD4、MD5:
MD4和MD5中的MD是消息摘要(Message Digest)的缩写。


SHA-1、SHA-224、SHA-256、SHA-384、SHA-512:

SHA-1是由NIST(NationalInstituteOfStandardsandTechnology,美国国家标准技术研究所)设计的一种能够产生160比特的散列值的单向散列函数。1993年被作为美国联邦信息处理标准规格(FIPS PUB 180)发布的是SHA,1995年发布的修订版FIPS PUB 180-1称为SHA-1。
SHA-1的消息长度存在上限,但这个值接近于264比特,是个非常巨大的数值,因此在实际应用中没有问题。
SHA-256、SHA-384和SHA-512都是由NIST设计的单向散列函数,它们的散列值长度分别为256比特、384比特和512比特。这些单向散列函数合起来统称SHA-2,它们的消息长度也存在上限(SHA-256的上限接近于 264 比特,SHA-384 和 SHA-512的上限接近于 2128 比特)。这些单向散列函数是于2002年和 SHA-1 一起作为 FIPS PUB 180-2发布的 SHA-1 的强抗碰撞性已于2005年被攻破, 也就是说,现在已经能够产生具备相同散列值的两条不同的消 息。不过,SHA-2还尚未被攻破。





二、消息认证码
2.1是什么
消息的完整性(integrity), 指的是“消息没有被篡改"这一性质,完整性也叫一致性。如果能够确认汇款请
求的内容与Alice银行所发出的内容完全一致,就相当于是确认了消息的完整性,也就意味着消息没有被篡改。
消息的认证(authentication)指的是“消息来自正确的发送者"这一性质
。如果能够确认汇款请求确实来自Alice银行,就相当于对消息进行了认证,也就意味着消息不是其他人伪装成发送者所发出的。
通过使用本章中要介绍的消息认证码,我们就可以同时识别出篡改和伪装,也就是既可以确认消息的完整性,也可以进行认证。
消息认证码(message authentication
code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC。                                       
消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥 ,它可以输出固定长度的数据,这个数据称为 MAC值 。


2.2使用步骤




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


2.3HMAC                                
HMAC是一种使用单向散列函数来构造消息认证码的方法(RFC2104),其中HMAC的H就是Hash的意思。HMAC中所使用的单向散列函数并不仅限于一种,任何高强度的单向散列函数都可以被用于HMAC,如果将来设计出新的单向散列函数,也同样可以使用。使用SHA-I、MD5、RIPEMD-160所构造的HMAC,分别称为HMAC-SHA-1、HMAC-MD5和HMAC-RlPEMD


2.4消息认证码的密钥配送问题

     

   

   

   

   

   

     

      
发送者和接收者需要共享密钥,这一点和我们介绍的对称加密很相似。实际上,对称加密的密钥配送问题在消息认证码中也同样会发生。关于秘钥的配送后边章节会介绍如何使用非对称加密的方式进行解决。


2.5消息认证码无法解决的问题

   

   

     

      
对第三方证明:数字签名就可以实现对第三方的证明。

     

   

   

  

     

   

   

   

   

   

     

      
防止否认


三、数字签名
生成消息签名
这一行为是由消息的发送者Alice来完成的,也称为“对消息签名”。生成签名就是根据消息内容计 算数字签名的值,这个行为意味着
“我认可该消息的内容"。

验证数字签名
这一行为一般是由消息的接收者Bob来完成的,但也可以由需要验证消息的第三方来完成,这里
的第三方我们暂且将其命名为验证者Victor。验证签名就是检查该消息的签名是否真的属于Alice,验证的结果可
以是成功或者失败,成功就意味着这个签名是属于Alice的,失败则意味着这个签名不是属于Alice的。

在数字签名中,生成签名和验证签名这两个行为需要使用各自专用的密钥来完成。


Alice使用“签名密钥"来生成消息的签名,而Bob和Victor则使用“验证密钥"来验证消息的签名。数字签名对签名密
钥和验证密钥进行了区分,使用验证密钥是无法生成签名的。这一点非常重要。此外, 签名密钥只能由签名的 人持有 ,而 验证密钥则是任何需要验证签名的人都可以持有












   

   

     

      
**Alice对消息的散列值签名, Bob验证签名**




   

     

      
**Alice对消息的散列值签名, Bob验证签名(按时间顺序)**

     

   

   

  



   

   

     

      
用数字签名既可以识别出篡改和伪装,还可以防止否认。也就是说,我们同时实现了确认消息的完整性、进行认证以及防止否认。
现代社会中的计算机通信从这一技术中获益匪浅。

      
然而, 要正确使用数字签名,有一个大前提,那是用于验证签名的公钥必须属于真正的发送者。即便数字签名
算法再强大,如果你得到的公钥是伪造的,那么数字签名也会完全失效。为了能够确认自己得到的公钥是否合法,我们需要使用证书。所谓证书,就是将公钥当作一条消息,由一个可信的第三方对其签名后所得到的公钥。






分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP