论文笔记| CA 体系中的 Certificate Transparency

2019-12-06 reading CA web TLS

什么是 CT ?

在原始的 KPI/CA 体系中,并没有 CT 这样一个角色的存在。而引入这样一个角色,是为了解决 CA 体系 在结构上的弊端。

这篇博文讲述了 CT 的基本体系结构,而后简要介绍 CSS 2019 的论文 Certificate Transparency in the Wild: Exploring the Reliability of Monitors

现有 CA 体系的弊端

当前的 CA 体系,提供了一个用于确认公钥与实体对应关系的手段,是现代非对称密码学的基石之一。 但是这个体系的核心信任模型就是要相信“可信第三份”,也就是 CA 。换句话说,整个 TLS 体系要求整个互联网信任几百个 CA 实体可靠诚实的工作,这个条件看起来似乎是有一点好笑的。

当发生了一些安全事件,暴露出 CA 往往不能改按照我们预想的情况可靠的工作的时候,这个问题就变得非常明显了。但是 CA 机制是非常封闭的,原始 PKI/CA 体系不能提供任何对于 CA 的审计手段。唯一的监督措施就是这样一条基本原理 ———— 当 CA 犯错的时候,由根 CA 撤销其证书。这个惩罚其实是非常弱的,而且有一种事后诸葛的感觉。

如果一个 CA 由于主观或者客观的因素,签发了一张非法证书。那么攻击者可以使用这样的一张证书来假冒受害网站,或者发起中间人攻击,从而破坏了 TLS 体系身份认证的安全性。

所以 CT (Certificate Transparency) 的机制就是用于给 CA 体系补充这个审计的过程。

CT 体系的工作原理

CT 体系的工作原理是:当 CA 需要颁发一个证书的时候,需要将证书发送给 CT;由CT签名后,生成一个 SCT (签名证书时间戳);CA 得到 SCT 后将证书颁发。与此同时,CT 将证书信息记录在一个公开日志 log 上,以备用户和使用者查询。

但是 CT 的作为仅此而已,只能用于记录证书的颁发过程,并没有能够提供主动发现威胁的手段。因此需要一个审计者 auditor 的角色。

支持 CT 模式的客户端请求证书的时候,要求证书附着上 SCT 消息,并可能向 auditor 发起验证 SCT 的有效性。由 auditor 来检查 SCT 的真伪,并告知客户端。以此来保证这个证书被如实的记录在 log 日志上。

/images/ct.png

通过这种方式,CT提供了一种查询手段,使得网站所有者、用户以及第三方审计者可以审计某一个域名的所有证书。这样就可以避免某个 CA 误签发导致的安全事件。除了用户之外,也有一些第三方 monitor ,通过监视多个 log ,收集和整合数据。以此来减少用户的工作量(不再需要向所有 log 查询)

CT 体系的问题所在

在国科大和清华 Bingyu Li 等人的文章 Certificate Transparency in the Wild: Exploring the Reliability of Monitors 中之处目前 CT 仍然暴露非常严重的问题:

  1. 对于普通用户和网站所有者来说,监视所有的 CT log 是不显示的。由于日志产生速度过快,其存储和带宽已经超过了普通用户的承受能力,因此只能借助第三方 monitor 来提供安全审计的服务。

  2. 文章通过对 top 1000 以及 top 1M 网站的 log 的收集整理并和第三方 monitor 的结果做对比,发现目前第三方 monitor 的查询不能够保证所有结果都能够被收集到位。第三方 monitor 不能保证所有签发的证书都被搜出出来,这就导致了安全隐患。

  3. 文章给出了第三方 monitor 无法收集全部证书的原因的推测,并给出了建议。

其实从原理可以知道,能够收集到全部颁布的证书,并加以分析,是 CT 体系提供安全保障的核心所在。如果不能保障这一点,则整个 CT 体系都只能说降低的攻击风险,但无法从根源上解决问题。