下边分享国密改造具体工作和方法:
一、国密SM2/SM3/SM4算法代码库,基于国密算法的TLS/SSL代码库
(1)、在国密改造中我们需要SM2/SM3/SM4的算法库,在github上已经有开源的代码库,将代码库下载到本地开发环境;
下面简单介绍SM2/SM3/SM4的功能:
SM2:国密椭圆曲线算法库
SM3:国密hash算法库
SM4:国密分组密码算法库,类似于AES加密算法
(2)、国密算法的TLS/SSL代码库,在github上也有开源的代码库,将代码库下载到本地开发环境
上边是国密改造中需要用到的国密算法基础代码库,我们的国密改在也是基于这两个基础库完成。
二、BCCSP模块改造
(1)、首先我们需要对BCCSP模块做一个初步的了解,看如下源码:
加密服务提供者,bccsp接口定义,源码位置 bccsp/bccsp.go文件尾部位置
key秘钥接口定义,源码位置bccsp/bccsp.go文件头部位置
秘钥存储接口,源码位置bccsp/keystore.go
通过上边的几个接口定义,大致的了解bccsp模块的加密模块需要做哪些工作。
创建bccsp的gm国密模块,这部分的内容比较多,不做详细的文字说明,这部分代码的实现思路是,参照sw模块来实现,这个模块的功能实现后,接下来的工作就相对比较简单,只需要细心完成即可;
修改规则:
(1)、将调用ecdsa包里边的方法替换成sm2
(2)、将调用x509包里边的方法替换成sm2
(3)、将调用crypto/tls包里边的方法替换成 国密 tls
完成这个模块的国密修改的工作后,需要在 bccsp/new.go这文件的 NewWithParams方法里边将实现的国密算法加入到swbccsp中,入下代码:
swbccsp.AddWrapper(reflect.TypeOf(&gmsm2PrivateKey{}), &gmsm2PrivateKeyVerifier{})//sm2 私钥验签
swbccsp.AddWrapper(reflect.TypeOf(&gmsm2PublicKey{}), &gmsm2PublicKeyKeyVerifier{})//sm2 公钥验签
swbccsp.AddWrapper(reflect.TypeOf(&bccsp.GMSM3Opts{}), &hasher{hash:sm3.New})//sm3 Hash选项
swbccsp.AddWrapper(reflect.TypeOf(&bccsp.GMSM2KeyGenOpts{}), &gmsm2KeyGenerator{})
swbccsp.AddWrapper(reflect.TypeOf(&bccsp.GMSM4KeyGenOpts{}), &gmsm4KeyGenerator{length:32})
swbccsp.AddWrapper(reflect.TypeOf(&bccsp.GMSM4ImportKeyOpts{}), &gmsm4ImportKeyOptsKeyImporter{})
swbccsp.AddWrapper(reflect.TypeOf(&bccsp.GMSM2PrivateKeyImportOpts{}), &gmsm2PrivateKeyImportOptsKeyImporter{})
swbccsp.AddWrapper(reflect.TypeOf(&bccsp.GMSM2PublicKeyImportOpts{}), &gmsm2PublicKeyImportOptsKeyImporter{})
下一篇:具体工作2
有疑问加站长微信联系(非本文作者)