skf密码设备研究(代码片段)

zz-1226 zz-1226     2022-12-16     288

关键词:

SKF密码设备研究

密码设备

mToken GM3000 国密身份认证锁是龙脉科技自主研发设计支持国密算法、完全遵照国家密码管理局颁布的《智能IC卡及智能密码钥匙密码应用接口规范》要求设计的USB Key,采用国产高性能智能卡芯片,内置SSF33、SM1、SM2、SM3、SM4等国产算法,支持高速数据国密算法加解密,提供CSP以及PKCS11和国密接口,完全符合国家密码管理局关于“密钥不落地”的技术规范要求,是电子政务、电子军务、CA厂商首选的USB Key产品。

适用范围:主要是用作基于公钥体系PKI的数字证书和私钥的安全载体。

使用目的:学习使用key导入数字证书等功能

SKF密码设备

SKF密码设备使用的是SKF接口,SKF接口是国密标准中智能密码钥匙的C语言应用开发接口标准,目前很多国内密码密码设备厂商都为其产品提供了SKF接口的开发包。开发者可以通过统一的SKF接口开发密码应用,访问来自不同设备供应商的USB-Key、TF卡、智能卡等不同形态的密码设备,而无需和某一个设备供应商的专属设备或专属接口绑定。

GmSSL项目从2.0版本开始,以Engine的方式增加了对SKF设备的完善支持。GmSSL通过在libcrypto密码库中引入SKF框架,实现了对不同厂商SKF设备的支持。通过将SKF接口封装为SKF Engine,使得上层应用和SSL库可以直接通过EVP接口动态调用不同SKF设备。

GmSSL通过ENGINE机制支持密码硬件。鉴于《智能IC卡及智能密码钥匙密码应用接口规范》标准中公布了访问国密硬件的C语言API (下面简称SKF API),GmSSL通过ENGINE机制访问支持国密SKF API的国产密码硬件。一个SKF API设备中可以包含一个或多个应用(Application),每个应用可以包含一个获多个容器(Container),每个容器中可以存放两对分别用于加密和签名的密钥对,以及两个相应的证书或证书链。每一个容器只能为ECC或RSA一种类型,一个容器中不能混用ECC密钥和RSA密钥。

SKF密码设备管理

通过gmssl命令行工具的skf命令可以访问和管理SKF设备,通过gmssl的pkey、pkeyutl和req等命令及SKF引擎可以密码计算、公钥导出、证书生成等功能。我按照文章http://gmssl.org/docs/skf.html所介绍的方法,对mToken GM3000在Linux下进行管理,需要在Linux下先安装mToken GM3000的驱动程序。

dpkg -i LM-mPluginV4-V4.0.0.0.amd64.deb 命令用来安装插件

技术图片

插件安装成功后,要想进行设备管理,需要获得由厂商提供的针对该类型设备的动态库,这个动态库通常随厂商的开发SDK提供,在Linux操作系统中以so为扩展名,在skf命令中,通过参数-lib指定厂商的SKF动态库。刚开始我并没有找到厂商提供的动态库,在网页中的命令如下:

$ ln -s /path/to/vendors/skf/libSKF.so ./libskf.so
$ gmssl skf -lib ./libskf.so -vendor wisec -listdevs
    Device 0 : /media/guanzhi/99E1-9854

其中,-lib参数用来指定厂商的SKF动态库,在提供的中间件文件夹中mToken-GM3000中的skf\\api\\linux\\x86,最后找到了该动态库名为libgm3000.1.0.so。所以对该动态库进行重命名,用./libskf.so命名。

技术图片

查看skf的相关命令gmssl skf -help

技术图片

后来发现可以使用skf命令查看设备信息等功能

gmssl skf -lib ./libskf.so -vendor wisec -listdevs

![](https://img2018.cnblogs.com/blog/1505758/201906/1505758-20190602183644176-720024748.png)


gmssl skf -lib ./libskf.so -dev $设备名称 -devinfo

![](https://img2018.cnblogs.com/blog/1505758/201906/1505758-20190602183649258-1754193743.png)

进行应用管理的时候包含创建应用、枚举应用、删除应用。首先,我们可以通过-listapps指令枚举指定设备中的应用,普通用户在拿到设备时,可能已经有预先设备好的应用。

gmssl skf -lib ./libskf.so -dev $DEV -authkey $AUTHKEY -listapps

在文档中看到设备认证的流程:

技术图片

gmssl skf -lib ./libskf.so -dev $DEV -authkey $AUTHKEY -listapps

使用命令查看设备的应用时,出现错误

技术图片

秘钥容器管理

SKF设备中以密钥容器的方式管理私钥,一个应用中可以建立多个密钥容器,每个密钥容器中可以装载同类型的2对公私钥对,其中一个为签名密钥对,一个为加解密或密钥交换密钥对。签名密钥对只能在SKF设备内部生成而无法由外部导入,而加解密或密钥交换密钥只能从外部导入而无法在设备内部生成。在完成密钥生成或导入后,密钥对中只有公钥可以导出,私钥是无法导出的。密钥容器还支持证书的存储,一个密钥容器中可以存储两个证书或两条证书链,分别对应两个密钥对。

证书生成

用户秘钥及证书生成过程如下:

mkdir demoCA
cd demoCA
mkdir certs crl newcerts private
touch index.txt
od -vAn -N4 -tx1 < /dev/urandom |tr -d ' ' > serial
echo "good" >> testPage.txt
gmssl sm2 -genkey -out private/cakeyGM.pem

技术图片

生成SM2自签证书作为根CA

gmssl req -new -x509 -key private/cakeyGM.pem -out cacertGM.crt

技术图片

生成用户SM2密钥对

cd ..
gmssl sm2 -genkey -out wzz.com.key

技术图片

生成证书请求

gmssl req -new -key wzz.com.key -out wzz.com.csr

技术图片

利用CA进行签名

sudo gmssl ca -in wzz.com.csr -out wzz.com.crt -cert demoCA/cacertGM.crt -keyfile demoCA/private/cakeyGM.pem

技术图片

验签

gmssl verify -verbose -x509_strict -CAfile demoCA/cacertGM.crt wzz.com.crt 

技术图片

生成PKCS12格式的证书文件

cd demoCA
sudo gmssl pkcs12 -export -in cacertGM.crt -inkey private/cakeyGM.pem -out wzzRootCA.p12

技术图片

导入证书

登录管理工具

技术图片

导入证书,选择刚刚在Linux下生成的证书

技术图片

可以导入PCKS12格式的证书

技术图片

最后可以实现安装证书

技术图片

实验一密码引擎-2-电子钥匙功能测试(代码片段)

任务详情0参考附件中的视频1解压"资源"中“龙脉密码钥匙驱动实例工具等”压缩包2在Ubuntu中运行“龙脉密码钥匙驱动实例工具等\\mToken-GM3000\\skf\\samples\\linux_mac”中例程,提交运行结果截图3加分项:运行“龙脉密码钥匙驱动实... 查看详情

实验一密码引擎-2-电子钥匙功能测试

生成证书解压"资源"中“龙脉密码钥匙驱动实例工具等”压缩包在Ubuntu中运行“龙脉密码钥匙驱动实例工具等\\mToken-GM3000\\skf\\samples\\linux_mac”中例程,提交运行结果截图加分项:运行“龙脉密码钥匙驱动实例工具等\\mToken-GM3000\\s... 查看详情

实验一密码引擎-2-电子钥匙功能测试

实验一密码引擎-2-电子钥匙功能测试1解压“龙脉密码钥匙驱动实例工具等”压缩包2在Ubuntu中运行“龙脉密码钥匙驱动实例工具等\\mToken-GM3000\\skf\\samples\\linux_mac”中例程,提交运行结果截图3加分项:运行“龙脉密码钥匙驱动实... 查看详情

常用设备管理口默认用户名密码汇总(代码片段)

...服务器设备默认管理1、宝德4卡服务器默认用户名:ADMIN密码:111111112、超微服务器默认用户名:ADMIN密码:admin000默认用户名:ADMIN密码:ADMIN3、浪潮服务器型号:NF5270M4管理地址:手动配置默认用户名:admin密码:admin型号:NF5270M2... 查看详情

华为交换和路由设备在bootrom下清除console口密码(代码片段)

设备的BootROM提供了清除Console口密码的功能。1.进入BootROM主菜单用串口线连接设备,然后重启。当出现“PressCtrl+BtoenterBootROMmenu...”(V200R002及V200R003版本)或者“PressCtrl+BorCtrl+EtoenterBootROMmenu...”(V200R005及以后发布的版本)打印... 查看详情

mysql中关于concat的问题!

selectSKT4.SKF37,SKT4.SKF38,SKT4.SKF39,SKT4.SKF40,SKT4.SKF41,SKT4.SKF42,SKT4.SKF67,SKT4.SKF89,SKT4.SF_CREATE_USER,SKT4.SKF134,SKT4.SKF135,group_concat(SKT7.SKF76,skt7.SKF77)fromSKT4,SKT7,SKT8whereSKT4.SKF40='5'ANDSKT7.SKF90=SKT4.SKF89ANDSKT4.SKF89=SKT8.SKF91得出的结果为怎么去掉其... 查看详情

tsingsee青犀视频智能分析开发中大华设备搜索和批量重置密码的代码实现(代码片段)

...一些流程,本文我们分享下大华设备搜索和批量重置密码的代码实现。主要流程图如下:分布介绍:1、调用CLIENT_Init完成SDK初始化流程。2、调用CLIENT_StartSearchDevices搜索局域网内的设备,获取设备信息(不支持... 查看详情

cisco实战——不让坏人登陆设备(代码片段)

设置密码方法1:(config-line)#linevty04#设置远程连接数,允许从0到4一共五个连接数(config-line)#password123#设置远程登录(即telnet)密码为123(config-line)#login#开启远程登录密码验证方法2:(config-line)#linevty04#设置远程连接数,允许从0到4... 查看详情

自制软键盘+支付密码(代码片段)

在移动端支付密码或输入密码时需要弹出虚拟键盘,有些设备在键盘弹出时会把文本框挡住,为了兼容各种设备,所以需要自制软键盘来替代虚拟键盘。以下是我自制的一个小demo,只能顺序输入和倒序清除,或全部清空;*padding... 查看详情

一台老设备cisco1841路由器重新利用,忘记了enable密码(代码片段)

清除Cisco1841路由器的密码:(1)console线连接计算机和路由器Console口,通过终端客户端连接,路由器上电(如果设备已启动,则按电源按钮,重启路由器,等待路由器开始启动时按[Ctrl+Break]键中断正常的启动过程,进入到ROM状态。(... 查看详情

javaswing课程设计----实验室设备管理系统(代码片段)

文章目录摘要沈阳理工大学信息网络实验室设备信息管理系统1引言1.1研究背景1.2研究目的和意义2系统开发技术2.1系统开发环境简介2.1.1操作系统2.1.2开发工具2.1.3MySQL关系型数据库2.2系统开发技术简介2.2.1Java语言简介2.2.2Swing/AWT图... 查看详情

android逆向android系统文件分析(cmdline系统启动参数文件|crypto密码算法信息文件|devices设备信息文件)(代码片段)

文章目录一、cmdline系统启动参数文件二、crypto密码算法信息文件三、devices设备信息文件一、cmdline系统启动参数文件/proc/cmdline文件中,记录了系统启动时的参数;walleye:/proc#catcmdlinercupdate.rcu_expedited=1androidboot.hardware=walleyeandroi... 查看详情

android逆向android系统文件分析(cmdline系统启动参数文件|crypto密码算法信息文件|devices设备信息文件)(代码片段)

文章目录一、cmdline系统启动参数文件二、crypto密码算法信息文件三、devices设备信息文件一、cmdline系统启动参数文件/proc/cmdline文件中,记录了系统启动时的参数;walleye:/proc#catcmdlinercupdate.rcu_expedited=1androidboot.hardware=walleyeandroi... 查看详情

cassso研究二:cas_server通过查询数据库验证用户名密码正确性(代码片段)

1、jar包准备,因为习惯使用bonecp数据源:mysqljdbc驱动:mysql-connector-java-5.1.13-bin.jarcasjdbc支持:cas-server-support-jdbc-3.4.11.jar数据源:bonecp-0.7.1.RELEASE.jar、guava-r09.jar2、编辑&#x 查看详情

rk356xu-boot研究所(命令篇)3.7pci与nvme命令的用法(代码片段)

平台U-Boot版本LinuxSDK版本RK356x2017.09v1.2.3文章目录一、设备树与config配置二、pci命令的定义三、nvme命令的定义四、pci与nvme命令的用法3.1pci总线扫描3.2nvme设备信息3.3nvme设备读写一、设备树与config配置RK3568支持PCIe接口,例如ROC-RK3568... 查看详情

springsecurity学习——密码加密(代码片段)

前言上一篇文章我们实现了从数据库读取用户名密码到SpringSecurity中,并验证登录成功。不过密码的形式有点奇怪,这篇文章我们研究一下密码加密和比对的问题。SpringSecurity的密码加密和比对密码编码器的使用SpringSecurit... 查看详情

研究quarkus出现的各种错误集锦(代码片段)

...多年又开始研究程序......1.mysql在windows上的安装以及找回密码在官网下载并解压64位版本,然后在根目录下加入my.ini文件[mysqld]basedir=D:\mysql-8.0.21-winx64datadir=D:\mysql-8.0.21-winx64\data然后mysqld--initial 查看详情

rk356xu-boot研究所(命令篇)3.9scsi命令的用法(代码片段)

平台U-Boot版本LinuxSDK版本RK356x2017.09v1.2.3文章目录一、设备树与config配置二、scsi命令的定义三、scsi命令的用法3.1scsi总线扫描3.2scsi设备读写一、设备树与config配置RK3568支持SATA接口,例如ROC-RK3568-PC:原理图如下:可以新建一个rk3568... 查看详情