我一直在使用 PHP mcrypt 模块来加密我公司的敏感数据。这一直运作良好。但是,我被要求创建一个新的主密码,它应该能够解密任何数据。问题是这个主密码必须在脚本文件中硬编码。如果我错了,请纠正我,但唯一安全的方法似乎是在脚本中硬编码公钥并使用它来加密数据,同时保持私钥安全并仅在需要时使用它来解密。
mcrypt 似乎没有这种方案的实现。有谁知道可以做到这一点的库(PHP 模块或纯 PHP)?
我一直在使用 PHP mcrypt 模块来加密我公司的敏感数据。这一直运作良好。但是,我被要求创建一个新的主密码,它应该能够解密任何数据。问题是这个主密码必须在脚本文件中硬编码。如果我错了,请纠正我,但唯一安全的方法似乎是在脚本中硬编码公钥并使用它来加密数据,同时保持私钥安全并仅在需要时使用它来解密。
mcrypt 似乎没有这种方案的实现。有谁知道可以做到这一点的库(PHP 模块或纯 PHP)?
有一个 PECL 扩展。http://us2.php.net/manual/en/book.gnupg.php
如果不需要非常快,您也可以使用 php 中的 gnupg 命令行工具:http: //devzone.zend.com/article/1265
这两种方法我都没有尝试过。
我建议看一下 PHP OpenSSL 绑定,尤其是openssl_public_encrypt()函数。您确实可以将主公钥嵌入脚本中,并让脚本使用此公钥加密每个用户的 AES 密钥。将相应的主私钥保存在公司安全的地方。
如果您需要主解密功能,您将提取加密的用户密钥,使用主私钥对其进行解密,然后解密原始数据。
只是为了确定您对这个主密码的要求,
encrypt this
“密封”某些东西的“”命令,decrypt any data
”听起来很危险根据评论更新。
Rijndael 256
将使用密钥加密这种方法将有助于个人使用 Rijndael 密钥轻松访问数据,
而无需主私钥所有者的干预。
并且,当主私钥所有者信任数据的保密性时。
每次用户更新其副本时,您的方案都需要更新主副本(删除旧副本并重新加密新副本)。
但是,如果用户数据受主设备信任(这里显然就是这种情况),
如果用户需要对数据进行签名,可以在流程中单独完成。
它将使您免于保留双份副本和维护它们。
要签署数据,用户可以拥有他们生成的密钥对。
我不明白这将如何工作。任何双向加密功能只有在输入用于加密的特定密码时才会解密(除非您是 NSA 并且您在算法中设置了后门)。您不能让两个密码解密同一个文件(除非存在哈希冲突,但这不是您可以轻松实现的)。
至于将主密码存储在程序中,最好将其存储在程序读取的单独文件中,这样您就可以在该文件上使用更严格的操作系统级安全性。
请记住 mcrypt 不是公钥加密。不过,使用公钥密码术,您也许可以做您想做的事。例如,使用 PGP/GPG,您可以加密文件,以便三个不同的用户可以使用他们的私钥对其进行解密,而无需知道彼此的私钥。因此,您可以拥有一个可以解密所有内容的具有主密码的虚拟用户。
另一种选择是保存所有加密数据的两个副本;一个用用户密码加密,一个用主密码加密。