[转帖]公钥基础设施(PKI,Public Key Infrastructure)闲谈
https://zhuanlan.zhihu.com/p/384436119
背景
在现实空间中,人类的活动范围和接触人的范围有限,人和人最初的信任是建立在小团体或部落内部。随着全球化进展,人类的活动已经遍布全球,通信极度发达,能够低延迟的在地球的两端进行通话,甚至是太空与地面的通话(参考:卫星互联网这样助力太空通话)。但这对人和人之间的身份识别带来了前所未有的挑战。
以前人和人之间的身份识别非常的简单,就是面对面的交流:通过外貌、体型、声音等。但是随着贸易的往来,人和人之间见面识别身份的代价逐渐开始变大,例如,美国和英国的人见面就要大费周章。同时,人和人之间有交往并不代表这两个人认识,可能他们真的就是陌生人而已,双方可能都极少掌握对方的信息。 所以在这种非接触式(不能见面)的情况下,如何有效的识别身份,建立信任关系是一个重要的问题。
人们最初设计互联网时,很少考虑到安全。这样的结果是,核心通信协议本质上是不安全的,只能依靠所有参与方的诚信行为。互联网时代更是对解决这个问题提出了更加迫切的需求。网络通信的双方如何认证对方的身份,对于网络安全至关重要。
身份认证技术是保护信息安全的第一道屏障,其核心技术是信息安全保障体系,也是最基本的环节。它的基本思路:经过验证用户所具有的属性,来判断用户身份是否真实。
什么意思呢?举个例子,在智取威虎山中
土匪通过黑话“认证”了杨子荣的“土匪”身份:
土匪:蘑菇,你哪路?什么价?(什么人?到哪里去?)
杨子荣:哈!想啥来啥,想吃奶来了妈妈,想娘家的人,孩子他舅舅来了。(找同行)
杨子荣:拜见三爷!
土匪:天王盖地虎!(你好大的胆!敢来气你的祖宗?)
杨子荣:宝塔镇河妖!(要是那样,叫我从山上摔死,掉河里淹死。)
土匪:野鸡闷头钻,哪能上天王山!(你不是正牌的。)
杨子荣:地上有的是米,喂呀,有根底!(老子是正牌的,老牌的。)
土匪:拜见过阿妈啦?(你从小拜谁为师?)
杨子荣:他房上没瓦,非否非,否非否!(不到正堂不能说。)
土匪:嘛哈嘛哈?(以前独干吗?)
杨子荣:正晌午说话,谁还没有家?(许大马棒山上。)
土匪:好叭哒!(内行,是把老手)
杨子荣:天下大耷拉!(不吹牛,闯过大队头。)
座山雕:脸红什么?
杨子荣:精神焕发!
座山雕:怎么又黄了?
杨子荣:防冷,涂的蜡!
座山雕:许旅长两件心爱的宝贝你知道是什么?
杨子荣:两件珍宝,好马快刀。
座山雕:马是什么马?
杨子荣:卷毛青棕马。
座山雕:刀是什么刀,
杨子荣:日本指挥刀。
座山雕:看来你是许旅长的人啦!
这就是一种身份认证的技术,通过双方事先掌握的秘密知识,实现了身份认证。类似于我们日常生活中的“QQ密码”(认证你是账户主人的身份)。
基于口令的身份认证技术的问题
看上去似乎很美好,有什么问题呢?上述方法的认证是基于口令的认证,这种认证天生“缺陷”,尤其是在当前点对点通信的环境下。
- 口令代表了你的身份,但是口令并不安全
在《智取威虎山》中,杨子荣就是利用这个问题,成功的打入土匪内部。在现实生活中一样,如果我拥有了你的密码,那么我就拥有了你QQ上的这个身份。并且,这件事很容易做,毕竟123456这样的口令始终是最流行的口令。虽然现在有了双因子认证(口令,短信验证码),但只是加大了难度,由口令代表你的身份变为口令,手机代表你的身份。
- 口令不能分发,势必不能大规模使用
口令是一个人的秘密,不能告诉任何人,这势必会影响大规模使用,这种Client-Server的模式还好,但是当前大量P2P模式的认证怎么办?每个人保存所有人密码的hash来认证?这种方法代价太大
- 杨子荣式的“挑战-应答”方式在身份认证中代价太大
这种问题可能会没有一个尽头,并且不能保证即使通过挑战,就一定百分百是真实身份。
实质上,口令的方式代表的是密码体制中的对称密码体制。
上述的问题也是对称密码体制存在的问题:密钥分发和管理问题。可能你发现了,对称密码就使用一把钥匙,那么问题就来了,在当今网络时代,如果大家都共享一把钥匙,那么会出现什么情况呢? 当然就是加密如同没有加密一样。所以,对称密码的痛点就在于秘钥分发的困难性。二战时期,非对称密码体制还未出来,德军和盟军都使用密码本这个东西来分发秘钥,可想而知,如果密码本被缴获,那么代价就是消息不安全,更换新的密码本(人力、物力、财力)。
这种对称加密技术的问题给身份认证也带来了挑战。那么解决方案是什么呢?
现有方案是什么
现有的解决方案是使用公钥基础设施。
非对称加密技术
公钥基础设施的基础是非对称加密技术
非对称加密技术,简单来说就是使用者有一对密钥:公钥和私钥。顾名思义,公钥就是公开的密钥,可以发给任何人,私钥就是秘密密钥,只能自己保留。
根据对公钥私钥的使用不同,非对称加密体制可以干两件事:加密和签名。
加密
当使用公钥对消息进行操作,用私钥进行逆操作,这种方式称为加密。
签名
用私钥进行加密,用公钥进行逆操作,这种方式叫做签名。当然一般加密的部分是消息的哈希摘要。这样用户只需要验证能否用发送者的公钥解密,然后再对比哈希摘要就可以实现对私钥的认证,继而完成身份认证。在身份认证中,更多的使用的是签名。
公钥基础设施
有了公开密钥算法之后,我们就可以通过他人的公开密钥与其安全通信,但是还有一些悬而未决的问题:如何与那些从未谋面的人进行沟通?如何存储和吊销密钥?最重要的是,如何让现实世界中数以百万计的服务器、几十亿人和设备之间安全通信?这个问题非常的复杂,而公钥基础设施(public key infrastructure, PKI)就是为解决此问题而建立的。
数字证书
同样,公钥如何分发也是一个问题。直接把公钥的发给别人可以吗?理论上是可以的,但实际上有诸多问题,例如我怎么知道你发给我的一串数字(公钥)是谁的?怎么发,如何保证没有被篡改?
在现实生活中,我们的做法是,给你颁发一张证书,证明你是来自蓝翔的某某某,你具有什么资质,那些产品是你做的。在数字空间中呢?
同样,数字空间中有数字证书。数字证书包含证书持有人的真实身份信息、公开密钥信息等信息一段数据。目前数字证书的格式普遍遵循 X.509V3 国际标准,证书包括证书的版本号、序列号、算法、命名规则通常采用 X.500 格式、有效日期、名称、公钥信息、数字证书颁发者标识符。 X.509V3 数字证书包括扩展标识符、关键程度指示器和扩展字段值。数字证书扩展包括密钥信息、政策信息等。
认证中心
但是是不是谁都可以颁发证书呢?理论上也是可以的,但是实际上,你发的也许根本没人信。这就和现实生活中做假证的一样,不具有可信性。
颁发证书需要强大的机构做背书。这种机构就是认证中心 CA。
认证中心 CA 为特定的应用网络和用户提供身份认证服务,负责验证公钥的合法性,证明用户是证书的合法持有者,同时,签发、分配、储存、更新和删除证书。这里我们不妨称这个CA为大哥,因为它具有最大的权威。
证书链
但是一个大哥来干这个事好费劲啊!全球这么多需求,这么多用户。怎么办呢?找些小弟吧,让他们来我这登记一下,然后我授权给他们,给与他们颁发证书的资质。这样就形成了层次结构。
但是有个问题出现了,小弟可靠吗?我原来是信任大哥的,但是现在你派个小弟来,我就有点犹豫了。
但是此时,如果小弟拿出一张纸条,纸条上说:我是XXX,我是大哥的小弟。并且最后附上大哥难以伪造的签名,可信吗? 这就好多了对吧,感觉一下就信任了这个小弟了。
万一小弟又派出了小小弟呢?那就小弟再写一张纸条,类似的内容,签上小弟的名字,给小小弟,小小弟就拿着开心的去办事了。这样就形成了
这样的信任链条,而这里面信任的基础就是签了名的纸条(数字证书)。如何验证呢?就是拿着纸条一个一个去问上一级,这是你的签名吗?直到问到大哥。
总结
本来想写具体的PKI的技术,但是考虑到具体技术之前需要对整体有个认识Big Picture。所以最后题目改为“闲谈”。固然有很多不完善的地方,恳请大家批评指正。
参考材料
HTTPS权威指南:在服务器和Web应用上部署SSL/TLS和PKI
[转帖]公钥基础设施(PKI,Public Key Infrastructure)闲谈的更多相关文章
- [转帖]公钥基础设施(PKI)/CFSSL证书生成工具的使用
公钥基础设施(PKI)/CFSSL证书生成工具的使用 weilovepan520关注1人评论84344人阅读2018-05-26 12:22:20 https://blog.51cto.com/liu ...
- 公钥基础设施PKI利用SRAM物理不可克隆函数PUF实现芯片标识唯一性
下面给出PKI利用SRAM PUF实现芯片标识唯一性的方法思路: PKI利用SRAM PUF实现芯片标识唯一性的方式 (1)使用PUF原因 物理上不可克隆函数利用硅制造的自然变化来产生每个芯片统计上唯 ...
- PKI公钥基础设施简介
PKI(Public Key Infrastructure)公钥基础设施是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书.一个机构通过采用PKI 框架管理密钥和证书可以建立一个安全的 ...
- PKI(Public Key Infrastucture)介绍
PKI(Public Key Infrastucture)介绍 根据Wikipedia PKI词条整理. PKI(Public Key Infrastucture)是一系列的规则.策略以及过程,可以用 ...
- 公钥基础设施体系和EJBCA的一些概念
最近一段时间的在公司做的事情是: 1. 为公司的一些线上系统启用https(使用nginx反向代理的方式来实现,之前的应用无需做改动) 2.为符合规则的用户颁发数字证书(自建CA来实现,目前的用途是给 ...
- PKI(公钥基础设施)基础知识笔记
数字签名 数字签名(又称公钥数字签名.电子签章)是一种类似写在纸上的普通的物理签名,可是使用了公钥加密领域的技术实现.用于鉴别数字信息的方法. 一套数字签名通常定义两种互补的运算.一个用于签名,还有一 ...
- 公钥(Public Key)与私钥(Private Key)
公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分.公钥通常用于加密会话密钥.验证数字签 ...
- .NET导入openssl生成的公钥之BEGIN RSA PUBLIC KEY
.NET导入openssl生成的公钥之BEGIN RSA PUBLIC KEY 我得到了一个公钥,形式如下 -----BEGIN RSA PUBLIC KEY----- MIGJAoGBAMroxz3 ...
- SSH公钥(public key)验证
安全的设置服务器 登陆,之前用用户名和密码登陆服务器 这样不安全 ,用SSH公钥(public key)验证 这个办法能很好的解决 登陆服务器 和安全登陆服务器 的特点: 目标: Client 免输 ...
- Putty使用公钥认证时,报错:Disconnected: No supported authentication methods available(server sent:public key) 问题的解决
Putty使用公钥认证时,按照常规方法设置,一直报错:Disconnected: No supported authentication methods available (server sent: ...
随机推荐
- Cesium中用到的图形技术——Computing the horizon occlusion point
译者注:本文翻译自Cesium官方博文<Computing the horizon occlusion point>,by KEVIN RING. 你厌倦了地平线剔除吗? 太好了,我也没有 ...
- JavaScript异步编程1——Promise的初步使用
目录 1. 概述 2. 详论 3. 参考 1. 概述 Promise对象是ES6提出的的异步编程的规范.说到异步编程,就不得不说说同步和异步这两个概念. 从字面意思理解同步编程的话,似乎指的是两个任务 ...
- 【华为云技术分享】DLI跨源|当DLI遇见MongoDB
导语: MongoDB作为灵活高效易扩展的no-schema数据库,越来越受到互联网公司.游戏行业等开发者的青睐,但是MongoDB有着独特的语言接口,并不能很好满足数据分析师构建数据治理应用的需求, ...
- 鸿蒙轻内核源码分析:MMU协处理器
摘要:本系列首先了解下ARM CP15协处理器的知识,接着介绍下协处理器相关的汇编指令,最后分析下MMU相关汇编代码. 本文分享自华为云社区<鸿蒙轻内核A核源码分析系列六 MMU协处理器> ...
- 讲透学烂二叉树(五):分支平衡—AVL树与红黑树伸展树自平衡
简叙二叉树 二叉树的最大优点的就是查找效率高,在二叉排序树中查找一个结点的平均时间复杂度是O(log₂N): 在<讲透学烂二叉树(二):树与二叉/搜索/平衡等树的概念与特征>提到 二叉排序 ...
- 对不起,你做的 A/B 实验都是错的——火山引擎 DataTester 科普
DataTester 是火山引擎数智平台旗下产品,能基于先进的底层算法,提供科学分流能力和智能的统计引擎,支持多种复杂的 A/B 实验类型.DataTester 深度耦合推荐.广告.搜索.UI.产品功 ...
- 一款基于.NET开发的免费的火车票分流抢票软件
前言 接近年底了又到了全员抢票的日子,今天有同学在技术群里问有没有黄牛推荐帮忙抢车票的.今天分享一个我一直在用的基于.NET开发的.完全免费的火车票分流抢票软件:Bypass. 软件介绍 Bypass ...
- Github 自建一个 Helm Charts 库
前言 在构建私有的 charts 仓库之前,有几个先决条件: Helm 已经安装,版本号是 v3 拥有一个 Github 账号 初始化仓库 在 github 仓库上新建一个仓库,我这里命名为 helm ...
- 玩转Python:用Python处理文档,5个必备的库,特别实用,附代码
在Python中,有几个流行的库用于处理文档,包括解析.生成和操作文档内容.以下是一些常用的库及其简介和简单的代码示例: PyPDF2 - 用于处理PDF文件. 简介:PyPDF2是一个纯Python ...
- vmware中 centos 突然不能联网,ens33丢失,见了鬼了..........
本人笔记本上vmware中centos允许一直很稳定,今天启动centos准备docker打包,结果发现不能联网了!!! ifconfig一下,发现ens33没了,见鬼了吧! 于是一通vmware虚拟 ...