HSMC Library
HSMC全称为Hardware Security Module Connector,其定位为开发者提供商用密码异构硬件设备连接的统一接口开发库
HSMC开发库架构
自带密码机软件模拟器开发库,无需密码设备即可实现应用开发测试闭环
HSMC功能特性
面向对象的统一接口
对异构硬件设备的C语言编程接口进行重新封装,为调用者提供面向对象的C++
编程接口体验
连接池化管理
对异构硬件设备调用的网络连接会话进行池化管理,避免了频繁创建、释放连接引起的性能开销
负载均衡调度
对异构硬件设备的调度采用类似于Nginx的WRR
(Weighted Round Robin)调度策略
密评合规
无需更改业务,仅变更配置,实现密评合规无缝迁移
示例
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已经开始被安全公司集成在他们的商用密码产品或解决方案中,并最终服务于政府、运营商、医疗等行业客户
- 奇安信
- 九维数安