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

多个未知收件人的Java文本加密,java,encryption,messaging,Java,Encryption,Messaging,我有一个应用程序可以很好地使用共享的公共/秘密私钥加密任意大的文本字符串 我正在使用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发送加密消息来加密她的消息。鲍勃很高兴

我有一个应用程序可以很好地使用共享的公共/秘密私钥加密任意大的文本字符串

我正在使用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如何向未知收件人列表“发布”消息


这可能吗?

根据公钥密码原理,Annie无法向一组技术上未知的收件人发布加密邮件。她必须拥有可用的公钥(证书)


您或您的应用程序不必负责密钥管理,只要受信任的第三方证书颁发机构和注册机构可以管理它们。如果这在您的环境中是可行的,那么您最多只能对每个公钥证书执行路径验证,但不能直接管理材料。

如果您不知道任何有关他们的信息,您就不能向他们发送任何信息。这一点不一定是公钥。它可能是别的东西

在非对称加密领域,基于RSA和EC的对手并不是唯一的参与者

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

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

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

  • 基于属性的加密(ABE)在这方面更好,因为您可以使用策略(在基于属性的访问控制意义上)加密一些明文,并且只有在收件人持有必要的属性密钥时才能解密。这称为密文策略。这是一个更详细的描述

    您仍然需要一个受信任的第三方,但现在您可以根据属性轻松地为组加密。私钥生成时间可能晚于加密时间。该库是用Java编写的,完全用Java工作。它是基于jPBC的,但是在另外安装libpbc(原始C版本)时可以加快速度


由于RSA是公钥加密技术,这意味着她必须拥有每个收件人的公钥,才能不受干扰地向每个收件人发送加密消息。。。这没关系,因为她只需要收件人的公钥。我不确定你的问题是关于什么的?这是关于加密传出消息还是不可否认性?@fge我正在尝试开发一个消息应用程序,它是发布/订阅和聊天室的混合。我希望静止的信息也被加密。如果使用RSA意味着我必须向“每个人”分发公钥,那么有没有其他加密文本的方法?嘿,这是公钥密码的核心原理;只要您对私钥保密,就可以在野外分发公钥。如果您拥有某个实体E的公钥,则使用E的公钥加密您要发送的消息;一旦它被加密,只有E的私钥可以解密,而且,多么方便,只有E拥有私钥!这就是公共密码学的工作原理。我看到的唯一解决方案是假设未知的接收者是一个组的一部分。您可以拥有组中每个人都拥有的“组”私钥。另一种解决方案类似于邮件程序。如果您发送到一个组,您就可以将该组解析为具体的地址,并且您拥有每个地址的公钥。然后向每个地址发送一条加密邮件。但是,如果您能够提供更多关于您的需求的信息,则会更容易,因为此场景将使人们提供最简单的解决方案……:)你有什么限制?@Martin我的应用程序的缺点是,当我发送邮件时,我不知道收件人会是谁,因为我将邮件发送到一个位置而不是用户,因此无法知道我的邮件的实际收件人的公钥。好主意,我没有想过使用第三方来制作密钥/证书,有免费的选择吗?是的,实际上有一些。这些都是很好的选择。它们都有一定程度的学习曲线,并且有一定的设置成本,但这是使用良好安全性的内在要求,而且听起来您已经开始使用它了。基于属性的加密(ABE)听起来非常有趣