mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-18 22:36:25 +08:00
Destroyed 从OpenSSL迁移至GmSSL (markdown)
@@ -1,21 +0,0 @@
|
||||
在有源代码的情况下,可以很容易将基于OpenSSL密码库的应用程序迁移至GmSSL上,并将其中的国际密码算法替换为国密算法。我们以比特币(Bitcoin)的官方客户端(v-0.9)为例,介绍迁移的基本流程。比特币的官方客户端是由C++编写的应用程序,采用的密码算法固定设置为RIPEMD160、SHA-256、SHA-512、AES和ECDSA,在很长时间内其密码功能是调用OpenSSL实现的,这也是为什么我们以Bitcoin客户端为例的原因。
|
||||
|
||||
需要替换的算法包括:
|
||||
|
||||
1. 将哈希算法SHA-256和SHA-512替换为国密SM3,由于RIPEMD160特别用于生成160比特的输出,因此暂不替换。
|
||||
2. 将AES分组密码替换为国密SM4分组密码,具体地,将Bitcoin的AES-256-CBC加密替换为SM4-CBC加密。
|
||||
3. 将ECDSA数字签名替换为国密SM2签名算法,同时我们也将Bitcoin使用的椭圆曲线域参数替换为国密的推荐参数。
|
||||
|
||||
替换的过程如下:
|
||||
|
||||
首先下载、编译、安装最新的GmSSL代码。然后修改Bitcoin的源码:
|
||||
|
||||
1. 在Bitcoin客户端源代码的C++文件和头文件中检索`SHA`、`RIPEMD`、`AES`、`ECDSA`等字符串。
|
||||
2. 将源码中的`EVP_sha256`和`EVP_sha512`替换为`EVP_sm3`,将`SHA256_`前缀的函数替换为相应的`sm3_`函数。
|
||||
3. 将源码中的`EVP_aes_256_cbc`替换为`EVP_sms4_cbc`。
|
||||
4. 将源码中的`ECDSA_sign/verify`等函数替换为相应的`SM2_sign/verify`函数。
|
||||
5. 将源码中的曲线参数名`NID_secp256k1`替换为国密推荐参数名`NID_sm2p256v1`。
|
||||
|
||||
在编辑完代码之后重新编译,并且确保链接GmSSL的libcrypto库,而不是系统自带的OpenSSL库。如果在编译过程中出现编译错误,通过错误信息定位源码中修改不完善的位置。
|
||||
|
||||
通过编译的程序通常还会存在一些问题,例如程序的内部逻辑、数据格式、硬编码的数据、配置文件、测试数据、界面元素等都有可能和特定的算法相关,因此程序有可能无法正确执行。这需要进一步的修改,对软件的功能和用法越熟悉,迁移就越容易。
|
||||
Reference in New Issue
Block a user