你在问什么是通常所说的“密钥管理”的一部分。如果你谷歌这个词,你会发现很多有趣的阅读。您可能会发现您的解决方案需要解决的关键管理还有其他方面的问题,比如撤销和轮换。
在您所关注的密钥管理的特定部分,您需要弄清楚如何让两个节点相互信任。这意味着你必须确定一个你信任的单独的东西来建立节点的信任。有两种常见方法:
信任第三方。这是我们用于我们访问的大多数网站的模型。当我们的计算机被创建时,受信任的第三方创建设备以便已经了解并信任某些实体,如Verisign。当我们通过HTTPS联系网站时,浏览器会自动检查Verisign(或其他可信的第三方证书颁发机构)是否同意这是它声称的网站。公钥密码学的神奇之处在于它是如何工作的,这是一个完全独立的话题,我建议你调查一下(只是谷歌:))。
单独的安全通道。在这个模型中,我们使用一个单独的频道,就像一个将密钥从一个节点转移到另一个节点的管理员一样。管理员可以以他/她希望的任何方式执行此操作,例如通过U盘通过sneakernet携带的加密数据,或者数据可以通过已经引导的单独SFTP服务器进行传输,并且可以验证它是否安全(如他/她自己的内部认证机构)。其中一些变化是在名片上共享PGP密钥(如果您相信给予您名片的人是您想与之通信的人),或通过电话呼叫密钥所有者并口头确认您收到的数据的散列与他们发送的数据的散列相同。
有上线的密钥交换协议 - 你可以看看他们,甚至可能在维基百科上,使用短语“密钥交换”,但你必须要小心,他们实际上保证你需要的东西确定 - 就像协议如何验证通信信道的另一端一样。例如,Diffie Hellman保证你在交换密钥前不会交换密钥的实际内容,但你不知道与谁通信 - 这是一个匿名密钥交换模型。
你还提到你担心消息重播。现代安全通信协议,如SSH和TLS可以防止这种情况发生。任何优秀的协议都会收到有关其安全属性的分析,这些属性在维基百科上经常详细描述。
哦,你不应该创建自己的协议。关于如何编写安全协议,分析现有协议和安全特性(或缺少安全特性)有很多内容。除非你打算成为这个话题的专家(这将需要数年和数千页的阅读),你应该采取阻力最小的路径,只使用一个众所周知的,行使良好,备受尊敬的协议,你需要的工作。
来源
2013-08-05 19:18:06
atk
可能更倾向于对http://security.stackexchange.com –
有双方交换的公共密钥提前定义并输入给客户。这是唯一的方法 - 但即使他们被劫持的个人电脑也可能遭到内存劫持等。简单的回答:你不能。更复杂的答案:防止通过网络发送敏感信息并让用户使用其他方式传输信息。 –
以前一直在考虑持续监控的问题:p请参阅[Diffie-Hellman](http://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange)(例如不推荐)。重点是在安全通道上交换密钥是安全的。 – keyser