密码技术 (5) - 数字签名

news2025/7/14 6:25:45

一. 前言

        前面在介绍消息认证码时,我们知道消息认证码虽然可以确认消息的完整性,但是无法防止否认问题。而数字签名可以解决否认的问题,接下来介绍数字签名的原理。

二. 数字签名的原理

        数字签名和公钥密码一样,也有公钥和私钥,私钥只有发送者自己知道,公钥则可以公之于众。当发送消息时,发送者用私钥对消息进行加密,生成消息签名,并将消息和签名一起发送出去,当接收者收到消息时,使用公钥对签名进行解密,如果解密的内容和消息相同,则确定消息是由正确的发送者发出的。数字签名的过程如下图所示:

        这个过程和公钥密码的过程是反过来的,公钥密码的过程如下:

        如上,如果使用RSA算法,数字签名和公钥密码是完全的逆过程,数字签名是把公钥密码中"私钥"公之于众,大家都可以利用该秘钥进行验证发送者身份,而用公钥密码的"公钥"自己保存,用于给消息施加签名。所以,RSA算法也可以应用在数字签名的场景。

三. 数字签名特点

1. 数字签名可以防止否认

        数字签名之所以可以防止否认,是因为只有拥有私钥的人才可以生成数字签名。发送者无法否认说这个消息不是我发出的。

2. 数字签名不能保证机密性

        数字签名是一个认证符号,它的作用是证明消息是由谁发出的,因此,数字签名不关注消息的机密性的问题

3. 数字签名很难被篡改

        这一点和公钥密码是一样的,由RSA算法的数学性质决定。

四. 数字签名算法

1. RSA

        前面介绍的内容都是基于RSA的方式介绍的。公钥密码那篇对它做了简单的介绍了。

2. EIGamal

        公钥密码那篇对它做了简单的介绍了

3. DSA

        DSA(Digital Signature Algorithm)是由NIST与1991年制定的数字签名规范(DSS),DSA只能用于数字签名

4. ECDSA

        ECDSA是一种利用椭圆曲线密码来实现的数字签名算法。

5. Rabin

        Rabin是由M.O.Rabin设计的公钥算法,Rabin算法可以用于数字签名和公钥算法。

五. openssl实践

        openssl可以使用genpkey选项生成私钥,再使用rsa选项根据私钥生成公钥,openssl dgst使用-sign选项对infile施加签名,生成的签名保存在signature.txt,openssl dgst使用-verify选项校验infile的数据是否是由私钥加密的,命令如下:

1. 生成数字签名的私钥

# openssl genpkey -algorithm RSA -out private.key

2. 根据私钥生成公钥

# penssl rsa -pubout -in private.key -out public.key

3. 使用私钥对消息签名

infile内容:

hello,signature

施加签名:

# openssl dgst -sha256 -sign private.key -out signature.txt infile 

校验签名:

# openssl dgst -sha256 -verify public.key -signature signature.txt infile 
Verified OK

六. 总结

        数字签名的出现实现了如下:识别篡改和伪装还有防止否认,消息认证码虽然可以识别篡改,但是无法解决否认问题。数字签名和公钥密码使用的是相同的技术,只是它们的公钥和私钥用于了不同的用途

 

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

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

相关文章

网站使用SSL证书是趋势吗?

随着互联网技术的不断发展,网络安全问题日益受到重视。其中,SSL证书作为网站安全的基石,其重要性不言而喻。SSL证书能够加密网站与用户之间的通信,保护用户隐私,防止信息被窃取和篡改。因此,越来越多的网站…

10.1作业

#include <stdio.h> #include <string.h> #include <stdlib.h> /** function:* 创建一个双向链表&#xff0c;将26个英文字母通过头插的方式插入&#xff0c;通过为尾删的方式读取并删除* param [ in] * param [out] * return */ typedef struct double…

ECharts多个数据视图进行自适应大小的解决方案

项目场景&#xff1a; 在制作数据视图时经常会遇到多个数据视图的情况&#xff0c;在多个数据视图的情况下做自适应是比较麻烦的&#xff0c;这里就详细的分析一下该如何去制作&#xff0c;分享一下我的解决办法及思路。 定义 DOM 容器 这里需要注意一个地方&#xff0c;在定…

《Jetpack Compose从入门到实战》第八章 Compose页面 导航

添加依赖&#xff1a;implementation “androidx.navigation:navigation-compose:$nav_version” Navigation for Compose class MainActivity : AppCompatActivity() {var theme: BloomTheme by mutableStateOf(BloomTheme.LIGHT)override fun onCreate(savedInstanceState:…

Vue3核心源码解析 (一) : 源码目录结构

通过软件框架阅读源码可以对框架本身运行机制进行学习&#xff0c;更能了解框架的API设计、原理及流程、设计思路&#xff1b;我们要知其然&#xff0c;更知其所以然。 Vue 3的源码相对于Vue 2版本有了较大程度的改变&#xff0c;采用Monorepo规范的目录结构&#xff0c;同时使…

JavaScript——APIs

复习&#xff1a; splice() 方法用于添加或删除数组中的元素。 **注意&#xff1a;**这种方法会改变原始数组。 删除数组&#xff1a; splice(起始位置&#xff0c; 删除的个数) 比如&#xff1a;1 let arr [red, green, blue] arr.splice(1,1) // 删除green元素 consol…

【ArcGIS Pro二次开发】(69):使用MapTool实现隐藏和隔离图层

一、MapTool简介 在ArcGIS Pro SDK中&#xff0c;MapTool是一个重要的组件&#xff0c;用于自定义地图操作工具&#xff0c;使用户能够在ArcGIS Pro中执行特定的地图交互操作。 在VS中添加新项&#xff0c;可以找到ArcGIS Pro 地图工具&#xff0c;即为MapTool。 新建后打开c…

全连接网络实现回归【房价预测的数据】

也是分为data&#xff0c;model&#xff0c;train&#xff0c;test import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optimclass FCNet(nn.Module):def __init__(self):super(FCNet,self).__init__()self.fc1 nn.Linear(331,200)s…

​萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

​萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书 ​萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

mysql join语句优化实战

生产环境的大表join语句性能经常很差。这里给出大表join语句的优化思路。 准备材料 两张表&#xff0c;t1表N行&#xff0c;t2表M行 CREATE TABLE identity.t1 (id INT NOT NULL COMMENT Id,a INT NULL,PRIMARY KEY (id));CREATE TABLE identity.t2 (id INT NOT NULL COMMEN…

react create-react-app 配置less

环境信息&#xff1a; create-react-app:v5 react:18.2.0 node:18.16.0 如果你不必须使用 less 建议直接使用scss。 因为less配置会遇到很多问题。 配置less过程&#xff1a; 如果你只需要 sass的话&#xff0c;就可以直接使用sass。因为默认配置了scss。 npm、yarn、cnpm、…

wordpress搭建自己的博客详细过程以及踩坑

WordPress作为一款开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;具有诸多优势。首先&#xff0c;它的易用性使得即使对于没有编程经验的用户来说也能轻松上手&#xff0c;通过直观的用户界面和友好的管理工具&#xff0c;用户可以方便地创建、编辑和发布内容。其…

Mac 上没有 Total Commander,可以用这两款软件来代替

在 Windows 上&#xff0c;我用的最多的文件管理软件是 Total Commander&#xff0c;但转到 macOS 上却没有一款和它功能一样的软件&#xff0c;让人有些不爽。 经过一番搜寻&#xff0c;终于找到了 2 款可以部分代替 Total Commander 的软件&#xff0c;在此与大家分享。 1、…

竞赛选题 大数据疫情分析及可视化系统

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据疫…

五、2023.10.1.C++stl.5

文章目录 65、请说说 STL 的基本组成部分?66、请说说 STL 中常见的容器&#xff0c;并介绍一下实现原理&#xff1f;67、请说说 STL 中常见的容器&#xff0c;并介绍一下实现原理&#xff1f;68、请你来介绍一下 STL 的空间配置器&#xff08;allocator&#xff09;&#xff1…

LabVIEW开发光学相干断层扫描系统

LabVIEW开发光学相干断层扫描系统 癌症是一种以异常或受损细胞无法控制生长为特征的疾病&#xff0c;是世界上导致死亡的主要原因之一。以前的研究人员已经表明&#xff0c;患病时组织力学会发生变化。能够同时量化和可视化组织力学和细胞行为有可能弥合我们对这两种癌症驱动特…

地理空间探测器保姆级教程-含实现程序-少理论多操作

1.实现软件excel程序 【传送门】 2.基本步骤 2.1 准备的数据样式 按省份地理位置&#xff0c;分为东中西三大板块 2.2 数据离散化 数据不需要标准化、归一化等X&#xff08;X可能多个&#xff09;数据&#xff0c;需要离散化&#xff0c;eg&#xff0c;使用门槛值&#x…

SLAM从入门到精通(tf的使用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在ros的机器人学习过程中&#xff0c;有一件事情是肯定少不了的。那就是坐标系的转换。其实这也很容易理解。假设有一个机器人&#xff0c;它有一个…

竞赛选题 推荐系统设计与实现 协同过滤推荐算法

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 推荐系统设计与实现 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1…

Redis BitMap+SpringBoot 实现签到与统计功能

前言&#xff1a; 在各个项目中&#xff0c;我们都可能需要用到签到和 统计功能。签到后会给用户一些礼品以此来吸引用户持续在该平台进行活跃。 签到功能&#xff0c;使用 Redis 中的 BitMap 功能来实现&#xff0c;就是一个非常不错的选择。 一、Redis BitMap 基本用法 Bi…