背景
证书是一种比较安全可靠的,那么如何进行破解呢?
破解的根源在于发送方的信息通过公钥加密后,窃取方如何通过私钥进行解密,问题是一般情况下,无法获得私钥,那么大多数思路就是如何提供一个假的公钥给发送方,这样窃取方就偷偷使用假公钥配对的私钥了。
一 在公钥注册之前攻击
证书是认证机构对公钥及其持有者的信息加上数字签名的产物,由于加上数字签名之后会非常难以攻击,因此我们可以考虑对施加数字签名之前的公钥进行攻击。
假设Bob生成了密钥对,并准备在认证机构注册自己的公钥。在认证机构进行数字签名之前,主动攻击者将公钥替换成了自己的。这样一来,认证机构就会对“Bob的个人信息”和“攻击者的公钥”这个组合进行数字签名。
密钥对是先于证书生成的。
要防止这种攻击,可以采用下面的做法。例如Bob可以在将公钥发送给认证机构进行注册时,使用认证机构的公钥对Bob的公钥进行加密。此外,认证机构在确认Bob的身份时,也可以将公钥的指纹一并发送给Bob请他进行确认。
二 注册相似人名进行攻击
证书是认证机构对公钥及其持有者的信息加上数字签名的产物,对于一些相似的身份信息,计算机可以进行区分,但人类很容易认错,而这也就可以用来进行攻击。
例如,假设Bob的用户信息中名字的部分是:
Name=Bob
而攻击者用另一个类似的用户信息:
Name=BoB
注册了另一个不同的公钥。这个公钥的名字叫BoB,但实际上确是攻击者的公钥。
随后,攻击者伪装成Bob,将
Name=BoB
的公钥发送给Alice。Alice看到证书中的用户信息,很可能就会将BoB误认为是自己要发送消息的对象Bob。
要防止这种攻击,认证机构必须确认证书所包含的信息是否真的是持有者的个人信息
,当本人身份确认失败时则不向其颁发证书。
三 窃取认证机构的私钥进行攻击
主动攻击者想出一个大胆的攻击方法,那就是窃取认证机构的私钥。如果得到了认证机构的私钥,那么任何人就都可以以该认证机构的身份颁发证书了。
要窃取认证机构的私钥,需要入侵认证机构的计算机,或者收买有权访问认证机构私钥的人。认证机构是否妥善保卫自己的私钥,是与该认证机构所颁发证书的可信度密切相关的。认证机构之所以称为认证机构,是因为它的数字签名是可信的,因此认证机构必须花费大量的精力来防止自己的私钥被窃取。
一般来说,当发现主动攻击者利用认证机构的私钥签发证书时,就可以断定认证机构的私钥被窃取了。由于认证机构记录了自己签发证书的序列号,因此能够判断某个证书是不是该认证机构自己签发的。
如果认证机构的私钥被窃取(泄露),认证机构就需要将私钥泄露一事通过CRL通知用户。
四 攻击者伪装成认证机构进行攻击
主动攻击者又想出一个更加大胆的方法,那就是自己伪装成认证机构的攻击。
运营认证机构既不需要登记,也不需要盖楼房,只要有运营认证机构的软件,任何人都可以成为认证机构。
现在攻击者成立了一个认证机构,然后对自己的公钥颁发了一张证书,并称“这就是Bob的公钥”。之后,他将这个证书发送给Alice。
Alice收到证书后使用认证机构(攻击者)的公钥进行验证,验证当然会成功,因为这个证书就是认证机构(攻击者)颁发的证书。Alice验证证书成功,于是,她就相信了这个公钥,并将准备发送给Bob的消息用这个公钥进行加密。随后,攻击者截获密文,就可以将内容解密了,因为攻击者持有解密的密钥(私钥)。
从这个例子可以看出,如果认证机构本身不可信,即便证书合法,其中的公钥也不能使用。要防范这种攻击,需要Alice自己多加小心,她必须要注意自己所得到的证书是哪个认证机构颁发的,这个认证机构是否可信。