Skip to main content

HSMC Library

HSMC全称为Hardware Security Module Connector,其定位为开发者提供商用密码异构硬件设备连接的统一接口开发库

HSMC开发库架构

自带密码机软件模拟器开发库,无需密码设备即可实现应用开发测试闭环

应用程序密码工具套件HSMC APIHSMCDriverManagerPCI-E密码卡服务器密码机签名验签服务器时间戳服务器HSMC C++ Library图例网络调用函数调用密码机软件模拟器

HSMC功能特性

面向对象的统一接口

对异构硬件设备的C语言编程接口进行重新封装,为调用者提供面向对象的C++编程接口体验

连接池化管理

对异构硬件设备调用的网络连接会话进行池化管理,避免了频繁创建、释放连接引起的性能开销

负载均衡调度

对异构硬件设备的调度采用类似于Nginx的WRR(Weighted Round Robin)调度策略

密评合规

无需更改业务,仅变更配置,实现密评合规无缝迁移
无密评合规要求的密码应用场景HSMC Library密码机软件模拟器满足密评合规的密码应用场景业务系统HSMC Library商密合规的密码设备仅配置变更业务系统

开发测试仿真

在业务实际开发阶段,可借助自带的密码机模拟器开发库提供的SDF接口,实现业务开发测试闭环。模拟器提供的SDF函数接口符合《GM/T 0018-2012 密码设备应用接口规范》。

查看模拟器
密码机模拟器动态库SDF接口函数openssl静态链接

示例

HSMC为应用程序或密码工具套件提供统一的接口,通过HSMC库对底层异构密码设备的管理和调度,实现上层应用或密码工具对底层设备的透明访问。

示例:通过HSMC封装的SDF接口对密码设备进行加密调用

更多
// 生成factory对象,并加载配置文件
hsmc::SessionFactory factory;
factory.init("hsmc-config.yaml");

// 生成pool对象,并从会话池中获取可用session对象
hsmc::SessionPool pool(factory);
auto session = pool.get();

uint8_t dek[32] = {0};
uint32_t deklen = 32;
void *keyHandle = nullptr;

// 生成dek并使用kek加密保护,返回dek为密文
session.SDF_GenerateKeyWithKEK(128, SGD_SM4_ECB,
1/*kek index*/, dek, &deklen, &keyHandle);

uint8_t plaintext[16] = "hello world!";
uint8_t ciphertext[32] = {0};
uint32_t ctlen = sizeof(ciphertext);

// 使用dek加密明文
session.SDF_Encrypt(keyHandle, SGD_SM4_ECB, nullptr,
plaintext, sizeof(plaintext), ciphertext, &ctlen);

// 销毁dek
session.SDF_DestroyKey(keyHandle);

他们也在使用HSMC

HSMC已经开始被安全公司集成在他们的商用密码产品或解决方案中,并最终服务于政府、运营商、医疗等行业客户

  • 奇安信
  • 九维数安