针对多个未知收件人的 Java 文本加密

标签 java encryption messaging

我有一个应用程序可以很好地使用共享公共(public)/ secret 私钥来加密任意大型文本字符串。

我正在使用 BouncyCaSTLe

private static final String ALGORITHM = "RSA";
private static final String UTF_8 = "UTF-8";
private static final int KEY_SIZE = 2048;

所以以鲍勃和安妮为例

安妮和鲍勃共享彼此的公钥...

Annie 可以使用 Bob 的公钥来加密她的消息,从而向 Bob 发送一条加密消息。 Bob 愉快地使用他的私钥解密。

Bob 可以回复使用 Annies 公钥加密的消息。

但是,Annie 如何向未知收件人发送加密消息?

安妮如何向未知收件人列表“发布”消息?

这可能吗?

最佳答案

如果不了解某人的一件事,您就无法真正向某人发送任何内容。那一件事不一定是公钥。也可以是别的东西。

基于 RSA 和 EC 的同行并不是非对称加密领域的唯一参与者。

  • 基于身份的加密 (IBE) 使任何人都可以为仅知道其“身份”(即一个简单字符串)的人加密某些内容。对于许多人来说,他们的身份与他们的电子邮件地址紧密相关,因此您可以使用它。当然,也不必如此。它只需要是一个唯一的字符串。

    受信任的第三方稍后会检查申请私钥的客户端的身份,如果身份匹配,它将生成用于解密的私钥。考虑到 IBE 已经存在了多久,我确信 Java 中已经有 IBE 实现了。

    IBE 的一个问题是您可能仍然需要向每个预期收件人发送许多消息。

  • 基于属性的加密(ABE)在这方面更好,因为您可以使用策略(在基于属性的访问控制意义上)加密一些明文,并且它只能如果接收者持有必要的属性 key ,则可以解密。这称为密文策略 ABE。 Here是更详细的描述。

    您仍然需要可信的第三方,但现在您可以轻松地根据属性对组进行加密。私钥生成可以晚于加密发生。 JCPABE库是用 Java 编写的,并且完全用 Java 运行。它基于jPBC,但额外安装原始C版本的libpbc可以加快速度。

关于针对多个未知收件人的 Java 文本加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31679871/

相关文章:

java - 在 Java 中验证电子邮件

encryption - 为什么 crypto/rsa 库中的 Go 函数 EncryptOAEP 需要随机 io.Reader?

javascript - 有没有办法用Python解密AES?

Java JMS 消息传递

java - 仅在 Maven 父构建中构建子快照模块

java - openshift、Tomcat 7 (JBoss EWS 2.0) 和 neo4j

java - 为什么 JSch ChannelSftp 返回 "Handle closed"?

ssl - 一个域上有多个 SSL 证书

logging - 记录到消息队列是个好主意吗?

java - JMS奇怪的问题