ECC算法分析--我们国家的标准

了解了前面说的ecc的概念之后,我们就知道group的意义了,实际上group定义了一条曲线,定义了a,b,还有order等等,在openssl的实现中,group中还有一个EC_METHOD结构体,这个结构体中有一系列的函数,顾名思义这些函数是用来操作曲线的,可以看到这个method没有engine的支持,这是为什么呢?因为ecc的创立者根本就不把ecc算法所应用的曲线作为算法的一部分来考虑,也就是说,这些曲线是公开的,一旦你确定了曲线的参数,那么接下来的对曲线的操作就是确定的,没有必要自定义实现,因此,EC_METHOD基本都是固定的,没有engine的支持,可以说group和ecc密钥的计算基本没有关系,它只是提供了一个所谓的“基础设施”,因为现代计算机并没有实现曲线域的计算法则,所以openssl就应该自己实现,这个实现就是group中的EC_METHOD。
      但是我们国家总是喜欢搞zg特色,正如我们国家搞双证书体系一样,我们国家的双证书体系为的是方便官方取证,这在别的国家是不存在的,在别的国家,你的私钥是任何机构都无权查看的,可是...公正乎?哀哉!正是因为我们的ecc标准没有公布椭圆曲线参数,于是我们就不能使用openssl了,但是openssl实在太棒了,我无法舍弃它,于是就要想办法将openssl改造成支持国家密码局的ecc标准的框架。要做到这个,首先的想法就是让EC_METHO支持engine,由于国家不公布椭圆曲线标准,那么我们只好调用国家的接口来自己实现。怎么让EC_METHOD支持engine呢?很简单,首先将自己的engine注册进openssl,然后修改获取group的代码,如果需要处理的密钥的oid是我们国家的标准,那么就获取我们实现的engine,之后就用我们的engine的实现的方法来实现曲线操作。

     实现了曲线操作,接下来的密钥操作就简单了,密钥操作都是在“曲线”上进行的,只要我们加载自己的engine,那么很容易就可以使得我们自己的engine得到使用,这个就不必多说了,详细情况请看关于engine的介绍。这个工作简单的原因在于ecdh或者ecdsa等本来就是支持engine的。为了实现国密的ecc算法,或者说将国密ecc整合进openssl,我们需要很多的工作要做,我们之所以值得做这些工作原因有二:第一,国家的标准我们必须实现;第二,openssl实在太棒了!



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271924

上一篇:【重磅】AlphaZero炼成最强通用棋类AI,DeepMind强化学习算法8小时完爆人类棋类游戏


下一篇:视觉生产技术