19

或者:如何为一群用户存储加密数据?

我承认,这是一个愚蠢的问题,正如该术语已经暗示的那样,私钥仅限于一个人。但我有以下情况:

用户 Tom 输入需要在数据库中加密存储的数据。用户决定他想让这些信息对 Jim 和 Bob 可用。用户 John 和 Jayne 一定不能解密它。当然,也不适用于入侵服务器并有权访问加密数据和执行加密/解密的脚本的用户 Tim。

我认为使用 PHP的 openssl_public_encrypt函数的公钥/私钥方法在这里不起作用,因为两个用户需要拥有那个“私钥”来解密数据。

我想这是一个相当普遍的问题,但如果它很重要,它必须在 PHP 中完成(也许还有 MySQL)。

4

4 回答 4

17

这就是它在 OpenPGP(和其他系统)中的做法: - 您正在生成秘密对称密钥,用于加密数据本身;- 然后,这个对称密钥用汤姆的密钥加密;- 此外,对称密钥可以用 Jim 和 Bob 的公钥加密,允许他们解密密钥,然后解密数据

于 2011-01-05T14:33:54.693 回答
12

PHP 为此提供了一个函数 - openssl_seal(). 此函数采用一组公钥,并对数据进行加密,以便可以使用任何一个对应的私钥对其进行解密(使用openssl_open())。

于 2011-01-06T04:36:37.250 回答
4

我不知道 PHP 中的库。但总的来说,程序如下:

  • 数据使用对称密钥加密
  • 对于每个收件人,使用收件人的公钥对密钥进行加密
  • 所有这些都保存在 PKCS#7 文件结构中

查找“PHP and PKCS7”时应该会有一些结果...

于 2011-01-05T14:32:54.833 回答
2

使用与 Tom 的密钥不同的数据加密密钥(称为 Kgeneral)。

用 Tom 的公钥加密 Kgeneral 并将结果提供给 Tom - 他可以使用他的私钥解密它并获得 Kgeneral。

如果另一个用户需要访问数据,Tom(或您的应用程序)可以使用他的公钥加密 Kgeneral,并以这种方式授予他访问权限。

于 2011-01-05T14:33:26.707 回答