我们提供一项服务,允许用户通过网站上传文档,并将上传的文档加密存储在磁盘上。
磁盘上的文档使用以下功能进行加密:用户密钥,在创建帐户后会随机生成。该文档密钥存储在一个数据库字段中,该字段使用用户密码作为密钥进行加密。
当用户(所有者)想要下载文档时,他们需要提供密码,该密码用于解密该文档
我们选择了这种模式,以便在用户选择更改密码时无需重新加密所有加密的文档:我们只需要重新加密文档密钥。
此设置可以正常工作(我们认为这是一种安全的模式1)。
需要进行的更改
很遗憾,我们有两个新的要求要实现。
依法,根据政府的要求,我们必须能够解密磁盘上的所有文档;
有人决定,文档的所有者应能够与其他用户共享上传的文档。
我不知道该如何实现这些要求,同时又要保留按用户加密存储的文档。
因此,我的问题是:
是否存在一种已知的模式,可以对文档进行加密,以便可以由一个或多个参与方解密,而相关参与方是要根据文件加密来确定?
更新:
有关上述法律的一些背景信息:
实际上,法律没有规定我们必须建立后门。根据法律,如果警察索要密钥3,则不将密钥移交给您拥有的任何加密数据2将构成刑事犯罪。这样的结果是,托管数据的我们需要后门,否则将面临起诉,以防我们无法在请求时解密数据。但是,除了在某些其他国家/地区以外,我们可以自由传达我们收到了解密文件的命令这一事实。不幸的是,这些法律并不少见。
通知我们的客户和公众:
正如我之前在评论中指出的那样,我完全有意加倍努力以确保将本政策明确传达给我们的顾客。
一方面,要提高公众意识,另一方面要确保“坏法耗费金钱”,这是我可以用来抗议此类法律的最佳方法。
/>但是,与此同时,我对这种说法的影响持怀疑态度。大多数人根本不在乎。同时,许多人使用他们的电子邮件和收件箱来存储和共享文档。因此,从这个角度来看,我们的服务(仍)是一项巨大的进步(这就是我们的某些客户要求其员工使用它的原因)。
>
1。如果此方法中有明显的漏洞,请随时对此发表评论。
2。律师认为,“您拥有的数据”是要包括存储在您拥有的物理设备上的所有数据(我不是律师,所以这是我的外行对他们得出的结论的翻译)。
3.是的,不是一些高级安全办公室,而是警察。在何时可以请求密码时有一些保护措施,但这并不能改变该法律的含义。最大的问题是,当您真正忘记了某些数据的密码时会发生什么。部长表示,删除这些加密数据的所有者有责任。但是(据我所知)尚无此类案件在法院审理。
#1 楼
您需要每个文档密钥,而不是每个用户密钥。嗯,您还需要每个用户的密钥,但这是另一回事。即,每个文档D都用密钥KD加密。首次在系统中导入文档时会随机生成该密钥。每个文档都有自己的密钥。不能从任何其他文档上的密钥推断出文档的密钥。
每个用户U都有一个密钥KU。因此,如果您需要用户D,U和V可以访问文档D,则可以存储EKD(D)(使用文档密钥对D进行加密)以及EKU(KD),EKV(KD)和EKW(KD) )(用用户U,V和W的密钥对密钥KD进行加密)。这些“加密密钥”的大小很小(无论文档大小如何,只有几十个字节),因此可以扩展。
为了使事情变得更加实用,您可能需要对用户密钥使用非对称加密:D的加密使用方便的对称系统(例如AES),但是“用户密钥”将为RSA类型(或其他类似算法,如ElGamal)。这样,如果用户U要与用户V共享文档D,则他:
从服务器检索EKU(KD);
使用他自己的私钥来解密并恢复KD;
用V的公钥加密KD,得到EKV(KD)。
该方案的优点在于,此过程不需要V,因为只有V使用公钥。
那时,您真正拥有的是OpenPGP,该格式主要用于安全电子邮件。电子邮件具有此“共享属性”(可能会将一封电子邮件发送给多个收件人),并且是异步的(当您发送电子邮件时,不一定立即就可以使用该收件人)。建议您重用OpenPGP,这种格式已被许多密码学家检查过,并且已经存在实现。
使用共享机制后,您可以简单地将自己作为每个文档的隐式收件人,并且可以阅读所有内容。无论法律要求如何,请务必通过“使用条件”通知用户您可以从技术上阅读所有内容;否则,他们可能会因缺乏警告而起诉您。
评论
我希望可以使用一些优雅的多重公钥加密以及相关的私钥解密方案,但这可能更简单(因此更好)。 [[不用担心,我会发现隐私声明和服务条款已更改;一方面,提高公众意识,另一方面,确保“糟糕的法律要花钱”,是我所能提出的反对此类法律的最佳方法。]
– Monika
14-10-29在16:41
是否存在“多个公钥加密,并使用相关的私钥解密”方案?还是有人还没有解决这个问题?
– Monika
14-10-29在17:10
OpenPGP方案就是一个例子。但是您仍然会收到每个收件人的开销。有一些“广播加密”方案试图减少这种开销。但您无法将其完全删除。
–汤姆韭菜
14-10-29在17:13
一个PGP实施方案已经执行了第1项(政府要求),或者至少这样做了。 PGP Inc的“商业”版本可追溯到2000年左右,当时美国政府推销Clipper等,它添加了一种更温和的替代方案,称为ADK附加解密密钥,该密钥使所有者在必要时可以解密,在这种情况下是政府请求。我没有跟踪,但是有些谷歌搜索表明新所有者赛门铁克保留了此功能。当然,您应该设置控件,以便仅在法律上适当的情况下使用该控件,无论您所在的司法管辖区如何。
–dave_thompson_085
14-10-30在6:38
请注意,提出的设置不能满足“无需共享加密密钥”即可共享文档的要求。您正在以加密形式共享它,但仍在共享它。这意味着,如果您想撤消某人的访问权限,则仍将需要使用新的K_D重新加密文档,并与所有其他应具有访问权限的用户共享(无论是否采用加密形式)。
–克里斯
2014年10月30日19:22
#2 楼
但是,我们要实施两个新的要求:
根据法律,我们应政府的要求能够解密磁盘上的所有文档;
哇。我真的希望您打算通知您的用户,您将为执法部门提供服务的后门,以便他们有足够的时间从服务中删除其数据。这将是符合道德和光荣的事情。
如果您被迫这样做,例如收到国家安全信(National Security Letter)的通知,并且由于堵销令而被禁止发言,那么您的选择就受到限制:
让公司中的某人匿名将此信息泄漏给免费新闻(以后您的服务将被后门使用)。
出于未指明的原因关闭该服务。给您的用户几周的时间来下载他们的数据,然后再将其永久删除。
将您的公司,在线服务和员工转移到没有严厉的监视法律的国家。
听起来就像您已经有了一项安全的服务,并吸引了一些注重隐私的用户一样。任何事情都比故意安装后门进行执法并拧紧用户更好。据您所知,一旦您提议的用于执法的系统就绪,他们就会向您发送所有用户数据的保证书。
您最好关闭公司,关闭您的系统钱并开始新的创业,但这一次做得很好。这是我的建议:
在没有这些法律的国家/地区建立您的公司。也可以在此处托管服务器和用户数据。
使用开放源代码客户端,以便用户信任在其计算机/设备上运行的软件。如果您由于某些人的注意而被当局强迫,以后将很难隐藏后门。
所有私有数据加密密钥都存储在客户端,而不是存储在服务器上。服务器上仅存储加密的数据。所有加密和解密均在客户端上完成。服务器仅保存加密的数据。用户有责任备份自己的私钥。然后,由于您没有密钥,您的公司实际上将无法响应将来的NSL请求。
要通过服务器进行身份验证并允许用户从其帐户存储和下载加密数据,请为每个用户设置某种公共密钥认证协议。也许服务器为每个用户持有公钥。用户按住私钥,然后签署每个上载的数据并向服务器请求。每个客户端都可以将服务器的公钥嵌入(固定)到其中,以验证从服务器下载的响应和加密数据。
要与其他用户共享文件,用户可以使用新的对称密钥重新加密他们的文件,使用公共密钥交换与系统上的其他用户共享该密钥。您的服务可以为他们处理公共密钥的共享。但是,如果用户不能完全信任服务器,并且服务器所在的国家/地区具有敌对监视法律,则这样做很危险。用户不知道服务器是否为其他用户提供了伪造的或真实的公钥,因此他们很容易受到MITM攻击。这将是执法部门可以用来访问其他用户之间共享文件的未加密数据的一种方式。在这种情况下,如果用户知道自己的公共密钥,并且在希望与其他用户共享数据时可以与其他用户私下共享它们,将会更加安全。
使用不易受量子计算机攻击的更新的公共密钥算法。没有RSA,DSA或椭圆曲线。
使用作者关注隐私并且不喜欢大规模监视的新型对称密钥和哈希算法。例如Bruce Schneier和Daniel J.Bernstein。
评论
8.在获得秘密政府传票之前,请安装一个令状金丝雀。
–user57007
2014年10月30日,下午3:22
与RSA,DSA和EC相比,更新的公钥算法的记录要短得多。鉴于量子计算的进展缓慢,而打破较新算法的进展往往出奇地快,因此,安全服务似乎有可能攻击其中的某些算法。
–James_pic
14-10-30在11:52
我也对整个问题的道德部分不满意,实际上,我正在尝试了解如何最大程度地减少损害。另请参阅问题中的更新段落。
– Monika
14-10-30在11:55
直到最后两个要点之前,这都是一个很好的答案。使用未经测试的算法来支持众所周知的,经过全面检查的算法,这些算法在实践中非常安全,这是一个坏主意,原因是一遍又一遍地讨论。爱德华·斯诺登(Edward Snowden)对使用GnuPG进行安全通信充满信心,并表示“加密有效。正确实施的强大加密系统是您可以依赖的为数不多的事物之一。”端点安全性得到了很大的警告。
–用户
2014年10月31日在8:26
众所周知,对AES-256的最佳半实践攻击似乎是相关密钥攻击,其复杂度约为2 ^ 99.5。再次最著名的AES-256全密钥恢复攻击是2 ^ 254.4复杂度。考虑到我们甚至不能现实地算出琐碎的2 ^ 192且难以承受2 ^ 128,可能在选择键时可以避免前者,而后者更像是一种学术上的好奇心。维基百科:公开的AES攻击。
–用户
14-10-31在8:32
#3 楼
上面由Tom Leek概述的解决方案已由开源云文档商店ownCloud实施。此处概述了加密模型。正如其他答案中所指出的那样,您可以使用OpenPGP / GPG进行相同的操作,这在我对相关问题的回答中概述了。简单重复一下标准方法:
每个用户都有一个公钥/私钥对
每个文档都被赋予一个唯一的对称密钥,该文档使用该对称密钥进行加密并上传到支持存储容器。这称为文件密钥
每当授予用户访问文件的权限时,文件密钥就会使用用户的公共密钥进行加密
特别是您希望能够提供文件-依法必须遵守的关键。这是ownCloud的选择功能,其中每个文件密钥还使用系统管理员的公共密钥加密。使用ownCloud时,该功能的目的是使用户可能忘记了其私钥的密码短语,并且可以要求管理员再次授予他们对文件的访问权限。
要注意的一件事是,ownCloud使用常规数据库存储用户/组数据和文件元数据。实际的文件Blob可以存储在本地,也可以存储在外部提供商(例如Amazon S3或Google Drive)上。您可以采用相同的方法。让客户端首先加密并写入使用自己的密钥加密的超出管辖范围的外部Blob存储,然后仅将url(通常为128位GUID)写入系统。尽管就系统复杂性而言,这远非理想,但它可能使您不必遵守危险和压迫性法律。因为您只能将指针移交给数据。
我认为至少有一个正在实施这种极权主义法律的国家/地区正在迫使所有离岸云提供商将其服务器移至该国境内的用户。在这种情况下,最后的选择是让系统用户加密并写入自己的本地网络驱动器,并将文件路径存储在系统中。然后由客户来进行此类数据的异地备份。
评论
我很不高兴地得知,我住在一个有着这样的规律goo.gl/NdC2T2
–simbo1905
2015年1月11日14:44
不幸的是,该答案对我们不起作用,因为服务器上存储了足够的信息以能够解密存储的文档。因此,当局有可能获得纯文件。
– CompanyDroneFromSector7G
19年6月24日在12:22
我回答了有关问题的内容,有关当局要求作者能够解密该文件。如果您的情况与他们的情况不同,那么对他们的情况的答案将无济于事。可以在客户端进行加密和解密,以使服务器无法解密任何内容。请使用SRP密码验证程序(而不是固定密码),以便您甚至无法向自己作为客户进行身份验证(例如,thinbus-npm)。让客户交换公共密钥和交换用私有密钥加密的文件密钥。使用shamir的秘密共享进行对等2对等密码恢复。
–simbo1905
19年6月27日在18:27
在客户端(浏览器/电话)上进行所有加密。用密码加密私钥并存储在服务器上(srp表示您不知道密码)。如果他们丢失了手机,他们可以下载并使用私钥。在电话上使用shamir秘密共享将密码备份给朋友。密码只能在他们的手机上恢复。您需要确保的是他们使用了非常安全的密码。检查Pwned Passwords数据库的哈希值,并在客户端使用所有功能强大的密码检查器。 Q.E.D.
–simbo1905
19年6月27日在18:41
#4 楼
作为对您问题的直接答案,汤姆·里克(Tom Leek)的答案就在现场。但是,我建议您采用其他方法:放弃按用户加密。
您仍然会使用网络加密(HTTPS),密码散列以及(如果需要)服务器上的全盘加密。但是,请勿使用任何其他加密方法。您的应用程序仍将决定哪些人可以查看特定文档:首先上传的用户,出于法律目的的管理员以及与他们共享文档的所有用户。通过这种安排,很容易满足您的所有需求。
那么为什么我建议放弃按用户加密?因为它很复杂且难以实施,并且实际上并没有增加太多安全性。您还没有真正解释过为每个用户加密所需的好处,但是我认为这是为了保护文档的安全,以防服务器受到电子或物理损坏。这两件事都是极端事件:您应该采取标准的预防措施,例如防火墙,以防止发生这些情况。但是,如果确实发生了这种极端事件,则实际上,高级攻击者无论如何都可以获取用户的文档。他们静静地等待,等待您的用户登录,然后获取密码并解密文档。
评论
谢谢。实际上,此举旨在保护用户上传的文档免遭恶意第三方的窃取。这个问题是从我们当前的实施以及如何更改它的角度提出的。但是,整个磁盘加密可能是更好的解决方案。
– Monika
14-10-30在11:58
我同意你所说的大部分内容,但最后一点。可以肯定的是,只有在私钥被泄露而不是登录详细信息被泄露的情况下,才能对现有文档进行解码。
– Sydwell
16-09-13在7:48
#5 楼
我知道已经解决了这个问题,但是...我必须在我的网站上做一些非常相似的事情。
文档是加密的,但可以与其他用户共享。
在英国,我必须与安全服务共享安全细节(如果有此要求),但前提是我拥有这些细节。我没有访问权限,所以这不是问题。
(我也不允许通知用户已请求详细信息-自由的代价!)
每个用户具有用于保护其文档的非对称密钥对。公钥以纯文本存储,而私钥则使用河豚加密,并从用户密码中获得128位密钥。
当用户想要共享文档时,它将被解密并复制使用目标用户的公共密钥进行制作和加密,该操作很容易以纯文本格式进行。
目标用户登录后,便可以使用其安全私钥对文档进行解密。
很明显,如果与多个用户共享,则每个用户都必须有一个副本。
评论
“自由的代价”……实际上,这对我来说听起来像是自由的对立面,但是还可以
– iCodeSometime
19年6月20日在14:46
@iCodeSometime是的,很讽刺。
– CompanyDroneFromSector7G
19年6月24日在12:16
#6 楼
由于上述要求迫使加密本质上是用于“演出”(安全区?)和基本的盗窃保护,而不是安全的文档级保护,因此,我建议使用LUKS或类似方法进行基本的全磁盘加密。这样,您就拥有了整个存档的主密钥,并且可以使用基于非加密的方案来控制每个用户对各种文档的访问。按文档加密确实不会给您带来任何好处,只是要满足#1的麻烦。此外,我想在上面列举第二个反间谍的答案。至少,提议的服务是高度不道德的,在某些辖区中,根据服务条款/您向用户披露的内容,甚至会被视为欺诈。
评论
我也对整个问题的道德部分不满意,实际上,我正在尝试了解如何最大程度地减少损害。另请参阅问题中的更新段落。
– Monika
2014年10月30日在11:54
明白了回避技术问题,并假设您和政府拥有(根据法律)相同的访问权限,那么如上所述,我认为按文档加密没有任何好处。换句话说,您和政府在多用户系统上共享根特权。为了遵守该法律,你们俩都可以随时阅读任何文档。仅具有root帐户并不会使多用户系统不安全;归结为谁将使用该功能以及其用途。我确实希望我知道这是哪个国家,所以它可以列入不居住的地方清单...
–madscientist159
2014年10月30日14:50
评论
完全按用户加密有什么好处?听起来好像您也可以只使用全盘加密,并让应用程序验证下载密码。那么,用户必须输入密码才能解密吗?这与您根据要求解密的法律要求不符。
当然,法律只有在您有能力的情况下才要求您解密。如果您无法解密用户数据,那没有问题吧?
@Monika,您认为法律不符合我们的规定,因为任何从我已经加密的计算机上备份文件的备份服务都需要能够交出密钥。同样,如果您的一位客户在使用系统共享文件之前先对文件进行了加密。
如果您不介意我问,这是在哪个国家?