深入浅出密码学(下)

简介: 前言在之前的文章《深入浅出密码学(上)》与《深入浅出密码学(中)》,笔者为大家介绍了密码学中的加密、单向散列函数与消息认证码的概念与应用。

前言

在之前的文章《深入浅出密码学(上)》与《深入浅出密码学(中)》,笔者为大家介绍了密码学中的加密、单向散列函数与消息认证码的概念与应用。这里带大家简单回顾一下,在网络通信中,消息存在被窃听的风险,因此我们需要对消息进行加密来防止消息被窃听。而如果我们需要保证消息的完整性或一致性,则可以使用单向散列函数。而单向散列函数的局限性是无法对通信双方进行认证,即无法证明某条消息是某个人发出的,因此我们还需要消息认证码来解决消息认证的问题。然而消息认证码仍然不是十全十美的,其无法解决“否认”的问题,即仅仅使用消息认证码存在“抵赖”的风险。那么有什么方法来弥补消息认证码的缺点呢?下文将为大家揭晓答案。

数字签名

在《深入浅出密码学(中)》一文中,我们知道消息认证码之所以无法防止否认,其原因是在消息认证码的使用过程中需要使用到共享密钥。因此如果要防止否认,那么可以考虑不使用共享密钥的其他方式对消息进行认证,而数字签名就是这样一种消息认证方式。

数字签名的使用过程中主要涉及以下两种行为:

  1. 生成消息签名

  2. 验证消息签名

生成消息签名由消息发送者完成,验证消息签名一般由消息接接收者完成,如果消息签名验证通过则可证明消息是由可信的发送方发送的。数字签名之所以可以防止否认,是因为生成消息签名跟验证消息签名是使用不同的密钥来完成的。消息发送者使用“签名密钥”对消息进行签名,消息接收者使用“验证密钥”对消息进行验证,且签名阶段只能使用“签名密钥”无法使用“验证密钥”进行签名。此外“签名密钥”只能由消息发送者持有,不可泄露,而“验证密钥”则是公开的,任何需要对消息进行认证的人都能获取到。

大家有没有觉得数字签名与之前谈到的非对称加密有点类似呢?实际上,数字签名可以看成是把非对称加密“反过来用”。非对称密钥是消息发送者使用公钥进行加密,消息接收者使用私钥进行解密。而数字签名是消息发送者使用私钥生成签名,而消息接收者使用公钥对签名进行验证。两者的区别见下表:

  私钥 公钥

非对称加密

接收者解密时使用

发送者加密时使用

数字签名

发送者生成签名时使用

接收者验证签名时使用

数字签名的使用方式

加下来介绍下数字签名的使用方式,一般有如下两种使用方式:

  1. 直接对消息进行签名

  2. 对消息的散列值进行签名

由于在通信的过程中,消息的体积可能非常大,如果直接对消息进行签名的话会非常耗时,所以在实际中用的比较多的还是对消息的散列值进行签名,在这里我们也只详细介绍对消息的散列值进行签名这种方式。以下是对消息的散列值进行签名和验证的过程:

因为数字签名中生成签名跟验证签名使用的是不同的密钥,因此数字签名可以防止否认,同时也能识别篡改,因为即使消息被修改了1比特,其计算出来的签名也会相差很大。再者,由于数字签名不需要共享密钥,因此也不存在密钥的配送问题。然而要使用数字签名还有一个前提条件就是,必须验证公钥的持有者确实是属于消息的发送者。即使数字签名再强大,如果你得到的公钥是伪造的,那么数字签名也会完成失效。而为了确保公钥确实是由消息的发送者发布的,则可以使用证书。有兴趣的朋友自己查资料进行深入了解。

关于密码学的基础知识就介绍到这里了。

如果觉得这篇文章对你有帮助,可以扫描下方二维码,关注本人公众号,获得更多优质文章推送。

相关文章
|
Kubernetes 关系型数据库 MySQL
k8s教程(基础篇)-入门及案例
k8s教程(基础篇)-入门及案例
4826 0
|
Java Spring
Spring Boot 2.X(八):Spring AOP 实现简单的日志切面
AOP 1.什么是 AOP ? AOP 的全称为 Aspect Oriented Programming,译为面向切面编程,是通过预编译方式和运行期动态代理实现核心业务逻辑之外的横切行为的统一维护的一种技术。
3480 1
|
存储 网络协议 算法
如何访问GitHub快的飞起?两步解决访问超时GitHub,无法访问GitHub的问题
这篇文章提供了几种方法来解决访问GitHub时速度慢或超时的问题,包括使用代理服务器、下载加速工具,以及考虑使用国内代码管理网站如码云(gitee)来加速下载GitHub上的资源。
如何访问GitHub快的飞起?两步解决访问超时GitHub,无法访问GitHub的问题
|
Rust 搜索推荐 算法
【密码学】一文读懂GCM(Golais计数器模式)
GCM(Galois计数器模式)同样的也是NIST提出来的,这个模式基于并行化设计,下面来一起看一下这个模式具体是如何工作的吧。
3455 0
【密码学】一文读懂GCM(Golais计数器模式)
|
Prometheus Cloud Native
Mac下安装 Prometheus+Grafana
Mac下安装 Prometheus+Grafana
1022 0
|
Java Maven
Maven自用配置文件(settings.xml)
Maven自用配置文件(settings.xml)
3133 0
|
存储 安全 Java
settings.xml详解(很详细读这一篇就够了)
settings.xml是Java项目中用于配置Maven的重要文件,它详细规定了Maven的运行规则和行为。该文件通常位于用户家目录下的.m2文件夹中,或者项目根目录下的.mvn文件夹内。settings.xml中包含了众多配置项,从代理设置、镜像仓库配置,到服务器认证信息、插件组等,均可以在此文件中进行细致定义。通过合理配置settings.xml,我们可以优化Maven的依赖下载速度,保障仓库访问的安全性,甚至实现私有仓库的搭建与管理。深入了解settings.xml的每一项配置,对于提高Maven使用效率、保障项目构建稳定性具有重要意义。因此,无论是Maven初学者还是资深用户,都应仔
16033 4
|
传感器 监控 搜索推荐
物联网的车载应用程序
物联网的车载应用程序
432 0
|
Java iOS开发 MacOS
MacOS安装、运行ElasticSearch
MacOS安装、运行ElasticSearch
1174 0