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