您要问的是通常所说的“密钥管理”的一部分。如果你用谷歌搜索这个词,你会发现很多有趣的读物。您可能会发现您的解决方案需要解决密钥管理的其他部分,例如撤销和轮换。
在您正在查看的密钥管理的特定部分中,您需要弄清楚如何让两个节点相互信任。这意味着您必须确定一个您信任的单独事物,以作为节点信任的基础。有两种常见的方法:
信任第三方。这是我们用于我们访问的大多数网站的模型。创建我们的计算机时,受信任的第三方会创建设备以了解并信任某些实体,例如 Verisign。当我们通过 HTTPS 联系网站时,浏览器会自动检查 Verisign(或其他受信任的第三方证书颁发机构)是否同意这是它声称的网站。公钥密码学的魔力及其工作原理是一个完全独立的主题,我建议您进行调查(只需 google 即可:))。
独立、安全的通道。在这个模型中,我们使用一个单独的通道,就像管理员将秘密从一个节点传输到另一个节点。管理员可以以他/她希望的任何方式执行此操作,例如通过 USB 记忆棒在sneakernet 上携带的加密数据,或者数据可以通过她/他已经引导并可以验证其安全性的单独 SFTP 服务器传输(例如使用他/她自己的内部证书颁发机构)。这方面的一些变体是在名片上共享 PGP 密钥(如果您相信给您名片的人就是您想与之交流的人),或者通过电话呼叫密钥所有者并口头确认您收到的数据的哈希值与他们发送的数据的哈希值相同。
有在线密钥交换协议——你甚至可以在维基百科上使用“密钥交换”这个短语来查找它们,但你需要注意它们实际上保证了你需要确定的东西——比如协议如何验证通信通道的另一端。例如,Diffie Hellman 保证您已经交换了密钥,但从未交换过密钥的实际内容,但您不知道与谁通信 - 这是一种匿名密钥交换模型。
您还提到您担心消息重播。现代安全通信协议(如 SSH 和 TLS)可以防止这种情况。任何好的协议都会收到关于其安全属性的分析,这些分析通常在维基百科上得到很好的描述。
哦,你不应该创建自己的协议。有很多关于如何编写安全协议、分析现有协议以及安全属性(或缺乏安全属性)的书籍。除非您打算成为该主题的专家(这将需要多年时间和数千页的阅读),否则您应该走阻力最小的道路,只使用一个众所周知的、经过良好实践的、受人尊敬的协议来完成你需要的工作。