含泪入坑 GMSSL

个人博客

最近一次去理发,天桥底下手艺最好的发型师老张告诉我:不能再剪了,你的发量本来就不多。

是的,最近在搞商密(实情也可能是被商密搞),在存量系统里搞到头秃实属正常,不过这次不谈这个,写篇博客缓一缓。

首先是一点点基础 😉

在通用密码学领域,主要有 3 种技术:

  • 对称加密(Symmetric),使用一个密钥(一串很大的数字)将明文处理为密文,加密和解密使用同一个密钥,典型算法如 DES、三重 DES、AES。由于 DES、三重 DES、AES 都属于分组密码算法,只能加密固定长度的明文(DES 64 bit,AES 128 bit),而现实中经常需要处理超出分组长度的明文,因此必须进行迭代处理,一般有 6 种迭代模式可以选择:ECB(电子密码本模式)、CBC(密码分组链接模式)、CFB(密文反馈模式)、OFB(输出反馈模式)、CTR(计数器模式)、GCM(GMAC+CTR),此处不展开。一般不建议使用纯切块的 ECB 模式。
  • 非对称加密(Asymmetric),同样是将明文处理为密文,加密和解密使用不同的密钥,两个密钥是基于数学上的大数分解得到唯一成对的两个数字,一个作为公钥,一个作为私钥,使用公钥加密后的密文只有对应的私钥才能解密,典型算法如 RSA。
  • 单向散列(又称哈希),通过一个散列算法从明文得到散列值,但不能通过算法从散列值反向计算出明文(除非用哈希碰撞),典型算法如 MD5、SHA1、SHA224、SHA256、SHA384、SHA512、SHA3。散列值是明文的指纹。在学哈希表的时候大多数人就接触过,Java 里每个对象也有 hashCode 方法。另外,很多人会将哈希处理称为加密,这种说法显然是不正确的。

以上的技术,一般会用在哪里呢?

典型的应用领域为 TLS 层实现——可谓是集密码学技术之大成。我们日常访问各种网站时,可以留心一下浏览器地址栏最左边是否出现了一个🔒图标,有的话就用到了该技术。

在 TLS 层实现中,灵活地结合了非对称加密、对称加密、单向散列技术,可以简单地认为是通过非对称加密传递了对称密钥,然后使用对称密钥来加密传输数据,兼顾了安全性和处理效率。

还记得下面这张图吗?来自前面的一篇博文,出现在建立 HTTPS 连接过程中。我们来看看红框中的第 6 条记录—— TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

  • ECDHE 指密钥交换采用 ECDHE 方式进行;
  • RSA 指身份认证采用 RSA 公钥密码算法;
  • AES 指传输数据时采用 AES 算法加密;
  • 128 指 AES 算法中用到的对称密钥长度为 128 位;
  • CBC 指迭代方式为 CBC 模式;
  • SHA256 指 MAC 或 PRF 算法的加密基元为 SHA256。

如果我们看第一条 TLS_RSA_WITH_AES_128_CBC_SHA256,则密钥交换和身份认证都是采用 RSA 公钥密码算法。

另一个比较火的应用领域就是区块链了,这个此处也不展开了。

为了对标国际通用密码学算法,国内搞出了 SM 系列算法,常用的包括 SM1/SM2/SM3/SM4/SM9。

  • SM1 为分组密码算法,算法细节目前未公开,由有资质的厂商用硬件来实现——也就是没有软实现,主要通过加密卡的形式提供服务。
  • SM2(GB/T 32918-2016)为公钥密码算法(也称非对称加密算法),可以部分替代 RSA。
  • SM3(GB/T 32905-2016)为密码哈希算法,可以代替 MD5/SHA1/SHA256。
  • SM4(GB/T 32907-2016)为分组密码算法,可以代替 AES/DES。
  • SM9 为基于身份的密码算法,用于 SSL VPN,可以建立类似 PKI/CA 的身份体系。

接下来可以动手了

一般国际通用的算法,openssl 项目里都有实现,操作系统安装了 openssl,各种上层应用就可以使用这些通用密码学算法。为了推广 SM 算法,类似的实现不可或缺。北大的关志研究员在 github 上开源了一个比较活跃的项目—Gmssl,一个类似 OpenSSL 的商密算法工具。看项目首页的介绍,现在已经搞到 3.0 版本了。

下载 GMSSL-3.0.0 项目到 Fedora Workstation 36 ,编译需要一些依赖,刚装的白板系统里没有,先装上

sudo dnf install cmake g++

编译安装步骤比较简单

# 进入 src 目录
mkdir build
cd build
cmake ..
make 
make test
sudo make install

执行 gmssl 可以试试各种商密算法功能。

[1] 报错 "CMAKE_CXX_COMPILER-NOTFOUND",应安装 g++

[2] 运行 gmssl,提示找不到 libgmssl.so.3,执行:sudo cp /usr/local/lib/libgmssl.so.3 /usr/lib/ && sudo ldconfig

[3] 编译提示找不到 CMakeLists.txt,在 /build 下执行:cmake build -S ../..

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
华为eNSP常用命令大全包括但不限于以下几个命令: 1. 进入特权模式: ``` <Huawei> system-view ``` 2. 修改设备名称: ``` [Huawei sysname <设备名称> ``` 3. 恢复设备名称为默认值: ``` [Huawei undo sysname ``` 4. 进入特定视图: ``` [Huawei <视图名称> ``` 5. 配置虚拟终端线路: ``` [Huawei user-interface vty 0 <线路号> ``` 请注意,这只是一部分华为eNSP常用命令的示例,实际上还有很多其他命令可以用于网络设备的配置和管理。您可以参考华为eNSP的官方文档或相关学习资料获取更全面的命令列表和详细说明。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [格雅Get 华为eNSP常用命令.docx](https://download.csdn.net/download/xxpr_ybgg/85632455)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [华为ensp常用操作命令 网络人凭经验含泪总结](https://blog.csdn.net/xiaobai729/article/details/123783178)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值