密码编码学之数字签名


原创不易,转载请帮注明出处: 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、付费专栏及课程。

余额充值