在这种情况下,是否足够安全/可以使用RSA加密?

时间:2011-07-07 20:30:25

标签: c# php rsa

不久前我发现了RSA加密/解密,我有一些经验。目前我正在用C#开发一个应用程序,它必须向我的服务器发送一些敏感信息。我可以在C#程序中本地加密该信息,将其发送到服务器,然后解密(使用PHP脚本)吗?这足以确保除了服务器和客户端之外没有人能看到原始信息吗?

编辑:客户端(C#app)不必解密任何信息,因此私钥只会存储在远程网络服务器上(当然是服务器端)。

8 个答案:

答案 0 :(得分:5)

可能?是。整蛊?非常好。直接使用RSA并不容易;你需要小心谨慎地使用padding,同时签署数据以避免数据操纵攻击等等。

我建议您只使用SSL - 在客户端硬编码可接受的证书,并验证您所连接的服务器的证书。然后SSL库将为您处理所有棘手的细节。如果您正在进行某种类似批处理的传输,您还可以考虑调用GnuPG或使用其他类似的库。

答案 1 :(得分:2)

假设你有一个好的长度密钥(比方说2048字节)没有被泄露,那么应该这样做。

当然,如果某人有足够的决心,并且有足够的计算能力和时间,他们可以尝试强制推送消息(可能可能他们很早就会幸运,但不太可能)。

答案 2 :(得分:2)

是的,只要您不小心发送私钥,它就是安全的:)我做到了,没有人能够解密它,至少在合理的时间内没有:)

答案 3 :(得分:2)

  
    

目前我正在使用C#开发一个应用程序,它必须向我的服务器发送一些敏感信息。

  

这正是构建SSL所要做的。你是在重新发明它吗?

  
    

我可以在C#程序中本地加密该信息,将其发送到服务器,然后解密(使用PHP脚本)吗?

  

当然可以,但你使用什么公钥?您是将它嵌入您的应用程序还是从服务器中提取?前一种方法很容易受到影响,后者又回到了SSL所做的那样。

  
    

这是否足以确保除了服务器和客户端之外没有人能看到原始信息?

  

当然,这是传输层安全的全部要点,保护传输中的信息。只需使用已有的技术来解决这个问题:)

答案 4 :(得分:1)

这取决于您对客户的期望。如果用于加密数据的密钥与应用程序一起广泛分发,则可能落入可以使用该密钥来确定加密的人手中,然后您的通信就不安全。但是,如果您的应用程序分发给您知道不会允许恶意闯入者获取密钥的一组选定的消费者,那么您可以合理地确定您的密钥是安全的。

这里的第一个明显漏洞是暴露的关键。假设您使用好的长度密钥,RSA通常是一个很好的协议。但是,如果您的密钥被公开,就像我上面说的那样,所有的赌注都会被取消。

答案 5 :(得分:1)

直接使用加密库几乎绝不是一个好主意,因为有很多棘手的角落案例你可能会错过,然后成为安全漏洞。相反,您应该尽可能使用最高级别的现有技术。例如,如果您的客户端使用TCP连接到服务器,您可以使用TLS轻松替换它,TLS或多或少地自动处理加密和解密。如果使用HTTP连接,则可以使用HTTPS。如果您不确定要使用的最佳技术,请尝试告诉我们有关您的客户端和服务器如何通信的更多信息。

答案 6 :(得分:1)

明显的漏洞取决于您如何分发应用程序。如果它是公开分配的,它可能对中间人攻击的人开放。它的工作原理如下:攻击者会编写一个看起来像你的模仿的模仿,但是使用他们的密钥将数据发送到他们的服务器。然后,他们的服务器解密数据,用密钥重新加密,然后将其发送到您的服务器。任何回复都是类似的处理。

对于最终客户来说,唯一可能看到的差异可能是收到回复的时间稍长 - 但是如果你让机器轻微加载,那么他们永远不会知道/通知。

答案 7 :(得分:1)

你看过XML-RPC(通过https,还是其他一些ssl) - 这也消除了为服务器端编写解析器的需要,因为几乎每种编程语言都有某种客户端/服务器RCP包。通常更好地使用已建立的安全通信协议。 Vanilla加密它可以保护本地空间的数据(ala加密硬盘或文件)但是一旦你开始获取和发送,常规RSA中就会出现一系列新的漏洞。 (中间人攻击,欺骗等)

另外扩展你的crypto-fu查找Diffe-Helman密钥交换和Elliptic Curve加密