问个 PGP 相关(或者基于 openPGP 做相关设计开发)的问题

2013-12-30 14:13:21 +08:00
 allenforrest
最近在考虑一个加解密方案,思路参考了 PGP。

遇到一个问题,PGP(或基于 openPGP 的类似产品)本质上是适用于一对一的邮件(或文档、数据等)加解密,即使是一对多(比如邮件群发),这个「多」也是相对少量的。毕竟,如果大规模群发,所谓的私密性也就意义不大了。

但对于一些企业内部还是存在类似场景,比如加密一份文档,权限是企业内一个大部门内,所有人都能解密访问,其他部门不行;或者更甚至,加密一份企业内部公开(所有内部人员均可访问)的文档,但泄露到外部则无法解密访问。

对于这样的场景,使用 openPGP 的方案加密一份文档:
1、生成加解密文档的会话密钥(SEK),对文档内容进行加密,生成Symmetrically Encrypted Data Packet。
2、文档的加密者(所有者、或发送者)对文档进行数字签名,生成Signature Packet。
3、使用对该文档有访问权限的接收者的公钥加密会话密钥,生成Public-Key Encrypted Session Key Packet。

将这三者携带在一起,作为加密文档的一部分,传播出去。

问题来了,如果接收者(有访问权限的人)不止一个,第3部中就要针对每个人都用其公钥加密一份 SEK。少量还可以,如果很多,成千上万,那携带的公钥加密报文就太大了,很麻烦。

如果换一个思路,用群组来管理这些有访问权限的人,例如对每个部门设立一个群组,群组像一个普通人一样,也有一个公私钥对。

这样,如果加密这个部门群组都有访问权限的文档,在第3部中就不用对所有该部门的人都生成工公钥加密报文,只需要用这个群组的公钥生成一份报文即可。

但是这样一来,为了让该群组内的所有人都能解密,必须要让所有人都保存一份该群组的私钥。这一点感觉很不爽,大家都保存同一份私钥,必然存在私钥的分发、同步更新问题,很麻烦。

想问问大家,类似这种大规模或者群组性质的加解密方案,有没有什么其他的好思路?
2729 次点击
所在节点    问与答
8 条回复
julyclyde
2013-12-31 15:06:13 +08:00
你这种需求就不是PGP的安全模型适用的
你这种甚至不能直接放加密过的文件出去,而只能是每次登录判断权限再决定给不给看
allenforrest
2013-12-31 16:17:16 +08:00
@julyclyde 是的,后来我仔细想过了一个在线加解密的方案,针对群组都有访问权限的文件,先用服务器公钥加密会话密钥,将会话密钥保存在服务器侧,该群组内的用户如果要解密访问文件,需要在线与服务器交换会话密钥,服务器先判断该用户的合法性(用户是否合法、是否属于该群组、文件访问期限是否有效等等),如果都合法,将会话密钥用该用户的公钥加密发给该用户,用户才有权限和方法解密访问该文件。

这种方案便利性不如 PGP 的模型,但是优点是可以由服务器端做很多策略控制,也便于对已加密的文件做访问期限的控制、访问权限人的变更等等。
julyclyde
2014-01-03 10:40:31 +08:00
期限咋控制?
allenforrest
2014-01-03 10:56:36 +08:00
@julyclyde 在文档拥有者发起文档加密时,向服务器提交文档的发行者 ID、访问权限者 ID 列表(或群组 ID),访问期限。访问权限者在发起解密时,服务器来检查访问期限。
julyclyde
2014-01-03 11:06:21 +08:00
人家在限期内访问一次存下来就能多次查看了,下次都不需要过来
allenforrest
2014-01-03 11:47:49 +08:00
@julyclyde 用我的加解密软件不可以,除非自己 crack。
julyclyde
2014-01-03 11:51:49 +08:00
“呵呵”
allenforrest
2014-01-03 12:06:07 +08:00
@julyclyde 有啥更好的思路吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/95038

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX