首页 > 其他分享 >实验一-密码引擎-加密API研究

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

时间:2023-04-04 10:44:24浏览次数:52  
标签:API SKF 函数 证书 引擎 密钥 加密 上下文

目录

一、查找各种标准的原始文档,研究学习

Ⅰ.Crypto API

Windows Crypto API是Microsoft 公司提出的安全加密应用服务框架,也是PKI推荐使用的加密 API。它提供了在Win32 环境下使用认证、编码、加密和签名等安全服务时的标准加密接口,用于增强应用程序的安全性与可控性。应用开发者可以在不了解复杂的加密机制和加密算法的情况下,简便、快速地开发出标准、通用和易于扩展的安全加密应用程序。Crypto API 提供的功能主要有:密钥管理、数据加密和解密、数字签名和验证、证书管理、可信根证书管理、数据编码和解码、数字证书编码和解码、PKCS#7标准格式编码和解码等。

微软加密服务体系包含3层结构和两个接口,分别为应用程序层、操作系统层(OS)、加密服务提供者层(Cryptographic Service Provider,CSP)、CryptoAPI接口和加密服务提供者接口(CSPI)

CryptoAPI函数使用加密服务提供程序(CSP)进行加密和解密,并提供密钥存储和安全性。它是真正实行加密相关服务的独立模块,既可以由软件实现也可以由硬件实现,但是必须符合CryptoAPI接口的规范。

​ CSP至少由一个动态链接库(DLL)和一个签名文件组成:签名文件是确保CryptoAPI识别CSP所必需的;CryptoAPI会定期验证此签名,以确保检测到对CSP的任何篡改。

​ 同时,每个CSP都有一个名字和一个类型,名字必须唯一的,这样便于CryptoAPI找到对应的CSP。加密服务标准被分为不同的家族,每种家族包含自己的一系列数据格式和协议,不同的家族有不同的数据格式或协议等。在CryptoAPI中,每种CSP类型代表不同的家族。目前已经有9种CSP类型,并且还在增长,不同类型支持的密钥交换算法、签名算法、对称加密算法和Hash算法等如下表所示。

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

Ⅱ.PKCS#11

PKCS #11

我们把Cryptoki 确定为应用程序与各种各样的便携式密码设备(基于智能卡、PCMCIA卡以及智能软盘)间的一种接口。

Cryptoki 的主要目标是一个低级程序接口,该接口将设备的细节抽象化,并把密码设备的通用模型—密码令牌,或简称令牌—提供给应用程序。

Cryptoki的通用模型如下图所示。模型从一个或多个必须执行某些密码操作的应用程序开始,以一个或多个密码设备结束(在密码设备上执行某些或全部操作)。一个用户可涉及也可不涉及一个程序。

Cryptoki 为一个或多个密码设备提供一个接口,这些设备通过大量的槽在系统中运行。每个对应于一个物理阅读器或另一个设备接口的槽可包含一个令牌。当一台密码设备存在于阅读器中,一个令牌就存在于该槽中。当然,由于Cryptoki提供槽和令牌的逻辑视图,所以可能有其它的物理译码。多个槽可能共享一个阅读器。问题在于一个系统有相当多的槽,应用程序能连接到这些槽的其中任何一个或全部槽的令牌上。

Cryptoki的令牌逻辑视图是一个能存储对象和能执行密码函数的设备。Cryptoki定义如下三个对象:数据、证书和密钥。数据对象由应用程序定义。一个证书对象存储一个证书。一个密钥对象存储一个密码密钥。密钥可以是一个公共密钥、一个私钥或是一个保密密钥,每个种类的密钥在专用机制中使用其的辅助型。令牌的这种逻辑视图如下图所示:

Ⅲ.GMT 0016-2012

规定了基于PKI密码体制的智能密码钥匙密码应用接口,描述了密码应用接口的函数、数据类型、参数的定义和设备的安全要求。

Ⅳ.GMT 0018-2012

规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准。

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

Ⅰ.Crypto API

CryptoAPI的编程模型同Windows系统的图形设备接口 GDI比较类似,其中加密服务提供者CSP等同于图形设备驱动程序 ,加密硬件(可选)等同于图形硬件,其上层的应用程序也类似,都不需要同设备驱动程序和硬件直接打交道。

CryptoAPI共有五部分组成:简单消息函数(Simplified Message Functions)、低层消息函数(Low-level Message Functions)、基本加密函数(Base Cryptographic Functions)、证书编解码函数(Certificate Encode/Decode Functions)和证书库管理函数(Certificate Store Functions)。其中前三者可用于对敏感信息进行加密或签名处理,可保证网络传输信心的私有性;后两者通过对证书的使用,可保证网络信息交流中的认证性。

Ⅱ.PKCS#11

前文已经进行介绍

Ⅲ.GMT 0016-2012

智能 IC 卡及智能密码钥匙应用接口位于智能 IC 卡及智能密码钥匙应用程序与设备之间,一个设备中存在设备认证密钥和多个应用,应用之间相互独立。

Ⅳ.GMT 0018-2012

密码设备服务层由密码机、密码卡、智能密码终端等设备组成,通过密码设备应用接口向通用密码服务层提供基础密码服务。基础密码服务包括密钥生成、单一的密码运算、文件管理等的服密码设备应用接口。

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

3.1 CryptoAPI

3.1.1 基本加密函数

(1)服务提供者函数

应用程序使用服务提供者函数来连接和断开一个CSP(Cryptographic Service Providers)。

函数名 函数功能
CryptAcquireContext 获得指定CSP 的密钥容器的句柄
CryptContextAddRef 对HCRYPTPROV 句柄增加一个应用计数
CryptEnumProviders 枚举当前计算机中的CSP
CryptEnumProviderTypes 枚举CSP 的类型
CryptGetDefaultProvider 对于指定CSP 类型的却省CSP
CryptGetProvParam 得到一个CSP 的属性
CryptInstallDefaultContext 安装先前得到的HCRYPTPROV 上下文作为当前却省的上下文
CryptReleaseContext 释放由CryptAcquireContext 得到的句柄
CryptSetProvider|CryptSetProviderEx 为指定CSP 类型指定一个却省的CSP
CryptSetProvParam 指定一个CSP 的属性
CryptUninstallDefaultContext 删除先前由CryptInstallDefaultContext 安装的却省上下文

(2)密钥的产生和交换函数

密钥产生函数创建、配置和销毁加密密钥。他们也用于和其他用户进行交换密钥。

函数 功能
CryptAcquireCertificatePrivateKey 对于指定证书上下文得到一个HCRYPTPROV句柄和dwKeySpec
CryptDeriveKey 从一个密码中派生一个密钥
CryptDestoryKey 销毁密钥
CryptDuplicateKey 制作一个密钥和密钥状态的精确复制
CryptExportKey 把CSP 的密钥做成BLOB 传送到应用程序的内存空间中
CryptGenKey 创建一个随机密钥
CryptGenRandom 产生一个随机数
CryptGetKeyParam 得到密钥的参数
CryptGetUserKey 得到一个密钥交换或签名密钥的句柄
CryptImportKey 把一个密钥BLOB 传送到CSP中
CryptSetKeyParam 指定一个密钥的参数

(3)编码/解码函数

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

函数 函数功能
CryptDecodeObject 对lpszStructType 结构进行解码
CryptDecodeObjectEx 对lpszStructType 结构进行解码,此函数支持内存分配选项
CryptEncodeObject 对lpszStructType 结构进行编码
CyptEncodeObjectEx 对lpszStructType 结构进行编码,此函数支持内存分配选项

(4)数据加密/解密函数

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

函数 功能
CryptDecrypt 使用指定加密密钥来解密一段密文
CryptEncrypt 使用指定加密密钥来加密一段明文
CryptProtectData 执行对DATA_BLOB 结构的加密
CryptUnprotectData 执行对DATA_BLOB 结构的完整性验证和解密

(5)哈希和数字签名函数

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

函数 功能
CryptCreateHash 创建一个空哈希对象
CryptDestoryHash 销毁一个哈希对象
CryptDuplicateHash 复制一个哈希对象
CryptGetHashParam 得到一个哈希对象参数
CryptHashData 对一块数据进行哈希,把它加到指定的哈希对象中
CryptHashSessionKey 对一个会话密钥进行哈希,把它加到指定的哈希对象中
CryptSetHashParam 设置一个哈希对象的参数
CryptSignHash 对一个哈希对象进行签名
CryptVerifySignature 校验一个数字签名

3.1.2 证书和证书库函数

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

(1)证书库函数

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

函数 功能
CertAddStoreToCollection 在证书库中增加一个证书
CertCloseStore 关闭一个证书库句柄
CertControlStore 如果证书缓冲区和证书本身内容不相符时,允许给应用程序发一个通知
CertDuplicateStore 通过增加引用计数来复制证书库句柄
CertEnumPhysicalStore 对于指定系统库枚举物理库
CertEnumSystemStore 枚举所有可用的系统库
CertEnumSystemStoreLocation 枚举可用系统库的所有位置
CertGetStoreProperty 得到一个库的属性
CertOpenStore 使用指定库类型来打开证书库
CertOpenSystemStore 打开一个系统证书库
CertRegisterPhysicalStore 在一个注册系统库里增加一个物理库
CertRegisterSystemStore 注册一个系统库
CertRemoveStoreFromCollection 从一个库集合里删除证书库
CertSaveStore 保存证书库
CertSetStoreProperty 设置证书属性
CertUnregisterPhysicalStore 从系统库中删除一个物理库
CertUnregisterSystemStore 反注册一个指定系统库

(2)维护函数

函数 功能
CertAddSerializeElementToStore 在库中增加一系列证书或CRL
CertCreateContext 从编码字节中创建指定上下文
CertEnumSubjectInSortedCTL 在CTL 库中枚举信任主题
CertFindSubjectInCTL 在CTL 中寻找指定主题
CertFindSubjectInSortedCTL 在分类CTL 中寻找指定主题

(3)证书函数

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

函数 功能
CertAddCertificateContextToStore 在证书库里增加一个证书上下文
CertAddCertificateLinkToStore 在证书库里增加一个对不同库里的证书上下文的链接
CertAddEncodedCertificateToStore 把编码证书转换成证书上下文并且把它加到证书库里
CertCreateCertificateContext 从编码证书中创建一个证书上下文。但这个上下文并不放到证书库里
CertCreateSelfSignCertificate 创建一个自签名证书
CertDeleteCertificateFromStore 从证书库里删除一个证书
CertDuplicateCertificate 通过增加引用计数来复制证书上下文
CertEnumCertificateInStore 在证书库里枚举证书上下文
CertFindCertificateInStore 在证书库里寻找证书上下文
CertFreeCertificateContext 释放一个证书上下文
CertGetIssuerCertificateFromStore 在证书库里得到指定主题证书的发行者
CertGetSubjectCertificateFromStore 获得主题证书的上下文
CertGetValidUsages 返回所有证书的用法
CertSerializeCertificateStoreElement 串行化编码证书的证书上下文
CertVerifySubjectCertificateContext 使用发行者来验证主题证书
CryptUIDlgViewContext 显示证书、CRL 或CTL
CryptUIDlgSelectCertificateFromStore 从指定库中显示对话框,可以从中选择证书

(4)证书撤销列表函数

函数 功能
CertAddCRLContextToStore 在证书库里增加一个CRL 上下文
CertAddCRLLinkToStore 在不同的库里增加一个CRL 上下文链接
CertAddEncodedCRLToStore 把编码CRL 转化成CRL 上下文然后把它加入到证书库中
CertCreateCRLContext 从编码CRL 中创建CRL 句柄,但不把它加到库中
CertDeleteCRLFromStore 从证书库里删除一个CRL
CertDuplicateCRLContext 通过增加引用计数来复制CRL 上下文
CertEnumCRLsInStore 枚举库里的CRL 句柄
CertFindCertificateInCRL 从指定证书里寻找CRL 列表
CertFindCRLInStore 在库里寻找CRL 上下文
CertFreeCRLContext 释放CRL 上下文
CertGetCRLFromStore 从库里得到CRL 上下文句柄
CertSerializeCRLStoreElement 串行化CRL 上下文的编码CRL 和它的属性

(5)证书信任列表函数

函数 功能
CertAddCTLContextToStore 把一个CTL 上下文加入到证书库里
CertAddCTLLinkToStore 给不同库里的CRL 上下文添加链接
CertAddEncodedCTLToStore 把编码CTL 转化成CTL 上下文并且把它加到证书库里
CertCreateCTLContext 从编码CTL 中创建CTL 上下文
CertDeleteCTLFromStore 从证书库里删除CTL
CertDuplicateCTLContext 通过增加引用计数来复制CTL 上下文
CertEnumCTLsInStore 在证书库里枚举CTL 上下文
CertFindCTLInStore 在证书库里查找CTL 上下文
CertFreeCTLContext 释放CTL 上下文
CertSerializeCTLStoreElement 串行化CTL 上下文的编码CTL 和属性

(6) 扩展属性函数

函数 功能
CertEnumCertificateContextProperties 枚举指定证书上下文的属性
CertEnumCRLContextProperties 枚举指定CRL 上下文的属性
CertEnumCTLContextProperties 枚举指定CTL 上下文的属性
CertGetCertificateContextProperty 得到证书属性
CertGetCRLContextProperty 得到CRL 属性
CertGetCTLContextProperty 得到CTL 属性
CertSetCertificateContextProperty 设置证书属性
CertSetCRLContextProperty 设置CRL 属性
CertSetCTLContextProperty 设置CTL 属性

3.1.3 证书验证函数

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

(1)使用CTL的函数

函数 功能
CertVerifyCTLUsage 验证CTL 用法
CryptMsgEncodeAndSignCTL 编码和验证CTL
CryptMsgGetAndVerifySigner 从一个消息中获得和验证CTL
CryptMsgSignCTL 对包含CTL 的消息进行签名

(2)证书链验证函数

函数 功能
CertCreateCertificateChainEngine 为应用程序创建一个新的非却省的链引擎
CertCreateCTLEntryFromCertificateContextProperties 创建一个CTL 入口
CertDuplicateCertificateChain 通过增加引用计数来复制证书链
CertFindChainInStore 在证书库里查找证书链
CertFreeCertificateChain 释放证书链
CertFreeCertificateChainEngine 释放证书链引擎
CertGetCertificateChain 从最后一个证书建立一个上下文链表
CertSetCertificateContextPropertiesFromCTLEntry 通过CTL 入口属性来设置证书上下文的属性
CertIsValidCRLForCertificate 通过检查CRL 来确定CRL 是否包括指定被撤销的证书
CertVerifyCertificateChainPolicy 通过检查证书链来确定它的完整性

3.1.4 消息函数

CryptoAPI 消息函数包括两组:

  • 低级消息函数
  • 简化消息函数。

低级消息函数直接和PKCS#7 消息工作。这些函数对传输的PKCS#7 数据进行编码,对接收到的PKCS#7 数据进行解码,并且对接收到的消息进行解密和验证。简化消息函数是比较高级的函数,是对几个低级消息函数和证书函数的封装,用来执行指定任务。这些函数在完成一个任务时,减少了函数调用的数量,因此简化了CryptoAPI的使用。

(1)低级消息函数

函数 功能
CryptMsgCalculateEncodedLength 计算加密消息的长度
CryptMsgClose 关闭加密消息的句柄
CryptMsgControl 执行指定的控制函数
CryptMsgCountersign 标记消息中已存在的签名
CryptMsgCountersignEncoded 标记已存在的签名
CryptMsgDuplicate 通过增加引用计数来复制加密消息句柄
CryptMsgGetParam 对加密消息进行编码或者解码后得到的参数
CryptMsgOpenToDecode 打开加密消息进行解码
CryptMsgOpenToEncode 打开加密消息进行编码
CryptMsgUpdate 更新加密消息的内容
CryptMsgVerifyCountersignatureEncoded 验证SignerInfo 结构中标记时间
CryptMsgVerifyCountersignatureEncodedEx 验证SignerInfo 结构中标记时间签名者可以是CERT_PUBLIC_KEY_INFO 结构

(2) 简化消息函数

函数 功能
CryptDecodeMessage 对加密消息进行解码
CryptDecryptAndVerifyMessageSignature 对指定消息进行解密并且验证签名者
CryptDecryptMessage 解密指定消息
CryptEncryptMessage 加密指定消息
CryptGetMessageCertificates 返回包含消息的证书和CRL 的证书库
CryptGetMessageSignatureCount 返回签名消息的签名者数量
CryptHashMessage 创建消息的哈希
CryptSignAndEncryptMessage 对消息进行签名并且加密
CryptSignMessage 对消息进行签名
CryptVerifyDetachedMessageHash 验证包含已解邦定哈希的哈希消息
CryptVerifyDetachedMessageSignature 验证包含已解邦定签名的签名消息
CryptVerifyMessageHash 验证一个哈希消息
CryptVerifyMessageSignature 验证一个签名消息

3.1.5 辅助函数

(1)数据管理函数

函数 功能
CertCompareCertificate 比较两个证书是否相同
CertCompareCertificateName 通过比较两个证书名称来决定他们是否相同
CertCompareIntegerBlob 比较两个整数BLOB
CertComparePublicKeyInfo 通过比较两个证书公钥来决定他们是否相同
CertFindAttribute 通过OID 来查找属性
CertFindExtension 通过OID 来查找扩展
CertFindRDNAttr 通过OID 来查找RDN 属性
CertGetIntendedKeyUsage 从证书中取得相关密钥用法
CertGetPublicKeyLength 从公钥BLOB 中取得公钥/私钥长度
CertIsRDNAttrsInCertificateName 通过指定RDN 数组属性比较证书名称属性来决定证书是否已包含了所有属性
CertVerifyCRLRevocation 验证主题证书是否在CRL 中
CertVerifyCRLTimeValidity 验证CRL 的有效时间
CertVerifyRevocation 验证主题证书是否在CRL 中
CertVerifyTimeValidity 验证CRL 的有效时间
CertVerifyValidityNesting 验证主题时间的有效性是否在发行者有效时间内
CryptExportPublicKeyInfo 导出公钥信息
CryptExportPublicKeyInfoEx 导出公钥信息(用户可以指定算法)
CryptFindCertificateKeyProvInfo 枚举CSP 和它的密钥容器来查找对应于公钥的相应私钥
CryptFindLocalizedName 查找指定名字的局部化名称
CryptHashCertificate 哈希证书内容
CryptHashPublicKeyInfo 计算公钥信息的哈希
CryptHashToBeSigned 计算签名内容的信息哈希值
CryptImportPublicKeyInfo 把公钥信息导入CSP 并且返回它的句柄
CryptImportPublicKeyInfoEx 把公钥信息导入CSP 并且返回它的句柄
CryptMemAlloc 分配内存
CryptMemFree 释放内存
CryptMemRealloc 重新分配内存
CryptQueryObject 得到BLOB 或文件的内容信息
CryptSignAndEncodeCertificate 对信息进行签名并且编码
CryptSignCertificate 对证书进行签名
CryptVerifyCertificateSignature 使用公钥信息对主题证书或CRL 的签名进行验证
CryptVerifyCertificateSignatureEx 使用公钥信息对主题证书或CRL 的签名进行验证

(2)数据转换函数

函数 功能
CertAlgIdToOID 把CSP 算法标示符转换成OID
CertGetNameString 得到证书的主题或颁发者名称并且把它转换成字符串
CertNameToStr 把证书名称BLOB 转换成字符串
CertOIDToAlgId 把OID 转换成CSP 算法表示符
CertRDNValueToStr 把名称值转换成字符串
CertStrToName 把字符串转换成编码证书名称
CryptBinaryToString 把二进制序列转换成字符串
CryptFormatObject 格式化编码数据,返回Unicode 字符串
CryptStringToBinary 把格式化的字符串转换成二进制序列

(3)增强密钥用法函数

函数 功能
CertAddEnhancedKeyUsageIdentifier 在证书EKU 属性中增加一个用法标示符
CertGetEnhancedKeyUsage 获得证书的EKU 扩展或属性信息
CertRemoveEnhancedKeyUsageIdentifier 从证书EKU 扩展属性中删除用法标示符OID
CertSetEnhancedKeyUsage 设置证书的EKU 属性

(4)密钥标示函数

函数 功能
CryptCreateKeyIdentifierFromCSP 创建CSP 公钥的密钥标示符
CryptEnumKeyIdentifierProperties 枚举标示符和其属性
CryptGetKeyIdentifierProperty 从指定密钥标示符中获得指定属性
CryptSetKeyIdentifierProperty 设置指定密钥标示符的属性

(5)证书库回调函数

函数 功能
CertDllOpenStoreProv 定义库提供者打开函数
CertStoreProvCloseCallback 决定当证书库引用计数为0 时将发生的动作
CertStoreProvDeleteCertCallback 决定当从证书库中删除一个证书之前的动作
CertStoreProvDeleteCRLCallback 决定当从证书库中删除一个CRL 之前的动作
CertStoreProvReadCertCallback 保留
CertStoreProvReadCRLCallback 保留
CertStoreProvSetCertPropertyCallback 决定在CertSetCertificateContextProperty 和CertGetCertificateContext 调用之前的动作
CertStoreProvSetCRLPropertyCallback 决定在CertSetCRLContextProperty 和CertGetCRLContextProperty 调用之前的动作
CertStoreProvWriteCertCallback 决定在证书库中加入一个证书前的动作
CertStoreProvWriteCRLCallback 决定在证书库中加入一个CRL 前的动作
CertStoreProvReadCTL 读CSP 的CTL 上下文
CertStoreProvWriteCTL 决定CTL 是否可被加入到证书库中
CertStoreProvDeleteCTL 决定CTL 是否可被删除
CertStoreProvSetCTLProperty 决定是否可以设置CTL 的属性
CertStoreProvControl 当缓冲库和存储库不同时,通知应用程序
CertStoreProvFindCert 在证书库中查找下一个证书
CertStoreProvFreeFindCert 释放前一个找到的证书上下文
CertStoreProvGetCertProperty 得到指定的证书属性
CertStoreProvFindCRL 查找第一个或下一个匹配的CRL
CertStoreProvFreeFindCRL 释放前一个找到的CRL 上下文
CertStoreProvGetCRLProperty 得到指定CRL 属性
CertStoreProvFindCTL 查找第一个或下一个匹配的CTL
CertStoreProvFreeFindCTL 释放前一个找到的CTL 上下文
CertStoreProvGetCTLProperty 得到指定CTL 属性

具体函数和功能参考:CryptoAPI

3.2 PKCS#11

3.2.1 通用接口

函数 描述
C_Initialize 初始化 Cryptoki
C_Finalize 整理各种适合 Cryptoki的资源
C_GetInfo 获得关于Cryptoki的通用信息
C_GetFunctionList 获得Cryptoki 库函数的进入点

3.2.2 槽和令牌管理函数

函数 功能
C_GetSlotList 获得系统中槽的名单
C_GetSlotInfo 获得关于特殊槽的信息
C_GetTokenInfo 获得关于特殊令牌的信息
C_WaitForSlotEvent 等待槽事件(令牌插入,转移等) 的发生
C_GetMechanismList 获得由令牌支持的机制的名单
C_GetMechanismInfo 获得关于特殊机制的信息
C_InitToken 初始化一个令牌
C_InitPIN 初始化普通用户的 PIN
C_SetPIN 改变现在用户的PIN

3.2.3 会话管理函数

函数 功能
C_OpenSession 打开一个应用程序和特殊令牌之间的连接或安装一个应用程序呼叫返回令牌插入
C_CloseSession 关闭一个会话
C_CloseAllSessions 用令牌关闭所有的会话
C_GetSessionInfo 获得关于会话的信息
C_GetOperationState 获得会话的加密操作状态
C_SetOperationState 设置会话的加密操作状态
C_Login 注册一个令牌
C_Logout 从一个令牌注销

3.2.3 对象管理函数

C_CreateObject 建立一个对象
C_CopyObject 建立一个对象的拷贝
C_DestroyObject 销毁一个对象
C_GetObjectSize 获取字节中一个对象的大小
C_GetAttributeValue 获取一个对象的属性值
C_SetAttributeValue 改变一个对象的属性值
C_FindObjectsInit 初始化一个对象的搜索操作
C_FindObjects 继续一个对象搜索操作
C_FindObjectsFinal 完成一个对象搜索操作

3.2.4 加密和解密函数

函数 功能
C_EncryptInit 初始化一个加密操作
C_Encrypt 加密单部分数据
C_EncryptUpdate 继续一个多部分加密操作
C_EncryptFinal 完成一个多部分加密操作
C_DecryptInit 初始化一个解密操作
C_Decrypt 解密单部分加密数据
C_DecryptUpdate 继续一个多部分解密操作
C_DecryptFinal 完成一个多部分解密操作

3.2.5 消息摘要函数

函数
C_DigestInit 初始化一个消息摘要操作
C_Digest 摘要单部分数据
C_DigestUpdate 继续一个多部分摘要操作
C_DigestKey 摘要一个密钥
C_DigestFinal 完成一个多部分摘要操作

3.2.5 签名和验签函数

函数 功能
C_SignInit 初始化一个签名操作
C_Sign 签名单部分数据
C_SignUpdate 继续一个多部分签名操作
C_SignFinal 完成一个多部分签名操作
C_SignRecoverInit 初始化一个签名操作,在操作中数据能从签名中恢复
C_SignRecover 签名单部分数据,在操作中数据能从签名中恢复
C_VerifyInit 初始化一个鉴定操作
C_Verify 在单部分数据上鉴定一个签名
C_VerifyUpdate 继续一个多部分鉴定操作
C_VerifyFinal 完成一个多部分鉴定操作
C_VerifyRecoverInit 初始化一个鉴定操作,在操作中数据能从签名中恢复
C_VerifyRecover 在单部分数据上鉴定一个签名,在操作中数据能从签名中恢复

3.2.6 双重目的的加密

函数 功能
C_DigestEncryptUpdate 继续类似的多部分摘要和加密操作
C_DecryptDigestUpdate 继续类似的多部分解密和摘要操作
C_SignEncryptUpdate 继续类似的多部分签名和加密操作
C_DecryptVerifyUpdate 继续类似的多部分解密和鉴定操作

3.2.7 密钥管理函数

函数 功能
C_GenerateKey 产生一个保密密钥
C_GenerateKeyPair 产生一个公共/私钥对
C_WrapKey 加密一个密钥
C_UnwrapKey 解密一个密钥
C_DeriveKey 从基础密钥派生一个密钥

3.2.8 随机数生成函数

函数 功能
C_SeedRandom 把一个附加种子材料加入随机数字生成器
C_GenerateRandom 生成随机数据

具体函数内容和功能参考:PKCS#11

3.3 SFK

3.3.1 设备管理系列函数

函数名称 功能
SKF_WaitForDevEvent 等待设备插拔事件
SKF_CanceIWaitForDevEvent 取消等待设备插拔事件
SKF_EnumDev 枚举设备
SKF_ConnectDev 连接设备
SKF_DisconnectDev 断开连接
SKF_GetDevState 获取设备状态
SKF_SetLabeI 设置设备标签
SKF_GetDevInfo 获取设备信息
SKF_LockDev 锁定设备
SKF_UnIockDev 解锁设备
SKF_Transmit 设备命令传输

3.3.2 访问控制系列函数

函数名称 功能
SKF_ChangeDevAuthKey 修改设备认证密钥
SKF_DevAuth 设备认证
SKF_ChangePIN 修改 PIN
SKF_GetPINInfo 获得 PIN码信息
SKF_VerifyPIN 校验 PIN
SKF_UnbIockPIN 解锁 PIN
SKF_CIearSecueState 清除应用安全状态

3.3.3 应用管理系列函数

函数名称 功 能
SKF_CreateApplication 创建应用
SKF_EnumApplication 枚举应用
SKF_DeleteApplication 删除应用
SKF_OpenApplication 打开应用
SKF_CloseApplication 关闭应用

3.3.4 文件管理系列函数

函数名称 功能
SKF_CreateFiIe 创建文件
SKF_DeIeteFiIe 删除文件
SKF_EnumFiIes 枚举文件
SKF_GetFiIeInfo 获取文件信息
SKF_ReadFiIe 读文件
SKF_WriteFiIe 写文件

3.3.5 容器管理系列函数

函数名称 功能
SKF_CreateContainer 创建容器
SKF_DeIeteContainer 删除容器
SKF_EnumContainer 枚举容器
SKF_OpenContainer 打开容器
SKF_CIoseContainer 关闭容器
SKF_GetContainerType 获得容器类型
SKF_ImportCertificate 导人数字证书
SKF_ExportCertificate 导出数字证书

3.3.6 密码服务系列函数

函数名称 功 能
SKF_GenRandom 生成随机数
SKF_GenExtRsAKey 生成外部 RsA密钥对
SKF_GenRsAKeyPair 生成 RsA签名密钥对
SKF_ImportRsAKeyPair 导人 RsA加密密钥对
SKF_RsAsignData RsA签名
SKF_RsAVerify RsA验签
SKF_Rs/DxportsesionKey Rs/生成并导出会话密钥
SKF_DxtRs/PubKeyOperation Rs/外来公钥运算
SKF_DxtRs/PriKeyOperation Rs/外来私钥运算
SKF_GenDAAKeyPair 生成 DAA签名密钥对
SKF_ImportDAAKeyPair 导人 DAA加密密钥对
SKF_DAAsignCata DAA签名
SKF_DAAVerify DAA验签
SKF_DAADxportsesionKey DAA生成并导出会话密钥
SKF_DxtDAADncrypt DAA外来公钥加密
SKF_DxtDAACecrypt DAA外来私钥解密
SKF_DxtDAAsign DAA外来私钥签名
SKF_DxtDAAVerify DAA外来公钥验签
SKF_Generate/grementCataWithDAA DAA生成密钥协商参数并输出
SKF_GenerateKeyWithDAA DAA计算会话密钥
SKF_Generate/grementCata/ndKeyWithDAA DAA产生协商数据并计算会话密钥
SKF_DxportPubIicKey 导出公钥
SKF_ImportsesionKey 导人会话密钥
SKF_setsymmKey 明文导人会话密钥
SKF_DncryptInit 加密初始化
SKF_Dncrypt 单组数据加密
SKF_DncryptUpdate 多组数据加密
SKF_DncryptFinaI 结束加密
SKF_CecryptInit 解密初始化
SKF_Cecrypt 单组数据解密
SKF_CecryptUpdate 多组数据解密
SKF_CecryptFinaI 结束解密
SKF_CigestInit 密码杂凑初始化
SKF_Cigest 单组数据密码杂凑
SKF_CigestUpdate 多组数据密码杂凑
SKF_CigestFinaI 结束密码杂凑
SKF_MacInit 消息鉴别码运算初始化
SKF_Mac 单组数据消息鉴别码运算
SKF_MacUpdate 多组数据消息鉴别码运算
SKF_MacFinaI 结束消息鉴别码运算
SKF_AIoseHandIe 关闭密码对象句柄

四、调用不同接口的代码

4.1Crypto API

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

4.1.2 龙脉密码钥匙驱动实例工具等\mToken-GM3000\csp\samples\CryptAPI\VC\EnumCerts

4.1.3 龙脉密码钥匙驱动实例工具等\mToken-GM3000\csp\samples\CryptAPI\VC\Sign_Verify


4.2 PKCS#11

4.2.1 龙脉密码钥匙驱动实例工具等\mToken-GM3000\pkcs11\windows\samples\GetUSBInfos

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

DES

RC2

RSA

AES

4.3 SKF

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

标签:API,SKF,函数,证书,引擎,密钥,加密,上下文
From: https://www.cnblogs.com/moonyecho/p/17285617.html

相关文章

  • 实验一-密码引擎-3-加密API研究
    一、任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交......
  • 实验一-密码引擎-3-加密API研究--20201313
    目录微软的CryptoAPI加密技术PKCS#11及CSP接口标准GMT0016-2012GMT0018-20123以龙脉GM3000Key为例,写出调用不同接口的代码(CryptoAPI,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接3.1CryptoAPI3.1.1龙脉密码钥匙驱动实例工具等\mToken-GM3000\csp\samples\CryptAPI\VC\E......
  • 实验一-密码引擎-3-加密API研究
    任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交......
  • 实验一-密码引擎-3-加密API研究
    实验一-密码引擎-3-加密API研究目录实验一-密码引擎-3-加密API研究任务详情0.查找各种标准的原始文档,研究学习(至少包含CryptoAPI,PKCS#11,GMT0016-2012,GMT0018-2012)CryptoAPIPKCS#11GM/T0016-2012智能密码钥匙密码应用接口规范GM/T0018-2012密码设备应用接口规范1.总结这......
  • 实验一-密码引擎-3-加密API研究
    一、任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交......
  • 实验一-密码引擎-3-加密API研究
    目录1CryptoAPI1.1五个主要功能区域1.2函数1.2.1基本加密函数1.2.2证书和证书库函数1.2.3证书验证函数1.2.4创建密钥容器2PKCS#112.1函数2.2操作3GM/T0018-20123.1简介3.2范围3.3结构模型3.4函数3.5安全要求3.5.1密钥管理要求3.5.2密码服务要求3.5.3设备状态......
  • 实验一-密码引擎-3-加密API研究
    一、任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交......
  • 实验一-密码引擎-3-加密API研究
    加密API研究(一)CryptoAPI1.简介(1)微软加密服务体系微软加密服务体系CryptoAPI的结构如下图所示,微软加密服务体系包含三层结构和两个接口,分别为应用程序层、操作系统层(OS)、加密服务提供者层(CryptographicServiceProvider,CSP),CryptoAPI接口和加密服务提供者接口(Cryptograp......
  • 实验一-密码引擎-加密API研究
    实验一-密码引擎-加密API研究1.微软的CryptoAPIWindowsCryptoAPI是Microsoft公司提出的安全加密应用服务框架,也是PKI推荐使用的加密API。它提供了在Win32环境下使用认证、编码、加密和签名等安全服务时的标准加密接口,用于增强应用程序的安全性与可控性。应用开发者可以在不......
  • 实验一-密码引擎-3-加密API研究
    微软的CryptoAPI加密技术功能:为应用程序开发者提供在Win32环境下使用加密、验证等安全服务时的标准加密接口。CryptoAPI处于应用程序和CSP(cryptographicserviceprovider)之间。CryptoAPI共有五部分组成:简单消息函数(SimplifiedMessageFunctions)、低层消息函数(Low-levelMessage......