Softhsm储存安全数据性能整理

目标:存储百万条数据对象

测试方案一:总大小2GB,每个数据对象大小约512KB,总条数4096条;

测试方案一:总大小2GB,每个数据对象大小约256B,总条数8388608条;

测试环境:启动SQLite3

配置CMakeLists.txt,打开所有SQLite3相关宏开关

option(WITH_OBJECTSTORE_BACKEND_DB "Build with object store backend database (SQLite3)" ON)
option(WITH_MIGRATE "Build migration tool. Requires SQLit3." ON)
set(DEFAULT_OBJECTSTORE_BACKEND "db" CACHE STRING "Default storage backend for token objects")

修改配置文件,原始文件为softhms/src/lib/common/softhsm2.conf.5.in,构建完成后位于/etc/softhsm.conf,默认file改为db

directories.tokendir = @softhsmtokendir@
objectstore.backend = db
objectstore.umask = 0077

至此创建的token和各类对象将存储到配置路径下的sqlite3.db中

测试脚本:write_objects.sh

#!/bin/bash

# SoftHSM 配置
SOFTHSM_MODULE="/home/ubuntu/Documents/HSM/20250106/SoftHSMv2_bgk/build/src/lib/libsofthsm2.so"  # SoftHSM 模块路径
TOKEN_DIR="/var/lib/softhsm/tokens/"              # Token 目录
SLOT=0                                           # Slot 编号
PIN="1234"                                       # Token PIN
LABEL_PREFIX="DataObject"                        # 数据对象标签前缀
DATA_SIZE=64                                     # 每个数据对象的大小(字节)

# 检查 SoftHSM 模块是否存在
if [ ! -f "$SOFTHSM_MODULE" ]; then
    echo "SoftHSM 模块未找到: $SOFTHSM_MODULE"
    exit 1
fi

# 检查 Token 目录是否存在
if [ ! -d "$TOKEN_DIR" ]; then
    echo "Token 目录未找到: $TOKEN_DIR"
    exit 1
fi

# 初始化计数器
COUNTER=1
MAX_COUNT=10

# 循环写入数据对象
while [ $COUNTER -le $MAX_COUNT ]; do
    # 生成随机数据
    DATA=$(openssl rand -hex $DATA_SIZE)

    # 生成唯一的标签和 ID
    LABEL="${LABEL_PREFIX}_${COUNTER}"
    ID=$(printf "%04x" $COUNTER)

    # 写入数据对象
    echo "$DATA" > /tmp/data.bin
    
    START_TIME=$(date +%s%3N)
     ./pkcs11-tool --module "$SOFTHSM_MODULE" --login --pin "$PIN" --write-object /tmp/data.bin --type data --id "$ID" --label "$LABEL"
     END_TIME=$(date +%s%3N)
     
     DIFF=$((END_TIME - START_TIME))
     
     DIFF=$((END_TIME - START_TIME))
     if [ $DIFF -lt 0 ]; then
        DIFF=$((START_TIME - END_TIME))
    fi
    echo "Execute Time: ${DIFF} ms"

    # 检查是否成功
    if [ $? -eq 0 ]; then
        echo "已写入数据对象: ID=$ID, 标签=$LABEL"
    else
        echo "写入数据对象失败: ID=$ID, 标签=$LABEL"
        exit 1
    fi

    # 增加计数器
    COUNTER=$((COUNTER + 1))
done

echo "已完成写入 $MAX_COUNT 个数据对象。"

测试性能(数据块大小512KB,初始数据库为空,连续存入100次,性能衰减非常严重):

Created Data Object:
Data object 2
  label:          'DataObject_1'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=426447c3de082349;token=SQLite3Token;object=DataObject_1;type=data
Execute Time: 15 ms
已写入数据对象: ID=0001, 标签=DataObject_1
Created Data Object:
Data object 2
  label:          'DataObject_2'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=426447c3de082349;token=SQLite3Token;object=DataObject_2;type=data
Execute Time: 17 ms
已写入数据对象: ID=0002, 标签=DataObject_2
Created Data Object:
Data object 2
  label:          'DataObject_3'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=426447c3de082349;token=SQLite3Token;object=DataObject_3;type=data
Execute Time: 17 ms
已写入数据对象: ID=0003, 标签=DataObject_3
...
...
...
Created Data Object:
Data object 2
  label:          'DataObject_98'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=426447c3de082349;token=SQLite3Token;object=DataObject_98;type=data
Execute Time: 224 ms
已写入数据对象: ID=0062, 标签=DataObject_98
Created Data Object:
Data object 2
  label:          'DataObject_99'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=426447c3de082349;token=SQLite3Token;object=DataObject_99;type=data
Execute Time: 233 ms
已写入数据对象: ID=0063, 标签=DataObject_99
Created Data Object:
Data object 2
  label:          'DataObject_100'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=426447c3de082349;token=SQLite3Token;object=DataObject_100;type=data
Execute Time: 216 ms
已写入数据对象: ID=0064, 标签=DataObject_100
已完成写入 100 个数据对象。

测试性能(数据块大小256Bytes,初始数据库为空,连续存入100次,性能衰减不明显):

Created Data Object:
Data object 2
  label:          'DataObject_1'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=b53fedf69561dfeb;token=SQLite3Token;object=DataObject_1;type=data
Execute Time: 15 ms
已写入数据对象: ID=0001, 标签=DataObject_1
Using slot 0 with a present token (0x1561dfeb)
Created Data Object:
Data object 2
  label:          'DataObject_2'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=b53fedf69561dfeb;token=SQLite3Token;object=DataObject_2;type=data
Execute Time: 14 ms
已写入数据对象: ID=0002, 标签=DataObject_2
Using slot 0 with a present token (0x1561dfeb)
Created Data Object:
Data object 2
  label:          'DataObject_3'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=b53fedf69561dfeb;token=SQLite3Token;object=DataObject_3;type=data
Execute Time: 14 ms
已写入数据对象: ID=0003, 标签=DataObject_3
...
...
...
Created Data Object:
Data object 2
  label:          'DataObject_998'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=b53fedf69561dfeb;token=SQLite3Token;object=DataObject_998;type=data
Execute Time: 18 ms
已写入数据对象: ID=03e6, 标签=DataObject_998
Using slot 0 with a present token (0x1561dfeb)
Created Data Object:
Data object 2
  label:          'DataObject_999'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=b53fedf69561dfeb;token=SQLite3Token;object=DataObject_999;type=data
Execute Time: 15 ms
已写入数据对象: ID=03e7, 标签=DataObject_999
Using slot 0 with a present token (0x1561dfeb)
Created Data Object:
Data object 2
  label:          'DataObject_1000'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=b53fedf69561dfeb;token=SQLite3Token;object=DataObject_1000;type=data
Execute Time: 16 ms
已写入数据对象: ID=03e8, 标签=DataObject_1000
已完成写入 1000 个数据对象。

交叉测试(构造初始数据库为200MB,再存入小数据块,测试存储性能):

Using slot 0 with a present token (0x47b89b8b)
Created Data Object:
Data object 2
  label:          'DataObject_1'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=4c32252ac7b89b8b;token=SQLite3Token;object=DataObject_1;type=data
Execute Time: 64 ms
已写入数据对象: ID=0001, 标签=DataObject_1
Using slot 0 with a present token (0x47b89b8b)
Created Data Object:
Data object 2
  label:          'DataObject_2'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=4c32252ac7b89b8b;token=SQLite3Token;object=DataObject_2;type=data
Execute Time: 82 ms
已写入数据对象: ID=0002, 标签=DataObject_2
...
...
...
Using slot 0 with a present token (0x47b89b8b)
Created Data Object:
Data object 2
  label:          'DataObject_19'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=4c32252ac7b89b8b;token=SQLite3Token;object=DataObject_19;type=data
Execute Time: 594 ms
已写入数据对象: ID=0013, 标签=DataObject_19
Using slot 0 with a present token (0x47b89b8b)
Created Data Object:
Data object 2
  label:          'DataObject_20'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=4c32252ac7b89b8b;token=SQLite3Token;object=DataObject_20;type=data
Execute Time: 627 ms
已写入数据对象: ID=0014, 标签=DataObject_20
已完成写入 20 个数据对象。

前置条件:构造10MB数据块,连续存入20次,获得196MB的初始数据库大小

ubuntu@ubuntu-vm:/var/lib/softhsm/tokens/30378c01-c782-32c2-4c32-252ac7b89b8b$ ls -lh
total 196M
-rw------- 1 ubuntu ubuntu 196M  2月 11 17:28 sqlite3.db
ubuntu@ubuntu-vm:/var/lib/softhsm/tokens/30378c01-c782-32c2-4c32-252ac7b89b8b$

测试性能(构造初始数据库为196MB,数据块大小256Bytes,连续存入3次,性能衰减明显):

Using slot 0 with a present token (0x47b89b8b)
Created Data Object:
Data object 2
  label:          'DataObject_1'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=4c32252ac7b89b8b;token=SQLite3Token;object=DataObject_1;type=data
Execute Time: 607 ms
已写入数据对象: ID=0001, 标签=DataObject_1
Using slot 0 with a present token (0x47b89b8b)
Created Data Object:
Data object 2
  label:          'DataObject_2'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=4c32252ac7b89b8b;token=SQLite3Token;object=DataObject_2;type=data
Execute Time: 607 ms
已写入数据对象: ID=0002, 标签=DataObject_2
Using slot 0 with a present token (0x47b89b8b)
Created Data Object:
Data object 2
  label:          'DataObject_3'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=4c32252ac7b89b8b;token=SQLite3Token;object=DataObject_3;type=data
Execute Time: 596 ms
已写入数据对象: ID=0003, 标签=DataObject_3
已完成写入 3 个数据对象。

测试脚本:read_objects.sh

#!/bin/bash

# SoftHSM 配置
SOFTHSM_MODULE="/home/ubuntu/Documents/HSM/20250106/SoftHSMv2_bgk/build/src/lib/libsofthsm2.so"  # SoftHSM 模块路径
TOKEN_DIR="/var/lib/softhsm/tokens/"              # Token 目录
SLOT=0                                           # Slot 编号
PIN="1234"                                       # Token PIN
LABEL_PREFIX="DataObject"                        # 数据对象标签前缀
DATA_SIZE=128                                # 每个数据对象的大小(字节)

# 检查 SoftHSM 模块是否存在
if [ ! -f "$SOFTHSM_MODULE" ]; then
    echo "SoftHSM 模块未找到: $SOFTHSM_MODULE"
    exit 1
fi

# 检查 Token 目录是否存在
if [ ! -d "$TOKEN_DIR" ]; then
    echo "Token 目录未找到: $TOKEN_DIR"
    exit 1
fi

# 初始化计数器
COUNTER=1
MAX_COUNT=1

# 循环写入数据对象
while [ $COUNTER -le $MAX_COUNT ]; do
    # 生成随机数据
    # DATA=$(openssl rand -hex $DATA_SIZE)

    # 生成唯一的标签和 ID
    # LABEL="${LABEL_PREFIX}_${COUNTER}"
    # ID=$(printf "%04x" $COUNTER)

    # 写入数据对象
    # echo "$DATA" > /tmp/data.bin
    
    START_TIME=$(date +%s%3N)
     ./pkcs11-tool --module "$SOFTHSM_MODULE" --login --pin "$PIN" --read-object --type data --label "DataObject_1" > /dev/null

     END_TIME=$(date +%s%3N)
     
     DIFF=$((END_TIME - START_TIME))
     
     DIFF=$((END_TIME - START_TIME))
     if [ $DIFF -lt 0 ]; then
        DIFF=$((START_TIME - END_TIME))
    fi
    echo "Execute Time: ${DIFF} ms"

    # 检查是否成功
    if [ $? -eq 0 ]; then
        echo "read数据对象: ID=$ID, 标签=$LABEL"
    else
        echo "read数据对象失败: ID=$ID, 标签=$LABEL"
        exit 1
    fi

    # 增加计数器
    COUNTER=$((COUNTER + 1))
done

echo "已完成read $MAX_COUNT 个数据对象。"

读安全数据的性能(基于以上已有的196MB的数据库,读取小的数据块,128-256Bytes):

ubuntu@ubuntu-vm:~/Documents/HSM/20250106/OpenSC/out/bin$ ./read_objects.sh 
Using slot 0 with a present token (0x47b89b8b)
e4d4dac6f0903e57f7cf925cbb8ad5980452e60358311ac1b139b880d16ba8a96f65dce59ec21cab8658daf567374e10302815253998afe3c606e3c41decc7d6dc4008030dfa15c1d1e356443c43166d17a280ad1e4324d203b0f893f634750838a79cec18bf88bc9ec87867d86bf67a7d8c9d36a223839bbbb92704acd558ee
Execute Time: 1067 ms
read数据对象: ID=, 标签=
已完成read 1 个数据对象。
ubuntu@ubuntu-vm:~/Documents/HSM/20250106/OpenSC/out/bin$ ./read_objects.sh 
Using slot 0 with a present token (0x47b89b8b)
e4d4dac6f0903e57f7cf925cbb8ad5980452e60358311ac1b139b880d16ba8a96f65dce59ec21cab8658daf567374e10302815253998afe3c606e3c41decc7d6dc4008030dfa15c1d1e356443c43166d17a280ad1e4324d203b0f893f634750838a79cec18bf88bc9ec87867d86bf67a7d8c9d36a223839bbbb92704acd558ee
Execute Time: 1064 ms
read数据对象: ID=, 标签=
已完成read 1 个数据对象。
ubuntu@ubuntu-vm:~/Documents/HSM/20250106/OpenSC/out/bin$ ./read_objects.sh 
Using slot 0 with a present token (0x47b89b8b)
e4d4dac6f0903e57f7cf925cbb8ad5980452e60358311ac1b139b880d16ba8a96f65dce59ec21cab8658daf567374e10302815253998afe3c606e3c41decc7d6dc4008030dfa15c1d1e356443c43166d17a280ad1e4324d203b0f893f634750838a79cec18bf88bc9ec87867d86bf67a7d8c9d36a223839bbbb92704acd558ee
Execute Time: 1061 ms
read数据对象: ID=, 标签=
已完成read 1 个数据对象。

结论:Softhsm使用数据库SQLite3存储数据对象的性能与sqlite3.db数据库的大小成反比,与数据条目数量不敏感,不符合数据库插入数据时间相对恒定的规律。

测试环境二:使用本地文件存储形式

option(WITH_OBJECTSTORE_BACKEND_DB "Build with object store backend database (SQLite3)" ON)
option(WITH_MIGRATE "Build migration tool. Requires SQLit3." ON)
set(DEFAULT_OBJECTSTORE_BACKEND "file" CACHE STRING "Default storage backend for token objects")
directories.tokendir = @softhsmtokendir@
objectstore.backend = file
objectstore.umask = 0077

测试性能(构造10MB数据块,连续存入20次,性能衰减不明显):

Using slot 0 with a present token (0x3bacd06c)
Created Data Object:
Data object 2
  label:          'DataObject_1'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=f0691d4b3bacd06c;token=FileToken;object=DataObject_SMALL_1;type=data
Execute Time: 47 ms
已写入数据对象: ID=0001, 标签=DataObject_1
Using slot 0 with a present token (0x3bacd06c)
Created Data Object:
Data object 2
  label:          'DataObject_SMALL_2'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=f0691d4b3bacd06c;token=FileToken;object=DataObject_SMALL_2;type=data
Execute Time: 66 ms
已写入数据对象: ID=0002, 标签=DataObject_2
...
...
...
Using slot 0 with a present token (0x3bacd06c)
Created Data Object:
Data object 2
  label:          'DataObject_SMALL_19'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=f0691d4b3bacd06c;token=FileToken;object=DataObject_SMALL_19;type=data
Execute Time: 158 ms
已写入数据对象: ID=0013, 标签=DataObject_19
Using slot 0 with a present token (0x3bacd06c)
Created Data Object:
Data object 2
  label:          'DataObject_SMALL_20'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=f0691d4b3bacd06c;token=FileToken;object=DataObject_SMALL_20;type=data
Execute Time: 188 ms
已写入数据对象: ID=0014, 标签=DataObject_20
已完成写入 20 个数据对象。

前置条件:构造10MB数据块,连续存入20次,在token目录下获得20个数据块文件

测试性能(数据块大小256Bytes,存入3次,性能衰减不明显,存入时间>=历史存入时间):

Using slot 0 with a present token (0x3bacd06c)
Created Data Object:
Data object 2
  label:          'DataObject_1'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=f0691d4b3bacd06c;token=FileToken;object=DataObject_1;type=data
Execute Time: 145 ms
已写入数据对象: ID=0001, 标签=DataObject_1
Using slot 0 with a present token (0x3bacd06c)
Created Data Object:
Data object 2
  label:          'DataObject_2'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=f0691d4b3bacd06c;token=FileToken;object=DataObject_2;type=data
Execute Time: 143 ms
已写入数据对象: ID=0002, 标签=DataObject_2
Using slot 0 with a present token (0x3bacd06c)
Created Data Object:
Data object 2
  label:          'DataObject_3'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=f0691d4b3bacd06c;token=FileToken;object=DataObject_3;type=data
Execute Time: 148 ms
已写入数据对象: ID=0003, 标签=DataObject_3
已完成写入 3 个数据对象。

测试性能(读一块数据,块大小5MBytes,读取性能良好):

ubuntu@ubuntu-vm:~/Documents/HSM/20250106/OpenSC/out/bin$ ./read_objects.sh 
Using slot 0 with a present token (0x2ed47981)
Execute Time: 146 ms
read数据对象: ID=, 标签=
已完成read 1 个数据对象。
ubuntu@ubuntu-vm:~/Documents/HSM/20250106/OpenSC/out/bin$ 
ubuntu@ubuntu-vm:~/Documents/HSM/20250106/OpenSC/out/bin$ ./read_objects.sh 
Using slot 0 with a present token (0x2ed47981)
Execute Time: 145 ms
read数据对象: ID=, 标签=
已完成read 1 个数据对象。
ubuntu@ubuntu-vm:~/Documents/HSM/20250106/OpenSC/out/bin$

测试性能(清零token,块大小256Bytes,连续存入1000次,存入性能良好):

Using slot 0 with a present token (0x37a524)
Created Data Object:
Data object 2
  label:          'DataObject_1'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=70e3fbdc8037a524;token=FileToken;object=DataObject_1;type=data
Execute Time: 7 ms
已写入数据对象: ID=0001, 标签=DataObject_1
Using slot 0 with a present token (0x37a524)
Created Data Object:
Data object 2
  label:          'DataObject_2'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=70e3fbdc8037a524;token=FileToken;object=DataObject_2;type=data
Execute Time: 7 ms
已写入数据对象: ID=0002, 标签=DataObject_2
...
...
...
Using slot 0 with a present token (0x37a524)
Created Data Object:
Data object 2
  label:          'DataObject_999'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=70e3fbdc8037a524;token=FileToken;object=DataObject_999;type=data
Execute Time: 65 ms
已写入数据对象: ID=03e7, 标签=DataObject_999
Using slot 0 with a present token (0x37a524)
Created Data Object:
Data object 2
  label:          'DataObject_1000'
  application:    ''
  app_id:         <empty>
  flags:           modifiable
  uri:            pkcs11:model=SoftHSM%20v2;manufacturer=SoftHSM%20project;serial=70e3fbdc8037a524;token=FileToken;object=DataObject_1000;type=data
Execute Time: 70 ms
已写入数据对象: ID=03e8, 标签=DataObject_1000
已完成写入 1000 个数据对象。

测试性能(读一块数据大小256Bytes,读取性能不好):

ubuntu@ubuntu-vm:~/Documents/HSM/20250106/OpenSC/out/bin$ ./read_objects.sh 
Using slot 0 with a present token (0x37a524)
Execute Time: 2472 ms
read数据对象: ID=, 标签=
已完成read 1 个数据对象。
ubuntu@ubuntu-vm:~/Documents/HSM/20250106/OpenSC/out/bin$ 
ubuntu@ubuntu-vm:~/Documents/HSM/20250106/OpenSC/out/bin$ ./read_objects.sh 
Using slot 0 with a present token (0x37a524)
515ed5b327f7468aece868f8db398dc0607ed2d466adfdac066965e0b4bc6ab2210273e0fb4bdc380eb5d0c13d705815f7e5640952ef305b5228adb71077ba5bba576e6cc0b671e14fca598bc9a0bed0f817d66f0d7ee20cb07a2a2b66df7455b473c364621ebc89078563d88661b085bf853f623fefa2ed16088a30ddd1714a
Execute Time: 2440 ms
read数据对象: ID=, 标签=
已完成read 1 个数据对象。
ubuntu@ubuntu-vm:~/Documents/HSM/20250106/OpenSC/out/bin$

结论:Softhsm使用本地文件系统存储数据对象的写入性能较数据库有明显优势,读本地数据的性能和数据条目数量相关性强,条目数量大时读性能差。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt - 地图相关 —— 3、Qt调用高德在线地图功能示例(附源码)

效果 作者其他相关文章链接:           Qt - 地图相关 —— 1、加载百度在线地图(附源码)           Qt - 地图相关 —— 2、Qt调用百度在线地图功能示例全集,包含线路规划、地铁线路查询等(附源码)           Qt - 地图相关 —— 3、Qt调用…

使用 POI-TL 和 JFreeChart 动态生成 Word 报告

文章目录 前言一、需求背景二、方案分析三、 POI-TL JFreeChart 实现3.1 Maven 依赖3.3 word模板设置3.2 实现代码 踩坑 前言 在开发过程中&#xff0c;我们经常需要生成包含动态数据和图表的 Word 报告。本文将介绍如何结合 POI-TL 和 JFreeChart&#xff0c;实现动态生成 W…

jenkins备份还原配置文件

下载ThinBackup插件 方式1 从插件市场直接下载 Manage Jenkins->Manage Plugins->可选插件搜索 注意&#xff1a;有时可能因为网络或者版本问题下载不了&#xff0c;好像是默认下载最新版本&#xff0c;可选择手动安装&#xff01; 方式二 手动安装插件 点击查看手…

C++蓝桥杯基础篇(二)

片头 嗨&#xff01;小伙伴们&#xff0c;今天我们将学习C蓝桥杯基础篇&#xff08;二&#xff09;&#xff0c;继续练习相关习题&#xff0c;准备好了吗&#xff1f;咱们开始咯~ 第1题 简单计算器输入两个数&#xff0c;以及一个运算符 &#xff0c;-&#xff0c;*&#xff…

将 AMD Zynq™ RFSoC 扩展到毫米波领域

目录 将 AMD Zynq™ RFSoC 扩展到毫米波领域Avnet XRF RFSoC 系统级模块适用于 MATLAB 的 Avnet RFSoC Explorer 工具箱5G mmWave PAAM 开发平台突破性的宽带毫米波波束成形特征&#xff1a;OTBF103 Mathworks Simulink 模型优化毫米波应用中的射频信号路径 用于宽带毫米波上/下…

1Panel配置java运行环境运行springboot项目

一、实际运行效果 1panel上java容器springboot的简单web项目 二、详细操作 步骤一、完成spring项目的打包&#xff0c;生成jar文件 步骤二、登录1panel&#xff0c;点击系统-》文件菜单&#xff0c;上传jar到一个合适的文件夹目录&#xff0c;/opt/jar 如下图&#xff1a; 步…

Jenkins+gitee 搭建自动化部署

Jenkinsgitee 搭建自动化部署 环境说明&#xff1a; 软件版本备注CentOS8.5.2111JDK1.8.0_211Maven3.8.8git2.27.0Jenkins2.319最好选稳定版本&#xff0c;不然安装插件有点麻烦 一、安装Jenkins程序 1、到官网下载相应的版本war或者直接使用yum安装 Jenkins官网下载 直接…

ubuntu安装VMware报错/dev/vmmon加载失败

ubuntu安装VMware报错/dev/vmmon加载失败&#xff0c;解决步骤如下&#xff1a; step1&#xff1a;为vmmon和vmnet组件生成密钥对 openssl req -new -x509 -newkey rsa:2048 -keyout VMW.priv -outform DER -out VMW.der -nodes -days 36500 -subj "/CNVMware/"ste…

LSTM 学习笔记 之pytorch调包每个参数的解释

0、 LSTM 原理 整理优秀的文章 LSTM入门例子&#xff1a;根据前9年的数据预测后3年的客流&#xff08;PyTorch实现&#xff09; [干货]深入浅出LSTM及其Python代码实现 整理视频 李毅宏手撕LSTM [双语字幕]吴恩达深度学习deeplearning.ai 1 Pytorch 代码 这里直接调用了nn.l…

细读 React | React Router 路由切换原理

2022 北京冬奥会开幕式 此前一直在疑惑&#xff0c;明明 pushState()、replaceState() 不触发 popstate 事件&#xff0c;可为什么 React Router 还能挂载对应路由的组件呢&#xff1f; 翻了一下 history.js 源码&#xff0c;终于知道原因了。 源码 假设项目路由设计如下&#…

Flutter 双屏双引擎通信插件加入 GitCode:解锁双屏开发新潜能

在双屏设备应用场景日益丰富的当下&#xff0c;移动应用开发领域迎来了新的机遇与挑战。如何高效利用双屏设备优势&#xff0c;为用户打造更优质的交互体验&#xff0c;成为开发者们关注的焦点。近日&#xff0c;一款名为 Flutter 双屏双引擎通信插件的创新项目正式入驻 GitCod…

【C++高并发服务器WebServer】-18:事件处理模式与线程池

本文目录 一、事件处理模式1.1 Reactor模式1.2 Proactor模式1.3 同步IO模拟Proactor模式 二、线程池 一、事件处理模式 服务器程序通常需要处理三类事件&#xff1a;I/O事件、信号、定时事件。 对应的有两种高效的事件处理模式&#xff1a;Reactor和Proactor&#xff0c;同步…

人岗匹配为核,打造精确高效招聘 “高速路”

人才的选拔与招聘是企业开展所有工作的前提&#xff0c;通过选聘合适的人才&#xff0c;充分发挥其能力和潜质&#xff0c;帮助企业不断完成发展目标。尤其对于初创企业&#xff0c;在人力资源与财务状况均相对紧张的背景下&#xff0c;聚焦于关键岗位的人才招聘显得尤为重要。…

网络在线考试|基于vue的网络在线考试系统的设计与实现(源码+数据库+文档)

网络在线考试系统 目录 基于SSM&#xff0b;vue的网络在线考试系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1功能页面实现 2系统功能模块 3管理员功能模块 4学生功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八…

vue2 导出Excel文件

1.安装依赖 npm install xlsx file-saver 2.使用 <template><button click"exportToExcel">导出Excel</button> </template><script> import * as XLSX from xlsx; import { saveAs } from file-saver; export default {methods: {ex…

第三届通信网络与机器学习国际学术会议(CNML 2025)

在线投稿&#xff1a; 学术会议-学术交流征稿-学术会议在线-艾思科蓝 通信网络机器学习 通信理论 通信工程 计算机网络和数据通信 信息分析和基础设施 通信建模理论与实践 无线传感器和通信网络 云计算与物联网 网络和数据安全 光电子学和光通信 无线/移动通信和技术 智能通信…

【漫话机器学习系列】085.自助采样法(Bootstrap Sampling)

自助采样法&#xff08;Bootstrap Sampling&#xff09; 1. 引言 在统计学和机器学习领域&#xff0c;数据的充足性直接影响模型的性能。然而&#xff0c;在许多实际场景中&#xff0c;我们可能无法获得足够的数据。为了解决这个问题&#xff0c;自助采样法&#xff08;Boots…

Ai无限免费生成高质量ppt教程(deepseek+kimi)

第一步&#xff1a;打开deepseek官网&#xff08;DeepSeek) 1.如果deepseek官网网络繁忙&#xff0c;解决方案如下&#xff1a; (1)超算互联网:DeepSeek (scnet.cn) (2)秘塔AI搜索:https://metaso.cn/(开启长思考&#xff09; (3)纳米ai:https://bot.n.cn/ (4)使用easychat官网…

spring cloud 使用 webSocket

1.引入依赖,(在微服务模块中) <!-- Spring WebSocket --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 2.新建文件 package com.ruoyi.founda…

运行npm install卡住不动的

首先检查npm代理&#xff0c;是否已经使用国内镜像 // 执行以下命令查看是否为国内镜像 npm config get registry 如果不是则换成国内镜像&#xff0c;执行以下命令 npm config set registryhttps://registry.npmmirror.com //执行以下命令查看是否配置成功 npm config get …