我想在许多收件人之间共享对加密数据的访问。我不知道收件人(加密数据时)提前。数据加密后,我将无权访问明文(因此我无法重新加密)。

现在,我有一个共享的秘密密钥,该密钥在授予访问者的情况下分发给收件人数据(再次加密),因此我无法访问共享密钥)。不幸的是,这意味着共享密钥的任何接收者都可能泄露密钥,从而损害每个人的数据。没关系),但是我希望能够为每个接收者分配唯一的密钥,以便如果密钥泄露,我可以确定是谁做的。

我想我想要一种对称加密方案,密文可以通过一组密钥而不是单个密钥来解密。每个密钥都是唯一的,并且很难从另一个密钥派生一个密钥(因此一个接收者不能伪造另一个密钥),但是对我来说,生成新的密钥很简单(因此我可以轻松地添加新的接收者)。

这样的架构听起来很熟悉吗?

评论

因此,您的角色是只授予/拒绝访问权,而不是访问内容。我很确定,可以在这里应用一些与代理重新加密相关的花哨技巧(您将获得一个特殊的密钥,从而可以在不看到数据的情况下重新加密数据)。但这不是我真正的专业领域,因此我无法给出完整/令人满意的答案。

完全正确-我只能授予/拒绝访问权限。我研究了代理重新加密,但是我认为它过于占用资源。在整个系统中,每行数据都使用唯一的对称密钥加密。我的描述中的“共享密钥”用于加密该唯一密钥。使用代理重新加密,我可以加密(和重新加密)唯一密钥并摆脱共享密钥,但是我必须对每一行数据和每个接收者都这样做。

这是用于即时生成的数据,还是仅用于下载太多内容的数据?如果不是这样,在我看来,最简单的攻击就是仅使用您的密钥,解密所有内容并公开数据,而这在您的方法下不会受到保护。

他们可以破坏密钥,是的。但是他们可以很容易地(技术上)泄漏整个数据。从信息的角度来看,是相同的。

如果您知道收件人的数量(如果每个收件人都需要一个唯一的密钥,那么我看不到没有无限数量的收件人),可以使用GPG之类的方法通过生成的一组公共密钥来加密文件,然后将各个私钥分配给需要解锁文件的人?

#1 楼

这在密码学文献中被称为“叛徒追踪”。参见例如以下开创性论文:

一种有效的公钥叛徒追踪方案。丹·博内(Dan Boneh)和马特·富兰克林(Matt Franklin)。 CRYPTO1999。

它们显示了一种公共密钥加密方案,其中每个可能的接收者都有自己的私有解密密钥。如果授权接收者公开了他们的解密密钥,则授权机构可能会发现它是谁的密钥。而且,他们考虑了进一步的挑战-如果授权接收者联盟汇集了他们所知道的一切,并想出另一个与他们各自不同但仍然有效的解密密钥,并且泄漏了该新密钥,该怎么办? -并且他们还展示了如何应对这一挑战。

从那里进行的一整套研究。


在大多数情况下,这在实践中通常是错误的解决方案。您假设/希望对手将发布其解密密钥。但是,如果他们不这样做怎么办?如果他们做其他事情怎么办?攻击者可以通过多种方式在不发布其解密密钥的情况下引起问题:例如,攻击者可以在不泄漏解密密钥的情况下泄漏解密数据(这是杀手er以及所有这些叛逆者追踪方案在实际中都变得无关紧要。)
或者,对手可以提供提供“解密即服务”的API。
或者,对手可以发布软件嵌入密钥但以混淆形式进行解密的密钥。

追踪者跟踪对任何这些对抗策略都无济于事。因此,请注意,您的威胁分析可能只是基于对攻击者可以做的事情的狭narrow看法。

从根本上讲:(据我所知)这种方法尚未在商业系统中得到采用,因为获取虚假身份极其容易。如果您打算以20美元的价格出售对付费内容的访问权,并且接受信用卡付款,那么某人获得被盗的信用卡号,进行注册并获得访问权,然后发布解密密钥(或解密的内容)。现在你要做什么?即使您可以追溯到注册期间提供的关联的信用卡号和名称,该名称也肯定是假的,信用卡帐户上的名称是其他人。在这一点上,您实际上没有办法识别肇事者,也没有追索权。世界上所有花哨的加密货币都无法挽救您。

这就是为什么这些方案可能不如最初出现的那样有用,除非在某些特殊和有限的情况下。

评论


$ \ begingroup $
我没有看过出版物-但是识别叛徒的可能性是否意味着各方都获得了不同的明文?如果“ ATTACK AT DAWN”被泄露,除非其他方收到其他消息,我如何检测叛徒?
$ \ endgroup $
–哈根·冯·埃岑
16年8月17日在19:27

$ \ begingroup $
@HagenvonEitzen,不。在Boneh&Franklin的方案中,有多个“等效”私钥,每个接收者接收一个不同的私钥。它们都可以正确解密,并允许每个人都接收原始消息(即,即使双方具有不同的私钥,双方也都将收到相同的明文)。太神奇了!但是,就像我在回答中所写的那样,没有什么可以阻止收件人泄漏明文而不是泄漏密钥。如果他们这样做,叛徒追踪将无法帮助您确定谁负责。
$ \ endgroup $
– D.W.
16年8月17日在19:52



$ \ begingroup $
@HagenvonEitzen好吧,如果您不需要相同的明文结果,那将是微不足道的-您只需为每一方发出不同的消息和单独的密钥,并且如果它泄漏了,那么泄漏的工件就是唯一的。
$ \ endgroup $
– Peteris
16年8月17日在21:21

$ \ begingroup $
@HagenvonEitzen利用“ ATTACK AT DAWN”,叛徒可能希望通过提供解密来证明明文的真实性。
$ \ endgroup $
–阿伦
16年8月19日在9:04

#2 楼


我不能真正阻止“不良”接收者泄露密钥(或者说纯文本),但是我希望能够向每个接收者分发唯一的密钥,以便在密钥泄露时,我可以确定是谁做的。


如果对手获取了收件人密钥之一,他们可以做两件事:


解密密文,它可以恢复明文。
向您公开收件人密钥,它可以识别泄漏副本的收件人。您的计划的详细信息。这意味着他们会知道自己有这个选择,并将运用它来实现自己的目标,而不是自己的目标。

所以这有点可笑;为了实现识别泄漏者的目标,您需要对手在其他方面同时成为您的合作者。这当然不是不可能的,因为他们的目标可能会部分符合您的目标,并导致他们选择第二名。我要说的是,这是一个不寻常的情况,您可能想阐明他们为什么要这样做-对手的目标是什么?

另一种可能的方式是对手没有不知道您的计划的细节。在这种情况下,如果他们不经意间公开了收件人密钥,则可以实现识别泄漏者的目标。但是,我们不要自欺欺人,这将是默默无闻的安全。

评论


$ \ begingroup $
我可以看到一个场景,其中密钥被分发到黑客论坛解密内容。如果该密钥对于特定的接收者是唯一的,那么您会在遇到密钥泄漏的情况下知道谁泄漏了该密钥。换句话说,接收者有充分的理由不将钥匙泄露给“群众”。
$ \ endgroup $
–马腾·博德威斯♦
16年8月16日在21:14



$ \ begingroup $
我同意我们需要一个威胁模型,但是我认为Maarten的基本原理足以说明为什么它仍然很有价值。很容易看到分配密钥不会对攻击者造成负面影响的情况(例如,他们只关心解密文件)。在那种情况下,即使他们知道密钥,也可能愿意通过公开密钥将原始密钥持有者丢在公共汽车下。实际上,这似乎与检测痣的一种著名方法非常相似,在这种方法中,您在同一文档中为许多人提供了略有不同的措辞,并查看了哪些措辞。
$ \ endgroup $
–Cort Ammon
16年8月17日在0:46

$ \ begingroup $
默默无闻的安全性不是安全性,只是不够的安全性。
$ \ endgroup $
–user253751
16年8月17日在6:39

$ \ begingroup $
我已经在“答案”中对系统进行了形式化。忽略紧迫需要的用例,这似乎不是一个由于默默无闻而带来的安全性问题,而只是一个互补密钥系统,而与其他对称密码类似。
$ \ endgroup $
– Thomas M. DuBuisson
16年8月17日在18:50

#3 楼

我认为,所需的加密系统不只是评论,而且还远远少于答案,它提供了三个功能$(G,E,D)$,其中


$ G $是产生密钥集的随机算法$ \ cal K $
$ E:k \ rightarrow \ {0,1 \} ^ n \ rightarrow \ {0,1 \} ^ n $
$ D:k \ rightarrow \ {0,1 \} ^ n \ rightarrow \ {0,1 \} ^ n $
$ \ forall k_i,k_j \ in \ cal K。 D_ {k_j}(E_ {k_i}(p))= p $
$ \ forall k \ in \ cal K $在没有$ E_ {k}(p)$的情况下,找到$ p $在计算上是不可行的给出$ k_t \ in \ cal K $
给出$ k \ in \ cal K $在计算上不可能找到$ k_2 \ in \ cal K $ st $ k \ not = k_2 $

我已经从$ G $产生的较大空间(集合集)中省略了对$ \ cal K $的明确量化,但是它应该是通用的。 >

#4 楼


我想在许多收件人之间共享对加密数据的访问。我不提前知道接收者(加密数据时)。数据加密后,我将无法访问明文(因此我无法重新加密)。
...

这样的架构听起来很熟悉吗?


除了多个私钥,是的。听起来像DRM或IRM。两者都旨在限制用户可以对数据执行的操作。对于IRM,使用情况跟踪也是一个设计目标。但它们似乎都没有明确的泄漏跟踪作为目标的一部分。

#5 楼

您的描述有些奇怪:如果您今天允许访问Alice和Bob,但是如果Charlie签署了协议,您明天必须能够向Charlie授予访问权限,则您需要使用共享密钥或非共享密钥访问数据尚未使用的密钥。因此,我将跳过此必要条件。

向多个收件人加密时,通常的方法是为对称密码使用一个基础(随机)密钥,然后将该密钥加密给每个收件人与他们的公钥。

当然,该密钥被实现隐藏。因此,如果您使用PGP(如Johnny所建议),则他们只需输入加密文件(其私钥(已安装在PGP中将是隐式的))。

如果您使用PGP ,您可以生成许多密钥,使用它们加密密钥,然后分发给接收者。您只需要记住每个密钥的发送给谁。但是您仍然需要一些额外的休眠密钥,以便能够向新用户授予对旧邮件的访问权限。

替代方法是,另一个用户(具有访问权限)向他授予对旧邮件的访问权限消息(基本上是在您的设置中过于昂贵的重新加密)。这样,您就可以将长消息(具有不同的IV,基于ROWID或来自显式IV列)视为一个长消息,并且将单个密钥加密为每个收件人的公钥。

#6 楼

假设您的数据足够容易伪造数字签名,以证明它实际上是您的数据。因此,我提出以下建议:除了使用共享密钥加密数据外,还需要获取其哈希值,例如sha256
每当有人访问共享密钥时,对秘密的哈希值签名并附加新接收者的唯一标识符,并向他们发送个性化签名

接收者证明秘密的唯一方法源于您,是通过验证签名来完成的,该签名要求包括其唯一的标识。个性化的签名给接收者,并指示他们不要将其存储解密。

评论


$ \ begingroup $
让我们继续聊天中的讨论。
$ \ endgroup $
– tylo
16年8月23日在14:47

#7 楼

已经有几个复杂的答案,但是我相信这里确实有一个简单的解决方案:
将不需要解密的额外数据添加到密钥中
如果以一种聪明的方式做到这一点,您将能够即时生成所需数量的密钥。这样您就可以知道谁的密钥泄漏了。
自然,这要求接收密钥的人不知道该方法。 >然后,添加更多信息的简单方法将是发出这样的密钥:
abcdefghijk ...
当然,您可以用更复杂的方式来执行此操作,以防止人们偶然发现方法。

请注意,如果以下情况,此解决方案不是很可靠:

攻击者知道您的方法
攻击者拥有几个密钥

但是,我再次认为这不是问题,因为可以泄漏密钥的人也可以泄漏整个明文。因此,在这种情况下,简单就好了!

评论


$ \ begingroup $
我看到投票否决了,所以我想知道这个答案是什么问题?它从根本上是有缺陷的还是实施不切实际的?
$ \ endgroup $
– Dennis Jaheruddin
16年8月19日在7:05

$ \ begingroup $
默默无闻是安全。如果我们遵循Kerckhoff的原理,并假设攻击者知道安全算法而不知道秘密密钥,那么他们只需要置换附加数据。我知道您在答案中指出了这一点,但请参阅D.W.一个更健壮的方案(以及为什么它实际上没有帮助)。
$ \ endgroup $
–马丁·邦纳(Martin Bonner)支持莫妮卡(Monica)
16年8月19日在7:52