Softhsm2和Cryptoki的基本操作

0. 测试模块是否正常工作

sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --show-info
Cryptoki version 2.30
Manufacturer     SoftHSM
Library          Implementation of PKCS11 (ver 2.2)

1. 列出所有槽(Slots)

sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --list-slots
sudo softhsm2-util --show-slots
sudo softhsm2-util --delete-token --token=${label}

2. 列出支持的机制(Mechanisms)

sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --list-mechanisms
sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --list-mechanisms --slot 0

3. 列出所有对象(Objects)

sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --list-objects
sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --slot 0 --login --pin 1234  --list-objects
sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --list-objects

4. 生成密钥对(Key Pair)

sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --keypairgen --key-type rsa:2048 --id 2 --label "mytoken"
sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --generate-keypair --key-type RSA:2048 --label "mytoken" --slot 0
# 需要Slot Token Pin So-Pin
softhsm2-util --init-token --slot 0 --label "mytoken" --pin 1234 --so-pin 12345

5. 导出公钥(Public Key)

sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --id 01 --label "mytoken" --type pubkey --read-object --output-file public_key.der
sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --label "mytoken" --type pubkey --read-object --output-file public_key.der
openssl rsa -inform DER -in public_key.der -pubin -outform PEM -out public_key.pem

6. 导出私钥(Private Key) - 通常不允许

sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --id 01 --label "mytoken" --type privkey --read-object --output-file private_key.pem

7. 签名数据(Sign Data)

sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --id 01 --label "mytoken" --sign --mechanism SHA256-RSA-PKCS --input-file data.txt --output-file signature.bin
sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --label "mytoken" --sign --mechanism SHA256-RSA-PKCS --input-file data.txt --output-file signature.bin
sudo openssl dgst -engine pkcs11 -keyform engine -sign "pkcs11:token=mytoken;object=mytoken;type=private;pin-value=1234" -out signature.bin data.txt

8. 验证签名(Verify Signature)

# sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --id 01 --label "mytoken" --verify --input-file data.txt --signature signature.bin
# pkcs11-tool 目前不支持直接验证签名的操作,可以使用 OpenSSL 配合 PKCS#11 引擎来实现签名验证
1)
openssl dgst -sha256 -binary -out data.sha256 data.txt
openssl pkeyutl -verify -inkey public_key.pem -pubin -in data.sha256 -sigfile signature.bin
2)
openssl dgst -sha256 -verify public_key.pem -signature signature.bin data.txt

9. 加密数据(Encrypt Data)

# pkcs11-tool 目前不支持直接加密的操作,可以使用 OpenSSL 配合 PKCS#11 引擎来实现签名验证
# sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --id 01 --label "mytoken" --encrypt --input-file data.txt --output-file ciphertext.bin
# sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --label "mytoken" --encrypt --input-file plaintext.txt --output-file ciphertext.bin
1) 导出公钥,使用公钥加密
sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --label "mytoken" --type pubkey --read-object --output-file public_key.der
openssl rsa -inform DER -in public_key.der -pubin -outform PEM -out public_key.pem
echo -n "Your plaintext message ! " | openssl pkeyutl -engine pkcs11 -encrypt -pubin -inkey public_key.pem -out ciphertext.bin

10. 解密数据(Decrypt Data)

sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --id 01 --label "mytoken" --decrypt --mechanism RSA-PKCS --input-file ciphertext.bin --output-file decrypted.txt

11.验证

echo -n "Your plaintext message !  " | openssl pkeyutl -engine pkcs11 -encrypt -pubin -inkey public_key.pem -out ciphertext.bin
sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --decrypt --id 1 --mechanism RSA-PKCS --input-file ciphertext.bin
sudo pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --pin 1234 --decrypt --label "mytoken" --mechanism RSA-PKCS --input-file ciphertext.bin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/34646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis(4)MyBatis 如何配置和使用

MyBatis 的配置和使用可以分为几个步骤进行详细解析。请注意,完整的源码分析是非常庞大的工作,这里会给出一个高层次的视图和关键代码演示。 1. MyBatis 配置 配置通常通过 mybatis-config.xml 配置文件进行,这个文件包括了对 MyBatis 行为…

台式扫描电镜工作距离越远观察区越大?

台式扫描电镜(Scanning Electron Microscope, SEM)是一种高分辨率的显微镜,它利用电子束扫描样品表面,通过样品与电子束相互作用产生的信号来形成图像。这种显微镜广泛应用于材料科学、生物学和医学等领域,以观察样品的…

提示词绕过大模型安全限制

大模型安全绕过策略 简介 本文使用简单的提示词,可以在所有场景中实现针对某开源模型的安全策略绕过。 glm-4-9b-chat 的安全措施还有待完善。 上一代的6b比这一代的9B,要安全;上一代的6B大模型这一招没有用。 正常对话 若在下述正常互动…

html +css 控制文本高度超出变成省略号

.overflow{height: 50px;display: -webkit-box; /* 使用Webkit的弹性盒子模型显示 */-webkit-line-clamp: 2; /* 限制在一个块元素显示的文本的行数 */-webkit-box-orient: vertical; /* 设置或检索伸缩盒对象的子元素的排列方式 */overflow: hidden; /* 隐藏超出容器的内容 */…

经纬恒润EAS.HSM:驱动硬件信息安全

概述 HSM(Hardware Security Module)硬件安全模块,是一种用于保护和管理强认证系统所使用的密钥,并同时提供相关密码学操作的计算机硬件设备。 HSM 在汽车信息安全中扮演着至关重要的角色。随着汽车智能化和网联化的快速发展&am…

ONLYOFFICE8.1版本震撼来袭

目录 软件简介 产品概述: 功能特点: 技术原理: 版本与部署: 8.1版本更新 全新的PDF编辑器 1.文本编辑 2.页面处理 (添加、旋转、删除) 3.插入和调整各种对象,例如表格、形状、文本框、…

MYSQL十、MYSQL的存储过程和触发器的基本认识

存储过程 存储过程:存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合。调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想上很简单&#xff…

【学习笔记】数据结构(三)

栈和队列 文章目录 栈和队列3.1 栈 - Stack3.1.1 抽象数据类型栈的定义3.1.2 栈的表示和实现 3.2 栈的应用举例3.2.1 数制转换3.2.2 括号匹配的检验3.2.3 迷宫求解3.2.4 表达式求值 - 波兰、逆波兰3.2.5 反转一个字符串或者反转一个链表 3.3 栈与递归的实现3.4 队列 - Queue3.4…

Swift Combine — Scheduler(subscribe(on:)和receive(on:)的使用)

在 Swift 的 Combine 框架中,Scheduler 是一个重要的概念,用于控制任务的调度和执行。本文将详细介绍 Scheduler 的作用、常见的 Scheduler 类型以及如何使用 Scheduler 来管理任务的执行。 Scheduler 的定义 Scheduler 用于管理任务的调度和执行&…

Cell2Sentence:为LLM传输生物语言

像GPT这样的LLM在自然语言任务上表现出了令人印象深刻的性能。这里介绍一种新的方法,通过将基因表达数据表示为文本,让这些预训练的模型直接适应生物背景,特别是单细胞转录组学。具体来说,Cell2Sentence将每个细胞的基因表达谱转换…

AI学习指南机器学习篇-朴素贝叶斯模型应用与Python实践

AI学习指南机器学习篇-朴素贝叶斯模型应用与Python实践 在本篇博客中,我们将会介绍如何使用Python中的Scikit-learn库来实现朴素贝叶斯模型。朴素贝叶斯是一种常见的机器学习算法,它在文本分类、垃圾邮件检测等领域有着广泛的应用。通过本文的学习&…

小学数学蝴蝶模型详解

蝴蝶模型 1.蝴蝶模型仅存在于梯形中,是连接梯形两条对角线而形成的,如下图: 2.蝴蝶模型有几条公式 (1) (2) S△AODS△BOC 等等......

commons-pool2 对象池技术

对象池? 让任意对象实现池功能,只要结合使用两个类GenericObjectPool 和PooledObjectFactory ,这个池子可以实现: (1)minIdle个数保证:通过配置,测试并清除池子中的空闲对象,以保证…

多商户零售外卖超市外卖商品系统源码

构建你的数字化零售王国 一、引言:数字化零售的崛起 在数字化浪潮的推动下,零售业务正经历着前所未有的变革。多商户零售外卖超市商品系统源码应运而生,为商户们提供了一个全新的数字化零售解决方案。通过该系统源码,商户们可以…

BFS:解决拓扑排序问题

文章目录 什么是拓扑排序?关于拓扑排序的题1.课程表2.课程表Ⅱ3.火星词典 总结 什么是拓扑排序? 要知道什么拓扑排序我们首先要知道什么是有向无环图,有向无环图我们看名字其实就很容易理解,有向就是有方向,无环就是没…

C# 热插拔---插件开发

热插拔是以多态,文件监控,反射为基础的。所以用到的是FileSystemWatcher类和 Assembly 类,主要原理就是动态加载dll文件,而要监控dll文件,最好的就是用FileSystemWatcher类,它可以实时监控指定路径下的文件…

028基于SSM+Jsp的电影售票系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

梅雨季要祛湿!分不清寒湿和湿热,小心越祛越湿!4个方法,助你温和排湿热与寒湿

梅雨季又又又又到了,苏州的雨已经连下3天了,到处都湿哒哒、黏糊糊!胃口不好、身体酸重、心情不好……湿气太重了! 中医有一句话说“湿气在,百病害,湿气除,百病无”,意思是“湿”为万…

Java应用中的数据加密与解密技术详解

在当今的网络环境中,数据安全变得尤为重要。无论是保护用户隐私还是确保业务数据不被篡改,加密技术都是不可或缺的一环。Java提供了丰富的API来支持各种加密算法,包括对称加密、非对称加密以及消息摘要等。本文将详细介绍如何在Java应用中使用…

编写一个可复用且使用方式简单的部署脚本

只需一行命令就可使用应用部署或重新部署 当我们部署Java项目时,一般有两种部署方式: 使用java -jar命令来运行jar包将应用打成jar包以容器的方式进行部署 本篇文章主要讲解第二种方式,以部署xxl-job-admin为例 1.编写restart.sh脚本&…