【问题标题】:PHP Encrypt data with more than public keyPHP 使用多个公钥加密数据
【发布时间】:2014-07-01 09:35:24
【问题描述】:

我需要使用公钥/私钥系统对数据进行非对称加密(二进制和文本)。 目前我正在使用 openssl_seal,因为我需要使用多个公钥加密数据。结果,我收到了一条加密消息(很好)和两个或更多信封(不太好)。后者不太好,因为我还必须将这些信封存储到数据库中。对于每条小消息,我需要存储至少两个信封,这可能比消息本身还大。

然后我想起了 GnuPG:我可以给多个收件人写一封邮件,并且可以这样加密消息,每个人都可以用他/她自己的私钥解密消息。不需要信封。 所以我在 PHP 中寻找了一个 GnuPG 库,但我只找到了一个 linux 解决方案。不满意,因为我们也有 Windows 系统。

是否有任何公钥/私钥库可以使用多个公钥加密消息/数据而无需担心信封?

我需要的是一个可以创建公钥/私钥集的库,2048 或 4096 位强。

库必须具有使用一个、两个或多个公钥加密任何类型数据的功能,并且只有一个简单的数据块作为结果。

该库必须具有一个功能,以便可以使用任何相应的私钥对加密数据进行解密。

任何提示或想法?也许OpenSSL中有一个特殊的功能? IIRC,我也可以用 S/MIME 加密给几个收件人写电子邮件。而且它只有 1 封电子邮件,有许多收件人。没有单独的信封。

提前致谢

亨尼斯

【问题讨论】:

    标签: php cryptography public-key-encryption gnupg php-openssl


    【解决方案1】:

    OpenSSL 和 OpenPGP(GnuPG 实现)都使用对称加密来加密数据(使用一些随机密钥),然后使用非对称加密对密钥进行加密,为每个接收者加密一次。

    在 OpenSSL 中,这称为 “信封”,在 OpenPGP 中 “会话密钥包”。两者都包含或多或少相同的数据,因此应该具有相似的大小。我不知道你是否可以让 OpenSSL 将所有这些作为单个 blob 返回,GnuPG 默认会这样做 - 但文件大小不会有明显不同。

    补充说明:

    • 您可以使用 gpg --list-packetspgpdump 查看 OpenPGP 文件的内容(GnuPG 中不包含该文件,但通过解析数字 ID 提供更好的可读输出,即使用的算法。
    • GnuPG 界面应该也可以在 windows 下工作,但据我所知需要手动编译。
    • 我经常看到人们只是手动调用gpg.exe 二进制文件。但如果这样做要小心,有一些方法会以这种方式造成安全问题。

    【讨论】:

    • 如果我正确理解了您关于 GPG/PGP 的陈述,您会说 a) 加密消息包含所有收件人的所有信封,b) 所有收件人都收到所有信封,c) 加密消息变得更大它有更多的收件人。这是正确的吗?
    • a) 是的,b) 是的,除非您单独加密给每个收件人(或自己更改 OpenPGP 数据包)和 c) 每个收件人略微固定数量,不依赖于原始数据大小。
    猜你喜欢
    • 2016-08-30
    • 2011-01-28
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多