数字签名和数字证书详解

2024-08-22 16:38

本文主要是介绍数字签名和数字证书详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

签名

当你在一个纸质文件上写上你的名字,按上你的指纹,就意味着这张纸上的内容经过了你的认可,你的笔迹和指纹就是你身份的证明。这是因为,笔迹很难伪造,而每个人的指纹更是独一无二的。在签名前,我们会检查文件内容有没有歧义、有没有涂改、有没有多余不必要的空白等,确认无误后再写下我们的名字,而收到签名后文件的人,再次对文件内容及签名进行检查,以确保文件内容的有效性和完整性。

因此,签名可以用来认证签名者的身份及确保被签名文件内容的真实性。

数字签名

在互联网时代,文件以电子形式存在电脑里,我们从网上下载的文件、程序等也很有可能被人植入木马病毒,这些电子文件不能像纸质文件一样,通过物理手段(笔迹和指纹)来签名,因此需要一种手段来对电子文件进行签名,即数字签名,来确保文件的真实性、有效性。

在学习数字签名之前,需要先了解以下几个概念:

1、HASH算法

Hash,一般翻译做散列或音译为哈希,简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。常用的HASH算法有:MD5,SHA1,SHA256等。

比如,“我是小新,我喜欢吃青椒,大姐姐你呢?”这句话的MD5值为:

F282C0E90871AC370C57C1539D3CFDB6

如果把这句话最后一个问号改为句号,则MD5值为:

1515C89B2F8734049846E542B2CFAAB8

哪怕只修改一个字符,哈希值也会不一样,因此,MD5这类哈希算法通常用来验证内容有没有被篡改。

另外,总有人认为MD5是用来加密的,这是不对的,有加密就有解密,而MD5是不可逆向的,我们通常把用户输入的密码用MD5计算后保存到数据库,这确实起到了一定的“加密”的作用,因为数据库里保存的确实不是用户明文密码了,但是,没有人可以通过这个密文反推用户真实的密码,也就是说,不存在所谓的MD5“解密”。网上所谓的一些MD5破解,不过是用字典来匹配罢了,同一个字符串的MD5值是不会变的,因此只要有一个明文密码和其MD5值的字典,就可以用MD5值找其对应的明文密码,不过也不用担心,在保存用户名密码的时候加随机盐就能解决这个匹配的问题。2004年王小云教授证明了MD5可以碰撞,即两个完全不同的字符串可能计算出完全一样的HASH值,但跟破解没半毛钱关系。

2、对称加密

对称的意思是,加密和解密使用同一个密钥,常用算法有AES、RC4、3DES等。

在谍战剧里,通常会有一个密码本(明文和密文对应关系列出来),在前些年很火的电视剧《潜伏》里,余则成就有一个密码本,每次收到密码后在纸上写下来,然后翻开密码本找对应的明文,只要这个密码本不泄露,军统的那些人就破解不了他的密码。当然,在现实里,即使密码本没有泄露,为了保证安全,地下工作者也可能会不定期更换密码本。

还有一个真实的事件:在抗日战争时期,有一段时间,重庆每天遭受日机多架次的狂轰滥炸,高射炮每次都打不下来,日军的飞机总在高射炮的射程之外,后来密码学专家破译了一个叫独臂大盗的间谍发送给日军的电报,他是一名高射炮团的营长,他用电报机发送密文将高射炮的射程告诉了日军,他的密码本是诺贝尔文学奖获得者赛珍珠的长篇小说《大地》,书的页码是密文,每一页的第一个单词是明文,他用电报机传送页码给日军,日军情报部门用页码找对应的英文单词,这样,就完成了情报的加密和解密。

3、非对称加密

非对称加密即加密和解密使用的不是同一个密钥,而是一个密钥对,密钥对包含一个公钥和一个私钥,它的原理是找几个很大的质数进行一些数学运算,这些质数满足一定的数学关系。常用非对称加密算法有RSA,DSA/DSS等。

  • 公钥加密的数据只有其对应的私钥才可以解密,私钥加密的数据只有其对应的公钥才可以解密。公钥可以告诉任何人,但是私钥绝对不能泄露。
  • 私钥加密的信息,拥有公钥的人都可以解密,而公钥加密的信息,只有有私钥的人才可以解密。
  • 非对称加密要比对称加密更安全,计算也更复杂,但是要知道,世界上没有什么密码是破解不了的,只是时间问题
  • 私钥还可以用于签名,验证对方是否为私钥拥有者,公钥不能用于签名,因为公钥谁都可以有。

下面举例说明什么是数字签名和数字证书:

小张考上了北京大学,小李进了中等技术学校,小红在百货公司当售货员:他们都有光明的前途。这些都不重要,重要的是小张和小李都喜欢小红。

1、小红有两把钥匙,一把是公钥,另一把是私钥。小红把公钥送给小张和小李各一把。

2、小张给小红写信,然后用公钥加密,小红收到信以后用私钥解密,得到信的内容:“我们在一起吧!”。

3、小红给小张回信,她决定进行数字签名,她先用HASH函数(如MD5)计算信的摘要,然后再用私钥把摘要也加密,生成一个数字签名,再把信也加密,最后把签名放到信的后面一起发给小张。

4、小张收到信以后用公钥解密,得到信的内容:“好!”,然后用公钥解开信后面的数字签名,可以得到信息摘要,证明信确实是小红写的,然后自己再用MD5计算一下信的信息摘要,跟前面得到的摘要相等,证明信没有被修改过。

5、这跟小李有什么关系呢?这就有了,小李自学黑客知识,黑进了小张电脑,由于小李也有一把公钥,所以他也可以解密,看到了回信内容。

6、恼羞成怒的小李决定破坏他们的感情,于是小李自己生成了一对公钥和私钥,然后用自己的公钥替换了小张的公钥,然后冒充小红写信给小张,并用自己的私钥加密。

7、小张收到信后,用公钥(已经被替换为小李的公钥)解密,得到信的内容:“我们分手吧!”。小张懵了,而小李一脸奸笑。

8、小张坐火车去找小红,结果两人发现那封信是被人冒充了,小张的公钥被替换了,不是小红的,那怎么保证小张拥有的公钥确实是小红的呢?小红跑到证书机构(CA)给自己的公钥做认证,证书机构也有一对公钥和私钥,证书机构用自己的私钥对小红的公钥及小红的个人信息等进行加密,得到一个数字证书

9、小红再次给小张写信,签名、加密,并把签名和数字证书一起发给小张。

10、小张拿到数字证书,用CA的公钥解开证书,得到正确的小红的公钥,然后就可以解密信的内容和验证签名。

再看一个HTTPS的例子,过程大致如下:

1、客户端请求服务端,告诉服务端自己支持的加密方法

2、服务端发送证书链给客户端

3、客户端验证证书链的有效性,比如证书是否过期,证书的域名是否是当前请求的域名等

4、证书验证有效后开始协商对称密钥,客户端用非对称加密方法如RSA加密协商好的对称密钥,然后发送给服务端

5、之后开始用对称密钥通信

注意,因为非对称算法相对复杂,计算耗时,所以非对称加密只用来加密协商好的对称密钥,保证这个对称密钥在传输过程中不被泄露。

数字证书

数字证书的作用,是保证你可以获取到正确的公钥。有了正确的公钥,才能保证信息的正确性、安全性、完整性。

数字证书需要去证书机构(CA)申请,证书机构也有一对公钥和私钥,证书机构用自己的私钥对你的信息(比如SSL证书中包含了证书版本、序列号、使用的算法、颁发机构、域名、证书过期时间、域名所有者等等)加密,得到一个属于你的数字证书。

CA下面还可以有二级甚至三级、四级等CA机构,每一级CA自己的证书从上一级申请,这样一级一级相互保证,形成一个证书链,最顶级的证书叫根证书,根证书由根证书颁发机构自己给自己颁发,叫自签证书。根CA有最高的权威性,这些CA的公钥可以在网上查到,因此无法伪造。操作系统以及一些浏览器通常内置了一些根证书颁发机构颁发的证书。

SSL证书的验证

浏览器在收到服务器发送过来的证书链后,调用证书验证函数去验证,只要根证书是有效的,则整个证书链都没有问题,否则浏览器会给出证书有问题之类的警告。

这是谷歌浏览器的证书:

点浏览器地址栏域名左边的锁图标,可以查看当前网站的证书,比如CSDN的证书:

数字证书格式

证书文件的结构也是有标准的,比如文件里包含什么信息,用什么编码,第一行记录什么,第二行记录什么等等,详情看这里。

x.509

基本的证书格式,只包含公钥。
x509证书由用户公共密钥和用户标识符组成。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息。

PKCS#7

Public Key Cryptography Standards #7。
PKCS#7一般把证书分成两个文件,一个公钥、一个私钥,有PEM和DER两种编码方式。PEM比较多见,是纯文本的,一般用于分发公钥,看到的是一串可见的字符串,通常以.crt,.cer,.key为文件后缀。DER是二进制编码。
PKCS#7一般主要用来做数字信封。

 

这篇关于数字签名和数字证书详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096821

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

LabVIEW FIFO详解

在LabVIEW的FPGA开发中,FIFO(先入先出队列)是常用的数据传输机制。通过配置FIFO的属性,工程师可以在FPGA和主机之间,或不同FPGA VIs之间进行高效的数据传输。根据具体需求,FIFO有多种类型与实现方式,包括目标范围内FIFO(Target-Scoped)、DMA FIFO以及点对点流(Peer-to-Peer)。 FIFO类型 **目标范围FIFO(Target-Sc

019、JOptionPane类的常用静态方法详解

目录 JOptionPane类的常用静态方法详解 1. showInputDialog()方法 1.1基本用法 1.2带有默认值的输入框 1.3带有选项的输入对话框 1.4自定义图标的输入对话框 2. showConfirmDialog()方法 2.1基本用法 2.2自定义按钮和图标 2.3带有自定义组件的确认对话框 3. showMessageDialog()方法 3.1

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹