加密API研究
密码引擎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分)
Crypto API
微软的CryptoAPI是Win32平台下为应用程序开发者提供的数据加密和安全的编码接口。CryptoAPI函数集包含了基本的ASN.1的编码、解码,散列,数据加密和解密,数字证书管理等重要的密码学应用功能。数据的加密、解密支持对称和非对称两类算法。
PKCS#11
加密令牌接口标准PKCS#11由RSA Security制定,定义了加密令牌的本机编程接口,例如硬件加密加速器和智能卡。使用JCA和JCE API的现有应用程序可以使用PKCS#11提供程序访问本机PKCS#11令牌。pkcs#11只提供了接口的定义, 不包括接口的实现。
GMT 0016-2012
规定了基于PKI密码体制的智能密码钥匙密码应用接口,描述了密码应用接口的函数、数据类型、参数的定义和设备的安全要求。
GMT 0018-2012
规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准。
1 总结这些API在编程中的使用方式(5分)
Crypto API
Crypto API通过调用CryptoSPI函数接口相应的加密服务提供者函数(CSP)来实现。CryptoAPI函数使用“加密服务提供者”(CSP)完成数据加密、解密以及密钥的存储管理、所有的CSP都是相互独立的模块。理论上,CSP应该独立于特定的应用程序,也就是说所有的应用程序可以使用任何一个CSP。但是实际上还是有限制。在CryptoAPI中,所有的密钥都存储在CSP中,CSP负责密钥的创建,销毁,导入导出等操作。CryptoAPI采用的编码方式为ASN.1,编码规则为DER;采用对称加密算法;CSP产生的数字签名遵循RSA标准(PKCS#6)。
PKCS#11
KCS#11是公钥加密标准(PKCS, Public-Key Cryptography Standards)中的一份子 ,由RSA实验室(RSA Laboratories)发布,它为加密令牌定义了一组平台无关的API ,如硬件安全模块和智能卡。 PKCS#11称为Cyptoki,定义了一套独立于技术的程序设计接口,USBKey安全应用需要实现的接口。 由于没有一个真正的标准加密令牌,这个API已经发展成为一个通用的加密令牌的抽象层。 PKCS#11 API定义最常用的加密对象类型( RSA密钥,X.509证书,DES /三重DES密钥等)和所有需要使用的功能,创建/生成,修改和删除这些对象。注意:pkcs#11只提供了接口的定义, 不包括接口的实现,一般接口的实现是由设备提供商提供的,如usbkey的生产厂商会提供 符合PKCS#11接口标准的API的实现。这样你只要通过接口调用API函数即可实现其功能。
GMT 0016-2012
GMT 0018-2012
2 列出这些API包含的函数,进行分类,并总结它们的异同(10分)
1 Crypto API
(1)基本加密函数
服务提供者函数:
密钥的产生和交换函数:
编码/解码函数:
数据加密/解密函数:
哈希和数字签名函数:
(2)证书和证书库函数
证书库函数:
维护函数:
证书函数:
证书撤销列表函数:
证书信任列表函数:
扩展属性函数:
(3)证书验证函数
使用CTL 的函数:
证书链验证函数:
(4)消息函数
低级消息函数:
简化消息函数:
(5)辅助函数
数据管理函数:
数据转换函数:
增强密钥用法函数:
密钥标示函数:
证书库回调函数:
OID 支持函数:
远程对象恢复函数:
PFX 函数:
PKCS#11
通用接口:
加密解密:
签名和消息鉴别:
GMT 0016-2012
设备管理函数:
访问控制函数:
应用管理函数:
文件管理函数:
容器管理函数:
密码服务函数:
GMT 0018-2012
设备管理类函数:
A打开设备:SDF_OpenDevice
B关闭设备:SDF_CloseDevice
C创建会话:SDF_OpenSession
D关闭会话:SDF_CloseSession
E获取设备信息:SDF_GetDeviceInfo
F产生随机数:SDF_GenerateRandom
G获取私钥使用权限:SDF_GetPrivateKeyAccessRight
H释放私钥使用权限:SDF_ReleasePrivateKeyAccessRight
密钥管理类函数
A导出RSA签名公钥:SDF_ExportSignPublicKey_RSA
B导出RSA加密公钥:SDF_ExportEncPublicKey_RSA
C产生RSA非对称密钥对并输出:SDF_GenerateKeyPair_RSA
D生成会话密钥并用内部RSA公钥加密输出:SDF_GenerateKeyWithIPK_RSA
E生成会话密钥并用外部RSA公钥加密输出:SDF_GenerateKeyWithEPK_RSA
F导入会话密钥并用内部RSA私钥解密:SDF_ImportKeyWithISK_RSA
G基于RSA算法的数字信封转换:SDF_ExchangeDigitEnvelopeBaseOnRSA
H导出ECC签名公钥:SDF_ExportSignPublicKey_ECC
I导出ECC加密公钥:SDF_ExportEncPublicKey_ECC
J产生ECC非对称密钥对并输出:SDF_GenerateKeyPair_ECC
K生成会话密钥并用内部ECC公钥加密输出:SDF_GenerateKeyWithIPK_ECC
L生成会话密钥并用外部ECC公钥加密输出:SDF_GenerateKeyWithEPK_ECC
M导入会话密钥并用内部ECC私钥解密:SDF_ImportKeyWithISK_ECC
N生成密钥协商参数并输出:SDF_GenerateAgreementDataWithECC
O计算会话密钥:SDF_GenerateKeyWithECC
P产生协商数据并计算会话密钥:SDF_GenerateAgreementDataAndKeyWithECC
Q基于ECC算法的数字信封转换:SDF_ExchangeDigitEnvelopeBaseOnECC
R生成会话密钥并用密钥加密密钥加密输出:SDF_GenerateKeyWithKEK
S导入会话密钥并用密钥加密密钥解密:SDF_ImportKeyWithKEK
T销毁会话密钥:SDF_DestroyKey
非对称算法运算类函数:
A外部公钥RSA运算:SDF_ExternalPublicKeyOperation_RSA
B内部公钥RSA运算:SDF_InternalPublicKeyOperation_RSA
C内部私钥RSA运算:SDF_InternalPrivateKeyOperation_RSA
D外部密钥ECC验证:SDF_ExternalVerify_ECC
E内部密钥ECC签名:SDF_InternalSign_ECC
F内部密钥ECC验证:SDF_InternalVerify_ECC
G外部密钥ECC加密:SDF_ExternalEncrypt_ECC
对称算法运算类函数:
A对称加密:SDF_Encrypt
B对称解密:SDF_Decrypt
C计算MAC:SDF_CalculateMAC
用户文件操作类函数
A创建文件:SDF_CreateFile
B读取文件:SDF_ReadFile
C写文件:SDF_WriteFile
D删除文件:SDF_DeleteFile
3 以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接(10分)
Crypto API
PKCS#11
SKF