加密API研究

0 查找各种标准的原始文档,研究学习(至少包含Crypto API,PKCS#11,GMT 0016-2012,GMT 0018-2012)

(1)Crypto API:
CryptoAPI是微软Windows系统提供的一个应用程序编程接口,旨在让开发者能够轻松地对敏感数据进行加密或数字签名,以保护用户的私钥信息。这套API提供了一系列函数,而实际的加密工作则由专门的加密服务提供程序(CSP)来完成。微软通过集成RSA Base Provider,在操作系统层面提供了一个CSP,该CSP基于RSA公司的公钥加密算法。此外,开发者还可以根据需要添加更多的CSP,甚至与特定的硬件设备(如智能卡)结合使用,以增强数据加密的能力。CryptoAPI不仅支持简单的加密和公钥交换操作,还能用于创建消息摘要和数字签名,并提供了高级的CSP管理功能。它是许多高级安全服务的基础,如SET(用于电子商务)、PCT(用于加密客户机/服务器消息)、PFX(用于跨平台传输机密数据和密钥)以及代码签名等。

(2)PKCS#11:
PKCS#11是一个定义了与密码令牌(如硬件安全模块和智能卡)交互的平台无关API的标准。这个API被称为“Cryptoki”,它涵盖了最常用的加密对象类型(如RSA密钥、X.509证书、DES/三重DES密钥等),并提供了创建、使用、修改和删除这些对象所需的功能。PKCS#11是公钥加密标准(PKCS)的一部分,由RSA实验室发布。由于市场上没有统一的加密令牌标准,PKCS#11 API已经演变成为一个通用的加密令牌抽象层。需要注意的是,PKCS#11只定义了接口规范,具体的实现则由设备供应商(如USB密钥制造商)来提供。这样,开发者只需通过这组接口调用相应的API函数,即可实现与各种加密令牌的交互。

(3)GMT 0016-2012:
该标准详细规定了基于PKI密码体制的智能密码钥匙的密码应用接口,包括接口函数、数据类型、参数定义以及设备安全要求等方面的内容。它适用于智能密码钥匙产品的研发、使用和检测,为相关应用提供了统一的接口标准和安全要求,确保密码应用的安全性和可靠性。

(4)GMT 0018-2012:
该标准针对公钥密码基础设施应用技术体系下的服务类密码设备,规定了其应用接口的标准。这些接口标准适用于服务类密码设备的研制和使用,以及基于这类密码设备的应用开发。同时,它也为该类密码设备的检测提供了指导,确保密码设备在应用中能够满足相应的安全要求,为信息安全提供了有力保障。

1 总结这些API在编程中的使用方式

 

CryptoAPI是Windows平台上广泛应用的加密接口。在编程时,开发者可以直接调用CryptoAPI提供的函数来执行加密、解密、数字签名等操作。这些函数封装了复杂的加密算法和协议,使得开发者无需深入了解底层的加密原理,即可轻松实现安全的数据传输和存储。CryptoAPI还支持多种CSP的插入和管理,使得开发者可以根据实际需求选择适合的加密服务提供程序,提高系统的灵活性和安全性。

PKCS#11是一个跨平台的加密令牌接口标准。在编程中,开发者可以通过PKCS#11接口与各种密码令牌(如HSM和智能卡)进行交互。这意味着开发者可以编写与特定硬件设备无关的代码,通过PKCS#11接口调用硬件设备的加密功能。这种方式不仅提高了代码的可移植性,还充分利用了硬件设备的性能优势,提升了加密操作的速度和安全性。

GMT 0016-2012和GMT 0018-2012则是针对智能密码钥匙和服务类密码设备的应用接口标准。在编程中,这些标准规定了与这些设备交互的规范和数据格式。开发者需要根据这些标准编写相应的代码,通过调用接口函数来实现与设备的通信和数据传输。这些接口函数通常包括设备初始化、密钥管理、数据加密解密等操作,开发者可以根据具体需求选择合适的函数来实现所需的功能。

2 列出这些API包含的函数,进行分类,并总结它们的异同

CryptoAPI函数分类与特点:

  1. 基本加密函数:包括密钥生成、加密、解密、签名和验证等操作。这些函数提供了基础的加密功能,用于保护数据的机密性、完整性和真实性。
  2. 证书编解码函数:用于证书的编码和解码操作,方便证书的存储和传输。
  3. 证书库管理函数:管理证书库的创建、访问和删除等操作,确保证书的安全存储和使用。

PKCS#11函数分类与特点:

  1. 令牌管理函数:初始化令牌、获取令牌信息、结束令牌会话等操作,控制对令牌的访问和使用。
  2. 会话管理函数:创建会话、关闭会话、获取会话信息等,管理加密操作的上下文环境。
  3. 对象管理函数:创建、读取、修改和删除密钥、证书等加密对象,实现对加密资源的操作和管理。

GMT 0016-2012和GMT 0018-2012函数分类与特点:

这两个标准主要规定了与智能密码钥匙和服务类密码设备交互的接口函数,包括设备初始化、密钥管理、数据加密解密等操作。这些函数通常与特定的硬件设备相关,用于实现与设备的通信和数据传输。

 

 

 

主要函数:
主函数

void main(void)

加密文件

BOOL EncryptFile(PCHAR szSource, PCHAR szDestination, PCHAR szPassword);

解密文件

BOOL DecryptFile(PCHAR szSource, PCHAR szDestination, PCHAR szPassword);

签名文件

BOOL SignFile (PCHAR szSource, PCHAR szDestination);

验证签名

BOOL VerifyFile (PCHAR szSource, PCHAR szDestination);

错误处理

void HandleError(char *s);
设备管理类函数

设备管理类函数包括以下具体函数:
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

异同总结:

  • 相同点:
    • 这些API都提供了加密、解密、签名和验证等基础的加密功能,用于保护数据的机密性和完整性。
    • 它们都支持对密钥和证书的管理,确保加密资源的安全存储和使用。
    • 这些API都通过提供统一的接口和规范,简化了开发者在实现安全功能时的复杂度。
  • 不同点:
    • CryptoAPI是Windows平台特有的加密接口,与操作系统紧密集成,提供了一组丰富的函数来满足各种加密需求。
    • PKCS#11是一个跨平台的加密令牌接口标准,主要关注与硬件设备的交互,提供了与各种密码令牌通信的接口函数。
    • GMT 0016-2012和GMT 0018-2012则是针对智能密码钥匙和服务类密码设备的应用接口标准,其函数通常与特定的硬件设备相关,用于实现与设备的通信和数据传输。
    • CryptoAPI和PKCS#11在编程中的使用更加灵活,可以应用于各种加密场景,而GMT标准则更侧重于与特定设备的交互。
3 以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接

 Crypto API

 

 PKCS#11

 

 

 

 

 

 

 

 

SKF

 

posted @ 2024-04-11 14:17  20211311  阅读(15)  评论(0编辑  收藏  举报