一种面向群组的密码系统的制作方法
【技术领域】
[0001]本发明属于信息安全领域,特别是一种适合于群组成员之间交互信息加密和解密的密码系统。
【背景技术】
[0002]人们常常有向群组成员发送消息的需求。许多通信软件支持这种群组消息发送功能,比如,许多电子邮件系统支持通过邮件组向特定用户群发送电子邮件:一个电子邮件组地址被分配给一个用户组,用户组中每个用户的电子邮箱地址被关联到这个邮件组地址,当一个用户向邮件组发送邮件时,邮件服务器会将发送到邮件组的邮件分发到邮件组中每个用户的邮件帐户,使得邮件组中的每个人都能收到此邮件;再比如,向QQ群发送消息:QQ群中的任一个人向QQ群中发送一条消息,群中的任何人都能收到此消息,这是因为虽然每个QQ用户有自己的QQ帐户,当一个用户加入一个QQ群后,他本人的QQ帐户就同QQ群帐户关联了,发送到QQ群帐户的消息被QQ即时通信系统分发到了群中每个用户的QQ帐户,从而使得QQ群中每个用户都能收到消息。
[0003]除了向群组用户发送消息,人们还有向群组用户发送加密消息的需求。假如消息通信系统或工具支持加密,那么,一种简单的方案是让群组用户共享一个密钥(对称密钥)或一对密钥(非对称密钥),当群组中的一个用户向群组通信地址发送加密消息时,群组中的每个用户都能解密加密消息。比如,目前的许多电子邮件客户端支持数字证书公钥加密,对此可以针对电子邮件组地址签发一张数字证书,邮件组中的每个成员都通过一定的安全渠道获得此证书的私钥,然后将此带私钥的数字证书安装、配置到邮件客户端的证书库中,这样邮件组中的每个用户都能发送加密邮件,以及解密发送到邮件组的加密邮件(发送加密邮件时,邮件客户端是根据接收邮件的地址选择用于加密的数字证书及公钥的;接收、读取加密邮件时,邮件客户端是根据加密邮件中的公钥标识信息找到对应的加密数字证书及私钥的)。若即时通信工具支持基于对称密钥的加密消息发送,则群组中每个用户通过安全途径获取用于群组消息加密的对称密钥,并安装到通信工具。但是,这种简单共享密钥方案存在一个问题:由于群组用户经常变更,因此,群组需要每隔一段时间(比如一个月、一周)变更共享密钥(对称或非对称密钥),这时,要求群组用户每隔一段时间去获取共享密钥并进行共享密钥安装配置将是一件非常麻烦的事情,这将影响用户对群组消息加密的使用。本发明就是要解决此冋题。
【发明内容】
[0004]本发明的目的是提出一种适合于在群组成员之间进行加密数据交换以及便于定期更新共享密钥的面向群组的密码系统。
[0005]为了实现上述目的,本发明所采用的技术方案是:
[0006]一种面向群组的密码系统,所述系统包括密钥服务系统、密码模块以及群组管理系统,其中,
[0007]密钥服务系统:一个为群组成员在线生成和恢复群组秘密密钥的系统;所述群组秘密密钥是在群组成员中共享、用于数据加密和解密的秘密密钥,所述群组秘密密钥包括对称密钥(群组对称密钥)和公开密钥的私钥(群组私钥);(由于密钥更新和/或应对密钥泄露的需要)一个群组在不同时期具有不同的群组秘密密钥(比如,一个群组秘密密钥每周更新一次);在出现群组秘密密钥泄露时,一个群组的秘密密钥通过密钥更新在同一个时期出现不同的群组秘密密钥;
[0008]密码模块:一个运行在用户计算设备中提供密码功能的软件组件或软硬件相结合的组件;所述密码功能包括密钥管理和密码运算(比如,密钥的生成、导入、导出、删除,对数据的加密和解密密码运算);所述密码模块维护有群组密钥对象,包括永久性和临时性的群组密钥对象;密码模块中的一个群组密钥对象对应一个群组,并保存有群组的一系列在不同时期有效的群组秘密密钥,以及每个在不同时期有效的群组秘密密钥的标识信息;所述群组秘密密钥的标识信息用于在群组的一系列秘密密钥中标识和区分一个秘密密钥;所述群组密钥对象在初始创建时没有群组秘密密钥(即初始创建的群组密钥对象是一个空的群组密钥对象);密码模块按通常标识对称密钥或非对称密钥的密钥对象的方式标识群组密钥对象,群组密钥对象是被标识为对称密钥对象还是非对称密钥对象取决于群组密钥对象中存放的秘密密钥是对称密钥还是非对称密钥;密码应用程序按通常使用(对称或非对称)密钥对象的方式使用群组密钥对象,即密码应用程序不知道也不关心使用的群组密钥对象是通常的、非群组的密钥对象还是一个群组密钥对象(比如,若密码模块按Windows CSP或PKCS#11接口实现,则密码应用程序按通常使用Windows CSP或PKCS#11的对称或非对称密钥对象的方式使用群组密钥对象);所述密码应用程序是运行在用户计算设备中并使用密码模块中的群组密钥对象进行数据加密和解密的应用程序(若群组密钥对象中存放的是群组私钥,则仅进行数据解密密码运算);
[0009]群组管理系统:一个用于用户群组(简称群组)管理包括群组创建、群组维护和群组删除的系统;所述群组维护包括群组成员用户的加入和退出管理;所述群组管理系统管理的每个群组都有一个标识符,称为群组标识符或群组ID ;所述群组标识符是一个唯一标识群组的字符串(如QQ群组的QQ号码、一个邮箱组的邮件地址等);当一个用户从密钥服务系统在线获取一个群组秘密密钥时,所述群组管理系统负责在线鉴别用户的身份,确定用户是群组成员,并在身份鉴别和群组成员确认通过后为用户签发证明用户是群组成员的群组令牌(group token)。
[0010]所述密码模块中的群组密钥对象由密码应用程序通过调用密码模块的密钥管理接口生成,或者由用户通过使用密钥管理工具调用密码模块的密钥管理接口生成。
[0011]若所述密码模块的群组密钥对象中保存的群组秘密密钥是对称密钥,则群组密钥对象中保存有群组标识符(用于指示群组密钥对象中的一系列秘密密钥所属的群组);
[0012]若所述密码模块的群组密钥对象中保存的群组秘密密钥是公开密钥对的私钥,且密码模块使用群组公钥对数据加密后放入到加密数据中的群组秘密密钥的标识信息中不包含有群组标识符,则群组密钥对象中保存有群组标识符(同样用于指示群组密钥对象中的秘密密钥所属的群组);
[0013]若所述密码模块的群组密钥对象中保存的群组秘密密钥是公开密钥对的私钥,且群组密钥对象中没有保存群组标识符,则密码模块使用群组公钥对数据加密后放入到加密数据中的群组秘密密钥的标识信息中包含有群组标识符;
[0014]若群组密钥对象中保存有群组标识符,则群组密钥对象中保存的群组标识符在群组密钥对象生成时由密码应用程序输入或者由用户输入。
[0015]若所述群组秘密密钥是公开密钥对的私钥,则每个群组对应有一个群组伪公钥(或称为伪群组公钥);所述群组伪公钥具有普通公钥一样的密钥数据结构,但其中的数据是群组标识符和使用群组公钥进行密码运算时所需的参数(具体需要什么参数取有于群组秘密密钥所对应的公开密钥密码算法);群组伪公钥所对应或标识的公开密钥密码算法的类型与群组公开密钥对的公开密钥密码算法的类型不同或者相同;群组伪公钥的密钥数据中存放有预先约定的特征标志,用于区分普通公钥(如RSA公钥)和群组伪公钥(如伪RSA公钥)。
[0016]当密码应用程序通过密码模块的接口使用公钥进行数据加密时,密码模块通过检查公钥中是否有群组伪公钥的特征标志判断密码应用程序使用的公钥是普通公钥(如RSA公钥)还是群组伪公钥(如伪RSA公钥),若是普通公钥,则密码模块按使用普通公钥的方式进行数据加密;若是群组伪公钥,则密码模块使用群组伪公钥中的群组标识符所指的群组的当前有效的群组公钥进行数据加密;若在密码模块本地无法得到群组的当前有效的群组公钥,则密码模块利用