在密码学中,你就是你所知道的。如果你想避免中间人攻击,那么Alice必须有一个“Bob”的概念,这意味着Bob必须知道一些攻击者不知道的数据元素。在这里,你的攻击者是服务器,它理想地位于发起攻击的位置。
因此,问题是:谁是Bob?服务器如何成为“非Bob”?
例如,“Bob”可以被定义为:“Bob是一个拥有驾照上写有‘Bob’的人类”。或者:“Bob是我在酒吧遇到并喝了一杯啤酒的那个家伙”。
使用非对称加密可以将问题简化为对公钥的信任问题。Alice将使用她相信是Bob的公钥。因此,Alice只需要确保她拥有的公钥确实归Bob所有。公钥的所有权由相应私钥的控制来定义:Bob的公钥是私钥完全由Bob控制(例如,只有Bob知道该密钥,或者私钥在硬件令牌(智能卡)中 - Bob放在钱包里)。
基本解决方案是直接交换公钥。当爱丽丝和鲍勃在酒吧相遇时,他们互相交换了公钥。因此,爱丽丝可以“根据定义”信任鲍勃的公钥。为了更便于交换(特别是在喝了几杯酒之后),爱丽丝和鲍勃可以仅交换“指纹”,即计算公钥上的哈希值。这些值比公钥短(例如,RSA公钥通常超过1000位,而128位足以验证给定的公钥是否匹配)。在这种设置中,服务器拥有公钥存储库,爱丽丝和鲍勃只需重新计算指纹以确保服务器没有做假。
更先进的解决方案是使用证书,从而减轻了直接饮酒的需要。证书是一个包含
身份(例如“鲍勃”这样的名称)和公钥的盒子。该盒子由
认证机构(CA)签名:CA通过应用其签名来确认公钥确实属于鲍勃。如果爱丽丝知道CA的公钥,则她可以验证证书上的签名,然后信任公钥与证书中包含的身份之间的链接。
认证是信任的委托。Alice将她的信任委托给了CA;假设CA(我们称之为Charlie)去酒吧见Bob;通过证书,Charlie告诉Alice:“是的,那确实是Bob的密钥,在他喝第三杯后,他向我展示了它”。这里有点混乱,因为委托信任并不容易(特别是如果Charlie有暴饮暴食的习惯)。当一个CA为另一个CA签署证书时,委托可以进一步进行。在这种情况下,Charlie告诉Alice:“我没有见过Bob,但我见过Daphne,她可能见过Bob并充当了CA”。Alice使用Charlie颁发给Daphne的证书和Daphne颁发给Bob的证书,可以验证这个签名链。
这里的棘手之处在于,虽然艾丽丝可能认识查理并相信他有能力在受到一加仑吉尼斯啤酒的影响下正确地确认鲍勃,但艾丽丝并不认识达芙妮。在艾丽丝-查理-达芙妮-鲍勃的链条中,艾丽丝不仅必须相信查理是可靠的(他确实正确地确认了达芙妮),而且还必须相信查理不会轻信,即如果达芙妮本人不值得信任,查理会拒绝为她签署证书。在实际情况中,信任在被委托后迅速退化。
使用证书时,主要有两种可能的结构:
层次式证书认证机构(CA):有一个或少数几个“根证书颁发机构”,这些机构被所有人构造知道。CA只有在合同协议中委托给另一个CA(即使用传统标志在身份证书上签名,该标志表示:“此公钥可用于验证证书上的签名”),并规定了两个CA在认证方面的法律责任。这意味着委托是正式定义的,而且不容易。通常称为“认证策略声明”(CPS)的律师兼容性认证合同是一份长达200页的文件。
信任之网:每个人都作为CA。在缺乏“正式可信度”的情况下,每个单独的链只产生很少的信任。这意味着需要大量的链来补偿。如果Alice可以验证通过不同参与者的多个不同链路到达Bob,例如Charlie-Daphne-Bob链路、Elijah-Fiona-Bob链路和Gerald-Hillary-Ivan-Bob链路,则她将仅接受Bob的密钥。他们都是酒鬼,但是如果Alice要求具有不同证书的n条链路,则伪造的Bob必须支付许多回合才能腐败每个Alice使用的链路的至少一个参与者(如果Alice要求n条具有不同证书的链路,则攻击者必须腐败至少n个参与者)。
因此,认证业务主要是一项程序性的事务:谁是CA,CA在签发(签名)证书之前验证什么,整个过程从法律角度来看如何处理等等。这些程序本质上是复杂的,并且必须由证书格式中的细节来支持(例如标志“此公钥是CA密钥”)。目前定义的两种主要标准格式是
X.509和
PGP。X.509对分层CA有很多支持,是一种非常混乱的标准、格式、实践和委员会。PGP(以“OpenPGP”命名的标准)没有真正支持分层CA;它是为了与信任网络一起使用。OpenPGP比X.509简单但更受限制,特别是如果您希望证书背后有强大的法律意义。
对于即时通讯服务器来说,所有这些可能都是过度的。Alice 真正想要的身份概念可能是“重复”的概念:“那个 Bob 是我昨天聊过天的那个 Bob”。Alice 事先不认识 Bob,但与他交谈一次就会在 Alice 的眼中建立起他的身份。她只是不想被另一个 Bob 愚弄。为此,“Alice 的软件保存任何新聊天者宣布的公钥,并在之后使用”这样的简单过程就可以达到目的。记住,关键问题是要正确地“定义”你所追求的身份概念。