【密码学】一文读懂数字签名

简介: 本文来简单的聊一聊数字签名,先来看下面一个例子。

一文读懂数字签名


(@8FYZV)9{C~UP1Q$4FL{5A.jpg一文读懂数字签名


本文来简单的聊一聊数字签名,先来看下面一个例子。


小明和小红是一对好朋友,然后呢,他们经常传小纸条进行聊天,为了确保这个小纸条的来源,他们需要在小纸条上签上自己的名字,这里假设他们能够互相认识对方的签名,并且其他人无法去模仿他们的签名,这样过了很久,他们这个方法确实也很有效,但是,思考一个问题,这是纸质的消息,可以在上面进行签名,但是如果是电子的信息呢,这总不能给信息用笔签上一个字吧,显然这也是不太现实的。

如果没有签名,那么消息发送者很有可能去抵赖,说自己没有发过这个消息,这便会产生一系列的问题,好在,这个对于信息的签名也是有方案的,被称之为数字签名,接下来,就来聊一聊数字签名是怎么工作的,本文并不会去介绍具体的签名算法,而是简单的聊一下什么是数字签名。


数字签名框架

VRRU6`6U`9[ANIG5XVJE%KY.png

image.gif数字签名框架

如上图所示,Bob有自己的私钥,然后用这个私钥对消息M进行签名得到S, 最终将M|S发送给Alice,而Alice利用Bob的公钥,采用同样的方法对签名进行一个验证,如果验证通过,则说明消息确实是Bob发送的,否则不可确定消息是Bob发送的。


数字签名和消息验证码的区别

讲到了数字签名,这就顺带回顾一下之前讲过的消息认证码,也就是MAC, 消息认证呢,这可以保证信息不受到第三方的攻击,但是不能够抵御来自通信双方自身发生的攻击,还是用小明和小红举例子吧,假设小明给小红发了一个消息,

  • 明晚八点小树林见[MAC]

然后,明天小红就去小树林了,可是等了好久,也没看到小明过来,这时候小红气坏了,决定明天去找小明问个明白,为什么发了消息,却没有来。

到了第二天,小红问小明,昨天晚上为什么没有来,小明说,昨晚去哪?

小红说,你发的消息,明晚八点小树林见, 看这不是,小明看了一眼,疑惑的说,我没发过这条消息啊,这时候,小红也没有啥办法证明这确实是小明发的。

从上面可以看出,消息认证码虽然说是可以保证消息的完整性不被破坏,但是无法抵御小明耍赖说没发过消息的这种情况。

因此,数字签名有如下三个特征:

  • 它必须可以认证签名者,签名日期和时间
  • 它必须能够认证被签名消息的内容
  • 签名应该可以被第三方仲裁,解决争执

还是用上面这个例子,如果小明发送的消息带有小明个人的签名,如下:

  • 明晚八点小树林见[SIGN]

由于这个签名是只有小明才能够产生的,因此小明无法抵赖自己发送过这条消息。


小结

本文简单介绍了一下数字签名的概念和数字签名的过程,但是没有给出具体的签名算法,在这里给自己挖一个坑,后面将挑几个签名算法进行一下描述,感觉自己之前文章中好像也留了不少的坑,哈哈,挖坑一时爽,填坑火葬场,溜了溜了。


相关文章
|
存储 关系型数据库 MySQL
mysql(三)用户权限管理
为什么要设置用户权限?MySQL设置用户管理权限的主要目的是为了确保数据库的安全性和数据的机密性。以下是一些原因。
588 1
mysql(三)用户权限管理
|
算法 安全 关系型数据库
密码学系列之七:数字签名
密码学系列之七:数字签名
2053 0
|
缓存 开发工具
RedHat8.4配置本地yum软件仓库(RHEL8.4)
RedHat8.4配置本地yum软件仓库(RHEL8.4)
2707 0
RedHat8.4配置本地yum软件仓库(RHEL8.4)
|
7月前
|
存储 编解码 移动开发
空间转录组:数据格式介绍
空间转录组:数据格式介绍
空间转录组:数据格式介绍
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
536 1
|
数据安全/隐私保护
(只需五步)注册谷歌账号详细步骤,解决“此电话号码无法验证”问题
注册google一直不方便,因为如果直接去google官网注册,那么它大概率会显示“此电话号码无法用于进行验证”接下来,按着教程来一步步做,就可以实现跳过此限制,成功用手机号注册google了。很简单的。
23962 1
|
存储 前端开发 JavaScript
浅拷贝和深拷贝的区别?
本文首发于微信公众号“前端徐徐”,介绍了JavaScript中浅拷贝和深拷贝的概念及其实现方法。文章首先解释了数据类型的基础,包括原始值和对象的区别,然后详细介绍了浅拷贝和深拷贝的定义、底层逻辑以及常见的实现方式,如 `Object.assign`、扩展运算符、`JSON.stringify` 和手动实现等。最后,通过对比浅拷贝和深拷贝的区别,帮助读者更好地理解和应用这两种拷贝方式。
712 0
浅拷贝和深拷贝的区别?
|
XML 开发框架 Java
SpringBoot中日志框架使用
Spring Boot 对日志框架的封装 我们知道在日志方面,SpringBoot默认是使用的SLF4J+LogBack的形式。我们来看看它使用的日志实现框架LogBack,其在 DefaultLogbackConfiguration 类中,定义了文件日志格式如下: // DefaultLogbackConfiguration.java private static final String FILE_LOG_PATTERN = "%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} " + "${LOG_LEVEL_PATTER
204 1
|
Linux 图形学
深入理解Qt定时器:QTimer的魅力与挑战(一)
深入理解Qt定时器:QTimer的魅力与挑战
8304 0
如何去掉字符串中文括号及其内部的内容三种方式
如何去掉字符串中文括号及其内部的内容三种方式
798 0