0

我一直在使用 PHP mcrypt 模块来加密我公司的敏感数据。这一直运作良好。但是,我被要求创建一个新的主密码,它应该能够解密任何数据。问题是这个主密码必须在脚本文件中硬编码。如果我错了,请纠正我,但唯一安全的方法似乎是在脚本中硬编码公钥并使用它来加密数据,同时保持私钥安全并仅在需要时使用它来解密。

mcrypt 似乎没有这种方案的实现。有谁知道可以做到这一点的库(PHP 模块或纯 PHP)?

4

4 回答 4

2

有一个 PECL 扩展。http://us2.php.net/manual/en/book.gnupg.php

如果不需要非常快,您也可以使用 php 中的 gnupg 命令行工具:http: //devzone.zend.com/article/1265

这两种方法我都没有尝试过。

于 2009-08-04T05:19:14.150 回答
2

我建议看一下 PHP OpenSSL 绑定,尤其是openssl_public_encrypt()函数。您确实可以将主公钥嵌入脚本中,并让脚本使用此公钥加密每个用户的 AES 密钥。将相应的主私钥保存在公司安全的地方。

如果您需要主解密功能,您将提取加密的用户密钥,使用主私钥对其进行解密,然后解密原始数据。

于 2009-08-04T05:55:21.050 回答
1

只是为了确定您对这个主密码的要求,

  1. 它是否预计仅用作encrypt this“密封”某些东西的“”命令,
    然后只能由知道相关私钥的人打开?或者,
    • 您是否希望打开在企业中完成的任何加密?
    • 我只是想确保您的措辞不会以第二种方式解释
    • 您的短语“ decrypt any data”听起来很危险
      (并且非对称密钥加密不可行/不实用)

根据评论更新。

  • 您正在计划使用不同的密钥加密 的数据的两个副本
    • 一份主公钥加密
      • 可以用任何拥有主私钥的人解密,
        然后必须保护主私钥(公钥不是关键)
    • 第二个副本Rijndael 256将使用密钥加密
  • 目的是允许主机在需要时解密数据,
    特别是在加密数据的个人不在的情况下

这种方法将有助于个人使用 Rijndael 密钥轻松访问数据,
而无需主私钥所有者的干预。
并且,当主私钥所有者信任数据的保密性时。

每次用户更新其副本时,您的方案都需要更新主副本(删除旧副本并重新加密新副本)。


但是,如果用户数据受主设备信任(这里显然就是这种情况),

  • 一种更简单的方法是从主服务器发出 Rijndael 密钥
  • 主人可以使用主公钥本身对其进行加密
  • 然后可以仅使用颁发的 Rijndael 密钥对数据进行加密
    • 始终可以使用
      可以打开用户的 Rijndael 密钥的主私钥访问它

如果用户需要对数据进行签名,可以在流程中单独完成。
它将使您免于保留双份副本和维护它们。


要签署数据,用户可以拥有他们生成的密钥对。

  • 在使用 Rijndael 私钥加密数据之前
  • 可以附加使用用户私钥加密的主公钥
  • 与主服务器共享的用户公钥(至少)
    将足以验证用户已提供数据
  • 在最坏的情况下,如果用户不可用并且密钥确认失败,
    则可以信任主数据的真实性——仍然可以解密
于 2009-08-04T05:27:02.917 回答
1

我不明白这将如何工作。任何双向加密功能只有在输入用于加密的特定密码时才会解密(除非您是 NSA 并且您在算法中设置了后门)。您不能让两个密码解密同一个文件(除非存在哈希冲突,但这不是您可以轻松实现的)。

至于将主密码存储在程序中,最好将其存储在程序读取的单独文件中,这样您就可以在该文件上使用更严格的操作系统级安全性。

请记住 mcrypt 不是公钥加密。不过,使用公钥密码术,您也许可以做您想做的事。例如,使用 PGP/GPG,您可以加密文件,以便三个不同的用户可以使用他们的私钥对其进行解密,而无需知道彼此的私钥。因此,您可以拥有一个可以解密所有内容的具有主密码的虚拟用户。

另一种选择是保存所有加密数据的两个副本;一个用用户密码加密,一个用主密码加密。

于 2009-08-04T05:37:06.030 回答