两个客户端 Alice 和 Bob 使用服务器登录并通过服务器交换消息。登录时,他们都发送他们的公钥以存储在服务器上。当 Alice 想与 Bob 通话时,她用 Bob 的公钥加密一个对称密钥,并通过服务器将其发送给 Bob。
我如何确保服务器不会制作自己的公钥对并将其发送给 Alice 而不是 Bob 的公钥。这样,服务器将首先解密 Alice 发送的内容,然后使用 Bob 的真实公钥再次对其进行加密。
谢谢
两个客户端 Alice 和 Bob 使用服务器登录并通过服务器交换消息。登录时,他们都发送他们的公钥以存储在服务器上。当 Alice 想与 Bob 通话时,她用 Bob 的公钥加密一个对称密钥,并通过服务器将其发送给 Bob。
我如何确保服务器不会制作自己的公钥对并将其发送给 Alice 而不是 Bob 的公钥。这样,服务器将首先解密 Alice 发送的内容,然后使用 Bob 的真实公钥再次对其进行加密。
谢谢
由于 Alice 和 Bob 不能信任服务器,他们必须找到另一种方式来确认彼此的密钥。一种可能性是依赖另一方。如果 Bob 信任知道 Alice 的 Candice(并且知道 Candice 的公钥),Candice 可以签署 Alice 的公钥,然后将签名版本发送给 Bob。这称为信任网络。
通过让受信任的第三方(威瑞信、您的公司、信任网络等)签署 Bob 的证书,或者让 Bob 通过单独的带外安全路径将他的证书发送给 Alice(亲自交给她一个 USB 密钥例如)。
这两者都触及了 Bob 证书的核心含义。您只相信 Bob 的证书就是 Bob 的证书,因为您信任的人已经对其进行了认证。这个“某人”可以是 Bob 本人,也可以是签署 Bob 证书的可信第三方。您只能像信任验证者一样信任它。
在密码学中,你就是你所知道的。如果你想避免 MITM,那么 Alice 必须知道“Bob”是谁,这意味着 Bob 必须知道一些攻击者不知道的数据元素。在这里,您的攻击者是服务器,它位于发动攻击的理想位置。
所以问题是:鲍勃是谁?服务器“非鲍勃”如何?
例如,“Bob”可以定义为:“Bob 是一个人,他的驾驶执照上写着‘Bob’”。或者:“鲍勃是我在酒吧遇到并一起喝啤酒的那个人”。
使用非对称加密可以让您将问题简化为对公钥的信任问题。Alice 将使用她认为是 Bob 的公钥。因此,Alice 只需要某种方式来确保她拥有的公钥确实为 Bob 所拥有。公钥的所有权由对应私钥的控制来定义: Bob 的公钥是私钥在 Bob 的独占控制下的密钥(例如,只有 Bob 知道该密钥,或者私钥在硬件令牌中-- 一张智能卡 -- Bob 放在他的钱包里)。
基本的解决方案是直接交换公钥。当爱丽丝在酒吧遇到鲍勃时,他们互相给了对方他们的公钥。因此,Alice 可以“根据定义”信任 Bob 的公钥。为了更容易交换(特别是在喝了几杯啤酒之后),Alice 和 Bob 可能只交换“指纹”,即通过公钥计算的哈希值。这些值比公钥短(例如 128 位,而不是典型 RSA 公钥的超过一千位),并且足以验证给定的公钥是否匹配。在该设置中,服务器有一个公钥存储库,Alice 和 Bob 只重新计算指纹以确保服务器没有玩假游戏。
一个更先进的解决方案是使用证书,以减少直接饮酒的需要。证书是一个包含身份(例如名称,例如“Bob”)和公钥的盒子。该框由证书颁发机构(CA) 签名:CA 通过应用其签名来断言公钥确实属于 Bob。如果 Alice 知道 CA 公钥,那么她就可以验证证书上的签名,然后在公钥和证书中包含的身份之间的链接中获得信任。
认证是信任的委托。Alice将她的信任委托给 CA;据说,CA(我们称它为查理)去酒吧会见鲍勃;通过证书,查理告诉爱丽丝:“是的,那真的是鲍勃的钥匙,他在喝完第三品脱后给我看了”。事情在这里变得有点模糊,因为委派信任并不容易(尤其是如果查理有酗酒的习惯)。当一个 CA 为另一个 CA 签署证书时,委托可以走得更远。在这里,查理告诉爱丽丝:“我没有见过鲍勃,但我见过达芙妮,她可能见过鲍勃并担任 CA”。Alice 可以使用 Charlie 颁发给 Daphne 的证书和 Daphne 颁发给 Bob 的证书来验证该签名链。
这里的棘手点是,虽然爱丽丝可能认识查理,并相信他有能力在遇到鲍勃时正确识别鲍勃,即使在一加仑吉尼斯啤酒的影响下,爱丽丝也不认识达芙妮。在 Alice-Charlie-Daphne-Bob 链中,Alice 不仅要相信 Charlie 是可靠的(他确实正确地识别了 Daphne),而且还要相信 Charlie 不会轻信,即如果 Daphne 是,Charlie 会拒绝为 Daphne 签署证书。自己不值得信赖。在实际情况下,信任在被授权时会迅速下降。
使用证书时,主要有两种可能的结构:
分层CA:有一个或几个“根CA”,每个人都通过构造知道。一个 CA 仅在建立法律的合同协议中委托另一个 CA(即,它在身份中使用常规标志签署证书,该标志表示:“此公钥可被信任以验证证书上的签名”)两个 CA 在认证方面的责任。这意味着委托是正式定义的,碰巧这并不容易。与律师兼容的认证合同,通常称为“认证政策声明”(CPS),是一份长达 200 页的文件。
Web of Trust:每个人都充当 CA。在没有“正式可信度”的情况下,每条单独的链只产生非常少量的信任。这意味着要通过大量数字来弥补。只有当 Alice 可以通过不同的参与者验证通向 Bob的几个(许多)不同的链时, Alice 才会接受 Bob 的密钥。例如,Alice 需要 Charlie-Daphne-Bob 链,但也需要 Elijah-Fiona-Bob 和 Gerald-Hillary-Ivan-Bob 链。他们都是酒鬼,但他们可能是集体可靠的,因为假 Bob 必须支付很多轮才能破坏 Alice 使用的每条链中的一个参与者(如果 Alice 需要n条具有不同证书的链,那么攻击者必须至少破坏n参与者)。
所以认证业务主要是一个程序问题:谁是CA,CA在颁发(签署)证书之前验证什么,从法律的角度来看整个事情如何,等等。这些过程本质上是复杂的,并且必须由证书格式中的详细信息支持(例如标志“此公钥是 CA 密钥”)。当前定义的两种主要标准格式是X.509和PGP. X.509 对分层 CA 有很多支持,而且标准、格式、实践和委员会非常混乱。PGP(标准化名称为“OpenPGP”)对分层 CA 没有真正的支持;它旨在与信任网络一起使用。OpenPGP 比 X.509 更简单,但更受限制,特别是如果您希望证书背后具有强烈的法律意义。
对于 IM 服务器,所有这些都可能是多余的。Alice 真正想要的身份概念可能是重复的概念:“Bob 和我昨天聊天的那个 Bob 是同一个 Bob”。爱丽丝事先并不认识鲍勃,但与他交谈曾经在爱丽丝眼中确立了他的身份。她只是不想被另一个鲍勃愚弄。为此,一个简单的过程,例如“Alice 的软件保存任何新聊天的公开密钥,然后使用它”就可以解决问题。请记住,关键问题是正确定义您所追求的身份概念。
除非您控制服务器,否则您无法控制。当然,除非您已经知道 Bob 的公钥,但是……我认为您在这里遇到了鸡与蛋的问题。