V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
allenforrest
V2EX  ›  问与答

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

  •  
  •   allenforrest · 2013-12-30 14:13:21 +08:00 · 2819 次点击
    这是一个创建于 3999 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在考虑一个加解密方案,思路参考了 PGP。

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

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

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

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

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

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

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

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

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

    这种方案便利性不如 PGP 的模型,但是优点是可以由服务器端做很多策略控制,也便于对已加密的文件做访问期限的控制、访问权限人的变更等等。
    julyclyde
        3
    julyclyde  
       2014-01-03 10:40:31 +08:00
    期限咋控制?
    allenforrest
        4
    allenforrest  
    OP
       2014-01-03 10:56:36 +08:00
    @julyclyde 在文档拥有者发起文档加密时,向服务器提交文档的发行者 ID、访问权限者 ID 列表(或群组 ID),访问期限。访问权限者在发起解密时,服务器来检查访问期限。
    julyclyde
        5
    julyclyde  
       2014-01-03 11:06:21 +08:00
    人家在限期内访问一次存下来就能多次查看了,下次都不需要过来
    allenforrest
        6
    allenforrest  
    OP
       2014-01-03 11:47:49 +08:00
    @julyclyde 用我的加解密软件不可以,除非自己 crack。
    julyclyde
        7
    julyclyde  
       2014-01-03 11:51:49 +08:00
    “呵呵”
    allenforrest
        8
    allenforrest  
    OP
       2014-01-03 12:06:07 +08:00
    @julyclyde 有啥更好的思路吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1016 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:11 · PVG 07:11 · LAX 15:11 · JFK 18:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.