首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提供安全可靠的通信渠道?

如何提供安全可靠的通信渠道?
EN

Cryptography用户
提问于 2011-11-09 15:23:14
回答 2查看 2.3K关注 0票数 2

假设两个参与者Alice和Bob执行一个给定的协议,这是他们之间的消息交换序列。

我的问题是:如何使用密码技术提供一个安全可靠的通信通道,以便当Bob向Alice发送消息"M“时,Alice将能够知道消息"M”是否来自Bob?

是否有不使用证书的解决方案?

EN

回答 2

Cryptography用户

发布于 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扩展)。

票数 2
EN

Cryptography用户

发布于 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(并且在传输过程中没有被修改)。

票数 2
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/1155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档