目录

  • 一、数字签名
    • 1、 数字签名关键部分的描述
    • 2、 数字签名的要求
    • 3、 DSA数字签名算法
    • 4、 椭圆曲线数字签名算法(ECDSA)
    • 5、 RSA-PSS数字签名算法

原创不易,转载请帮注明出处: 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)字节

密码编码学之数字签名相关推荐

  1. 《密码编码学与网络安全》William Stalling著---学习笔记(二)【知识点速过】【数字签名+密钥管理分发+用户认证】

    提示:博文有点长,请保持耐心哦~ 前一篇文章: <密码编码学与网络安全>William Stalling著-学习笔记(一)[知识点速过][传统密码+经典对称加密算法+经典公钥密码算法+密码 ...

  2. 《密码编码学与网络安全》William Stalling著---学习笔记(三)【知识点速过】【网络安全与Internet安全概览】

    提示:博文有点长,请保持耐心哦~ 前两篇文章: <密码编码学与网络安全>William Stalling著-学习笔记(一)[知识点速过][传统密码+经典对称加密算法+经典公钥密码算法+密码 ...

  3. 密码编码学与网络安全———原理与实践(第八版)第三章笔记

    第3章 传统加密技术 学习目标 简要介绍对称密码的主要概念. 解释密码分析和穷举攻击的差异. 理解单表代替密码的操作. 理解多表代替密码的操作. 简要介绍Hill密码. 目录 第3章 传统加密技术 3 ...

  4. ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学

    ECC ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学,是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制.在软件注册保护方面起到很大的作用,一般的序列 ...

  5. ECC(椭圆曲线密码编码学)简介

    参考:ECC加密算法入门介绍 ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)属于公开密钥算法. 一.平行线 假设平行线相交于无穷远点P∞,那么所有直线都相交,且 ...

  6. 【密码学Sage代码】椭圆曲线加密/解密(基于《密码编码学与网络安全——原理与实践(第七版)》)

    [密码学Sage代码]椭圆曲线加密/解密(基于<密码编码学与网络安全--原理与实践(第七版)>) 教材内容: 实践的Sage代码: #[静水流深Sage代码]使用椭圆曲线密码体制进行加密/ ...

  7. 密码编码学与网络安全(2):对称密码之传统加密技术

    对称密码之传统加密技术 关于对称加密 对称密码模型 密码编码学 密码分析学与穷举攻击 古典加密算法 代替技术 置换技术 转轮机 隐写术 关于对称加密 对称加密,也称为传统加密或单密钥加密,是20世纪7 ...

  8. 密码编码学与网络安全——原理与实践(第八版)——第一章:信息与网络安全概念

    密码编码学与网络安全--原理与实践(第八版) 第一章:信息与网络安全概念 1.1网络空间安全.信息安全和网络安全 1.2OSI安全架构 1.3安全攻击 1.4安全服务 1.5安全机制 1.6密码学 1 ...

  9. 密码编码学与网络安全----原理与实践(第八版)---第9章笔记

    第九章 公钥密码学与RSA 学习目标: 概述公钥密码体制的基本原理. 阐述公钥密码体制的两个不同应用. 列举和解释公钥密码体制的要求. 概述RSA算法. 理解计时攻击. 总结算法复杂性的相关问题. 公 ...

最新文章

  1. vue 点击事件执行多次
  2. php 降序 保留索引,PHP asort():对数组排序(升序),并保持索引关系
  3. Windows 中的磁盘阵列
  4. thinkphp5中资源文件路径的使用
  5. Python模块: 文件和目录os+shutil
  6. STM32开发板入门教程(十三) - SPI模式读写SD卡
  7. 计算mView在view周围的位置
  8. docker 安装部署nacos
  9. 机器学习--支持向量机(一)什么是支持向量机
  10. 使用iframe的一些经验
  11. 判断拐点的条件_拐点的定义
  12. 从定制 Ghost 镜像聊聊优化 Dockerfile
  13. CentOS 、Linux 配置国内阿里源、yum源镜像
  14. for(in/of)/forEarch的区别和使用
  15. Android 手机设置中铃声设置里的通知音量与铃声音量的分离
  16. subplots与figure函数参数解释说明以及简单的使用脚本实例
  17. php抓取图片curl,php获取远程图片的两种 CURL方式和sockets方式获取远程图片
  18. Windows+R命令大全
  19. 《怒海营救》,招招真实的动作电影
  20. 【前端】汉字转拼音首字母

热门文章

  1. 比iPhone更具创意 魅族M8屏幕解锁演示
  2. 用__asm写c函数[秋镇菜]
  3. 面向对象的关系数据库设计
  4. 敬业福和花花卡算啥?这次不来,你亏了
  5. 新版 chrome 将原生支持图片懒加载!
  6. BATJ一线大公司需要什么样的前端
  7. 关于mysql的项目_项目中常用的MySQL 优化
  8. pd17虚拟机启动器怎么生成?快来看看吧
  9. 在 Mac 上创建和移除替身
  10. 第40课 儿歌《打老虎》-2021.08.10 《小学生C++趣味编程》