OC网络学习08:RSA和SM2的区别?

张建 lol

PEM 和 DER

  • PEM

PEM 文件只是 DER 编码数据的 base64 编码版本,为了区分外部DER编码字符串中的数据类型,数据周围存在页眉和页脚。PEM编码文件的示例是:

1
2
3
4
5
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgbDojZWhRjTkpNUAb
Kp12Zn9LpOe1u18jX5Hz5ySfRmChRANCAAS7B6RSXwuVQ1WNrJHd5oN5OOS8H1iE
5fPqUh2IadP3SpBDpNgrRhhIicd4XaQWxHbCrgd8SEvrf9/6Kp62JCye
-----END PRIVATE KEY-----

第一行和最后一行表示内部应该预期的DER格式。里面的数据是DER编码信息的base64编码版本。

RSA

RSA非对称密码算法,是 国际上 通用的 非对称密码算法

SM2

SM2非对称密码算法,是 我们国家 自己制定的非对称密码算法标准

GmSSL

  1. 关于 GmSSL

GmSSL 是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法、SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码设备,提供符合国密规范的编程接口与命令行工具,可以用于构建 PKI/CA、安全通信、数据加密等 符合国密标准的安全应用。GmSSL 项目是 OpenSSL 项目的 分支,并与 OpenSSL 保持接口兼容。因此GmSSL 可以替代应用中的 OpenSSL 组件,并使应用自动具备 基于国密 的安全能力。GmSSL 项目采用对商业应用友好的类 BSD 开源许可证,开源且可以用于闭源的商业应用。

GmSSL 项目由北京大学关志副研究员的密码学研究组开发维护,项目源码托管于GitHub。自2014年发布以来,GmSSL 已经在多个项目和产品中获得部署与应用,并获得2015年度 一铭杯 中国Linux软件大赛二等奖(年度最高奖项)与开源中国密码类推荐项目。GmSSL项目的核心目标是通过开源的密码技术推动国内网络空间安全建设。

大家都知道 OpenSSL,主要是 提供国际加密算法库。但是在最新的OpenSSL 1.1.1以上版本,已经对国密算法提供了支持。

OpenSSL、GmSSL 这俩提供的国密算法库,去看了下代码,代码实现是不一样的,属于条条大路通罗马。

  1. 标准的HTTPS国密HTTPS 区别?

国密SSL能够做到在同一个端口,自适应支持 HTTPS/国密HTTPS,完美解决从标准HTTPS到国密HTTPS的平滑过渡

解决与系统OpenSSL冲突的问题

GmSSL 是支持国密算法和标准的OpenSSL分支,也就是说GmSSL是在OpenSSL代码基础上添加的国密算法。

因此为了兼容OpenSSL,GmSSL编译后生成的so文件名称与OpenSSL一致,都是 libcrypto.so

可能存在的问题:

Linux上很多软件都依赖于系统中的 OpenSSL 库。若你编译安装的 GmSSL 版本,其基于的OpenSSL分支版本,与系统中的OpenSSL版本不一致,便会产生冲突,很容易导致这些软件不可用。

最简单有效的办法:将GmSSL编译为静态库。

GmSSL 命令行工具,以及我们基于该静态库开发的程序,直接内部就集成了 GmSSL 的二进制码,不需要去查找库了,也就不会与系统中 OpenSSL 产生冲突。

在安装GmSSL时,安装到指定的目录下,如/usr/local/gmssl,与系统中OpenSSL路径保持独立。

这样,即 从文件路径和运行 时,两方面保证了 GmSSLOpenSSL 不会冲突,并保持使用上的相互独立性。这的确是最完美的解决办法。

GmSSL源码准备

下载 GmSSL 源码:https://github.com/guanzhi/GmSSL

编译与安装GmSSL

  1. 解压并进入目录

解压源码:

1
unzip GmSSL-master.zip

进入源码目录

1
mac@bogon ~ % cd /Users/mac/Desktop/gmssl-master
  1. 编译选项

配置安装路径,编译为静态库:

1
mac@bogon ~ % ./config --prefix=/usr/local/gmssl --openssldir=/usr/local/gmssl no-shared

注:
–prefix 表示安装路径;
–openssldir=/usr/local/gmssl 表示openssl 的 configure 文件路径,与系统中 openssl 的路径保持独立,在路径上避免与系统中 openssl 的冲突
no-shared 表示只生成静态库,在运行上避免与系统中 openssl 的冲突
此条命令若出错,可参考这篇文章 ,修改 Configure、test/build.info文件后,即可解决

如下图:

重新输入上面的命令,成功执行:

  1. 编译并安装(默认编译 x86_64 架构的环境,即 模拟器 环境)
  • 编译:
1
mac@bogon gmssl-master % make

编译成功如下图:

  • 安装
1
mac@bogon gmssl-master % sudo make install

输入电脑密码即可

安装成功如下图:

生产模拟器下运行的静态库 .a(libssl.a 和 libcrypto.a) 文件,

  1. 环境变量

打开 ~/.bashrc 文件

1
mac@bogon gmssl-master % vim ~/.bashrc

在文件末尾添加内容:

1
export PATH=$PATH:/usr/local/gmssl/bin

修改完成后按 esc -> :wq 保存退出

环境变量生效:

1
mac@bogon gmssl-master % source ~/.bashrc 
  1. 验证是否安装成功
  • GmSSL
1
2
mac@bogon gmssl-master % gmssl version -a
GmSSL 3.1.0
  • OpenSSL
1
2
3
4
5
6
7
mac@bogon gmssl-master % openssl version -a
LibreSSL 2.8.3
built on: date not available
platform: information not available
options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
compiler: information not available
OPENSSLDIR: "/private/etc/ssl"

编译ARM64的静态库文件

  1. 清理
1
2
mac@bogon ~ % cd /Users/mac/Desktop/gmssl-master 
mac@bogon gmssl-master % make distclean
  1. 按顺序终端执行
1
2
3
4
5
6
7
8
9
10
11
mac@bogon gmssl-master % export CC=clang

// 注意Xcode路径
mac@bogon gmssl-master % export CROSS_TOP=/Users/mac/Desktop/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer

mac@bogon gmssl-master % export CROSS_SDK=iPhoneOS.sdk

mac@bogon gmssl-master % export PATH="/Users/mac/Desktop/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"

mac@bogon gmssl-master % ./configure ios64-cross no-shared --prefix=/usr/local/openssl-ios64make

编译armv7下的静态库文件

1
2
3
4
5
6
7
8
9
10
11
mac@bogon gmssl-master % export CC=clang

// 注意Xcode路径
mac@bogon gmssl-master % export CROSS_TOP=/Users/mac/Desktop/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer

mac@bogon gmssl-master % export CROSS_SDK=iPhoneOS.sdk

mac@bogon gmssl-master % export PATH="/Users/mac/Desktop/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"

mac@bogon gmssl-master % ./configure ios-cross no-shared --prefix=/usr/local/openssl-ios

其他命令

  • 查看所有支持编译的环境:
1
./configure
  • 合并静态库文件,使其支持真机和模拟器
1
lipo -create  模拟器.a文件路径   真机.a文件路径 -output 合成的.a文件路径
  • 查看静态库文件支持的编辑环境
1
lipo -info  .a文件路径

使用

  1. .a静态库文件include头文件 引入到项目中

  • Post title:OC网络学习08:RSA和SM2的区别?
  • Post author:张建
  • Create time:2023-05-19 13:04:42
  • Post link:https://redefine.ohevan.com/2023/05/19/OC网络/OC网络学习08:RSA和SM2的区别?/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.