实验一-密码引擎-3-加密API研究
-
原始文档链接:
- 微软CryptoAPI:微软的官方文档库中找到的微软CryptoAPI的详细文档
- PKCS#11:PKCS#11的官方文档
- 中国商用密码标准:国家密码管理局中查找到的GMT 0016-2012和GMT 0018-2012标准
-
API在编程中的使用方式:
-
微软CryptoAPI:在Windows平台上,CryptoAPI是由几个系统DLL提供支持,如
Advapi32.dll
。开发者通常会在C或C++代码中包含相关的头文件,如<wincrypt.h>
,然后利用提供的函数来进行密钥管理、加密/解密、签名/验证和散列等操作。CryptoAPI还支持使用证书和加密服务提供者(CSP)。 -
PKCS#11:这是一个用于与加密令牌(如硬件安全模块或智能卡)交互的API。它定义了一个C语言API,允许应用程序与这些令牌进行通信。在使用PKCS#11时,需要加载厂商提供的共享库(如动态链接库或.so文件),然后使用该标准定义的函数来执行操作。这通常涉及到会话管理、登录、密钥管理和密码操作等。
-
中国商用密码标几:GMT标准规定了与密码设备的交互方式,特别是在满足中国密码法规的情况下。例如,它们规定了如何使用国密算法进行加密和解密、数字签名、消息摘要等。编程时通常需要使用到标准定义的函数和数据结构。
-
-
API包含的函数、分类和异同:
由于函数的具体列表和描述通常非常详细,以下是一个简化的概述:
-
微软CryptoAPI:
- 密钥管理:
CryptGenKey
,CryptExportKey
,CryptImportKey
- 加解密:
CryptEncrypt
,CryptDecrypt
- 签名和验证:
CryptSignHash
,CryptVerifySignature
- 散列和摘要:
CryptCreateHash
,CryptHashData
,CryptGetHashParam
- 密钥管理:
-
PKCS#11:
- 会话管理:
C_OpenSession
,C_CloseSession
,C_Login
,C_Logout
- 密钥管理:
C_GenerateKey
,C_GenerateKeyPair
,C_ImportKey
- 加解密:
C_EncryptInit
,C_Encrypt
,C_DecryptInit
,C_Decrypt
- 签名和验证:
C_SignInit
,C_Sign
,C_VerifyInit
,C_Verify
- 散列和摘要:
C_DigestInit
,C_Digest
,C_DigestUpdate
,C_DigestFinal
- 会话管理:
-
中国商用密码标准(以SKF为例,因为GMT0016和0018很多涉及SKF标准):
- 设备管理:
SKF_ConnectDev
,SKF_DisConnectDev
- 密钥管理:
SKF_GenRandom
,SKF_GenECCKeyPair
,SKF_ImportECCKeyPair
- 加解密:
SKF_EncryptInit
,SKF_Encrypt
,SKF_DecryptInit
,SKF_Decrypt
- 签名和验证:
SKF_ECCSignData
,SKF_ECCVerify
- 散列和摘要:
SKF_DigestInit
,SKF_Digest
,SKF_DigestFinal
- 设备管理:
异同点:
- API风格:CryptoAPI通常与Windows操作系统紧密集成,而PKCS#11提供了一个适用于多种平台和设备的通用接口。GMT标准通常与中国的安全政策和算法紧密相关。
- 平台依赖:CryptoAPI是Windows特有的,而PKCS#11和GMT标准更为通用,但GMT标准的实际应用主要集中在中国。
- 功能提供:虽然所有这些API都提供了加密服务的核心功能,但它们在实现细节和提供的额外功能上有所不同,比如CryptoAPI提供了与Windows证书存储集成的能力,而PKCS#11和GMT标准更专注于与硬件令牌的交互。
代码运行截图: