最近在考虑一个加解密方案,思路参考了 PGP。
遇到一个问题,PGP(或基于 openPGP 的类似产品)本质上是适用于一对一的邮件(或文档、数据等)加解密,即使是一对多(比如邮件群发),这个「多」也是相对少量的。毕竟,如果大规模群发,所谓的私密性也就意义不大了。
但对于一些企业内部还是存在类似场景,比如加密一份文档,权限是企业内一个大部门内,所有人都能解密访问,其他部门不行;或者更甚至,加密一份企业内部公开(所有内部人员均可访问)的文档,但泄露到外部则无法解密访问。
对于这样的场景,使用 openPGP 的方案加密一份文档:
1、生成加解密文档的会话密钥(SEK),对文档内容进行加密,生成Symmetrically Encrypted Data Packet。
2、文档的加密者(所有者、或发送者)对文档进行数字签名,生成Signature Packet。
3、使用对该文档有访问权限的接收者的公钥加密会话密钥,生成Public-Key Encrypted Session Key Packet。
将这三者携带在一起,作为加密文档的一部分,传播出去。
问题来了,如果接收者(有访问权限的人)不止一个,第3部中就要针对每个人都用其公钥加密一份 SEK。少量还可以,如果很多,成千上万,那携带的公钥加密报文就太大了,很麻烦。
如果换一个思路,用群组来管理这些有访问权限的人,例如对每个部门设立一个群组,群组像一个普通人一样,也有一个公私钥对。
这样,如果加密这个部门群组都有访问权限的文档,在第3部中就不用对所有该部门的人都生成工公钥加密报文,只需要用这个群组的公钥生成一份报文即可。
但是这样一来,为了让该群组内的所有人都能解密,必须要让所有人都保存一份该群组的私钥。这一点感觉很不爽,大家都保存同一份私钥,必然存在私钥的分发、同步更新问题,很麻烦。
想问问大家,类似这种大规模或者群组性质的加解密方案,有没有什么其他的好思路?
遇到一个问题,PGP(或基于 openPGP 的类似产品)本质上是适用于一对一的邮件(或文档、数据等)加解密,即使是一对多(比如邮件群发),这个「多」也是相对少量的。毕竟,如果大规模群发,所谓的私密性也就意义不大了。
但对于一些企业内部还是存在类似场景,比如加密一份文档,权限是企业内一个大部门内,所有人都能解密访问,其他部门不行;或者更甚至,加密一份企业内部公开(所有内部人员均可访问)的文档,但泄露到外部则无法解密访问。
对于这样的场景,使用 openPGP 的方案加密一份文档:
1、生成加解密文档的会话密钥(SEK),对文档内容进行加密,生成Symmetrically Encrypted Data Packet。
2、文档的加密者(所有者、或发送者)对文档进行数字签名,生成Signature Packet。
3、使用对该文档有访问权限的接收者的公钥加密会话密钥,生成Public-Key Encrypted Session Key Packet。
将这三者携带在一起,作为加密文档的一部分,传播出去。
问题来了,如果接收者(有访问权限的人)不止一个,第3部中就要针对每个人都用其公钥加密一份 SEK。少量还可以,如果很多,成千上万,那携带的公钥加密报文就太大了,很麻烦。
如果换一个思路,用群组来管理这些有访问权限的人,例如对每个部门设立一个群组,群组像一个普通人一样,也有一个公私钥对。
这样,如果加密这个部门群组都有访问权限的文档,在第3部中就不用对所有该部门的人都生成工公钥加密报文,只需要用这个群组的公钥生成一份报文即可。
但是这样一来,为了让该群组内的所有人都能解密,必须要让所有人都保存一份该群组的私钥。这一点感觉很不爽,大家都保存同一份私钥,必然存在私钥的分发、同步更新问题,很麻烦。
想问问大家,类似这种大规模或者群组性质的加解密方案,有没有什么其他的好思路?