一、 概述
SKF接口是国密标准中智能密码钥匙的C语言应用开发接口标准,目前很多国内密码密码设备厂商都为其产品提供了SKF接口的开发包。开发者可以通过统一的SKF接口开发密码应用,访问来自不同设备供应商的USB-Key、TF卡、智能卡等不同形态的密码设备,而无需和某一个设备供应商的专属设备或专属接口绑定。
然而目前应用开发者开发SKF应用仍然存在一些困难和挑战。首先,SKF是一个底层的密码设备应用开发接口,这个接口不支持数字证书和SSL通信等面向高层密码应用的功能,对于应用开发者来说直接使用SKF接口开发密码应用,工作量较大。其次,由于SKF的标准草案和正式公布标准在内容上有一些差异,导致不同设备厂商的SKF实现存在一些关键性的差异,这些差异导致应用开发者难以从一个设备供应商迁移至另一个设备供应商,更难以在同一个应用中同时支持来自两个厂商的设备,无法满足典型应用场景的需求。
针对上述问题,GmSSL项目从2.0版本开始,以Engine的方式增加了对SKF设备的完善支持。GmSSL通过在libcrypto密码库中引入SKF框架,实现了对不同厂商SKF设备的支持。通过将SKF接口封装为SKF Engine,使得上层应用和SSL库可以直接通过EVP接口动态调用不同SKF设备。GmSSL项目还修改了gmssl命令行工具中所有相关功能,使得enc、dgst、pkeyutl、sm2utl等命令都可以支持SKF引擎,gmssl命令行工具还新增加了skf命令提供SKF设备的管理功能。应用开发者在通过命令行工具完成对SKF设备的初始化之后,可以直接通过SKF引擎为现有的密码应用提供SKF设备的支持,只需要提供一个SKF引擎的配置文件,而几乎无需进行任何代码开发,可以大大节省密码设备开发的工作量。除了SKF引擎之外,GmSSL项目还提供针对PCI-E密码卡和服务器密码机的SDF引擎,应用可以随意选择低成本的SKF密码设备或者高性能、高安全等级的SDF密码设备。
二、设备逻辑