我有一个应用程序可以很好地使用共享公共(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/