PKI 公钥基础设施,公钥私钥,信息摘要,数字签名,数字证书

PKI 公钥基础设施

https 基于 PKI 技术。PKI(Public Key Infrastructure,公钥基础设施)是一种安全体系结构,用于管理数字证书和密钥对,以确保安全的数据传输和身份验证。PKI 采用了公钥加密技术,其中每个实体都有一个公钥和一个私钥,这对密钥用于加密和解密通信。

信息摘要

使用一个哈希函数对文档进行摘要运算,生成一个固定长度的哈希值,这个哈希值通常称为信息摘要。

在前端领域,关于哈希函数这个概念还有哪些地方会用到?

(1)路由导航的 #号 表示的哈希路由

(2)资源打包之后会给文件名加上哈希值,用于静态资源完整性校验

(3)前端缓存管理,也可以使用哈希函数对数据进行缓存,防止健名冲突 

常用的信息摘要算法:

  1. md5  生成128位的哈希值,但由于其容易被碰撞攻击破解,已经不再被广泛使用于安全领域,但是在业务逻辑中常用,把一个文件进行摘要获得唯一的哈希值,可以用来判断文件是否被修改。【前端经常用到的 md5 的npm 包】
  2. SHA-256、SHA-384、SHA-512: 属于SHA-2系列,分别生成256位、384位和512位的哈希值。目前在许多安全应用中仍然广泛使用。【前端经常使用crypto-js

(1)信息摘要的目的,主要是为了防止数据被篡改,所以哈希算法是不可逆的

(2)信息摘要是唯一的,同一个数据用同样的哈希函数,得到的值是一定的。

对称加密和非对称加密

对称加密 非对称加密
一个密钥 两个密钥【公钥、私钥】
速度快 速度慢
DES、AES RSA、ECC

公钥和私钥

在加密通信中,公钥和私钥是一对密钥,通常用于非对称加密算法。这些算法允许一个密钥用于加密,而另一个密钥用于解密,其中:

  1. 公钥(Public Key): 公钥是一种可以自由分发的密钥,用于加密数据。任何人都可以使用公钥对数据进行加密,但只有拥有与之配对的私钥的实体才能解密这些数据。公钥通常用于加密通信中的敏感信息,例如用于建立安全连接或传输敏感数据。

  2. 私钥(Private Key): 私钥是一种保密的密钥,只有密钥的所有者知道。私钥用于解密由相应的公钥加密的数据。私钥通常用于解密接收到的加密数据,以及对数字签名进行生成或验证。私钥必须始终保持保密,以确保通信的机密性和完整性。

那么问题来了,如何生成公钥和私钥?

有公钥和私钥一定是非对称加密,通常使用 OpenSSL 生成公钥和私钥。【这看起来也不是前端的工作,哈哈】

数字签名

数字签名是一种用于验证电子文档真实性和完整性的技术。通过数字签名,发送者可以在文档上附加一个数字签名,接收者可以使用签名验证工具来确认文档的来源和是否在传输过程中被篡改。

数字签名防止数据被篡改这一点和信息摘要算法的作用是一样的。但是数字签名有更多的信息,相当于是信息摘要的一个扩展应用。

(1)数字签名生成的过程:
  1. 选择哈希算法: 首先,选择一个哈希算法,例如SHA-256。哈希算法用于将消息或文档转换为固定长度的哈希值。【生成签名一定要有哈希算法】

  2. 创建消息摘要: 使用选择的哈希算法对消息或文档进行哈希,得到一个称为消息摘要(message digest)的固定长度字符串。这个摘要是消息内容的唯一表示。

  3. 使用私钥进行加密: 数字签名的生成涉及使用私钥对消息摘要进行加密。这个过程使用的是非对称加密算法,通常是使用数字签名算法中的私钥。

  4. 将签名附加到原始消息或文档: 将生成的数字签名附加到原始消息或文档中,形成带有数字签名的消息。

(2)数字签名的基本原理包括:
  1. 消息摘要(Message Digest): 发送者使用一个哈希函数对要签名的文档进行摘要运算,生成一个固定长度的哈希值。这个哈希值通常称为消息摘要。【消息摘要就是信息摘要】

  2. 私钥签名: 发送者使用自己的私钥对消息摘要进行加密,形成数字签名。

  3. 公钥验证: 接收者使用发送者的公钥对数字签名进行解密,得到消息摘要。

  4. 验证摘要: 接收者再次对接收到的文档进行哈希运算,得到一个新的消息摘要。

  5. 比较摘要: 接收者将用公钥解密得到的消息摘要与重新计算得到的摘要进行比较。如果两者一致,说明文档未被篡改且确实来自于私钥持有者。

数字证书

数字证书是一种用于在网络通信中验证身份和确保数据传输安全的安全工具。它是由数字签名和公钥加密技术结合而成的一种电子凭证。数字证书通常包含以下信息:

  1. 主体信息(Subject): 证书中标识了证书的所有者,通常是一个实体(个人、组织或设备)的名称。

  2. 公钥: 证书中包含了与证书所有者相关联的公钥,用于加密和解密通信中的数据。

  3. 数字签名: 数字证书通过使用颁发者(Certificate Authority,CA)的私钥对证书中的数据进行签名,以确保证书的完整性和真实性。

  4. 颁发者信息(Issuer): 证书中标识了颁发该证书的CA的信息。

  5. 有效期: 证书包含了一个指定的有效期范围,确保证书在一段时间后会过期,从而促使证书的定期更新。

数字证书形成步骤:
  1. 生成密钥对: 实体首先生成一对非对称密钥,包括公钥和私钥。通常使用算法如RSA或ECC进行密钥对的生成。

  2. 创建证书请求(CSR): 实体生成一个包含其公钥以及其他相关信息的证书请求。这个请求包括实体的标识信息,例如域名、组织名称等。

  3. 提交证书请求: 将证书请求发送给证书颁发机构(CA)。CA是一个受信任的第三方机构,负责验证请求者的身份并颁发数字证书。

  4. 验证身份: CA对证书请求进行身份验证,以确保请求者拥有提供的标识信息(域名、组织等)。这可能包括域名验证、组织验证等。

  5. 颁发数字证书: CA验证成功后,颁发数字证书。数字证书包含实体的公钥,以及与证书相关的元数据,如证书有效期、签名算法等。

  6. 证书签名: CA 使用自己的私钥对数字证书中的信息进行签名,生成数字签名。这个签名可以被验证以确保证书的完整性和真实性。

  7. 证书发布: CA将数字证书返回给实体,实体将其安装在其服务器或应用程序中。

  8. 使用数字证书: 数字证书现在可以用于建立安全的通信通道,例如在HTTPS中,客户端和服务器可以相互验证身份并使用证书中的公钥进行加密通信。

PKI 关键组件的功能

  1. 证书颁发机构(Certificate Authority): CA 是 PKI 的核心组成部分,负责验证个体或实体的身份,并颁发数字证书。CA 签署证书,用于证明数字证书的真实性。中国的 CA 机构有。【注意这是一个机构,或者说一个公司】
    1. 中国互联网络信息中心(CNNIC)
    2. CFCA(中国金融认证中心)
    3. WoSign(沃通根证书认证机构)
  2. 数字证书: 数字证书是包含公钥及相关身份信息的文件,由CA签发。数字证书用于在网络上建立信任,确保通信方的身份。
  3. 注册机构(Registration Authority): RA 是 CA 的协助机构,负责验证证书请求者的身份信息,并将验证结果提交给 CA。RA在某些情况下可以由 CA 直接处理。
  4. 证书存储库: 证书存储库用于存储和检索数字证书。它是一个安全的存储区域,通常由 CA进行管理。
  5. 密钥对生成和管理: PKI 系统支持生成和管理加密算法所需的密钥对,包括公钥和私钥。这确保了通信的安全性,同时也涉及密钥的定期轮换和更新。
  6. 证书撤销列表(CRL): CRL 是CA 发布的一个列表,包含被吊销的数字证书的信息。这允许验证方检查证书是否仍然有效。
  7. 数字签名: PKI 使用数字签名来保证证书的真实性和完整性。数字签名是用私钥生成的,可通过公钥验证。

更多关于 https 中间人攻击的知识请参考这篇文章

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-05 12:46:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-05 12:46:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-05 12:46:06       82 阅读
  4. Python语言-面向对象

    2024-01-05 12:46:06       91 阅读

热门阅读

  1. 面试经典150题(62-64)

    2024-01-05 12:46:06       53 阅读
  2. 中间件:构建现代软件架构的桥梁

    2024-01-05 12:46:06       56 阅读
  3. merge发生冲突时 ☞ 撤销merge

    2024-01-05 12:46:06       60 阅读
  4. WiFi7: MLD寻址

    2024-01-05 12:46:06       67 阅读
  5. redis总结

    2024-01-05 12:46:06       59 阅读
  6. .NET C# 如何获取object对象的数据

    2024-01-05 12:46:06       55 阅读
  7. CSS中变量的作用

    2024-01-05 12:46:06       59 阅读
  8. Linux 服务器安全策略技巧:网络分段

    2024-01-05 12:46:06       50 阅读
  9. 路由的安装顺序

    2024-01-05 12:46:06       63 阅读
  10. Go语言中的乐观锁与悲观锁

    2024-01-05 12:46:06       70 阅读