大家好,又见面了,我是你们的朋友全栈君
PKI(公钥设施基础,Public Key Infrastructure)是一种标准化的密钥管理平台,能为网络应用提供加密和数字签名,以及密钥和证书管理体系的服务。在几乎所有介绍PKI的书籍或文章上,我们都能看到类似于这样的一句话:使用PKI就能保证网络应用的安全。那么,PKI体系的安全性到底怎样呢?就让我们来逐一列出PKI体系的十大安全隐患:
风险1:证书持有者能被信任吗? 在PKI中,CA总是被认为是可以信任的,并且,由CA颁发的证书的持有者也是可以信任的。但是在密码学中,CA是可以信任的,仅仅意味着CA能够妥善的保管好自身的私钥,并不意味着你有任何理由信任CA所颁发的证书的持有者(而绝大多数PKI系统甚至是不经用户许可即将可信任CA颁发证书的持有者视为可信任!)。PKI设计者的逻辑是:你已经得到一个由CA颁发的可以信任的证书,该证书告诉你持有者的姓名(或公司名等),因此你可以知道持有者是谁,而这些就是你所需要知道的全部信息。显然,这样的逻辑是不可依赖的。
风险2:你的私钥安全吗? 在PKI体系中,证明你自己身份的唯一方法是使用你自己的私钥。但问题也就随着出现了,你保管好你的私钥了吗?存放在电脑上的私钥可能被病毒或者木马盗窃。如果你已经将私钥进行过加密处理,那么你的加密口令足够强壮吗?而一旦私钥被盗,也就相当于你的身份可以被别人随意使用,因此,这些都是不得不考虑的问题。
风险3:鉴别证书的机器安全吗? 由于证书鉴别使用的是公钥,也就没有任何需要保密的东西,这看来似乎是安全的。但是,证书鉴别确实需要使用一些公钥,这样,一旦攻击者成功将他的公钥添加到用于鉴别的公钥列表中,他就能自己颁发证书,并且这些证书也会被PKI体系视为合法用户。解决这个问题的唯一途径就是确保存放鉴别使用的公钥的电脑的安全性。
风险4:证书持有者就是你寻找的那个吗? 通常,PKI证书会和持有者的姓名相联系,但在现实中,同名的人不少,光凭这一点无法判断该证书是否属于你所寻找的那个人。因此,PKI系统也添加了一些其他信息作为标识,但问题也随之而来,你对寻找的那个人有足够了解吗?同时,你知道他的证书会由哪个CA进行颁发吗?
风险5:CA足够权威吗? 尽管我们可以假设CA是颁发证书的权威机构,但CA是证明证书上包含内容的权威机构吗?以广泛应用的SSL为例,证书上包含的持有者姓名(通常是公司名)和DNS域名两项就有着很大的安全漏洞。首先,公司名是该公司在注册时申请的,而所有浏览器里的SSL CA都不是接受公司注册的权威机构;其次,域名也不是在CA处注册的。这样,证书持有者向CA提供的注册信息中就有足够可能性包含虚假信息,导致最终用户受骗。
风险6:用户端程序设计合理吗? 显然,客户端程序也可能,并且已经成为PKI体系中的一大缺陷。仍然拿我们熟悉的SSL为例。当你浏览网页时,浏览器仅仅会将证书和DNS域名作比较,而不会考虑页面上显示的内容到底是否和证书上描述的相符,并且,浏览器也不会主动向用户提供证书的任何资料。显然,这样的设计是有巨大缺陷,可能造成严重的欺骗的。
风险7:CA还是CA RA? 前面提到CA没有对证书持有者所提供的内容进行审核,从而可能造成持有者进行欺骗。因此,部分CA也添加了一个RA(Registration Authority),专门用于对证书申请者和持有者所提供的内容进行审核。这种做法看上去更安全了,但实际上,这样做的风险反而提高了:由于相对独立的CA拥有颁发证书的权力,并且现在进行证书颁发时CA不会审查申请者所提供的内容,这样就可能造成证书的误颁发,并且,由于新增了独立的机构,根据木桶原理,安全体系将会由于任意一方的不安全而彻底崩溃。
风险8:CA是如何识别证书持有者的? 这里说的识别包含两层含义:首先是申请者身份的识别,由于绝大多数的CA并不是识别申请者身份的权威机构,从而使得申请者可能冒用别人的身份申请并获得证书,这一点在跨国申请时显得尤为突出。其次是如何识别证书持有者是否就是申请者本人,前面提到由于种种原因,证书可能被盗,这就带来CA如何能保证证书一定是被合法用户持有的问题。
风险9:PKI的实现合理吗? 只有合理的使用证书,才有可能获得安全性,但在现实中的很多PKI实现都没有充分考虑到一些细节,实现者往往从使用户方便操作,或者是系统速率的角度出发,而忘记一些安全要点。首先是证书的生存时间,证书是基于密码学的,而凡是对密码学有所了解的人都知道密码是有着生存时间的,一定长度的密码在经过一段时间的使用之后就必须更换,但是,很多PKI系统的实现都没有考虑到证书的生存周期,因为他们认为,用户不愿意频繁的更换证书。其次,是公钥长度的问题,目前512位的RSA已经变得不那么可靠,但其计算时间显然大大低于2048位的RSA,PKI的实现者可能为了提高系统的运行效率而忽视了公钥长度太短带来的问题。还有就是前面提到的SSL的问题,浏览器仅仅提到正在浏览的页面是拥有合法证书的,所有通讯都是加密的,但并不说明证书的拥有者是谁。这就好比你在你见黑暗的房间里和一个人讲话,尽管你知道别人是不可能窃听到你们的对话,但在知道对方真实身份前,你可能将自己的秘密告诉他吗?
风险10:为什么这样使用PKI? 或许对于PKI应用而言,最大的挑战来自SSO(Single Sign-On)系统,因为没有用户愿意多次重复的输入密码进行登录。因此,有的实现者就开始了对PKI系统的改进,加入了SSO的特性,但问题也来了,那就是,当用户偶然离开自己电脑时,任何人都可以使用这台电脑,冒充他的身份进行任何操作。
当然,PKI也不是一无是处,毕竟它给我们指明了一条新的方向,只要继续朝着这个方向去研究,开发出更安全的体系,弥补PKI的这些缺陷,我们就一定能获得更高的安全性!
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172026.html原文链接:https://javaforall.cn