我有一个应用程序可以正常使用共享公钥/秘密私钥来加密任意大文本字符串。
我正在使用BouncyCastle
private static final String ALGORITHM = "RSA";
private static final String UTF_8 = "UTF-8";
private static final int KEY_SIZE = 2048;
所以以鲍勃和安妮为例
安妮和鲍勃互相分享公钥......
Annie可以使用Bobs公钥向Bob发送加密消息来加密她的消息。鲍勃高兴地使用他的私钥解密。
Bob可以使用使用Annies公钥加密的邮件进行回复。
但是,Annie如何将加密邮件发送给未知收件人?
Annie如何将“发布”消息发送给未知收件人列表?
这可能吗?
答案 0 :(得分:1)
By the principles of public-key cryptography, Annie is unable to publish an encrypted message to a set of technically unknown recipients. She must have their public key (certificate) available.
You or your application does not have to be responsible for key management, so long as trusted third party certificate authority and registration authorities can manage them. If that is feasible in your environment, you'd at most have to perform path validation on each public key certificate but not directly manage the material.
答案 1 :(得分:1)
如果不知道至少一个关于他们的事情,你真的不能给某人发送任何东西。那一件事不一定是公钥。它可能是别的东西。
RSA和基于EC的对手并不是非对称加密领域的唯一参与者。
基于身份的加密(IBE)使任何人都可以为某人加密某些东西,只知道他们的“身份”,这是一个简单的字符串。对于许多人来说,他们的身份与他们的电子邮件地址紧密相关,因此您可以使用它。当然,它不一定是。它只需要一个唯一的字符串。
受信任的第三方稍后会检查申请其私钥的客户端的身份,如果身份匹配,则会生成用于解密的私钥。我确信在某个地方有Java的IBE实现,考虑它已经有多长时间了。
IBE的一个问题是您仍然可能需要向每个预期收件人发送许多邮件。
基于属性的加密(ABE)在这方面更好,因为您可以使用策略加密某些明文(在基于属性的访问控制意义上),它只能是如果收件人持有必要的属性密钥,则解密。这称为密文策略ABE。 Here是一个更详细的描述。
您仍需要受信任的第三方,但现在您可以根据属性轻松加密群组。私钥生成可以在加密之后的时间发生。 JCPABE库是用Java编写的,完全用Java编写。它基于jPBC,但是当另外安装原始C版本的libpbc时可以加速。