我对密码学的世界知之甚少,我才刚刚开始学习,所以我是新手:)
作为一个进入密码学领域的项目,我想编写一个客户端\服务器程序,它可以以安全的方式(即加密)发送和接收数据。
假设我想加密客户端和服务器之间或两个客户端之间的流量。我正在运行的服务只能在已知端口上与服务器或另一个客户端(也充当服务器)通信,服务器基本上在默认端口的一侧侦听连接。
我希望这些服务能够相互交谈,而不会让正在网络上收听的第三方能够解密对话内容或试图冒充服务。
我不是在寻找交换密钥的新方法(或者我应该吗?),我可以将密钥安全地保存在服务中,因此当x向y发送消息并返回时,它们将是唯一可以解密内容和响应(偏离路线,仅对经过验证的服务)。
- 旁注,密钥可以保存在程序中 - 硬编码,或者它可以从可以传递给客户端的事物组合(例如 IP、计算机名称、用户名或任何其他常量组合)中生成,因此它将能够生成密钥(假设我正在传递 IP、计算机名称和随机种子,将有一个已知的公式从这些值创建密钥)。
我需要使用对称密钥进行加密,但也许我可以像 SSL 一样尝试使用两个预先生成的密钥。
我知道如果我一次又一次地使用同一个密钥,第三方可以嗅探流量并获取密钥(最好是数学,它是如何完成的?),他收集的数据越多,就越容易(?)。
那么,我应该怎么做才能保证没有人能够获得加密密钥(最终读取数据)?我应该使用哪种密码?在我开始我的旅程之前,我还需要知道什么?