java - 复杂的加密/解密模型——这有可能吗?

标签 java security scala encryption public-key-encryption

假设我有一个服务器正在向四方发布信息(例如通过消息总线):A、B、C 和 D。任何一方都可以以加密形式发现所有流量。为了利用这些信息,显然需要对其进行解密:

  • A 方应该能够读取所有信息(即解密用于 A、B 和 C 的信息)
  • 乙方应该能够阅读给乙方和丙方的信息
  • 丙方只能阅读为丙方准备的信息
  • D 方应该能够阅读 B 和 D 的信息

显然,这可以通过为每一方使用完全独立的公钥/私钥对,然后根据上述要求共享私钥来实现。不幸的是,这不能很好地扩展到数百个聚会。

有没有更好的方法?


编辑

基本上,我想做的是让每个人都拥有自己的私钥,而我想说的是,在加密消息时,它是用 key = A | 加密的乙 | C 这意味着拥有 key A、B 或 C 中的任何一个的人都可以解密它。想象一个可以安装 n 锁的后备箱,其中任何一个都可以打开后备箱。

最佳答案

Imagine a supermarket. Every single shelf is independently stockable. There are a hundred shelf stackers, each of whom stack a number of shelves. These stackers have managers, who can overview the shelves of all of their subordinates. These stock managers have section managers possibly having complex relationships, such as manager A being able to see a subset of manager B's shelves. There are a few store managers who can see everything.

我不认为可伸缩性问题来自使用公钥加密。它更确切地说来自您的需求的复杂性(想要有这么多可配置的组)。

如果你要向数百方发送相同的加密消息,并且可以有他们中的任意子集应该读取它,并且你希望以后能够修改这些权限,你需要给每个人都有自己的 key 对。

然后您将发送对称加密的消息(使用随机 session key )以及为所有收件人加密的 session key 的副本。

如果您发现您经常处理完全相同的子集,您可以扩展这些 session key 的有效性以跨越多条消息。然后你就不需要每次都传输所有的 key (不过你仍然应该在一段时间后使它们过期)。

None of the shelf stackers, stock managers, section managers or store managers would have any kind of clue about public/private key cryptography

嗯,他们的软件/设备可以处理。

关于java - 复杂的加密/解密模型——这有可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6491916/

相关文章:

interface - 有没有类似于 Callable<V> 但不抛出已检查异常的标准 JDK 接口(interface)?

java - 如何通过 Java 中的代理发送 HTTPS 请求?

java - 无法在 WCF 客户端上捕获 Java 自定义错误

javascript - 如何在 Angular 8 应用程序中添加移动访问 token ?

c++ - 如何在不造成任何安全风险的情况下将 Web 应用程序的登录名和密码数据传递到桌面应用程序

scala - 如何将 F[A\/B] 拆分为 (F[A], F[B])

java - 修改算法以在包含重复项的字符串中生成唯一排列

php - javascript 验证是否足以确保我的表单安全?

scala - 如何检测scala executioncontext耗尽?

scala - IntelliJ错误条纹标记scala/sbt