[转帖] CA如何保护自己的私钥
链接:https://www.zhihu.com/question/22260090/answer/648910720
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
无意中翻到这个老问题,随手在中英文互联网上搜了一圈之后,我意外发现没几个人对数字证书颁发机构(Certificate Authority,CA)的安全机制有个基本概念,更不要提各种具体的保护措施了。作为整个通信加密领域举足轻重的存在,大家只是默认“这个东西很安全”,但却很少有人仔细讨论它到底有多安全,这不得不说是一件很迷的事情。所以今天我就开一篇回答,聊聊CA是如何保护自己的私钥不被窃取的。
科普:CA是什么?私钥又是什么?
在这里先给不了解公钥加密体系的读者做一个简短的科普吧。所谓的CA,通俗来说就是担保人,互联网上所有身份的担保人。
比如说Google需要向用户证明自己是Google,那么Google就需要找到一家靠谱的CA,请工作人员核对各项手续和身份证明,然后为Google签发一张数字证书(Certificate)。在证书上,记载着Google的所有身份信息,和一个CA签下的数字签名(Signature)。
而CA的私钥(Private Key),是用来签名的一段二进制数据,通俗来说就是CA手里的那根签字笔。一旦这根签字笔外泄出去,那么攻击者就能够随心所欲地签发任何证书,伪装成Google、微软、中国银行等任何一家公司/机构,直接颠覆整个互联网的信用体系。用户将无法分辨网线对面到底是银行还是黑客,只能任人宰割,这可以说是不亚于“互联网崩溃”级别的大地震。
(当然,前提是这些公司没有启用HPKP协议,但是这个话题有些超纲了。)
正题:CA如何保护自己的私钥
以下讨论的主要是DigiCert(目前世界最大的证书颁发机构之一)当前施行的保护机制,其他证书颁发机构与它相比可能会有一定出入,但是不会偏差太大。
DigiCert当前的安全机制主要由四层组成:
第一层保护:注册机构(Registration Authority,RA)
在本科阶段的密码学教材里面,为了便于理解,课本上一般会说数字证书是向CA申请之后,由CA直接颁发的。但在现实生活中,申请者是根本没机会见到CA的,申请者见到的是一个名为RA的中介层。
RA扮演的角色相当于是一个防火墙或者说签证官,所有的申请都要先交给RA。审核通过之后,申请才会被上呈到CA手里等待确认。在CA和RA之间,存在一条双向认证的保密信道。只有手握RA私钥的人,才会被当做RA来对待,才有资格向上提交申请。这就保证了CA的通信接口不会直接对外暴露,减少了防守方的工作压力。
由于RA仅仅是一个联络员,手里保存的信息相对没那么敏感,所以RA的安保措施也就相对简单:
- 出入办公区域需要刷门禁卡,出入记录会登记在安保系统里。
- 大楼的内外走廊、审批室与其他办公区域都会装备动作感应装置与摄像装置。
- 非工作时间,所有的存储器与纸质材料都会锁在保险柜中存放。
想要攻击CA,RA就是第一道拦路虎。在这个位置,攻击者一般有三种思路:
- 通过社会工程学骗过RA的审核,打着某公司的旗号合法申请证书。
- 想办法窃取到RA私钥,假扮RA向CA提交申请。
- 把RA晾在一边,直接想办法偷取CA的私钥。
前两条思路算是超纲了,在本条回答里姑且略去不提。而如果采取第三条思路的话,就要接着面对下一道防护体系了。
第二层保护:CA物理防护机制
CA的物理防护机制着重于保护以下三个场所:
一:数据中心
听到数据中心这个词,是不是就以为这是存放CA私钥的地方啊?不好意思,CA私钥这个东西实在是太敏感了。哪怕是顶尖的商用数据中心,也是没资格存放CA私钥的。数据中心扮演的角色,仅仅相当于一个操作台。操作者可以从这里把操作提交上去,等待签发室签字。
但是,仅仅操作台也已经够敏感了。攻击者掌握这里之后完全可以签发自己的证书,只是会留下记录而已。所以对于数据中心,DigiCert采用如下规格的保护措施:
- 365天 x 24小时无间断的保安巡逻。
- 任何出入数据中心的工作人员都必须通过双重认证(门禁卡+指纹虹膜等生物识别)
- 每一次门禁记录和生物识别记录都会被双双登记到一个不可修改的日志系统里。
另外,每个数据中心都有专人进行持续的维护,一旦有某个数据中心出现维护中断的状况,那么DigiCert将会第一时间派人前去数据中心进行四项检查:
- 所有设备均处于正常运作状态。
- 所有保密容器均未遭到破坏。
- 门锁等物理安全装置均处于正常状态。
- 整个区域没有外人非法访问。
检查完成后,进行检查的管理员必须一一签字,并且登记审核人身份。
二:CA私钥离线存放室
好,终于到了重中之重了。
在最开始的科普里我提到过,私钥就是一段二进制数据,这听起来是不是很脆弱?黑客溜进某台机器里面,就可以神不知鬼不觉地复制走这段数据,然后海阔凭鱼跃天高任鸟飞,想怎么快活怎么快活。题主大概也是想到了这一点,所以在题目里问:“私钥是不是被某个拥有至高无上权力的人记在大脑里了?”
然而,目前RSA私钥需要起码2048位,ECDSA私钥需要起码384位。这么长的二进制数字,背错一位就全废了,没人担得起这个责任。更不用说每次还要背出来打到电脑里,这个过程就十分危险,会留下很多条潜在的攻击路径。
所以事情肯定不可能是这么来的。
CA手里,有一台神奇的机器,被称作加密模组(Cryptomodule)。这个机器的特点在于,它把加密解密相关的所有功能全部包揽了。所有的私钥,都直接在这台机器里生成;在这台机器里存储;在这台机器里参与计算。所有的敏感数据都直接锁在这台机器里加密解密,CA私钥这个东西,从生到死,不会有任何机会离开这台机器。哪怕你把这台机器拆了,里面的存储器也有特殊的封装技术和加密保护,任何人都没法轻易把里面的内容读出来。
从某种意义上讲,加密模组就是私钥本身,就是题主想象中的那个“至高无上的权力者”。除了把加密模组这整台机器拆掉或者搬走之外,基本上没有任何其他办法能拿到里面的私钥。这样一来,只要保护好加密模组,私钥的安全性就有保证了。
在这点上,DigiCert具体采取的安全措施是:
- 将加密模组锁在一台双认证保险柜里,需要最少两名工作人员同时认证才能打开。
- 启动加密模组需要一张操作卡和一台动态密码生成器,完成这两项认证才能启动机器。
- 操作卡和生成器要么锁在一个贴着封条的箱子里,要么锁在另一个双认证保险柜里。
- 出入存放室需要刷门禁,留下电子出入记录。打开封条和保险箱则要相互监督留下纸面记录。
顺便一提,这个加密模组可不是随便做做就完事的。美国联邦政府甚至专门为加密模组制定了一份69页的技术标准FIPS 140-2,详细划分了四个不同的安全等级和相应要求,重要设施采用的加密模组一般Level 2起步。
三:私钥生成室与证书签发室
一般来讲,私钥生成与证书签发可以直接在私钥存放点进行。但是如果有特殊情况的话,也可以在另一间同等安全性的房间里完成。
在加密模组的存取或激活过程中,需要保证最少两名操作员时刻关注着设备的情况。
第三层防护:员工管理机制
既然CA物理上讲这么难以渗透的话,可不可以混入或者收买内部的工作人员呢?可以,但是很难。
DigiCert的CA工作人员大致可以分为三类:
- CA管理员(CA Administrator)
- 操作员(Operator),包括RA Officer、System Engineer等
- 内部审查员(Internal Auditor)
任何一项操作,都必须要由一名CA管理员和一名相应的操作员共同完成。内部审查员无权做出任何操作,但是会在事后对操作记录进行审查。也就是说,CA进行任何一项操作,都要牵扯到最少三名工作人员,要收买就必须一口气买齐。
除此之外,DigiCert的工作人员每十年就要遭受一次严苛的背景调查,调查他们过去三年的居住经历,以及过去五年的工作经历、教育经历、犯罪记录等等。而且,最关键的几个工作岗位必须交给美国公民。(咳,看出来DigiCert的屁股坐哪边了吧?)
至于DigiCert员工需要定期接受安全培训这点,我个人怀疑其实没什么用。毕竟大公司的安全培训一般翻来覆去就那么一段,员工多做几次之后闭着眼睛都能过考试,实际操作中反而未必会按照培训来。
第四层防护:日志审计
哪怕你最后成功骗取几位DigiCert员工为你卖命,把设备偷了出来/签发了假证书,你以为你就万事大吉了吗?没有。
DigiCert的所有操作都是有日志记录的,而且日志设备只可追加不可修改,你根本没法抹消自己的操作日志。每两个月,DigiCert都会遣专人审计日志。每条操作日志都会离线保存至少七年,以便在有人东窗事发之后进行追查。
更变态的是,如果攻击者通过某种手段,强行让日志系统瘫痪的话,那么整个RA、CA系统就会全部停机。换句话说,如果你的操作留不下记录,那么你就别想做任何操作。
有了这层保险之后,任何人,哪怕收了天价的贿赂,做事前也必须掂量掂量。除非那个贿赂者真的手眼通天,通天到了整个DigiCert都不得不老老实实听话的地步,才有可能破坏这套安全体系。
好了,知道了这四层防护体系,是不是已经对攻击证书颁发机构感到跃跃欲试了?请请请,五年起步上不封顶。
另外,对信息安全感兴趣的话,欢迎阅读我写的其他信息安全科普类文章:
[转帖] CA如何保护自己的私钥的更多相关文章
- 自建CA证书搭建https服务器
由于CA收费,所以可以自建CA,通过将CA导入浏览器实现https的效果,曾经12306购票就需要自行导入网站证书. 关于https 2015年阿里巴巴将旗下淘宝.天猫(包括移动客户端)全站启用HTT ...
- 加密类型、数据加密解密过程以及CA创建
对称加密算法 对称加密:加密和解密使用同一个密钥 DES:Data Encryption Standard,56bits 3DES: AES:Advanced (, , 256bits) Blowfi ...
- [转帖]PKI系统深入介绍
PKI系统深入介绍 https://blog.csdn.net/liuhuiyi/article/details/7776825 2012年07月23日 20:17:01 liuhuiyi 阅读数 4 ...
- 自建 CA 中心并签发 CA 证书
目录 文章目录 目录 CA 认证原理浅析 基本概念 PKI CA 认证中心(证书签发) X.509 标准 证书 证书的签发过程 自建 CA 签发证书并认证 HTTPS 网站的过程 使用 OpenSSL ...
- 邮件服务TLS/SSL,CA证书
邮件服务TLS/SSL,CA证书 案例1:OpenSSL及证书服务 案例2:邮件TLS/SSL加密通信 1 案例1:OpenSSL及证书服务 1.1 问题 本案例要求熟悉OpenSSL工具的基本使用 ...
- PKI/CA与证书服务
目录 PKI CA RA LDAP目录服务 CRL证书作废系统 数字证书 证书验证 证书撤销 证书更新 PKI系统的构成 PKI PKI(Public Key Infrastructure)公钥基础设 ...
- Https 公钥、私钥、证书
.https的握手协议: http://blog.csdn.net/clh604/article/details/221799072.证书的概念:http://blog.csdn.net/sealya ...
- SSH配置私钥登陆服务器
前言 本文基于实际Linux管理工作,实例讲解工作中使用ssh证书登录的实际流程,讲解ssh证书登录的配置原理,基于配置原理,解决实际工作中,windows下使用SecureCRT证书登录的各种问题, ...
- 实现CA证书创建及客户端申请证书
author:JevonWei 版权声明:原创作品 CA证书的相关文件路径 openssl配置文件/etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf C ...
随机推荐
- Java Pom.xml 详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 【Nginx】使用nginx反向代理IIS实现80端口的解放
下载版本: 官网地址:http://nginx.org/en/download.html 我使用了稳定版本. 下载完成之后进行目录解压,解压之后大概就是这个样子: 网上很多人写这些了想了解概念的百度一 ...
- [PHP] 抽象类abstract的回顾
1.abstract定义为抽象的类不能被实例化. 2.它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的. 3.被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实 ...
- TensorFlow与Flask结合识别手写体数字
阅读本文约“2.2分钟” TensorFlow框架 ——TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统 ——可被用于语音识别或图像识别等多项机器学习和深度学习领域 ...
- 【Spring】6、注解大全
一.@interface Java用 @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类. 二.@Override,@Deprecated,@S ...
- JAVA-HashMap实现原理
一.HashMap实现原理 1. HashMap概述 HashMap是基于哈希表的Map接口的非同步实现.它允许存入null值和null键.它不保证存入元素的顺序与操作顺序一致,主要是不保证元素的顺序 ...
- mysql过程函数的建立与使用
记一次数据库函数的学习:工作中接口出现问题,导致页面数据显示错误,跟踪代码查看,最后找到sql语句中,但是sql比较复杂,同时调用了大量的函数,以此记录mysql函数的学习. 首先创建一个函数 选择参 ...
- RESTful api风格介绍
RESTful 接口是目前来说比较流行的一种接口,平常在开发中会非常常见. 有过和后端人员对接接口的小伙伴都应该知道,我们所做的大多数操作都是对数据库的四格操作 “增删改查” 对应到我们的接口操作分别 ...
- SpringBoot究竟是如何跑起来的?
摘要: 神奇的SpringBoot. 原文:SpringBoot 究竟是如何跑起来的? 作者:老钱 Fundebug经授权转载,版权归原作者所有. 不得不说 SpringBoot 太复杂了,我本来只想 ...
- 关于如何使用xposed来hook某支付软件
由于近期有业务上的需要,所以特地花时间去研究了一下如何使用hook技术.但是当我把xposed环境和程序编写完成时,突然发现手机上的某个支付软件无法使用了.这个时候我意识到,应该是该软件的安全机制在起 ...