假设我有一个服务器,它将信息(例如通过消息总线)发布给四方: A、B、C和D。任何一方都可以以加密形式发现所有通信量。为了利用这些信息,显然需要解密:
显然,这可以通过为每一方拥有完全独立的公钥/私钥对来实现,然后按照上面的要求共享私钥。不幸的是,这并没有很好地扩展到数百个缔约方。
有更好的方法吗?
编辑
基本上,我想做的是让每个人都拥有他们的私钥,当我加密一条消息时,我要说它是用key = A | B | C加密的,这意味着一个拥有A、B或C密钥的人可以解密它。想象一下,一个可以安装n锁的后备箱,任何一个都可以打开后备箱。
发布于 2011-06-28 04:13:17
您想要的可以使用基于公钥加密的普通协议来实现。弹跳城堡隐形眼镜API支持OpenPGP和CMS,两者都可以从Scala中运行。
准备好一切:
- No one EVER shares the private key. The private key must stay private
这些协议允许使用多个公钥进行加密。例如,如果您使用类似于PGPEncryptedDataGenerator的内容,那么您将为希望解密消息的每个收件人调用addMethod(PGPPublicKey)方法。
API有很多细微差别,但是单元测试和示例将真正帮助您导航它们。
实现细节
这两种协议的工作方式基本上是相同的。
接收方反向处理以解密消息。
发布于 2011-06-27 11:33:33
想象一下超市。每个架子都是独立储存的。有一百个架子堆放工,每个人堆放许多架子。这些堆叠工人有经理,他们可以查看他们所有下属的货架。这些股票经理的部门经理可能有复杂的关系,例如经理A能够看到经理B的一个子集的货架。有几个商店经理什么都能看得到。
我不认为可伸缩性问题来自于使用公钥密码。它来自于需求的复杂性(希望有这么多可配置的组)。
如果你要向数百个用户发送同样的加密消息,并且其中可能有一个任意的子集来读取它,并且你希望以后能够修改这些权限,那么你需要给每个人自己的密钥对。
然后,您将发送对称加密的消息(带有随机会话密钥)以及为所有收件人加密的会话密钥副本。
如果您经常看到您处理的是完全相同的子集,则可以将这些会话键的有效性扩展到跨多个消息。然后,您不需要每次都发送所有的密钥(不过,过了一段时间后,它们仍然会过期)。
货架堆叠工、库存经理、部门经理或商店经理都不会有任何关于公钥/私钥密码学的线索。
他们的软件/设备会处理这件事。
发布于 2011-06-27 11:43:25
这里有一种方法需要n个密钥交换,但是保持消息本身与双方通信一样小。
假设您的问题的一般形式是:
您可以使用此密钥交换步骤:
然后,要发送具有安全级别m的消息,只需使用密钥k_m对其进行加密。
这个方案的一个副作用是,派对p_b没有能力阻止p_a解密如果a< b所发送的消息,希望这是可以的。
https://stackoverflow.com/questions/6491916
复制相似问题