sdfx:基于 openHiTLS 的 GM/T 0018-2023 标准软件密码设备框架项目

sdfx

分支2Tags0
文件最后提交记录最后更新时间
10 个月前
8 个月前
10 个月前
10 个月前
8 个月前
8 个月前
8 个月前
8 个月前
8 个月前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前
10 个月前

SDFX - 软件密码设备框架

SDFX 是 GM/T 0018-2023 SDF(软件开发框架)标准的纯软件实现,使用 openHiTLS 作为底层密码库。该项目采用客户端-服务器架构,实现了完整的链路:SDK守护进程openHiTLS

🏗️ 架构

Application Layer
       ↓
   libsdfx.so (SDK)  ←→  sdfxd (daemon)  ←→  openHiTLS Library
       ↓                      ↓                       ↓
GM/T 0018-2023 API      Protocol Handler      Crypto Implementation

模块化 SDK 架构

该 SDK 遵循基于 GM/T 0018-2023 接口类别的模块化设计,实现了关注点的清晰分离和便捷维护:

sdfx_api.c (Main Entry Point)
├── Module Initialization & Coordination
├── Common Helper Functions  
└── Library Management APIs

├── sdf_device.c          ←→ sdfxd/session_manager.c
│   ├── SDF_OpenDevice()
│   ├── SDF_CloseDevice()
│   ├── SDF_OpenSession()
│   ├── SDF_CloseSession()
│   └── SDF_GetDeviceInfo()

├── sdf_random.c          ←→ sdfxd/crypto_random.c
│   └── SDF_GenerateRandom()

├── sdf_hash.c            ←→ sdfxd/crypto_hash.c
│   ├── SDF_HashInit()
│   ├── SDF_HashUpdate()
│   └── SDF_HashFinal()

├── sdf_symmetric.c       ←→ sdfxd/crypto_symmetric.c
│   ├── SDF_Encrypt()
│   └── SDF_Decrypt()

└── sdf_asymmetric.c      ←→ sdfxd/crypto_asymmetric.c
    ├── SDF_InternalSign_ECC()
    ├── SDF_InternalVerify_ECC()
    ├── SDF_ExternalEncrypt_ECC()
    └── SDF_ExternalDecrypt_ECC()

优势:

  • 🏗️ 清晰的模块边界,遵循 GM/T 0018-2023 分类标准
  • 🔧 易于维护,每个模块职责明确
  • 📈 可扩展的开发 - 团队可独立开发不同模块
  • 🎯 与守护进程直接对应 - 每个 SDK 模块映射到守护进程组件
  • 一致的 API 模式,并配有共享辅助函数

核心组件

SDK 层 (sdk/)

  • sdfx_api.c - 库初始化和模块协调的主入口点
  • sdf_device.c - 设备和会话管理操作
  • sdf_random.c - 随机数生成操作
  • sdf_hash.c - 哈希算法操作(SHA 系列、SM3)
  • sdf_symmetric.c - 对称加密操作(SM4)
  • sdf_asymmetric.c - 非对称密码操作(SM2、RSA)
  • protocol_client.c - 客户端协议处理和网络通信
  • handle_manager.c - 设备和会话的句柄管理
  • error_handler.c - 错误处理和 SDF 错误码映射

守护进程 (sdfxd/)

  • main.c - 守护进程入口点和信号处理
  • daemon_core.c - 具有线程池架构的核心守护进程逻辑
  • thread_pool.c - 高性能线程池实现
  • protocol_handler.c - 服务器端命令处理(16 条命令)
  • session_manager.c - 会话生命周期和状态管理
  • crypto_*.c - openHiTLS 的密码操作包装器

传输层 (transport/)

  • transport_interface.h - 统一的传输抽象接口
  • transport_tcp.c - 支持配置的 TCP 套接字实现
  • transport_unix.c - 支持配置的 Unix 域套接字实现
  • transport_manager.c - 传输类型选择和配置管理

配置系统 (common/)

  • config.c - INI 格式配置文件解析器和管理
  • config.h - 配置结构定义和 API 声明
  • hitls_init.c/hitls_init.h - 统一的 openHiTLS 库初始化系统
  • log.h - 带有标准化宏的集中式日志系统

✨ 功能特性

已实现算法

随机数生成(DRBG)

  • openHiTLS DRBG - 基于SHA256的确定性随机位生成器
  • 加密安全的随机数生成
  • 大数据支持 - 每次请求最大支持4096字节
  • ✅ 来自/dev/random可靠熵源

哈希算法

  • SHA系列:SHA1、SHA224、SHA256、SHA384、SHA512
  • SM3 - 中国国家标准哈希算法
  • 流式支持 - HashInit/Update/Final模式
  • 大数据处理,支持分块更新
  • 结果验证,通过标准测试向量验证

对称加密

  • SM4算法 - 中国国家标准分组密码
  • 多种模式:ECB、CBC、CFB、OFB、CTR
  • 变长数据支持,采用标准PKCS#7填充
  • openHiTLS集成,支持DRBG和提供者上下文
  • 全面测试,包括演示向量和边界情况测试

非对称密码学(SM2)

  • SM2密钥生成 - 基于openHiTLS的真实密钥对生成
  • SM2加密/解密 - 完整的加密/解密操作及上下文管理
  • SM2数字签名 - 结合SM3哈希的签名与验证操作
  • 上下文管理系统 - 支持多个并发SM2密钥对(最多100个)
  • openHiTLS集成 - 直接集成CRYPT_EAL_Pkey API
  • 真实密码学操作 - 无模拟实现,采用完整openHiTLS后端

架构改进与标准化

统一初始化系统

  • 集中式openHiTLS初始化 - 守护进程主函数中的单点初始化
  • 线程安全初始化,带互斥锁保护和引用计数
  • 完善的清理处理,配备守护进程关闭钩子
  • 消除冗余 - 移除模块间重复的CRYPT_EAL_Init调用

标准化项目结构

  • 公共目录 - 集中式共享组件,包含src/include/子目录
  • 传输层重构 - 传输层采用规范的src/include组织方式
  • 统一日志系统 - 所有模块使用标准化LOG_XXX宏
  • 代码格式化 - 全代码库统一文件结尾和代码风格

增强开发体验

  • 更清洁的编译 - 减少编译时依赖,提升构建速度
  • 更好的可维护性 - 通过标准化目录结构实现清晰的职责分离
  • 改进的调试能力 - 集中式日志,格式和级别保持一致

传输与配置

  • 多种传输方式:TCP 套接字和 Unix 域套接字
  • 编译时选择:通过 CMake 标志(-DSDFX_TRANSPORT_TYPE=tcp/unix
  • 配置管理:采用 INI 格式配置文件
  • 运行时配置:支持守护进程参数(端口、路径、线程)配置
  • 自动发现:客户端可搜索多个配置位置
  • 默认回退:无需配置文件即可运行

协议支持

  • 完整 SDF API 实现
  • 网络通信:通过 TCP/Unix 套接字
  • 会话管理:具备完善的隔离机制
  • 错误处理:提供全面的错误代码
  • 线程池架构:支持配置工作线程数量
  • 高性能任务调度:实现资源的优化利用
  • 🔄 管理协议设计:为未来命令行管理工具做好准备

🚀 快速开始

前提条件

  • CMake 3.16 及以上版本
  • GCC 9.0 及以上版本 或 Clang 10.0 及以上版本
  • openHiTLS 库(预安装于 ../openhitls_install/ 目录)
  • pthread 支持

构建说明

# 1. Create build directory
mkdir build && cd build

# 2. Configure with CMake
cmake ..

# 3. Build all components
make -j$(nproc)

# 4. Optional: Build with specific options
cmake -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON ..
make -j$(nproc)

构建选项

# Transport layer selection
cmake -DSDFX_TRANSPORT_TYPE=tcp ..     # TCP sockets (default)
cmake -DSDFX_TRANSPORT_TYPE=unix ..    # Unix domain sockets

# Build configuration
cmake -DCMAKE_BUILD_TYPE=Debug ..      # Debug build
cmake -DCMAKE_BUILD_TYPE=Release ..    # Release build

# Component selection
cmake -DBUILD_DAEMON=ON -DBUILD_SDK=ON -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON ..

🔧 使用方法

配置管理

系统支持通过 INI 格式的配置文件进行灵活配置:

配置文件格式

# Example configuration file (sdfx.conf)
[transport]
tcp_host = 127.0.0.1
tcp_port = 19790
unix_path = /tmp/sdfxd_custom.sock
unix_permissions = 0666

[daemon]
worker_threads = 8
max_clients = 100
session_timeout = 300

[client]
connect_timeout = 5000
request_timeout = 30000
retry_count = 3

配置文件位置

客户端会按以下顺序自动搜索配置文件:

  1. ./sdfx.conf(当前目录)
  2. ../config/sdfx.conf(配置目录)
  3. /etc/sdfx/sdfx.conf(系统目录)

如果未找到配置文件,系统将使用内置默认值。

启动守护进程

# Start with default configuration
LD_LIBRARY_PATH=/path/to/openhitls_install/lib ./sdfxd/sdfxd

# Start with custom configuration file
LD_LIBRARY_PATH=/path/to/openhitls_install/lib ./sdfxd/sdfxd -c /path/to/config.conf

# Show help
./sdfxd/sdfxd --help

传输模式默认值

  • TCP 模式:默认监听 127.0.0.1:19790
  • Unix 套接字模式:默认监听 /tmp/sdfxd.sock

命令行选项

Usage: sdfxd [OPTIONS]

Options:
  -c, --config FILE     Use configuration file
  -h, --help           Show help message
  -v, --version        Show version information
  -d, --daemon         Run in daemon mode (compatibility)

Examples:
  sdfxd                          # Use default configuration
  sdfxd -c /etc/sdfx.conf        # Use custom config file
  sdfxd --config tcp_remote.conf # Use TCP remote config

运行测试

# Set library path for tests
export LD_LIBRARY_PATH=/path/to/openhitls_install/lib

# Run specific test suites
./tests/test_random      # Random number generation tests
./tests/test_hash        # Hash algorithm tests  
./tests/test_symmetric   # SM4 symmetric encryption tests
./tests/test_basic       # Basic device/session tests
./tests/test_sm2         # SM2 asymmetric cryptography tests

# Run all tests
make test

示例程序

./examples/basic_usage   # Basic SDF API demonstration
./examples/hash_demo     # Hash algorithms showcase
./examples/crypto_demo   # Comprehensive crypto operations

📊 测试结果

SM2 非对称密码验证

完整的 SM2 非对称密码已成功实现并通过验证:

=== SM2 Test Results ===
✅ Real openHiTLS Integration: VERIFIED
✅ SM2 Key Generation: Authenticated key pairs with context management
✅ SM2 Encryption/Decryption: Complete round-trip verified
✅ SM2 Digital Signatures: Sign/verify operations with SM3 hash - FULLY WORKING
✅ SM2 Format Conversion: DER ↔ SDF signature format conversion implemented
✅ Context Management: Multi-key support (up to 100 concurrent contexts)
✅ Comprehensive Testing: All edge cases and performance tests passed

Test Example (SM2 Operations):
Encryption:  "Hello SM2!" (67 bytes) → 175 bytes ciphertext → "Hello SM2!" ✅ VERIFIED
Signature:   67 bytes data → r(32)+s(32) signature → verification success ✅ VERIFIED

对称加密验证(SM4)

所有 SM4 对称加密模式均已验证通过:

=== SM4 Test Results ===
✅ openHiTLS Demo vectors: PASSED
✅ SM4-ECB mode: 4/4 tests passed
✅ SM4-CBC mode: 4/4 tests passed  
✅ SM4-CFB mode: 4/4 tests passed
✅ SM4-OFB mode: 4/4 tests passed
✅ SM4-CTR mode: 4/4 tests passed
✅ Large data (1KB+): PASSED
✅ Edge cases: 3/3 tests passed

Demo Vector (SM4-CBC):
Input:  e3b0c442 98fc1c14 1c14...
Output: 6dc3142a a81abc06 c795f2ae a34e69eb ✅ VERIFIED

哈希算法验证

所有哈希实现均已通过标准测试向量的验证:

=== SHA256 Test ===
Input: "The quick brown fox jumps over the lazy dog"
Output: d7a8fbb307d78094...37c9e592 ✅ VERIFIED

=== Test Coverage ===  
✅ SHA1, SHA224, SHA256, SHA384, SHA512, SM3
✅ Single-shot and streaming operations
✅ Large data processing (1KB+)
✅ Edge cases and error conditions

性能特点

  • 随机生成:每次请求最多生成 4096 字节
  • 哈希处理:高效的分块处理
  • SM4 加密:支持全部 5 种模式及变长数据
  • SM2 运算:具备上下文管理的真实椭圆曲线密码学
  • 线程池:8 个预创建的工作线程,带有任务队列
  • 并发处理:针对高吞吐量场景进行优化
  • 内存使用:采用资源池化的优化缓冲区管理

🏗️ 协议架构与未来扩展

当前协议设计

SDFX 协议在设计时充分考虑了可扩展性,既支持当前的 SDF 操作,也为未来的管理功能预留了空间:

// Current protocol structure (protocol.h:56-70)
typedef struct sdfx_message_header {
    ULONG magic;        // Protocol identifier (0x53444658 "SDFX")
    ULONG version;      // Protocol version with capability flags
    ULONG cmd;          // Command type
    ULONG length;       // Data length
    ULONG session_id;   // Session identifier
    ULONG status;       // Response status
    ULONG reserved[2];  // Reserved for future extensions
} sdfx_message_header_t;

当前命令空间:

  • 0x0001-0x0036:SDF API 操作(设备/会话、加密操作)
  • 0x1000-0x1FFF预留用于管理命令

未来管理协议扩展

本协议旨在支持未来用于守护进程管理的管理命令行工具:

管理命令类别

// Proposed administrative command space
#define SDFX_CMD_ADMIN_BASE             0x1000

// Authentication & Authorization
#define SDFX_CMD_ADMIN_AUTH             0x1001
#define SDFX_CMD_ADMIN_SESSION_LIST     0x1002

// User Management
#define SDFX_CMD_ADMIN_USER_CREATE      0x1010
#define SDFX_CMD_ADMIN_USER_DELETE      0x1011
#define SDFX_CMD_ADMIN_USER_LIST        0x1012
#define SDFX_CMD_ADMIN_USER_MODIFY      0x1013

// Key Management  
#define SDFX_CMD_ADMIN_KEY_IMPORT       0x1020
#define SDFX_CMD_ADMIN_KEY_EXPORT       0x1021
#define SDFX_CMD_ADMIN_KEY_DELETE       0x1022
#define SDFX_CMD_ADMIN_KEY_LIST         0x1023

// System Configuration
#define SDFX_CMD_ADMIN_CONFIG_GET       0x1030
#define SDFX_CMD_ADMIN_CONFIG_SET       0x1031
#define SDFX_CMD_ADMIN_STATUS           0x1040
#define SDFX_CMD_ADMIN_SHUTDOWN         0x1041

管理传输架构

双通道设计:

SDF API Channel          Administrative Channel
(Port 19790)            (Port 19791)
     ↓                       ↓
┌─────────────┐         ┌─────────────┐
│ SDF Client  │         │ Admin CLI   │
│ Operations  │         │ Tool        │
└─────────────┘         └─────────────┘
     ↓                       ↓
┌─────────────────────────────────────┐
│         SDFX Daemon Process         │
│  ┌─────────────┐ ┌─────────────────┐│
│  │SDF Protocol │ │Admin Protocol   ││
│  │Handler      │ │Handler          ││
│  └─────────────┘ └─────────────────┘│
└─────────────────────────────────────┘

配置增强:

[transport]
# SDF API transport
tcp_port = 19790
unix_path = /tmp/sdfxd.sock

# Administrative transport  
admin_tcp_port = 19791
admin_unix_path = /tmp/sdfxd_admin.sock
admin_interface = unix  # tcp/unix/both
admin_auth_required = true

[security]
auth_token_timeout = 3600
admin_permissions_file = /etc/sdfx/admin_perms.conf

认证与授权框架

协议扩展:

// Enhanced header using reserved fields
typedef struct sdfx_message_header {
    ULONG magic;
    ULONG version;
    ULONG cmd;
    ULONG length;
    ULONG session_id;
    ULONG status;
    ULONG auth_token;   // reserved[0] → authentication token
    ULONG permissions;  // reserved[1] → permission bitmask
} sdfx_message_header_t;

// Permission levels
#define SDFX_PERM_SDF_USER     0x0001  // Standard SDF operations
#define SDFX_PERM_ADMIN_READ   0x0100  // Read administrative info
#define SDFX_PERM_ADMIN_WRITE  0x0200  // Modify admin settings
#define SDFX_PERM_KEY_MANAGE   0x0400  // Key management operations
#define SDFX_PERM_USER_MANAGE  0x0800  // User management operations
#define SDFX_PERM_SYSTEM       0x8000  // System control (shutdown, etc.)

管理消息结构

// User management
typedef struct sdfx_admin_user_req {
    ULONG operation;        // CREATE/DELETE/MODIFY/LIST
    ULONG user_id_len;
    ULONG user_data_len;
    BYTE payload[0];        // user_id + user_data (JSON format)
} sdfx_admin_user_req_t;

// Key management
typedef struct sdfx_admin_key_req {
    ULONG operation;        // IMPORT/EXPORT/DELETE/LIST
    ULONG key_id_len;
    ULONG key_data_len;
    ULONG key_attributes;   // Algorithm, usage flags, etc.
    BYTE payload[0];        // key_id + key_data
} sdfx_admin_key_req_t;

// System configuration
typedef struct sdfx_admin_config_req {
    ULONG operation;        // GET/SET
    ULONG config_key_len;
    ULONG config_value_len;
    BYTE payload[0];        // config_key + config_value
} sdfx_admin_config_req_t;

未来命令行工具设计

建议的 CLI 界面:

# User management
sdfx-admin user create --name admin --role super-admin
sdfx-admin user list --format json
sdfx-admin user delete --id user123

# Key management
sdfx-admin key import --file master.key --type sm2 --usage sign
sdfx-admin key export --id key456 --format pem --output backup.key
sdfx-admin key list --algorithm sm2

# System management
sdfx-admin status --detailed
sdfx-admin config set daemon.worker_threads 16
sdfx-admin config get --section transport
sdfx-admin shutdown --graceful

实施优势

  • 🔒 安全隔离:管理操作与 SDF API 分离
  • 🔌 向后兼容:现有 SDF 客户端无需修改即可继续使用
  • 📈 可扩展性:命令命名空间支持未来的广泛扩展
  • 🛡️ 访问控制:基于角色的权限,配合身份验证令牌
  • 🔧 传输灵活:支持 TCP 和 Unix 套接字两种管理方式
  • 📊 企业就绪:支持审计日志和配置管理

🏗️ 开发

项目结构

sdfx/
├── build/                 # Build output directory (generated)
├── config/               # Configuration files
│   ├── sdfx.conf.example # Example configuration
│   ├── sdfx_tcp.conf    # TCP transport configuration
│   └── sdfx_unix.conf   # Unix socket configuration
├── common/               # Common/shared components
│   ├── src/             # Implementation files
│   │   ├── config.c    # Configuration management
│   │   ├── hitls_init.c # OpenHiTLS initialization
│   │   └── protocol.c  # Protocol definitions
│   └── include/         # Common headers
│       ├── hitls_init.h # OpenHiTLS initialization API
│       └── log.h       # Unified logging system
├── sdfxd/                # Daemon process source
│   ├── src/             # Implementation files
│   │   ├── main.c      # Entry point with unified initialization
│   │   ├── daemon_core.c # Core daemon logic
│   │   ├── crypto_*.c  # Cryptographic operations
│   │   └── ...         # Other daemon components
│   └── include/         # Internal headers
├── sdk/                 # Client SDK library
│   ├── src/             # Modular SDK implementation
│   │   ├── sdfx_api.c      # Main entry point and coordination
│   │   ├── sdf_device.c    # Device/session management
│   │   ├── sdf_random.c    # Random number generation
│   │   ├── sdf_hash.c      # Hash algorithms  
│   │   ├── sdf_symmetric.c # Symmetric encryption
│   │   ├── sdf_asymmetric.c# Asymmetric algorithms
│   │   └── ...             # Supporting modules
│   └── include/         # Internal SDK headers
│       └── sdf_internal.h  # Shared definitions
├── transport/           # Transport layer (restructured)
│   ├── src/            # Transport implementations
│   │   ├── transport_tcp.c  # TCP socket transport
│   │   └── transport_unix.c # Unix socket transport
│   └── include/        # Transport headers
│       └── transport_interface.h # Transport abstraction
├── include/             # Public headers
│   ├── sdfx_api.h      # Main SDF API
│   ├── sdfx_types.h    # Type definitions
│   ├── sdfx_error.h    # Error codes
│   ├── config.h        # Configuration definitions
│   └── protocol.h       # Protocol definitions
├── tests/               # Test programs
├── examples/            # Example applications
└── CMakeLists.txt       # Build configuration

添加新算法

借助模块化架构,添加新算法变得简单直接:

  1. 添加算法常量include/sdfx_types.h
  2. 实现加密包装器于相应的 sdfxd/src/crypto_*.c 模块中
  3. 添加协议处理sdfxd/src/protocol_handler.c
  4. 创建 API 包装器于对应的 sdk/src/sdf_*.c 模块:
    • 随机算法sdf_random.c
    • 哈希算法sdf_hash.c
    • 对称密码sdf_symmetric.c
    • 非对称操作sdf_asymmetric.c
    • 新类别 → 创建新的 sdf_newcategory.c
  5. 添加模块注册sdfx_api.c(若为新类别)
  6. 添加测试覆盖tests/

示例 - 添加 AES 算法:

// 1. Add to sdfx_types.h
#define SGD_AES_128_ECB    0x00000801

// 2. Implement in sdfxd/src/crypto_symmetric.c  
LONG crypto_aes_encrypt(session_ctx_t *session, ...);

// 3. Add to sdk/src/sdf_symmetric.c
// Use existing SDF_Encrypt() with new algorithm ID

// 4. Test in tests/test_symmetric.c
test_aes_encryption();

线程池架构

守护进程采用高性能的线程池系统:

// Thread pool management
int thread_pool_create(int thread_count);     // Create worker threads
int thread_pool_submit(function, arg);        // Submit task to queue
void thread_pool_destroy(void);               // Clean shutdown

// Architecture flow
Accept Thread → Task Queue → Worker Pool (8 threads)
                    ↓           ├── Worker 1
                Client Task     ├── Worker 2  
                                ├── ...
                                └── Worker 8

优势:

  • 🚀 客户端连接零线程创建开销
  • 🎯 固定线程数(8 个工作线程)实现资源控制
  • 预分配线程提升响应时间
  • 🛡️ 避免线程创建/销毁风暴,增强稳定性

协议命令

系统目前支持 18 种以上 SDF 协议命令,并为管理扩展预留了空间:

SDF API 命令(0x0001-0x0036)

// Device & Session Management
#define SDFX_CMD_OPEN_DEVICE         0x0001
#define SDFX_CMD_CLOSE_DEVICE        0x0002
#define SDFX_CMD_OPEN_SESSION        0x0003
#define SDFX_CMD_CLOSE_SESSION       0x0004
#define SDFX_CMD_GET_DEVICE_INFO     0x0005

// Cryptographic Operations
#define SDFX_CMD_GENERATE_RANDOM     0x0006
#define SDFX_CMD_HASH_INIT           0x0010
#define SDFX_CMD_HASH_UPDATE         0x0011
#define SDFX_CMD_HASH_FINAL          0x0012
#define SDFX_CMD_ENCRYPT             0x0020
#define SDFX_CMD_DECRYPT             0x0021
// ... SM2 ECC operations (0x0030-0x0036)

管理命令(0x1000-0x1FFF)- 保留

// Future administrative command space
#define SDFX_CMD_ADMIN_BASE          0x1000
// User management: 0x1010-0x101F
// Key management:  0x1020-0x102F  
// Configuration:   0x1030-0x103F
// System control:  0x1040-0x104F

命令空间设计:

  • 当前:SDF API 操作已完全实现
  • 🔄 预留:管理命令已准备好,供未来实现
  • 📈 可扩展:大型命令空间(0x1000-0x1FFF),用于管理工具

🔐 安全特性

  • 通过 openHiTLS DRBG 实现加密安全的随机数生成
  • 采用唯一会话 ID 实现适当的会话隔离
  • 具备边界检查和清理机制,确保内存安全
  • 对所有 API 参数进行输入验证
  • 采用结构化协议消息保障网络安全
  • 通过互斥锁保护共享资源,实现线程安全
  • 设置资源限制,防止拒绝服务攻击

🐛 调试

常见问题

  1. 库加载错误

    # 确保已设置 openHiTLS 库路径
    export LD_LIBRARY_PATH=/path/to/openhitls_install/lib
    
  2. 连接失败

    # 检查守护进程状态(TCP 模式)
    netstat -tlnp | grep 19790
    
    # 检查守护进程状态(Unix 套接字模式)  
    ls -la /tmp/sdfxd*.sock
    
    # 检查守护进程日志
    ./sdfxd/sdfxd  # 在前台运行以查看日志
    
    # 使用自定义配置进行测试
    ./sdfxd/sdfxd -c config/test_config.conf
    
  3. 配置问题

    # 检查配置文件语法
    cat config/sdfx.conf
    
    # 验证守护进程是否正确加载配置
    ./sdfxd/sdfxd -c config/sdfx.conf --help
    
    # 客户端配置搜索位置
    ls ./sdfx.conf ../config/sdfx.conf /etc/sdfx/sdfx.conf
    
    # 使用默认配置进行测试
    mv sdfx.conf sdfx.conf.bak  # 临时禁用配置
    ./tests/test_basic          # 应使用默认值
    
  4. 线程池问题

    # 在守护进程日志中检查线程池状态
    grep "Thread pool" daemon_logs
    
    # 监控工作线程活动
    grep "Worker thread" daemon_logs
    
  5. 内存问题

    # 使用 valgrind 运行
    valgrind --tool=memcheck --leak-check=full ./tests/test_basic
    

日志级别

系统提供结构化日志功能:

  • [DEBUG] - 详细执行流程
  • [INFO] - 正常操作
  • [WARN] - 可恢复问题
  • [ERROR] - 严重问题

📋 路线图

✅ 已完成功能

  • 模块化 SDK 架构,遵循 GM/T 0018-2023 分类标准
  • 随机数生成(openHiTLS DRBG)
  • 哈希算法(SHA 系列 + SM3)
  • 对称加密(SM4 全模式)
  • SM2 非对称密码 - 完整实现,集成真实 openHiTLS
  • SM2 密钥生成 - 带上下文管理的真实 ECC 密钥对生成
  • SM2 加密/解密 - 完整的加密/解密操作
  • SM2 数字签名 - 使用 SM3 哈希算法的签名/验证功能
  • 基础设备/会话管理
  • 传输层抽象,支持 TCP 和 Unix 套接字
  • 配置管理系统,支持 INI 格式文件
  • 运行时配置,用于守护进程参数和传输设置
  • 线程池架构,支持可配置工作线程
  • 全面的测试套件
  • 项目标准化 - 统一目录结构,重组 common/、transport/
  • 集中初始化 - 单点 openHiTLS 初始化系统
  • 统一日志 - 跨所有模块的标准化日志宏
  • 代码质量改进 - 一致的格式和文件结构

🔄 进行中

  • SM2 操作的性能优化
  • 其他非对称算法(RSA)
  • 增强的密钥管理功能

📅 计划功能

管理工具

  • 管理协议实现 - 命令行管理界面
  • 用户管理系统 - 创建、修改、删除用户,支持基于角色的访问控制
  • 高级密钥管理 - 导入/导出、密钥生命周期管理、安全密钥存储
  • 配置热重载 - 无需重启守护进程即可应用运行时配置更改
  • 系统监控与状态 - 实时守护进程状态、性能指标、健康检查
  • 审计日志系统 - 管理操作和合规性的全面日志记录
  • 认证框架 - 基于令牌的认证,支持可配置超时
  • 权限管理 - 细粒度访问控制,支持权限继承

核心密码学增强

  • 硬件加速支持
  • 其他 ECC 曲线支持
  • RSA 算法实现
  • 证书管理和 PKI 支持

传输与网络

  • 双通道架构 - 独立的管理传输(TCP 端口 19791、Unix 套接字)
  • TLS/SSL 加密 - 加密的管理通信
  • 共享内存传输
  • 自定义传输插件系统
  • 分布式部署的网络集群支持

企业级功能

  • 配置管理 - 带验证的集中式配置
  • 高可用性 - 守护进程集群和故障转移支持
  • 性能监控 - 指标收集和报告
  • 集成 API - 用于外部系统集成的 REST API

📄 许可证

本项目基于 Mulan PSL v2 许可证开源。

🤝 贡献指南

  1. Fork 本仓库
  2. 创建功能分支
  3. 进行修改并编写相应测试
  4. 确保所有测试通过
  5. 提交拉取请求

📞 技术支持

如遇问题或疑问:

  • 查看测试套件获取使用示例
  • 检查守护进程日志进行调试
  • 确保正确安装 openHiTLS 库

SDFX - 基于 openHiTLS 构建安全的密码解决方案 🔐

🎯 当前实现状态

SDFX v1.0 提供了 GM/T 0018-2023 SDF 标准的完整生产级软件实现,具备以下特性:

  • 完整密码学套件:随机数生成、哈希算法(SHA + SM3)、对称加密(SM4)及非对称密码学(SM2)
  • 真实 openHiTLS 集成:所有密码运算均使用真实的 openHiTLS 库调用,无模拟实现
  • 企业级架构:客户端-服务器设计,包含线程池、统一初始化及多种传输选项
  • 标准化代码库:清晰的项目结构,包含集中式组件、统一日志及一致的代码格式
  • 生产级质量:全面测试、完善的资源管理及经过验证的功能
  • 全面测试覆盖:所有已实现算法和操作均通过完整测试,结果可验证

近期改进(最新版本)

项目标准化与架构增强:

  • 🏗️ 项目结构重构,采用标准化的 common/transport/srctransport/include 目录结构
  • 集中式 openHiTLS 初始化,消除冗余的初始化调用
  • 📝 统一日志系统,在所有模块中使用一致的 LOG_XXX 宏
  • 🧹 代码质量提升,实现一致的文件格式和结构
  • 🔧 增强可维护性,通过清晰的职责分离和模块化设计

已验证功能:

  • 所有密码运算经过测试,标准化后功能正常
  • 编译无警告,零错误
  • 完整测试套件通过,包括随机数生成、哈希算法、SM4 加密和 SM2 操作
  • 内存安全验证,资源清理和初始化正确

本项目展示了企业级密码软件的开发实践,可作为 GM/T 0018-2023 标准的完整、可维护参考实现。