我有以下设置:
远程主机生成一个密钥对。他通过安全通道向我发送他的公钥。我可以 100% 保证公钥是他发送的。然后,他使用该密钥对对一些以 JSON 格式编码的数据进行签名。他继续使用两个参数向我发出 POST Http 请求:
a) JSON 字符串 b) 从 JSON 字符串生成的签名。
最后,当我收到数据时,我使用他的公钥和他在 HTTP POST 中提供的签名进行验证。
此程序是否保证消息:
1)实际上是由发件人声称的主机发送的。2)不是被中间攻击的人改变了吗?
我有以下设置:
远程主机生成一个密钥对。他通过安全通道向我发送他的公钥。我可以 100% 保证公钥是他发送的。然后,他使用该密钥对对一些以 JSON 格式编码的数据进行签名。他继续使用两个参数向我发出 POST Http 请求:
a) JSON 字符串 b) 从 JSON 字符串生成的签名。
最后,当我收到数据时,我使用他的公钥和他在 HTTP POST 中提供的签名进行验证。
此程序是否保证消息:
1)实际上是由发件人声称的主机发送的。2)不是被中间攻击的人改变了吗?
此过程是否保证消息实际上是由发送者声称的主机发送的?
从技术上讲,答案是否定的。但这可能无关紧要,因为您的下一个问题的答案:
此程序是否保证消息不会被中间人更改?
是是的。
不受信任的主机可能会向您发送一条由您信任的来源签名的消息。他们只需要获取或捕获消息和签名。
如果您不使用 SSL,则无法保证您与受信任的服务器的连接。但是,只要您验证正在发送的消息是由与您拥有的公钥对应的私钥签名的,那么该消息就不会被更改,并且您知道它来自受信任的来源。
因此,最坏的情况是不受信任的主机向您发送受信任消息的副本。
对于您的需要,这可能合适,也可能不合适。如果您的消息与时间或顺序有关,那么这可能是个问题。如果他们将您的服务器置于特定状态,那也可能是一个问题。