• GM自适应安全报文工具的使用


    环境搭建

    本工具为qt工程,可在在Linux环境上运行,本博客以OpenEuler21.09为例作演示

    安装qt5.12.12Linux版

    点击官网链接

    下载qt-opensource-linux-x64-5.12.12.run文件,拷贝到OpenEuler上

    点击直接运行

    这里需要大家注册账号,qt会给注册时提供的邮箱发送一封激活邮件,点击链接即可激活,此处不再演示,点击Next

    两个协议均要勾上,点击Next

    选择安装路径

    下面这一十分关键,若是直接Next会导致后续无法导入项目

    将Qt5.12.12也要记得勾上

    同意协议,之后就进入安装,需要等待5-10分钟

    安装完成

    导入Qt项目,多两次

    龙脉密码钥匙mToken GM3000安装与激活

    我们的工具使用了龙脉密码钥匙驱动,可以实现OpenSSL和mToken GM3000提供的算法

    算法 默 认 长 度(bit) 最 小 长 度(bit) 最大长度(bit)
    SGD_SM1_ECB 128 128 256
    SGD_SM1_CBC 128 128 256
    SGD_SM1_CFB 128 128 256
    SGD_SM1_OFB 128 128 256
    SGD_SM4_ECB 128 128 256
    SGD_SM4_CBC 128 128 256
    SGD_SM4_CFB 128 128 256
    SGD_SM4_OFB 128 128 256
    SGD_SM2_1 256 256 256
    SGD_SM2_2 256 256 256
    SGD_SM2_3 256 256 256
    SGD_SM3 256 256 256

    其中SGD_SM3是散列算法,SGD_SM2_1是签名验证算法,其余均为加解密算法

    要在Linux环境下使用其接口进行开发首先需要在Window环境下初始化和激活

    初始化

    具体步骤可以参考博客windows下如何编译运行龙脉代码,总结一下就是先装中间件,再点击光盘驱动进行安装,最后进行初始化。这里仅强调比较重要的几个步骤。

    在点击GM3000Admin.exe后,可能会出现如下弹窗,也可能不会出现,若出现直接点“否”即可

    在点击初始化时可能会出现如下弹窗(若在点击初始化时未出现上述的弹窗即一次性初始化成功)

    点击“是”,输入SOPIN:admin

    提示操作成功,此时即初始化成功

    激活

    在初始化了多个USBkey后,我发现只有在Windows上经过Sample的使用激活,USBkey才能在Linux上被识别

    首次在Windows上跑csp例程时会出现报错
    此时再重新跑一次任意例程,会发现就不会有任何Failed的信息,均为OK

    只有这个时候USBkey才能在Linux中被识别,否则直接在Linux中运行将一直运行不出结果,Hcontianer将为空

    工具使用演示

    该工具封装了OpenSSL的国密算法和龙脉mToken GM3000中的国密算法,并可以实现自由切换,下面结通过走一遍工具使用的完整流程来演示该工具如何使用

    演示环境

    接收方和发送方均为OpenEuler21.09,网络连接均为NAT模式,通过STATIC设置静态IP

    • 接收方

      IP的地址为192.174.168.138
    • 发送方

      IP地址为192.168.174.153

    导入项目

    首先找到qtcreator安装路径

    进入Tools/QtCreator/bin

    下图任选其一发送到桌面作为快捷方式,方便之后打开qtcreator

    在接收方上打开qtcreator,点击“直接运行”

    导入SMMessage-master项目的sender项目

    选择sender.pro

    导入成功,点击“Configure Project”即可继续编辑项目

    右键点击项目,点击“构筑”或者左下角锤子进行编译

    编译成功

    之后即可运行

    接收方也是相同的步骤导

    界面展示

    • 接收方
    • 发送方

      发送方和接收方仅是业务模型,在实际操作中双方均可实现发送和接收

    证书生成

    首先需要在接收方和发送方本地生成证书,在该工具中,接收方和发送方均作为自己的CA,为自己签发证书

    • 接收方
      1. 输入命令 openssl ecparam -out receiverCA.key -name prime256v1 -genkey生成接收方私钥receiverCA.key文件
      2. 输入命令openssl req -key receiverCA.key -new -out receiverCA.req,根据私钥文件生成请求文件,并输入请求者信息,其中仅有Common Name一项为必填,其余均可直接回车
      3. 输入命令openssl x509 -req -in receiverCA.req -signkey receiverCA.key -out receiverCA.pem,根据请求文件和私钥生成receiver的证书,其中包含了证书持有者的信息(在请求阶段输入的信息)和公钥,格式为X509(便于工具中使用OpenSSL的X509相关接口直接提取)

        其中证书的有效期默认为1个月,若想指定需在该命令中添加-days EXPIRED TIME选项,EXPIRED TIME的单位为天
      4. 输入命令openssl ec -in receiverCA.key -out receiverpri.pem,将receiverCA.key文件转换成.pem格式,便于工具中使用OpenSSl的PEM相关接口读取私钥信息

        至此,接收方和证书相关的工作均部署完成,将包含接收方公钥的receiverCA.pem证书发给发送方。在发送前,我们需要将双方的防火墙都关闭,便于socket和scp传输
      • 防火墙的关闭
        其中systemctl stop firewalld.service是暂时防火墙关闭,systemctl disable firewalld.service是永久关闭防火墙
      • 通过scp ./receiverCA.pem 192.168.174.153:/root/桌面/SMMessage-master/build-sender-Desktop_Qt_5_12_12_GCC_64bit-Debug/Cert传输接收方证书,其中192.168.174.153是发送方的IP地址

        传输成功

    发送方和接收方操作大体一致,下面仅做简单演示

    • 发送方
      1. openssl ecparam -out senderCA.key -name prime256v1 -genkey生成接收方私钥senderCA.key文件
      2. openssl req -key senderCA.key -new -out senderCA.req
      3. openssl x509 -req -in senderCA.req -signkey senderCA.key -out senderCA.pem
      4. openssl ec -in senderCA.key -out senderpri.pem
      • 传送文件

        传输成功

    OpenSSL SM4文件加密和签名

    1. 发送方选择要传输的文件
      本工具能够传输任意类型的文件,包括文本、图片、视频等,下面先以图片为例详细介绍,再简单展示视频和文本的传输

    2. 发送方选择接收方证书

    3. 发送方选择发送方私钥

    4. 发送方点击“监听”

    5. 接收方指定发送方IP并点击“连接”

    6. 发送方点击“检测连接”

    7. 接收方点击“检测连接”

      注意第8步和第9步的顺序不能更改,否则会报错或者直接断开连接

    8. 发送方点击“加密并签名”

      显示文件保存路径

    9. 发送方点击 “发送密文”

    10. 接收方点击 “接收密文”

    OpenSSL SM4文件验签和解密

    1. 接收方选择密文进行解密

    2. 接收方选择发送方公钥

    3. 接收方选择自己私钥

    4. 接收方点击解密并验签,解密成功

    5. 验签成功

    6. 检查解密后的文件

      与发送方的图片对比

      传输成功
      文本文件传输演示

    7. 选择文件并进行加密签名

    8. 发送加密且签名后的文件

    9. 接收文件成功

      4。 查看接收文件,并选择其为待验签解密文件

    10. 解密成功

    11. 验签成功

      视频文件传输演示

    12. 对视频文件进行签名和加密

    13. 发送加密签名后的文件

    14. 接收方接收文件

    15. 接收方解密验签

      验签成功

      检验视频

      对比原发送文件

      完全一样

    mToken GM3000 SM4加密

    1. 选择图片进行加密,加密成功,此时发送方需要插上USBkey

    mToken GM3000 SM4解密

    1. 发送方将文件传输给接收方
    2. 接收方接收密文
    3. 接收方解密

    mToken GM3000 SM1加密

    1. 选择图片进行加密,加密成功

    mToken GM3000 SM1解密

    1. 发送方将文件传输给接收方
    2. 接收方接收密文
    3. 接收方解密,注意此时接收方也需要插上USBkey

    mToken GM3000 SM2签名

    1. 发送方签名

    mToken GM3000 SM2验签

    1. 发送方发送签名的文件
    2. 接收方接受被签名的文件
    3. 验签

      验签成功
  • 相关阅读:
    js 第四课
    斐波那契数列(Fibonacci)(递归,非递归)(动态规划,自顶向下,自底向上)
    八种方法计算字符串中特定字符的数量
    谁做对了?
    数组问题
    关于“ORA12988: 无法删除属于 SYS 的表中的列”
    两条路,此人如何问甲乙问题?才能走向京城
    学了快二月的Nhibernate
    温故知新,把牢基础~
    用键盘选择复选框
  • 原文地址:https://www.cnblogs.com/20191218tangqiheng/p/15785685.html
Copyright © 2020-2023  润新知