如果我直接连接到另一台计算机,我会证明我的 IP。但是,如果我想在纸上收到证明某人 IP 的消息怎么办?
例如,客户联系 Google 获取 JSON Web 签名,将其打印在纸上,将纸交给我,我可以验证包含其 IP 的消息的签名,而无需通过以下方式连接到客户端(或 Google) TCP。
是否有更简单或更好的方案?
如果我直接连接到另一台计算机,我会证明我的 IP。但是,如果我想在纸上收到证明某人 IP 的消息怎么办?
例如,客户联系 Google 获取 JSON Web 签名,将其打印在纸上,将纸交给我,我可以验证包含其 IP 的消息的签名,而无需通过以下方式连接到客户端(或 Google) TCP。
是否有更简单或更好的方案?
如果您使用加密,请考虑使用HMAC。如果不是,那么一个简单的散列或随机数对于微不足道的使用来说是可以的,只要它在给定的时间段内是唯一的然后过期。无论哪种方式,您都可以通过两种传输方式发送生成的值,以便它们可以相互匹配。服务器最好生成值以确保其真实性,例如:
“您好 TCP 客户端,通过其他传输向我发送 XXX 和您的 IP”。
“您好传输客户端,我看到您向我发送了值 XXX 和 IP YYY,我有一个匹配的 TCP 客户端”。
还要记住,如果您的 TCP 客户端位于路由器后面,对方将看到您的路由器的公共 IP,而不是路由器后面的客户端的私有 IP。因此,您的客户端必须发送路由器的 IP,并且可能还要发送其私有 IP。看你的实际需要。
不过,我真的不认为需要验证 IP。仅仅处理路由器的情况,更不用说试图避免 IP 欺骗,几乎不值得这样做。只需拥有经过身份验证的令牌就足够了。
更新:如果这不是您想要的,那么您必须将 IP 作为加密/散列的一部分。客户端获取一些种子值(有时称为nonce值)及其 IP 并将它们全部散列在一起,然后将结果提供给另一方。该方使用相同的种子/随机数值和它想要验证的 IP 并将它们散列在一起,看看它是否得出相同的结果。如果是这样,则 IP 匹配。