密码编码学之数字签名


原创不易,转载请帮注明出处: https://blog.csdn.net/jackone12347/article/details/122882686

一、数字签名

1、 数字签名关键部分的描述

数字签名具有认证功能,下面是数字签名关键部分的描述:

Bob:
对消息M使用Hash函数计算得到hash值h;
使用Bob的私钥,对h使用数字签名生成算法生成签名S;
将S附在消息M的后面。

Alice:
使用Hash函数,计算消息M的hash值h,hash函数对通讯双方是已知的;
使用Bob提供的公钥,对签名进行解密,如果计算出来的hash值,与h相同,则签名验证通过。

在这里插入图片描述

2、 数字签名的要求

数据签名需要满足一些条件和基本特征:

1、签名必须是与消息相关的二进制位串  (一般签名文件直接打开是乱码)
2、签名必须使用发送方独有的信息,以防止伪造和否认 (一般添加公司或者企业的独有信息 如公司的名称、地址、邮箱等)
3、产生数据签名要非常容易
4、识别和验证签名也要非常容易
5、伪造数据签名在计算上不可行

3、 DSA数字签名算法

下面是归纳的DSA算法:
在这里插入图片描述

下面是RSA和DSA方法的比较:
在这里插入图片描述

DSA的签名和验签函数如下:
在这里插入图片描述
DSA算法特点:
DSA与RSA不同,DSA只能提供数字签名,但不能用于加密。
DSA算法产生签名,不依赖于被签名的消息,所以可以预先计算。

4、 椭圆曲线数字签名算法(ECDSA)

椭圆曲线密码有效率方面的优势,尤其是在需在短密钥长度的应用中,RSA密码的位数越来越长

ECDSA的处理过程简述:

1. 参与数字签名的双方都使用相同的全局域参数,用于定义椭圆曲线及曲线上的基点。
2. 签名方需要生成私钥和公钥。 对于私钥,签名方选择使用随机数或者伪随机数。使用随机数和基点,签名方计算出椭圆曲线上的另一个解点,作为签名的公钥。
3. 对待签名的消息进行hash计算。使用私钥、全局域参数、hash值,来产生签名。签名包括两个整数:r和s
4. 验证签名:使用签名方提供的公钥、全局域参数、整数s作为输入,并将计算得到的v,与r进行比较。如果v=r,则签名通过验证。

下面是ECDSA签名和验签流程:
在这里插入图片描述

5、 RSA-PSS数字签名算法

RSA-PSS(RSA概率签名)方案,被RSA实验室推荐为RSA方案中最安全的一种。被广泛应用于包括金融等领域,安全性足以说明。

MGF掩码函数

基于SHA安全hash构建,输入长度不固定的任意消息或者hash值,输出为固定长度的值。

签名操作

在这里插入图片描述
对以上的签名过程说明:

1. 生成消息M的hash值mHash
2. 使用伪随机数作为盐(salt),得到M‘=padding1||mhash||3. 重新生成hash值H, H=Hash(M')
4. 计算H的MGF值,dbmask=MGF(H, emLen-hLen-1)
5. 构造数据的DB,DB=padding2||6. 计算maskedDB, maskedDB=DB异或dbmask
7. 将maskedDB的最左字节中的8emLen-emBits位置为0
8. 计算EM=maskedDB||H||bc
9. EM为二进制,将EM设为m,则签名s=m^d mod n, d为私钥

验签操作

在这里插入图片描述
对以上的验签过程说明:

1. 计算消息M的hash值mHash
2. dbMask=MGF(H,emLen-hLen-1)
3. 计算DB,DB=maskedDB 异或 dbMask
4. 将DB的最后sLen字节设为盐值
5. 构造M‘=padding1 || mHash ||6. 生成M'的hash值H‘,H’=Hash(M')
7. 如果H’=H,验证通过

注:

sLen为盐的长度,emBits为输入参数(比RSA模数n位长度小的值),emLen=emBits/8
padding1,十六进制00 00 00 00 00 00 00 00,即64位的0
padding2,十六进制若干位00后跟着01,其长度为(emLen-sLen-hLen-2)字节

为方便与大家及时交流,弄了一个微信公众号,欢迎大家留言沟通~
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值