openssl 命令(2): openssl dgst 命令详解

11 篇文章 1 订阅
6 篇文章 0 订阅

 open dgst命令的主要功能是,计算信息摘要(哈希), 给文件生成数字签名以及验证数字签名。
  信息摘要算法的特点是:
 1,输出数据定长, 即任意长度的输入数据,经过摘要算法都会得到订场的输出数据。
 2,不可逆行, 由输出数据不能得到输入数据。
 3,防碰撞,   对同一摘要算法, 输入数据不同,输出结果不同。 碰撞性有一定的概率,这也是衡量摘要算法的一个维度。
 4,均匀分布, 输出结果尽量保持均匀分布,这也是衡量摘要算法的一个方面
 
 数字签名的生成和验证
 原数据可以是明文,也可以是密文
 E() 代表非对称加密的加密算法 和 公钥配合使用, 公钥作为E()的参数
 D() 代表非对称加密的解密算法 和 私钥配合使用, 私钥作为D()的参数
 私钥 SK
 公钥 PK
 E(PK,D(SK,stuff)) = D(SK,E(PK,stuff)) = stuff
 
 数字签名生成:客户端
            摘要算法                    D(SK)
 原数据---------------->  信息摘要  ------------>  数字签名
 
 数字签名验证:服务端, 分别从原数据使用摘要算法计算信息摘要, 使用公钥根据数字签名推到出信息摘要,
 两者进行对比,如果过一致有两种可能 1, 数据传输出错  2,数据被篡改
           摘要算法
 原数据---------------->  信息摘要
           E(PK)
 数据签名-------------->  信息摘要
 
  openssl dgst 命令:
 主要选项:
   -out      filename   #指定输出文件,默认标准输出
   -sign     file  #执行签名操作,后面指定私钥文件
   -verify   file  #执行验证操作,后面指定公钥文件,与prverfify不能同时使用
   -prverify file  #执行验证操作,后面指定密钥文件,与verfify不能同时使用
   -d              #输出BIO调试信息
   -binary         #输出二进制结果
   -signature file #指定签名文件,在验证签名时使用
   
   -md4            #摘要算法使用md4
   -md5            #摘要算法使用md5
   -ripemd160      #摘要算法使用ripemd160
   -sha            #摘要算法使用sha
   -sha1           #摘要算法使用sha1
   -sha224         #摘要算法使用sha223
   -sha256         #摘要算法使用sha256
   -sha384         #摘要算法使用sha384
   -sha512         #摘要算法使用sha512
   -whirlpool      #摘要算法使用whirlpool
 
 #使用openssl dgst仅仅做哈希(摘要),不做数字签名
 openssl dgst -sha1 ./plain.txt
 
#摘要算法选取sha256,密钥RSA密钥,对file.txt进行签名*/
 openssl dgst -sign rsa.key -sha256 -out sign.txt file.txt
#使用RSA密钥验证签名(prverify参数),验证成功
 openssl dgst -prverify rsa.key -sha256 -signature sign.txt file.txt
#从密钥中提取公钥
 openssl rsa -in rsa.key -out pub.key -pubout
#使用RSA公钥验证签名(verify参数),验证成功
openssl dgst -verify pub.key -sha256 -signature sign.txt file.txt

#HMAC的使用, MAC 消息认证码,构造方法可以基于hash,也可以基于对称加密算法,
#HMAC是基于hash的消息认证码。数据和密钥作为输入,摘要信息作为输出,常用于认证。

openssl dgst  -sha256 -hmac 123456  file.txt
例如用户登录服务器
1、服务器给客户端发送一个随机数123456
2、客户端使用随机数作为密钥和用户密码做HMAC,结果发送给服务器
3、服务器去除存储的用户密码,也是用随机数与用户密码做HMAC,根据HMAC结果是否一样确认用户身份。

具体的HMAC算法,可以参考以下描述

1、HMAC概述

HMAC算法首先它是基于信息摘要算法的。目前主要集合了MD和SHA两大系列消息摘要算法。其中MD系列的算法有HmacMD2、HmacMD4、HmacMD5三种算法;SHA系列的算法有HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512五种算法。

HMAC算法除了需要信息摘要算法外,还需要一个密钥。HMAC的密钥可以是任何长度,如果密钥的长度超过了摘要算法信息分组的长度,则首先使用摘要算法计算密钥的摘要作为新的密钥。一般不建议使用太短的密钥,因为密钥的长度与安全强度是相关的。通常选取密钥长度不小于所选用摘要算法输出的信息摘要的长度。

2、HMAC算法分析
HMAC算法本身并不复杂,起需要有一个哈希函数,我们记为H。同时还需要有一个密钥,我们记为K。每种信息摘要函数都对信息进行分组,每个信息块的长度是固定的,我们记为B(如:SHA1为512位,即64字节)。每种信息摘要算法都会输出一个固定长度的信息摘要,我们将信息摘要的长度记为L(如MD5为16字节,SHA-1为20个字节)。正如前面所述,K的长度理论上是任意的,一般为了安全强度考虑,选取不小于L的长度。
HMAC算法其实就是利用密钥和明文进行两轮哈希运算,以公式可以表示如下:
HMAC(K,M)=H(K⊕opad∣H(K⊕ipad∣M)),其中:
Ipad为0x36重复B次
Opad为0x5c重复B次

M 代表一个消息输入
根据上面的算法表示公式,我们可以描述HMAC算法的运算步骤:
(1)检查密钥K的长度。如果K的长度大于B则先使用摘要算法计算出一个长度为L的新密钥。如果后K的长度小于B,则在其后面追加0来使其长度达到B。
(2)将上一步生成的B字长的密钥字符串与ipad做异或运算。
(3)将需要处理的数据流text填充至第二步的结果字符串中。
(4)使用哈希函数H计算上一步中生成的数据流的信息摘要值。
(5)将第一步生成的B字长密钥字符串与opad做异或运算。
(6)再将第四步得到的结果填充到第五步的结果之后。
(7)使用哈希函数H计算上一步中生成的数据流的信息摘要值,输出结果就是最终的HMAC值。
由上述描述过程,我们知道HMAC算法的计算过程实际是对原文做了两次类似于加盐处理的哈希过程。
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值