在前面提到了RSA ACC累加器,它的缺点是需要不断的重复进行运算证明,速度还是是一个硬伤。这时就有人提出了Pairing:二元映射。特别是基于ECC Pairing,效率更好。
不过在刚刚提出这个算法时,e(P,Q)的计算量也是巨大的,所以不言而喻。但随着谷歌等一些公司的投入和大牛们的不断的努力,运算的时间已经从几分钟缩减到微秒级。
2008年,Vercauteren提出了最优Ate Pairing,这个是目前知道的最快的算法。
在传统的PKI加密体系中,需要公开一个公钥和自己保密一个私钥。但是在传送公钥时,很有可能出现问题,此时提出了CA认证。但是这玩意儿一个是太复杂,另外需要额外维护一个中心化的节点,一但出问题也就有问题了。
为了解决这个问题,以色列密码学家在1984年提出了标识密码体系。即不再使用上述的方式来生成公私钥对,而是由客户标识如:姓名、IP、手机号以及邮箱等来作为公钥。私钥则由密钥中心依据系统主密钥和用户标识计算得出。直到2000年,业界提出基于椭圆曲线数学难题的配对构造算法(即上面第一节的介绍),才解决了这个根本的问题。
在我国,2008年将其引入到国密的SM9中,目前在这方面的研究工作还是有很多人在推进。网上可以找到N多SM9的实现的算法,包括各个科研机构中开源的相关c++的源码。
IBC密码体系主要有三块:
1)IBE加解密算法组:
其基本的步骤为:生成系统参数和主密钥并保管好,其中系统参数是公开的;然后利用这二者和用户身份标识生成私钥,当然,标识即为公钥;利用系统和公钥对相关数据进行加密,得到密文;然后相关方利用系统参数和私钥解密。
2)IBS签名算法组:
签名类似,不同点在于用私钥和系统参数产生签名,然后用此签名和系统参数及公钥验证。原理和普通的PKI体系没有太大不同。
3)IBKA身份认证协议:
认证的协议首先由发起方生成一个随机数和时间戳,发送给认证方;认证方通过随机数和时间戳生成待签报文,用私钥生成数字签名发回给发起方;发起方利用认证方的公钥对数字签名进行验证。
IBC的优势在于运算数据小,成本低,不需要第三方,但是目前看来这个技术还在发展中,不能说其可以完全替代PIK体系。
在区块链上的应用也和RSA ACC类似,正处于研究阶段,也是用来对相关的验证数据进行替代,目前真正商用的还没有看到,研究的倒是出现了一些。
加密体系是一个比较深的东西,对一些原理和算法的过程理解需要不断的完善,欢迎指正。