mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-16 05:16:26 +08:00
Destroyed 支持国密硬件密码设备 (markdown)
@@ -1,42 +0,0 @@
|
||||
在下述情况下,应用可能需要访问USB Key、PCI密码卡和密码机等密码硬件:
|
||||
|
||||
* 处于安全的目的,应用希望在密码硬件中存储私钥并完成私钥相关的计算。
|
||||
* 私钥通过密码硬件分发且不能导出硬件,如国密标准中的签名私钥。
|
||||
* 密码算法仅通过硬件提供,如SM1和SSF33分组密码。
|
||||
* 密码硬件具有密码算法加速能力,可以降低CPU的负载。
|
||||
|
||||
GmSSL通过`ENGINE`机制支持密码硬件。鉴于《智能IC卡及智能密码钥匙密码应用接口规范》标准中公布了访问国密硬件的C语言API (下面简称SKF API),GmSSL通过ENGINE机制访问支持国密SKF API的国产密码硬件。
|
||||
|
||||
一个SKF API设备中可以包含一个或多个应用(Application),每个应用可以包含一个获多个容器(Container),每个容器中可以存放两对分别用于加密和签名的密钥对,以及两个相应的证书或证书链。每一个容器只能为ECC或RSA一种类型,一个容器中不能混用ECC密钥和RSA密钥。因此,在SKF API中提供公钥密码计算的接口通过Container Handle来引用公钥,容器的特性使得应用无需区分签名密钥和加密密钥,SKF API的实现会自动从容器中选择对应类型的密钥。
|
||||
|
||||
在使用公钥及访问容器时,应用需要进行两级认证,第一级为设备认证,第二级应用认证。设备认证需要全设备唯一的设备认证密钥,设备认证密钥是固定长度的对称密钥。访问某个具体的应用需要提供该应用的专有口令进行认证,认证的口令是可变长度的口令字符串。
|
||||
|
||||
GmSSL对设备认证规范做如下规定:
|
||||
|
||||
1. 设备认证密钥固定为16字节
|
||||
2. 设备认证密码算法固定为SMS4 (`SGD_SM4_ECB`)。
|
||||
3. 设备发出的挑战数据是在调用`SKF_DevAuth()`之前,最后一次通过`SKF_GenRandom()`获取的16字节随机输出。
|
||||
4. 设备的响应数据为采用SMS4加密加密该16字节随机值后的密文
|
||||
|
||||
GmSSL对需要进行设备认证的场景做如下规定:
|
||||
|
||||
1. SKF API的实现必须支持`SKF_SetSymmKey()`
|
||||
2. `SKF_SetSymmKey()`和`SKF_EncryptInit/Update/Final()`等对称加密功能无需设备认证和应用认证
|
||||
3. 访问容器时需要进行两级认证
|
||||
|
||||
由于我们目前没有可以用于测试的在Linux/Mac上支持SKF API的硬件设备,因此GmSSL包含了一个SKF API的软件Dummy实现用于完成编译。GmSSL还提供了一个独立的测试程序,用于测试目标硬件是否满足GmSSL的规范和功能要求。
|
||||
|
||||
## 工作计划
|
||||
|
||||
- [ ] 测试国密硬件SDK支持的最新的Ubuntu Server AMD64 LTS版本。
|
||||
- [ ] 测试国密硬件SDK附带的测试程序是否能够通过。
|
||||
- [ ] 测试国密硬件的管理员工具,以及SM2、RSA密钥的生成或导入。
|
||||
- [ ] 测试国密硬件的SM2、RSA和GmSSL的兼容性。
|
||||
- [ ] 测试国密硬件的SM3、SM4、SM4-CBC和GmSSL的兼容性。
|
||||
- [ ] 通过SKF API的SM2实现EC签名接口。
|
||||
- [ ] 实现`EVP_sm1_cbc`和`EVP_ssf33_cbc`模块。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user