1

我只需要一个公钥加密方案,我可以使用它来加密 iPhone 应用程序向服务器上的 PHP 发送的参数。由于它的许可证,我不能使用 GnuPG。

要求是手机上的应用程序能够与服务器进行通信,而无需用户输入任何凭据。我的目标是防止检查 URL 中的参数和通过欺骗来滥用我们的系统。因此,出于加密目的,我们应用程序的所有副本都可以看起来像同一个用户。

我没有计划使用 HTTPS,因为(如果我没记错的话)它需要会话或证书,而且似乎过多(但如果没有,请告诉我);我只需要加密和解密 URL 的参数部分。

由于要使用 RSA 公钥加密的数据必须比密钥短,标准过程是生成对称私钥,用公钥加密,用生成的私钥加密数据,然后发送生成的私钥密钥和加密数据到服务器。看起来我拥有加密生成的密钥所需的大部分内容(过程中的 RSA_size() 崩溃除外)。但我不知道如何使用 Blowfish 或 PHP 支持的其他算法指定和设置批量数据的编码。

感谢您的任何见解。

4

3 回答 3

2

这个有可能。

您可以只使用 RSA 公钥加密算法,而无需 PGP 或 X.509v3 围绕它们的任何开销和基础设施。

  1. 生成公私密钥对。
  2. 将私钥安全地存储在服务器上。好好保护它。
  3. 将公钥分发给 iPhone 应用程序。
  4. iPhone 应用程序使用公钥加密数据。
  5. iPhone 应用程序将加密数据发送到服务器。
  6. 服务器使用私钥解密加密数据。

openssl您可以使用命令行工具来玩转这个想法:

在服务器上运行:

$ openssl genrsa -out myprivatekey.pem 2048
$ openssl rsa -in myprivatekey.pem -pubout -out mypublickey.pem

将 mypublickey.pem 复制到客户端,并在客户端在 data.dat 中创建一些数据并运行:

$ openssl rsautl -encrypt -pubin -inkey mypublickey.pem -in data.dat -out enc.dat

将 enc.dat 发送到服务器,然后在服务器上运行:

$ openssl rsautl -decrypt -inkey myprivatekey.pem -in enc.data -out data2.dat

公钥不必受到保护,因此您可以以任何您想要的方式将其分发到 iPhone 应用程序。例如,将其嵌入到应用程序中,将其放在公共 Web 服务器上,通过不安全的电子邮件将其发送给客户端。如果坏人得到它是没有问题的。

注意:在示例中,我创建了一个 2048 位 RSA 密钥。请记住,对于非对称算法(即公钥算法),您需要更长位长度的密钥才能实现与用于对称算法的密钥相同的安全级别。不要以为 128 位 AES 加密非常强大,所以我将创建一个 128 位 RSA 密钥——这对于 RSA 密钥来说太短了,并且不会给你期望的安全强度。

现在您只需要通过在代码中调用 openSSL 库来实现它。

于 2011-05-10T11:49:51.430 回答
1

我想,我不太确定 - 如果您需要加密要发送的数据并且您没有通过 HTTPS 连接,那么您可以尝试实现一些 JS 加密模块。(我找到了http://www.hanewin.net/encrypt/)您可以根据用户名或客户端电脑的名称生成密钥。

于 2011-05-10T11:02:13.853 回答
0

另一种可能性是不使用公钥/私钥加密,而是进行对称密钥加密。您可能想要做的是每个会话让客户端应用程序生成一个密钥,使用单个 HTTPS 连接来发送服务器可以用来解密参数的密钥。现在,您所有的常规连接都可以使用只有客户端和服务器知道的密钥来使用加密参数。每个设备应该是唯一的,并且可能是会话。您可能希望将时间戳与其关联,以便您知道在它处于非活动状态后无论多长时间,它都可以被丢弃,或者被视为来自无效会话。

于 2011-05-10T11:18:46.173 回答