假设两个参与者Alice和Bob执行一个给定的协议,这是他们之间的消息交换序列。
我的问题是:如何使用密码技术提供一个安全可靠的通信通道,以便当Bob向Alice发送消息"M“时,Alice将能够知道消息"M”是否来自Bob?
是否有不使用证书的解决方案?
发布于 2011-11-09 15:59:00
需要一些Bob知道的秘密或私密信息(可能的攻击者不知道),我们需要一种方法,让Alice能够以某种方式检查Bob是否拥有这些信息。
这可能是一个私钥,Alice知道相应的公钥(并且它是Bob拥有的)。然后Bob可以使用私钥来签署消息M,或者在信道协商期间使用的一些消息,以确保没有中间人攻击。确保Alice知道Bob是所有者的自定义方法是通过提供一个证书来说明这一点,但是任何其他方法(即他们以前见过)也会有效。
另一种可能是共享的秘密,比如密码。当然,Bob不能简单地发送带有消息的密码(至少,如果他不确定Alice的身份和连接的机密性),就像拦截器可以读取密码一样。但是Bob和Alice都可以从密码中派生出一个密钥,并使用该密钥作为MAC (消息身份验证代码)的身份验证密钥,并附带消息。(您还可以从此密码派生加密密钥,以获得机密性。)
更详细的协议允许Alice本身没有Bob的密码,而只有一个“密码验证器”,这允许检查Bob有密码,但不足以单独验证消息。
所有三种方法都可以在SSL或TLS协议中使用:第一种方法通常是用证书完成的,但也可以不使用它们(或者使用自签名证书),只要Alice能够以某种方式验证Bob的公钥。第二个被称为“预共享密钥”,第三个称为SRP (两个TLS扩展)。
发布于 2011-11-09 16:24:41
是的,当然有办法。
保罗在生成加密会话的上下文中回答了这个问题(即,当Alice开始对话时,她如何知道她真的在与Bob交谈);我将在实际消息的上下文中回答(她最初建立的会话是与Bob一起创建的,但她如何知道她刚刚收到的消息也来自Bob)。
最常见的机制是使用“消息身份验证代码”(或MAC)。这是一个密码原语,接收消息和密钥,并生成“标记”。MAC的基本属性是,如果您不知道密钥,则无法为任何消息生成“标记”(即使您已经看到具有相同密钥的其他消息/标记对)。一个常见的MAC称为HMAC (参见http://en.wikipedia.org/wiki/HMAC )。
现在,当生成加密会话时,我们生成Alice和Bob都知道的会话密钥(而不是其他人);我们使用这些密钥加密通信量。因此,我们所做的也是生成一对MAC密钥(一个用于验证从Alice到Bob的流量,另一个用于验证Bob到Alice的通信量)。
现在,当Bob向Alice发送消息时,他获取"Bob“MAC密钥的副本,并使用该副本计算消息的MAC;然后将该消息附加到加密的消息中。
当Alice收到这条消息时,她会将"Bob to Alice“MAC密钥的副本拿来,并计算Bob消息的MAC。然后,她将计算出来的MAC与她在消息中找到的MAC进行比较。如果两个MAC进行比较,她就会接受这个消息。
原因如下:她知道只有知道MAC密钥的人才能正确地生成MAC。她也知道只有两个人知道那把钥匙,那就是她自己和鲍勃。她还知道,她永远不会基于该密钥创建消息(她在向Bob发送消息时使用另一个MAC密钥),因此消息必须来自Bob(并且在传输过程中没有被修改)。
https://crypto.stackexchange.com/questions/1155
复制相似问题