Ethereum以太坊区块链底层换用国密算法实验报告

区块链技术的基础是计算机密码学,可以说***“没有计算机密码学,就没有区块链技术”***,区块链在如下方面用到了计算机密码学:

  • 验证签名,保证交易发起的真实性,用到了ECDSA

  • 哈希校验区块完整性,保证不可篡改特性,用到了hash算法(以太坊中具体用到sha2 sha3的hash算法)

  • 对区块链通讯报文进行加密,防止传输过程泄密;在北京银行网贷资金存管项目中,我司方案用加密保证私密性和可监管性

区块链应用国密算法的重要性

为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC)那等等。

其中:

  • SM1、SM4、SM7、祖冲之密码(ZUC)是对称算法

  • SM2、SM9是非对称算法

  • SM3是哈希算法

目前,这些算法已广泛应用于国家各个领域中,其中金融领域比如PBOC3.0中国密是国家标准。在国内区块链应用采用国密算法作为标准是必然的。

国密算法对应表

前面所述区块链功能及所采用的密码学算法,国密中都有对应的部分,见如下表格

Ethereum以太坊区块链底层换用国密算法实验报告_第1张图片

完全用国密去建立起一套区块链框架,理论上是有可能的,且所用到的国密算法主要是SM2,SM3,SM4


国密替代方案

完全用国密建立起一套区块链框架,虽然理论上是有可能的,但是实际实现时需要考虑兼容性问题,我们知道以太坊的账户就是基于ECDSA椭圆曲线算法生成的,私钥是32位,公钥是65位,公钥压缩成地址后是20位。国密的对应算法是SM2,虽然同样属于椭圆曲线算法体系,但是曲线参数的不同,造成其并不兼容以太坊账户。

  • 用现有以太坊账户签名的交易,用SM2无法验证签名

  • 以太坊账户和SM2生成的账户无法进行有效的密钥交换

因此国密替换的重点放在了用SM4算法替换AES算法。

SM4算法介绍:SM4分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。

回头看我们为北京银行网贷资金存管项目所做的加密流程:
Ethereum以太坊区块链底层换用国密算法实验报告_第2张图片

其中设计加密算法的如下:

  • 对业务明文加密是用对称算法进行的,此处可以用国密SM4,现在是DES

  • 对交易密钥本身的加密,也是采用对称算法的,此处可以用国密SM4,现在是AES

  • 对交易密钥加密的密钥是通过ECDSA椭圆曲线算法生成的,此处不替换,但是由于做了缓存,这种运算只有程序初始化的时候用到

也就是说如果前2种情况采用国密,就相当于覆盖了99%的加密需求


替换国密后性能对比测试

使用国密算法后,性能问题要重点考虑,因为:

  • 之前公开报道中,国内某家公司用SM2代替ECDSA后,性能显著下降,需要在架构上考虑剥离加密,采用GPU加速等方式来对冲性能影响

  • 我们之前对北京银行网贷资金存管项目的测试中发现加密速度对项目性能有较大影响,而且CPU占用率较高

考虑到如上情况,所以设计了一个实验

  • 环境为工作笔记本,4C8G,其中CPU是i5-5200U,2.2Ghz

  • 明文长度是16字节,密钥长度16字节,密文长度16字节

  • 基于Junit,每个循环经历一次加密,一次解密,且解密结果和原文进行核对,如果对不上中断退出

  • 每次测试,发起100万个加密解密请求

  • 同样地,加密过程中所用的哈希算法也替换成国密(比如密钥交换后得到的大数用hash变为32位以便后续运算),同样是每次测试发出100万个哈希请求,比对原有算法和国密的速度

对称加密测试结果对比表格:(红色为最长耗时,蓝色为最短耗时)

Ethereum以太坊区块链底层换用国密算法实验报告_第3张图片
测试期间CPU占用情况比对:(前者AES,后者SM4)
Ethereum以太坊区块链底层换用国密算法实验报告_第4张图片

SM4算法调用的代码:
Ethereum以太坊区块链底层换用国密算法实验报告_第5张图片

SM3哈希算法调用的代码:
Ethereum以太坊区块链底层换用国密算法实验报告_第6张图片

哈希算法测试结果对比表格:

Ethereum以太坊区块链底层换用国密算法实验报告_第7张图片


测试情况说明:

  1. Java中加密算法的实现,可以由不同的第三方去实现;本次测试所用3种,分布是JDK自带的标准实现,著名第三方提供商SpongyCastle包中提供的AES和SM4算法。

  2. JDK自带的AES实现,速度比较慢,经过代码分析,该实现代码较为简单,没有为了提升速度将一些中间过程中可能用到的变量全部以静态方式预存;相反地SpongyCastle AES算法,采用**“以空间换时间”**的方法,定义了大量的空间用于对称加密过程中的比特变化,大大提升了速度。

  3. SongyCastle SM4实现上和SpongyCastle AES算法较为相似,也采用了类似“以空间换时间”的方法,速度较快。同样地,哈希算法使用以太坊Util类中自带的哈希算法,和采用国密SM3哈希算法,速度也差不多,甚至国密还快点。预计区块链换用国密SM3和SM4后,速度不会因此下降。

  4. 目前单单计算加密解密的TPS,可以达到十万次每秒的水平级别,而我们区块链的TPS还在千次每秒的水平级别,目前加密解密还不成为瓶颈

你可能感兴趣的:(密码学,算法,区块链,区块链,以太坊,算法,数字货币,国密)