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

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

有帮助吗?

解决方案

我建议采取看看PHP OpenSSL的绑定,并且特别是 openssl_public_encrypt()函数。事实上,你可以嵌入主公开密钥插入脚本,该脚本加密这个公钥每个用户的AES密钥。请该公司相应的主私钥的安全。

如果您需要主解密函数,你会拉加密的用户密钥,与主私钥进行解密,然后解密原始数据。

其他提示

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

您也可以从PHP使用GnuPG命令行工具,如果它没有非常快:的 http://devzone.zend.com/article/1265

我还没有尝试任何一种方法。

我不明白怎么会工作。任何双向加密功能只会饲喂时用来加密(除非你是国家安全局,你把后门的算法)的具体密码解密。你不能有两个密码解密相同的文件(除非有散列冲突,但是这不是你可以很容易地发生)。

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

记住mcrypt的

请不公钥加密。随着公共密钥加密,你也许可以做你想做的,但。例如,使用PGP / GPG,你可以对文件进行加密,使得三个不同的用户可以使用其私有密钥解密,不知道对方的私钥。所以,你可以拥有与主密码才能解密一切虚拟用户。

另一种选择是,以容纳所有加密数据的两个副本;一个与用户的密码加密,并且加密的一个与所述主密码。

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

  1. 它是否预计仅用作 'encrypt this' 将“密封”某些东西的命令
    那么只有知道相关私钥的人才能打开它吗?或者,
    • 您是否期望打开企业中完成的任何加密?
    • 我只是想确保你的措辞不会被以第二种方式解释
    • 你的这句话'decrypt any data' 听起来很危险
      (并且对于非对称密钥加密来说不可行/不实用)

根据评论更新。

  • 您正在计划 数据的两份副本 每个都用不同的密钥加密
    • 一份 是要加密的 大众大师 钥匙
      • 任何人都可以解密 私人大师 钥匙
        然后必须保护主私钥(公钥并不重要)
    • 第二份 是要加密的 Rijndael 256 钥匙
  • 目的是让主机在需要时解密数据
    特别是在加密者不在场的情况下

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

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


然而,如果 用户数据被master信任 (这里的情况很明显),

  • 更简单的方法 是从主人那里发出 Rijndael 钥匙
  • 主控可以使用主控公钥本身对其进行加密
  • 然后只需使用颁发的 Rijndael 密钥即可对数据进行加密
    • 它将始终可以通过主私钥进行访问
      可以打开用户的 Rijndael 密钥

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


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

  • 在使用 Rijndael 私钥加密数据之前
  • 主公钥 加密的 用户私钥 可以附加到它
  • 用户公钥 与主人共享(至少)
    足以验证用户已提供数据
  • 在最坏的情况下,如果用户不可用且密钥确认失败,
    主站可以信任数据的真实性——数据仍然可以被解密
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top