一文读懂密码学中的证书
一文读懂密码学中的证书
之前的文章中,我们讲到了数字签名,数字签名的作用就是防止篡改和伪装,并且能够防止否认。但是要正确运用数字签名技术还有一个非常大的前提,那就是用来验证签名的公钥必须真正的属于发送者。
如果你获取到的公钥是伪造的,那么不管你的签名算法多完美,也是会得到错误的结果。
那么我们怎么才能安全的获得发送者的公钥呢?这里就需要使用到证书了。所谓证书就是通过第三方的可信机构对发送者的公钥进行签名而得到的。
这里有两个概念:公钥证书(Public-Key Certificate, PKC)和认证机构(Certification Authority, CA)。熟悉区块链的朋友应该经常会听到CA这个名词,CA就是这里的认证机构。
证书的例子
我们看一个实际中可能会遇到的例子:
假如A要向B发送一条消息,这条消息希望使用B的公钥来加密,但是A事先无法知道B的公钥到底是什么,那么可以使用下面的证书架构:
- 在第一步,B需要生成自己的密钥对,然后将公钥注册到CA中。这里CA就是一个第三方的可信赖的机构。
- CA获得到了B的公钥之后,使用自己的私钥对B的公钥进行签名,得到证书。
- A从CA获得到证书和CA的公钥(CA是个可信赖机构,可以从公共站点中获取),并使用CA的公钥来验证证书签名的合法性。
- A获得了B的公钥,使用B的公钥加密消息。
- B用自己的私钥解密消息,得到明文。
好了,这就是一个最简单的证书使用的例子。
证书的标准和生成
因为证书是由认证机构颁发的,使用者需要对其进行验证,那么就需要一个标准的证书格式来方便使用者使用。最广泛的一个证书标准格式是由ITU(International Telecommunication Union)和ISO(International Organization for Standardization)制定的X.509规范。
x.509有很多扩展格式包括:DER、CRT、CER、PEM等。他们在不同的环境中有不同的用处。
那么怎么生成证书呢?可以借助第三方工具,也可以使用命令行命令比如:openssl来生成。具体的生成命令这里就不细讲了。
PKI
有了证书的格式,是不是就可以实际使用证书了呢?
其实这还是不够的,我们还需要定义证书该由谁来颁发,如何颁发,如果作废证书等。而PKI(Public-Key Infrastructure)公钥基础设施就是为了有效的使用证书而制定的一系列规范和协议。
PKI的组成主要有三部分:
- 用户
用户是使用PKI的人,也就是需要借助CA来发布自己的公钥和获取别人公钥的人。
- 认证机构
认证机构就是CA了,它是对证书进行管理的人。CA除了生成证书之外,还有一个非常重要的工作就是作废证书。
因为用户有可能会丢失密钥,或者出于特殊的原因,废弃掉某些证书。那么就可以向CA发起一个作废请求。而作废的证书会被保存在CRL中。CRL就是对外的证书废弃列表。用户在使用证书的时候必须首先查看该证书是否在CRL列表中。如果在则该证书不能够被使用。
- 仓库
仓库是一个保存证书的数据库,用户注册之后生成的证书都存在仓库中,以供其他的用户获取使用。
CA的层级结构
我们在Fabric中有了解到有个root CA的概念,这是什么意思呢?
我们从上面的介绍可以知道,其实CA不仅仅可以由机构来担任,任何人只要会对公钥进行签名都可以构建CA。
如果是一个很大的机构要构建CA,比如一个总公司要构建CA,那么它可以先构建一个root CA,然后再在root CA之下构建子CA,这些子CA来负责底层具体用户的证书颁发。
对证书的攻击
因为证书是基于数字签名技术,所以所有基于数字签名技术的攻击都适用于证书。
这里主要针对于PKI体系的攻击做个介绍:
- 在公钥注册之前替换公钥。
用户B如果想生成证书的话,需要在CA注册,并且将自己的公钥提交到CA。那么在公钥提交之前,可能会被恶意替换。
- 窃取认证机构的私钥
所有的用户公钥都是由CA的私钥做签名的,如果CA的私钥被盗的话,那么所有的证书都是不安全的。
CA其实是一个中心化的机构,中心化的机构往往都会出现这样的问题。攻破一个就攻破了所有。
- 伪装成认证机构
攻击者可以伪装成认证机构让用户上当。所以用户在注册的时候一定要小心。
- CRL时间差攻击
如果B的密钥丢了,那么他会向CA提交一个废弃申请,但是在提交申请到申请生效,到CRL生成直接有一个时间差,这段时间内废弃的密钥仍然可以合法使用。
更多精彩内容且看:
- 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
- java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
更多内容请访问 http://www.flydean.com/certificate/
一文读懂密码学中的证书相关推荐
- 一文读懂机器学习中的模型偏差
一文读懂机器学习中的模型偏差 http://blog.sina.com.cn/s/blog_cfa68e330102yz2c.html 在人工智能(AI)和机器学习(ML)领域,将预测模型参与决策过程 ...
- java中date类型如何赋值_一文读懂java中的Reference和引用类型
简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...
- 一文读懂Java中File类、字节流、字符流、转换流
一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...
- 一文读懂SpringBoot中的事件机制
一文读懂SpringBoot中的事件机制?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法. 要"监听"事件,我们总是 ...
- 前端面试必会 | 一文读懂 JavaScript 中的 this 关键字
this 是一个令无数 JavaScript 编程者又爱又恨的知识点.它的重要性毋庸置疑,然而真正想掌握它却并非易事.希望本文可以帮助大家理解 this. JavaScript 中的 this Jav ...
- 带你一文读懂Javascript中ES6的Symbol
带你一文读懂Javascript中ES6的Symbol 前言 基础类型 Symbol Symbol.for 与 Symbol.keyFor Symbol.iterator Symbol.search ...
- 一文读懂机器学习中奇异值分解SVD
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 目录: 矩阵分解 1.1 矩阵分解作用 1.2 矩阵分解的方法一文 ...
- 一文读懂信息安全中的恶意代码、病毒、木马、蠕虫......
一文读懂信息安全中的恶意代码.病毒.木马.蠕虫...... 病毒:破坏计算机功能或数据,以破坏为主,传染其他程序的方式是通过修改其他程序来把自身或其变种复制进去完成的,典型的熊猫烧香 蠕虫:通过网络的 ...
- 原创 | 一文读懂机器学习中的shapley值方法
作者:贾恩东本文约2000字,建议阅读9分钟本文为你介绍更公平分配利益权重的一种算法--Shapley值方法. 本篇文章是数据派一文读懂系列的新年第一篇原创,在这里祝贺大家新年学业有新成就,生活有新气 ...
最新文章
- java基础--日期--练习集锦
- 多线程并行和并发的区别
- Zookeeper与Paxos
- python3 http.server 本地服务支持跨域
- 《Hadoop MapReduce实战手册》一1.4 给WordCount MapReduce程序增加combiner步骤
- 从fork-join /线程池调用的Singelton bean中的访问spring请求范围缓存
- nginx源码阅读(一).综述
- Ionic Angular自动捕获错误 配置Angular2.x +
- 这项技术:华为、BAT要力捧!程序员:我彻底慌了... ​
- django-session对象的方法
- 在JAVA中把JSON数据格式化输出到控制台
- 机器学习高质量数据集大合辑
- win10 更新 英特尔显示器音频 后显示器音箱没有声音
- IE离线脱机安装,解决IE11安装时需要“获取更新”
- 8086cpu标志寄存器
- android面试!一线互联网移动架构师设计思想解读开源框架!复习指南
- *【思路】程序员怎么快速接手一个项目
- mysqli_connect(): (HY000/2002):
- 存储卡 android文件夹,安卓系统下SD卡文件夹功能介绍
- CVE-2017-8464(震网三代)漏洞分析与复现