sy3

一、任务详情

密码引擎API的主要标准和规范包括:
1 微软的Crypto API
2 RAS公司的PKCS#11标准
3 中国商用密码标准:GMT 0016-2012 智能密码钥匙密码应用接口规范,GMT 0018-2012密码设备应用接口规范等
研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交博客链接和代码链接。
内容:
0 查找各种标准的原始文档,研究学习(至少包含Crypto API,PKCS#11,GMT 0016-2012,GMT 0018-2012)(5分)
1 总结这些API在编程中的使用方式(5分)
2 列出这些API包含的函数,进行分类,并总结它们的异同(10分)
3 以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接(10分)
YAML 复制 全屏

二、学习过程

微软Crypto API

CryptoAPI是应用程序编程接口,使应用程序开发人员能够将身份验证、编码和加密添加到基于Windows的应用程序。

  1. CryptoAPI 系统体系结构由五个主要功能领域组成:基本加密函数、证书编码/解码函数、证书Microsoft Store函数、简化的消息函数、低级别消息函数。

(1)基本加密函数

  • 用于连接到云解决方案提供商的上下文函数。 这些函数使应用程序能够按名称选择特定的云解决方案提供商,或选择可以提供所需功能类的特定云解决方案提供商。
  • 用于生成和存储加密密钥的密钥生成函数。 完全支持更改 链接模式、 初始化向量和其他加密功能。 有关详细信息,请参阅密钥生成和Exchange函数
  • 用于交换或传输密钥的密钥交换函数。 有关详细信息,请参阅加密密钥存储和Exchange以及密钥生成和Exchange函数。

(2)证书编码/解码函数

(3)证书Microsoft Store函数

(4)简化的消息函数

  • 用于加密和解密消息和数据的函数。
  • 用于对消息和数据进行签名的函数。
  • 用于验证已接收消息和相关数据的签名的真实性的函数。

有关详细信息,请参阅简化的消息简化的消息函数

(5)低级别消息函数

  • 用于执行简化消息函数执行的所有任务的函数。 低级别消息函数比简化的消息函数更灵活,但需要更多的函数调用。 有关详细信息,请参阅低级别消息低级别消息函数image

每个功能区域在其函数名称中都有一个关键字,指示其功能区域。

使用方式

使用CryptoAPI编写一个文件保护程序,具有如下功能:

(1)给定明文文件,生成加密文件,同时产生文件的数字签名文件;

(2)给定密文文件,解密出明文文件,并验证签名的正确性。

在不安全的网络上进行安全的数据传输涉及三个方面的要求:信息隐藏,身份鉴别和完整性检验。CryptoAPI除了提供上述三个功能外还提供标准的ASN.1编码、解码,信息解密,数字证书和证书存储区的管理,证书信任列表、吊销列表和证书有效性检查等功能。

API函数

CSP类型 交换算法 签名算法 对称加密算法 Hash算法
PROV_RSA_FULL RSA RSA RC2,RC4 MD5,SHA
PROV_RSA_SIG none RSA none MD5,SHA
PROV_RSA_SCHANNEL RSA RSA RC4,DES,Triple DES MD5,SHA
PROV_DSS DSS none DSS MD5,SHA
PROV_DSS_DH DH DSS CYLINK_MEK MD5,SHA
PROV_DH_SCHANNEL DH DSS DES,Triple DES MD5,SHA
PROV_FORTEZZA KEA DSS Skipjack SHA
PROV_MS_EXCHANGE RSA RSA CAST MD5
PROV_SSL RSA RSA Varies Varies

服务提供者函数:

应用程序使用服务提供者函数来连接和断开一个CSP。下面就是主要的API:

密钥的产生和交换函数:

密钥产生函数创建、配置和销毁加密密钥。他们也用于和其他用户进行交换密钥。下面就是主要的一些函数:

编码/解码函数:

有一些编码/解码函数,他们可以用来对证书、证书撤销列表、证书请求和证书扩展进行编码和解码。以下就是这几个函数:

数据加密/解密函数:

这些函数支持数据的加密/解密操作。CryptEncrypt 和CryptDecrypt
要求在被调用前指定一个密钥。这个密钥可以由CryptGenKey、CryptDeriveKey 或CryptImportKey
产生。创建密钥时要指定加密算法。CryptSetKeyParam 函数可以指定额外的加密参数。

哈希和数字签名函数:

这些函数在应用程序中完成计算哈希、创建和校验数字签名。

证书和证书库函数

这组函数管理、使用和取得证书、证书撤销列表和证书信任列表。这些函数可以分成一下几组:

证书库函数:

一个用户站点可以收集许多证书。这些证书是为这个站点的用户所使用的,证书描述了这个用户的具体身份。对于每个人,可能有一个以上的证书。证书库和其相关的函数提供了对库获得、枚举、验证和使用证书库里的信息。

以下就是这些函数:

维护函数:

CryptoAPI 提供了证书和证书库函数如下:

证书函数:

下列函数是针对于证书的。大多数函数都是处理CRL 和CTL 的。

证书撤销列表函数:

证书信任列表函数:

扩展属性函数:

证书验证函数

证书验证是通过CTL 和证书列表进行的。

使用CTL 的函数:

证书链验证函数:

消息函数

CryptoAPI 消息函数包括两组:低级消息函数和简化消息函数。

低级消息函数直接和PKCS#7 消息工作。这些函数对传输的PKCS#7 数据进行编码,对接收到的PKCS#7 数据进行解码,并且对接收到的消息进行解密和验证。

简化消息函数是比较高级的函数,是对几个低级消息函数和证书函数的封装,用来执行指定任务。这些函数在完成一个任务时,减少了函数调用的数量,因此简化了CryptoAPI的使用。

低级消息函数:

简化消息函数:

辅助函数:

数据管理函数

数据转换函数

增强密钥用法函数

密钥标示函数

证书库回调函数

OID支持函数

远程对象恢复函数

PFX 函数

RAS公司的PKCS#11标准

PKCS#11是公钥加密标准Public-Key Cryptography Standards中的一份子,由RSA实验室发布。

PKCS#11标准定义了与密码令牌的独立于平台的API,API本身命名为Cryptoki,这个API已经发展成为一个通用的加密令牌的抽象层。

PKCS#11主要是应用于智能卡和HSM。

PKCS#11为使用加密Token的应用程序提供统一的编程接口,独立于设备,屏蔽加密设备的复杂性,应用程序可以方便地更换设备。

PKCS密码中间件位于上层应用和底层安全设备之间,应用基于 PKCS#11 标准接口开发各类应用程序。主要包括2个库

  • 主API库:提供给应用的PKCS11接口。
  • tokenDLL库:由主 API 库调用,完成从上向下到指定设备的套接。
  • 安全密码设备:安全服务资源和实施的载体,完成具体安全功能支撑。

PKCS

11模型中重要的概念之一是slot,也称为槽。一个slot为一个密码设备对象。某个打开的slot会话称之为session。Session之间存

在不同的验证权限,而同一个slot的不同的session之间存在操作的互相影响性,同时在某些状况下,权限会发生同步。另外一个重要的概念是对象,
PKCS #11中支持几种重要的对象,如公钥、私钥、对称密钥,数据对象等。

PKCS#11创建和支持下列对象:

PKCS#11的对象可根据其生命期长短的不同分成两大类:一类是持久存储的类对象,这类对象被保存在USB
Key的安全存储区域当中,直到应用程序主动删除这些对象;另一类是会话对象,这类对象只存在于运行时建立的特定会话(Session对象)当中,一旦会
话结束,这类对象也跟着被删除。

PKCS#11的对象除了生命期长短有分别之外,在访问权限上也有限制。所有的对象都可根据访问权限的不同分成两大类:一类是公开对象,这类对象是任
何用户都可以访问的;另一类是私有对象,这一类对象只有身份被验证的用户才有权访问。决定对象的访问限制类型的模板属性是CKA_PRIVATE。

使用方式

1.架构

2.会话状态

3.对象

API函数

PKCS#11创建和支持下列对象:

PKCS#11的对象可根据其生命期长短的不同分成两大类:

  • 持久存储的类对象,这类对象被保存在USB Key的安全存储区域当中,直到应用程序主动删除这些对象;
  • 会话对象,这类对象只存在于运行时建立的特定会话(Session对象)当中,一旦会话结束,这类对象也跟着被删除。

决定对象生命期的模板属性是CKA_TOKEN,这是个布尔值,所有的对象都有这一属性。当该值为TRUE时,该对象将被保存到Key内的存储空间,否则,该对象保存在会话空间中,当会话结束后,该对象即销毁。

P11标准颁发了70余条指令。其中部分指令简介如下表:


GMT 0016-2012 智能密码钥匙密码应用接口规范

接口规范

GMT 0016-2012是国家规定的智能密码钥匙密码应用接口规范,规定了基于PKI密码体制的智能密码钥匙密码应用接口,描述了密码应用接口的函数、数据类型、参数的定义和设备的安全要求。适用于智能密码钥匙产品的研制、使用和检测。

规范性引用文件

下列文件对于本标准的应用是必不可少的。凡是注日期的引用文件。仅所注日期的版本适用于本文件;凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件;GM/T 0006密码应用标识规范;GM/T AAAA SM2密码算法使用规范

使用方式

层次关系

智能密码钥匙密码应用接口位于智能密码钥匙应用程序与设备之间,如下图所示。

应用结构

API函数

设备管理系列函数

访问控制系列函数访问控制系列函数

应用管理系列函数

文件管理系列函数

容器管理系列函数

密码服务系列函数

GMT 0018-2012密码设备应用接口规范

接口标准

GMT 0018-2012标准规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准。适用于服务类密码设备的研制、使用,以及基于该类密码设备的应用开发,也可用于指导该类密码设备的检测。

规范性引用文件

下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件;凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件;GM/T 0006密码应用标识规范;GM/T AAAA SM2密码算法使用规范。

其中还包括了对部分术语的规定:

使用方式

在公钥密码基础设施应用技术体系框架中,密码设备服务层由密码机,密码卡,智能密码终端等设备组成,通过本标准规定的密码设备应用接口向通用密码服务层提供基础密码服务。如下图所示。

基础密码服务包括密钥生成、单一的密码运算、文件管理等的服务。

本标准采用C语言描述接口函数。如无特别说明,函数中参数的长度单位均为字节数。

API函数

设备管理类函数

设备管理类函数包括以下具体函数:

A.打开设备:SDF_OpenDevice

B.关闭设备:SDF_CloseDevice

C.创建会话:SDF_OpenSession

D.关闭会话:SDF_CloseSession

E.获取设备信息:SDF_GetDeviceInfo

F.产生随机数:SDF_GenerateRandom

G.获取私钥使用权限:SDF_GetPrivateKeyAccessRight

H.释放私钥使用权限:SDF_ReleasePrivateKeyAccessRight

密钥管理类函数

导出 RSA 签名公钥∶SDF_ExportSignPublicKey_RSA

导出 RSA 加密公钥∶SDF_ExportEncPublicKey_RSA

产生 RSA非对称密钥对并输出∶SDF_GenerateKeyPair_RSA

生成会话密钥并用内部 RSA公钥加密输出∶SDF_GenerateKeyWithIPK_RSA

生成会话密钥并用外部 RSA公钥加密输出∶SDF_GenerateKeyWithEPK_RSA

导入会话密钥并用内部 RSA私钥解密∶SDF_ImportKeyWithISK_RSA

基于 RSA 算法的数字信封转换∶SDF_ExchangeDigitEnvelopeBaseOnRSA

导出 ECC签名公钥∶SDF_ExportSignPublicKey_ECC

导出 ECC 加密公钥∶SDF_ExportEncPublicKey_ECC

产生 ECC非对称密钥对并输出∶SDF_GenerateKeyPair_ECC

生成会话密钥并用内部 ECC公钥加密输出∶SDF_GenerateKeyWithIPK_ECC

生成会话密钥并用外部 ECC公钥加密输出:SDF_GenerateKeyWithEPK ECC

导入会话密钥并用内部 ECC私钥解密∶SDF_ImportKeyWithISK_ECC

生成密钥协商参数并输出;SDF_GenerateAgreementDataWithECC

计算会话密钥∶SDF_GenerateKeyWiuhECC

产生协商数据并计算会话密钥∶SDF_GenerateAgreementDataAndKeyWithECC

基于 ECC算法的数字信封转换∶SDF_ExchangeDigitEnvelopeBaseOnECC

生成会话密钥并用密钥加密密钥加密输出∶SDF_GenerateKeyWithKEK

导入会话密钥并用密钥加密密钥解密∶SDF_ImportKeyWithKEK

销毁会话密钥∶SDF_DestroyKey

以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接

SKF接口

龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\windows\EncryptData\EncryptData.sln

Crypto API

1.龙脉密码钥匙驱动实例工具等\mToken-GM3000\csp\samples\CryptAPI\VC\EncryptDecryptFile\EncryptFile.sln


PKCS#11

1.龙脉密码钥匙驱动实例工具等\mToken-GM3000\pkcs11\windows\samples\PKCStest\PKCStest.sln

posted @ 2024-04-10 12:42  卢泽  阅读(4)  评论(0编辑  收藏  举报