密码学-2-RSA签名验签方案

news2024/11/19 21:24:14
密码学-1-数字签名体制
密码学-2-RSA签名验签方案

目录

1 签名验签

2 RSA签名算法

2.1 RSA生成签名

2.2 RSA验证签名

2.3 RSA参数的选定

2.3.1 公私钥

2.3.2 E,N,D

2.4 RSA签名应用场景

2.4.1 签名

2.4.2 验签

1 签名验签

        重温上节所述的签名流程,其中散列值==>>签名(签名 ==>> 散列值)的过程中,使用私钥签名(公钥验签),这个地方涉及到了非对称加密算法,这也是非对称算法的用途之一,即数字签名。

        常见用作数字签名的非对称算法:SM2(国密) 、 RSA、DSA、ECDSA(国际算法)。本文对常见的几种签名算法进行分析,内容深度只会涉及到签名流程,对于算法的具体原理实现,将会一带而过,如对算法原理有兴趣,可以私聊。

签名流程:

  1. 发送者对消息计算摘要值(HASH等)
  2. 发送者用私钥(SM2等)对摘要值进行签名得到签名值。(注意并不是对消息进行签名,非对称加密很慢的)
  3. 发送者将原始消息和签名值一同发给接收者。

验签流程

  1. 接收者接收到消息后,拆分出消息M和消息签名值A
  2. 接收者使用公钥对拆分出的消息签名值A进行验签得到摘要值B
  3. 接受者对拆分出来的消息M计算摘要值B'
  4. 接收者对摘要值B摘要值B'进行比较,如果相同表示签名验证成功,否则就是验证失败。

2 RSA签名算法

        由于RSA加密算法,相对于对称加密算法来说效率较低,目前RSA常用来加密小数据,如密钥key的加密,以及更为广泛的使用场景,签名操作。通常使用RSA私钥对消息的hash值进行签名操作,达到消息的防篡改和伪造。

2.1 RSA生成签名

用RSA生成签名的过程可用下列公式来表述:

 其中:

  1.  发送者通过散列函数计算消息原文的散列值(hash值);
  2. (D,N)是签名者的私钥,签名意思就是消息原文的散列值的D次方求mod N 的结果;
  3. 将消息原文散列值和自己相乘D次,然后再除以N求余数,最后求得的余数就是签名;
  4. 生成签名之后,发送者就可以将消息原文和签名发送给接收者;

2.2 RSA验证签名

RSA的签名验证过程可用下列公式来表述:

 其中:

  1. 接收者接收到消息 + 签名;
  2. (N,E)是公钥,验签就是对比签名的E次方求mod N的结果和接收消息的散列值;
  3. 散列值A为由签名通过RSA验签得到的数据;
  4. 接收者通过散列函数计算接收到的消息原文的散列值A';
  5. 比较A 是否等于 A',如果相等验证成功;

2.3 RSA参数的选定

2.3.1 公私钥

有一个现象很有趣,一直有人问:加密和签名,到底用的是私钥还是公钥?

其实很明显,这是对加密和签名的作用混淆了!下面将流程和作用整理出来:

即公钥加密、私钥解密、私钥签名、公钥验签。

2.3.2 E,N,D

        公钥{N,E} 

        私钥{N,D}

2.4 RSA签名应用场景

这个问题,带入需求场景会比较容易理解一些:RSA-PSS签名算法实现,RSA-PSS(RSA概率签名)方案,被RSA实验室推荐为RSA方案中最安全的一种。

  1. 签名:对文件进行SHA256,得到32字节的摘要值,然后需要进行填充(PSS填充),填充之后,使用RSA的私钥进行签名
  2. 验签:对接收的签名使用RSA的公钥进行验签,得到原始摘要值,然后跟自己计算的摘要进行对比,通过则为合法。

2.4.1 签名

        RSA-PSS填充,是在对原始数据进行hash之后,签名前,对生成的hash值进行PSS填充称为新的消息摘要EM的过程。具体实现逻辑如下:

2.4.2 验签

        验签的过程,是在拆解EM进行M'重构,最终通过H与H'的对比得出验签是否成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

给tabbar 中间位置添加一个自定义按钮 (Swift 代码)

1.创建一个继承自UITabbarViewController的控制器,在这个控制器中写如下代码 override func viewDidLoad() {super.viewDidLoad()//这个按钮就是中间添加的按钮let middleBtn UIButton(type: .custom)middleBtn.frame CGRect(x: kScreenWidth/5*2 , y: -10, widt…

如何提高外贸询单转化率

如何提高外贸询盘的转化率?米贸搜整理了以下方法,希望对你有所帮助: 一,如何有效地对网络客户进行分类 在网上交易的过程中,有各种各样的客户。所以要对所有客户进行分类管理,提高效率,增加交易量。 有外…

etcd实现大规模服务治理应用实战

导读:服务治理目前越来越被企业建设所重视,特别现在云原生,微服务等各种技术被更多的企业所应用,本文内容是百度小程序团队基于大模型服务治理实战经验的一些总结,同时结合当前较火的分布式开源kv产品etcd,…

神同步的智能运维体系和世界杯442阵型

世界杯如火如荼地踢,动如脱兔的运动员在屏幕前挥洒汗水、静如处子的程序员们稳坐屏幕前敲键盘。 可是谁说IT人除了盯着屏幕大呼小叫,就没法参与世界杯了呢?不管做的是什么产品什么领域,冥冥之中总有一根红线跟世界杯连接起来。 …

华为机试 - 新学校选址

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 为了解新学期学生暴涨的问题,小乐村要建立所新学校, 考虑到学生上学安全问题,需要所有学生家到学校的距离最短。 假设学校和所有学生家都走在一条直线之上,请问学校建立在什么位置&#xf…

一文详细理解Linux的一些环境基础开发工具使用(上)

前言: 本文章让大家理解Linux一些基础开发工具的使用,例如Linux如何下载一些软件,Linux如何进行编译代码,Linux怎么上传远程仓库等等,其实Linux工具本质也是命令!! 💞 💞…

L1-033 出生年(java)-天梯赛

文章目录🏅前言:L1-033 出生年(java)-天梯赛🎯题解:🐒结果:🏅前言: 代码含详细注释及解题思路。若有不理解的地方,欢迎大家探讨交流,…

Java开发手册(黄山版)

这本书值得反复看、也可作为随手翻阅字典一、编程规约 (一) 命名风格 【强制】纯拼音命名方式也要避免采用。【强制】常量命名应该全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长【强制】POJO 类中的任何布尔类型的变量&…

CMake中add_custom_command的使用

CMake中的add_custom_command命令用于将自定义构建规则添加到生成的构建系统(Add a custom build rule to the generated build system),其格式如下: add_custom_command(OUTPUT output1 [output2 ...]COMMAND command1 [ARGS] [args1...][COMMAND comm…

【多线程(五)】volatile关键字、原子性问题、AtomicInteger内存分析与源码分析、悲观锁和乐观锁

文章目录5.原子性5.1 volatile-问题2.2 volatile解决5.3 synchronized 解决5.4 原子性5.5 volatile关键字不能保证原子性5.6 原子性 AtomicInteger5.7 AtomicInteger-内存解析5.8 AtomicInteger-源码解析5.9 悲观锁和乐观锁小结5.原子性 5.1 volatile-问题 代码分析 package…

五道LeetCode《中等难度》的单链表题

五道单链表中等难度题型1. 剑指 Offer II 021. 删除链表的倒数第 n 个结点第一种解法(单指针):第二种解法(栈):第三种解法(双指针):2. 删除排序链表中的重复元素 II(重点&#xff09…

利用VGG16网络模块进行迁移学习实现图像识别

​ ImageNet虽然带有”Net“,但他不是一种深度神经网络模型,它是个数据集,斯坦福大学教授李飞飞带头建立,是目前图像分类、检测、定位的最常用数据集之一。该数据集含大量数据1500万图片,2.2万类别,真彩图&…

PPT免费放送|Zabbix峰会结束了?还有件儿事!

精彩的Zabbix峰会成功举办,这并不意味着学习交流结束,还有件儿事——17份PPT免费获取,网盘见文末。干货满满细细品味。也欢迎你留言评价! 值得一提的是:峰会中有理有据说明:Zabbix支持信创。开源免费的Zab…

IBDP学生如何申请中国香港的大学?

作为世界上最具竞争力的城市之一,香港拥有一些亚洲乃至世界上最好的大学。当然,这也使得香港成为内地学生以及国际留学生最喜爱的留学目的地之一。中国香港的教育在很大程度上是模仿英国的教育体系,但本科课程通常是英国和美国体系的混合体。…

Android 中的广播机制

一、Android广播概念: 在Android中,有一些操作完成以后,会发送广播,Android系统内部产生这些事件后广播这些事件,至于广播接收对象是否关心这些事件,以及它们如何处理这些事件,都由广播接收对象…

(附源码)ssm日语学习系统 毕业设计 271621

基于ssm日语学习系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对日语学习等问题&#…

MySQL——表的内容增删查改

文章目录表的增删改查一、Create1、单行全列插入2、多行数据指定列插入3、插入否则更新4、替换二、Retrieve😊(重点)2.1 select 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重2.2 where查询2.3 结果排序2.4 筛选分…

【VC7升级VC8】将vCenter Server 7.X 升级为 vCenter Server 8 (下)—— 升级步骤说明

目录前文说明3. 第一阶段升级(1)点击【升级】(2)升级介绍(3)最终中用户许可协议(4)连接到源设备(5)VC7与ESXi 证书警告(6)vCenter Ser…

【Vue】各种loader的基本配置与使用

✍️ 作者简介: 前端新手学习中。 💂 作者主页: 作者主页查看更多前端教学 🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 ajax学习 目录webpack中的loader  loader概述  打包处理css文件  打包处理less文件  打包处理图片  …

LWIP框架

目录 协议栈分层思想 1. 网络接口层 2. 网络层 3. 传输层 4. 应用层 进程模型 单进程模型 协议栈编程接口 1、Raw/Callback API 2、Netconn API 3、Socket API 协议栈分层思想 TCP/IP协议完整的包含了一系列构成互联网基础的网络协议,TCP/IP协议的开发出…