【发布时间】:2010-11-04 01:19:29
【问题描述】:
假设您有两个客户端,C1 和 C2,每个客户端都有一个与之关联的 GUID。
当您在 C2 上收到一条消息时,假定来自 C1(通过检查 GUID 并看到它与 C1 的 GUID 匹配),但是由于不能保证该消息来自 C1(C3 可能刚刚发送了消息,在消息头中发送了 C1 的 GUID)必须验证消息实际上来自 C1。
我一直在研究使用非对称加密 (RSA) 让 C1 发送一条包含 [C1.GUID; RSAEncrypt(C2.PUBLIC_KEY, C1.GUID); MESSAGE] 的消息,然后让 C2 基本上做这样的检查(python 伪代码):
message.GUID == RSADecrypt(C2.PRIVATE_KEY, message.ENCRYPTED_GUID)
这是一种可行的方法吗?还是有其他一些更聪明/更明显的方法来验证消息的发件人?
【问题讨论】:
-
你考虑过 SSL 吗?
-
@battal - SSL 仅加密客户端 1 和客户端 2 之间的信息。它无助于验证客户端 1 是客户端 1 而不是客户端 3。它只会阻止客户端 3 监听事务。
-
您没有告诉如何您发送消息。您可能希望使用 WCF,它允许您为此目的使用 X.509 证书。您无需编写任何程序即可使用该证书,只需将证书添加到您的配置文件中即可。此处显示了一个示例:codeproject.com/KB/WCF/wcfcertificates.aspx
-
@0xA3,好主意,但这更像是一个关于如何验证发件人身份的一般问题(即使应用程序是用 F#/C#/.NET 编写的),不,我不能由于设备限制,不能使用 WCF。
-
即使在编辑之后,这仍然是不安全的,不能用于您的目的!公钥意味着任何人都知道。但是你的概念需要保密!你需要一个数字签名!
标签: c# .net encryption rsa encryption-asymmetric