数字签名解析

news2024/11/22 11:28:16

1. 概述

        数字签名不是手写签名的数字图像;

        数字签名是一种可以提供认证的加密形式,是转向完全无纸环境的一个途径;

        数字签名机制用以解决伪造、抵赖、冒充和篡改、完整性保护等安全问题。

2. 公钥密码与数字签名的关系

        要实现数字签名,我们可以使用非对称密码机制。

        公钥密码包括一个由公钥和私钥组成的秘钥对,其中公钥用于加密,私钥用于解密,如图1所示。

        数字签名中也同样会使用公钥和私钥组成的密钥对,不过这两个密钥的用法和非对称加密是相反的,即用私钥加密相当于生成签名,而用公钥解密则相当于验证签名”,如图2所示。通过比较图1和图2来理解一下“反过来用”到底是什么样的情形。

        那么为什么加密相当于生成签名,而解密相当于验证签名呢?要理解这个问题,我们需要回想一下公钥密码中讲过的知识,即组成密钥对的两个密钥之间存在严密的数学关系,它们是一对无法拆散的伙伴。

        用公钥加密所得到的密文,只能用与该公钥配对的私钥才能解密;同样地,用私钥加密所得到的密文,也只能用与该私钥配对的公钥才能解密。也就是说,如果用某个公钥成功解密了密文,那么就能够证明这段密文是用与该公钥配对的私钥进行加密所得到的。

        用私钥进行加密这一行为只能由持有私钥的人完成,正是基于这一事实,我们才可以将用私钥加密的密文作为签名来对待。

        由于公钥是对外公开的,因此任何人都能够用公钥进行解密,这就产生了一个很大的好处,即任何人都能够对签名进行验证。

        数据签名的安全性和有用性取决于两个关键因素: 用户私钥的保护和安全的散列函数。

3. 数字签名的过程

        一般不会对信息直接进行签名,因为整个消息一般比较大,签名非常耗时;而是只要先用单向散列函数求出消息的散列值,然后再将散列值进行加密(对散列值签名)就可以了。无论消息有多长,散列值永远都是这么短,因此对其进行加密(签名)是非常轻松的。

3.1 生成签名过程

 3.2 验证签名过程

 4. 数字签名与密码结合的过程

        将数字签名和密码结合,使得信息具备机密性、完整性、认证和不可否则的特性。

4.1 生成签名并加密过程

​4.2 解密并验证签名过程 

5. 使用数字签名的原因

  • 验证:假设一家银行将指令由它的分行传输到它的中央管理系统,指令的格式是(A,B),其中A是账户的账号,而B是账户的金额.如果中央管理系统不能证明这则指令来自一个受信任的源,后果将十分严重
  • 完整性:数字签名技术可以保证任何原始数据被修改都将导致签名无效
  • 不可抵赖:接收方可以出示签名给别人看来证明信息的来源

6. 数字签名的用途

        数字签名是实现电子交易安全的核心技术之一,应用在密钥分配、电子银行、电子证券、电子商务和电子政务等许多领域。

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

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

相关文章

【python爬虫实战】爬取豆瓣top250(网站有反爬虫机制肿么办)

关于请求头headers: 值得注意的是,与上一篇 :​​​​​​【python爬虫实战】爬取书店网站的 书名&价格(注释详解)-CSDN博客 爬取书名不同,这次爬取豆瓣网站必须使用“请求头headers”,不然将没有输…

SSM学习2:依赖注入、依赖自动装配、集合注入、加载properties文件

依赖注入 依赖注入方式 setter注入——引用类型 setter注入——简单类型 public class BookDaoImpl implements BookDao {public void setDatabaseName(String databaseName) {this.databaseName databaseName;}public void setNum(int num) {this.num num;}private Stri…

【图像超分辨率】一个简单的总结

文章目录 图像超分辨率(Image Super-Resolution, ISR)1 什么是图像超分辨率?2 图像超分辨率通常有哪些方法?(1)基于插值的方法(2)基于重建的方法(3)基于学习的方法(LR im…

jenkins 发布服务到linux服务器

1.环境准备 1.1 需要一台已经部署了jenkins的服务器,上面已经集成好了,jdk、maven、nodejs、git等基础的服务。 1.2 需要安装插件 pusblish over ssh 1.3 准备一台额外的linux服务器,安装好jdk 2.流程描述 2.1 配置jenkins,包括p…

统计是一门艺术(参数假设检验)

1.参数假设检验 在总体分布已知的情况下,对分布中未知参数的检验。 (1)相关基本概念 零假设/原假设与对立假设/备择假设: 任务:根据样本作出是否接受H0 复合假设与简单假设: 否定域/拒绝域与接受域&…

Python:谈谈常规滤波器(带通、低通、高通、带阻)的用法

一、滤波器的作用 滤波器在信号处理中用于移除或减少信号中的噪声,同时保持信号的某些特性。滤波器通常用于音频、视频和图像处理等领域。滤波器根据其 designed for different purposes and can be divided into several types, such as lowpass filters, highpass…

【Unity设计模式】✨使用 MVC 和 MVP 编程模式

前言 最近在学习Unity游戏设计模式,看到两本比较适合入门的书,一本是unity官方的 《Level up your programming with game programming patterns》 ,另一本是 《游戏编程模式》 这两本书介绍了大部分会使用到的设计模式,因此很值得学习 本…

Linux rpm与yum

一、rpm包管理 rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager (RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了R…

Python pip install模块时C++编译环境问题

pip install模块时C编译环境问题 在接触和使用python后,常常会通过pip install命令安装第三方模块,大多数模块可以直接安装,但许多新同学仍会遇见某些模块需要实时编译后才能安装,如报错信息大概是缺乏C编译环境,本文则…

Golang-GMP

GMP调度 golang-GMP语雀笔记整理 GMP调度设计目的,为何设计GMP?GMP的底层实现几个核心数据结构GMP调度流程 设计目的,为何设计GMP? 无论是多进程、多线程目的都是为了并发提高cpu的利用率,但多进程、多线程都存在局限性。比如多进程通过时…

Python变量的命名规则与赋值方式

第二章:Python 基础语法 第一节:变量的命名规则与赋值方式 2.1.1 引言 在编程中,变量是存储数据的基本单元。变量的命名和赋值是编程语言中表达和操作数据的基础。了解和遵循变量命名规则对于编写清晰、可维护的代码至关重要。 2.1.2 变量…

嵌入式Linux系统编程 — 5.2 Linux系统时间与日期

目录 1 了解Linux系统时间 1.1 几种常用的时间 1.2 如何查看几种常用的时间 1.3 Linux 系统中的时间 2 time、gettimeofday获取时间 2.1 time函数 2.2 ​​​​​​​gettimeofday函数: 2.3 示例程序 3 时间转换函数 3.1 ctime与ctime_r函数 3.2 localti…

小白学python(第四天)顺序与分支篇

这几天因为个人原因,python篇会更新比较慢,还望大家谅解,那么废话不多说,我们现在就进入正题 顺序篇 这个没啥好说的,就是自上而下,依次执行 分支篇 条件(if)语句语法格式&#…

Listary(Windows 文件搜索工具)专业版值得购买吗?

说到经典的国货软件,有一款 Win 软件是一定绕不过去的。它就是知名的本地文件搜索工具 Listary! 便捷的文件搜索窗口;快捷操作的体验;与系统更匹配的外观设计;更智能的排序和更可靠的索引。 便捷的文件搜索窗口 紧凑…

百亿级存储架构: ElasticSearch+HBase 海量存储架构与实现

百亿级存储架构: ElasticSearchHBase 海量存储架构与实现 尼恩:百亿级数据存储架构起源 在40岁老架构师 尼恩的读者交流群(50)中,经常性的指导小伙伴们改造简历。 经过尼恩的改造之后,很多小伙伴拿到了一线互联网企业如得物、阿…

AI大模型API:驱动人工智能创新的核心引擎

在当今快速发展的人工智能领域,AI大模型API成为了开发者必备的利器。这些API为开发者提供了强大的人工智能模型和算法,使他们能够轻松地构建智能化应用和解决方案。作为开发者,我们可以借助AI大模型API实现自然语言处理、图像识别、声音合成等…

windows电脑使用netsh添加端口转发、设置端口转发和删除端口转发

目录 1. 添加端口转发 2. 查看是否添加成功 3. 设置端口转发 4. 删除端口转发 除查看命令外,其他命令需要以管理员方式运行。 1. 添加端口转发 命令: netsh interface portproxy add v4tov4 listenaddress你的外部IP listenport你的外部端口 conne…

Winform使用Flurl调用WebApi的基本用法

微信公众号“CSharp编程大全"的文章《.NET超简单轻量级的HTTP请求组件Flurl》介绍了便捷构建URL及创建HTTP请求的.NET模块Flurl。与HttpClient相比,Flurl封装的更简捷易用,代码量更少。本文学习并测试基于Fluri调用WebApi的基本用法。   基于Fluri调用WebApi…

DIY智能音箱:基于STM32的低成本解决方案 (附详细教程)

摘要: 本文详细介绍了基于STM32的智能音箱的设计与实现过程,包括硬件设计、软件架构、语音识别、音乐播放等关键技术。通过图文并茂的方式,结合Mermaid流程图和代码示例,帮助读者深入理解智能音箱的工作原理,并提供实际操作指导。…

51单片机第11步_在C语言中插入汇编语言

本章重点介绍如何在C语言中插入汇编语言。要不是有记录,真不知道怎么搞。 /* 你在 Project Workspace窗口中,将光标移到DELAY.c处,点下鼠标右键,选择"Options for file DELAY.c", 点击右边的"Generate Assembler SRC File"和“Assemble SRC …