ChainSQL国密版相较于标准ChainSQL,主要是将有关于公私钥生成、加解密、哈希等密码操作算法替换为我国国家密码局认定的国产密码算法,即通常所说的国密算法,常见的国密算法主要有SM2、SM3、SM4、SM7、SM9等已经成熟的密码算法。
ChainSQL国密版用到的是其中的SM2、SM3、SM4算法:
SM2:非对称加密算法,负责公私钥生成,加解密,签名验签
SM3:杂凑算法,负责对数据的哈希运算
SM4:对称加密算法,负责利用会话密钥对数据进行加解密处理
ChainSQL国密版有两种国密算法提供方式,一种是硬件加密板卡,另一种是软件加密实现。
1. 代码修改:
在gmencrypt/hardencrypt/HardEncrypt.h文件中将GM_ALG_PROCESS宏定义的注释取消。
2. 编译修改:
Linux:scons 编译的时候添加编译选项“--enable-gmalg”。
Linux:需要将工程的根目录下third_party文件夹下的gmencryptlib文件夹使用”cp -a”拷贝到可执行文件的同级目录中。
1. 由于采用了国密算法,使得其产生的公私钥长度发生变化,如创建帐号:去掉了master_key、master_seed_hex,将master_seed改为private_key,公私钥的长度增加。
之前的返回结果:
{ "result":{ "account_id":"zHCvhtqhXuBvWt5g79gyXfpG8VcrvUm9E9", "key_type":"secp256k1", "master_key":"ODD GAUL TOM JOLT MALE CURT JAB LEW TOP NEIL DOLT CORN", "master_seed":"xng7BET4G7m92t6SziJ2yMqXpbzqj", "master_seed_hex":"D64E8761078D241FDC667BD10539512E", "public_key":"aBQ6x5JsanwB4d529Z3HAeXcXt32tFpD7JZhSmWA3W5C3FP3PVJV", "public_key_hex":"036A131B7087A03CFED3D3AAF69F7086B41676F2AC242F04EC9B6D1A4F43E7DD34", "status":"success" } }
现在的返回结果:
{ "result" : { "account_id" : "zJ69uqLGaEQ6cRe7uHTmRy5k1Kt6nUgZkp", "key_type" : "gmalg", "private_key":"p98y7z1MbUJSsR6g7UWC2eF6nxd4wXhoqCH82h7rBwr19ZV5rJq", "public_key":"pYvVtG1fg9mnu3zqDnEZv2gZmTRVkf5w6kWXQPP2WoGFeygf48ZSdw
E3Tiq5L85HX4quVL7AGQ2RoqFLdxBBjtaXmoznQna1", "public_key_hex":"47F34CA64CCBDF4E9E5660AAA6166007D8EFAFF3A6FB1849A7305D14F07448AE1
5BDFC83810523944EE4D3F997C67BCEF27F3A6E68560E28639FE94347A2CF80FE", "status" : "success" } }
2. 命令需要添加public_key,如激活账户命令:
之前的激活账户命令:
{ "method": "submit", "params": [ { "offline": false, "secret": "zP8Mum8xaGSkypRgDHKRbN8otJSzwgiJ9M", "tx_json": { "Account": "zP8Mum8xaGSkypRgDHKRbN8otJSzwgiJ9M", "Amount":"10000000000", "Destination": "rHCvhtqhXuBvWt5g79gyXfpG8VcrvUm9E9", "TransactionType": "Payment" }, "fee_mult_max": 1000 } ] }
现在的激活账户命令:
{ "method": "submit", "params": [ { "offline": false, "secret":"p97evg5Rht7ZB7DbEpVqmV3yiSBMsR3pRBKJyLaRWt7SL5gEeBb", "public_key":pYvWhW4crFwcnovo5MhL71j5PyTWSJi2NVuzPYUzE9UYcSVLp
29RhtssQB7seGvFmdjbtKRrBQ4g9bCW5hjBQSeb7LePMwFM", "tx_json": { "Account": "rN7TwUjJ899savNXZkNJ8eFFv2VLKdESxj", "Amount":"10203040506", "Destination": "r3kUqzK694onnurofurX2XvNLt9GsBJHwF", "TransactionType": "Payment" }, "fee_mult_max": 1000 } ] }
3. 表同步时配置文件的修改
使用国密算法进行加密表同步的时候需要在配置文件中添加user的私钥,例如:[sync_tables] rf9KEF7CDx5KLUSJtiCejas9WQNmLHApV9 peersafe rf9KEF7CDx5KLUSJtiCejas9WQNmLHApV9 p9iow3RqaWHgRbtqf6g9297vbH6tKSzmLtPxoqfnSyCBpDSvyrG 而对于非加密表的同步则跟ChainSQL标准版的同步规则一致,不用添加私钥。