中科院信息工程研究所的科研人员林璟锵、马原、荆继武等设计了一种 SM2 门限密码算法实现方案,他们在 2014 年 8 月向国家知识产权局提交了专利申请,名称是《适用于云计算的基于SM2算法的签名及解密方法和系统》,授权公告号是:CN 104243456 B,该专利的内容已在国家知识产权局的网站上公开,可以在网站 http://epub.sipo.gov.cn/ 上查到。
门限密码算法通常用 (n, k)形式表示,n 表示参与者的个数, k 表示门限值(也被称为阈值),表示要完成秘密运算时最少需要的参与者个数。在攻击者能够攻破或完全控制的参与者个数少于 k 个的前提下,门限密码算法依然能够保持其安全性。
接下来介绍一下这种 SM2 门限密码方案的原理:它是一种(2,2)门限密码方案,即需要两个参与方,才能完成用到私钥的密码运算(如签名、解密)。具体包含三个算法:
1)公钥及私钥份额生成算法:当需要生成 SM2 非对称密钥时,由两个参与方各自独立生成一个私钥份额(或称为私钥片段、私钥分量),双方通过交互通信、传输一些辅助计算数据,由其中一方合并辅助数据生成 SM2 公钥。只要这两个参与方不串通,就没有办法恢复出完整的 SM2 私钥。在攻击者至多只能攻破其中一个参与方的情况下,攻击者也没有办法恢复出完整的 SM2 私钥。SM2私钥分量及公钥的生成过程如下图所示:
2)门限签名算法:当需要对消息进行 SM2 签名时,两个参与方分别使用各自持有的签名私钥片段,计算生成签名片段,然后双方交互传输签名片段等辅助计算数据,由其中一方对收到的数据进行合并计算,生成 SM2 签名。SM2门限签名的过程如下图:
3)门限解密算法:当需要对 SM2 密文进行解密时,两个参与方分别使用各自持有的解密私钥片段,计算生成明文片段,然后双方交互传输明文片段等辅助计算数据,由其中一方对收到的数据进行合并计算,生成解密后的明文。SM2门限解密的过程如下图:
对于 SM2 加密、验证 SM2 签名这两种密码运算,其计算过程与 GB/T 32918-2016 《信息安全技术 SM2椭圆曲线公钥密码算法》中定义的加密和验签运算方式完全一致,并没有做过特殊的处理,所以在此不再赘述。