实验一-密码引擎-加密API研究

实验一-密码引擎-加密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分)

1 总结这些API在编程中的使用方式(5分)

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

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

1 Crypto API

微软的CryptoAPI是Win32平台下为应用程序开发者提供的数据加密和安全的编码接口。CryptoAPI函数集包含了基本的ASN.1的编码、解码,散列,数据加密和解密,数字证书管理等重要的密码学应用功能。数据的加密、解密支持对称和非对称两类算法。CryptoAPI是所有微软的Win32的应用程序以及第三方厂商应有程序使用的数据加密接口,诸如Internet Explorer、OutLook、Adobe等应用都是基于CryptoAPI开发的。

1.1 Crypto API在编程中的使用方式

CryptoAPI本身不实现密码运算相关操作,而是操作系统通过调用CryptoSPI函数接口相应的加密服务提供者函数(CSP)来实现。CryptoAPI函数使用“加密服务提供者”(CSP)完成数据加密、解密以及密钥的存储管理、所有的CSP都是相互独立的模块。理论上,CSP应该独立于特定的应用程序,也就是说所有的应用程序可以使用任何一个CSP。但是,实际上有些应用程序只能与特定的CSP协作。CSP与应用程序之间的关系类似于Windows GDI模型。CSP就类似于图形硬件驱动程序。

LW74Cq.png

1.2Crypto API包含的函数

CryptoAPI体系主要由以下几部分组成:

基本加密函数、证书编码与解码函数、证书存储函数、简化信息处理函数、底层信息处理函数。

1.2.1 基本加密函数

服务提供者函数
LW7z26.png

密钥的产生和交换函数

LWHeRP.png

编码/解码函数

LWHKsS.png

数据加密/解密函数
LWHGin.png

哈希和数字签名函数
LWH0Z4.png

1.2.2 证书和证书库函数

这组函数是管理、使用和取得证书、证书撤销列表和证书信任列表。

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

LWHjeg.png

维护函数
LWbmk9.png

证书函数

证书撤销列表函数

证书信任列表函数

扩展属性函数

1.2.3 证书验证函数

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

使用CTL的函数

证书链验证函数

1.2.4 消息函数

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

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

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

低级消息函数

简化消息函数

1.2.5 辅助函数

数据管理函数

数据转换函数

增强密钥用法函数

密钥标示函数

证书库回调函数

OID 支持函数

远程对象恢复函数

PFX 函数

2 PKCS#11

加密令牌接口标准PKCS#11由RSA Security制定,定义了加密令牌的本机编程接口,例如硬件加密加速器和智能卡。使用JCA和JCE API的现有应用程序可以使用PKCS#11提供程序访问本机PKCS#11令牌。无需修改应用程序。唯一的要求是正确配置提供程序。

2.1 PKCS#11在编程中的使用方式

在密码系统中,PKCS#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函数即可实现其功能。

posted @ 2022-04-23 15:17  ewdbdvdv  阅读(128)  评论(0编辑  收藏  举报