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

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

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

(一)Crypto API

Crypto API是指加密货币API,它是一组编程代码,允许开发人员将加密货币相关功能集成到其应用程序中。这些API提供对各种数据的访问,例如实时加密货币价格、历史数据、市场趋势和交易信息。开发人员可以使用这些API构建加密货币钱包、交易平台、价格跟踪器和其他与加密货币生态系统交互的应用程序。

一些流行的加密货币API包括:

1. CoinGecko API
2. CoinMarketCap API
3. Binance API
4. Kraken API
5. Coinbase API

CryptoAPI 系统体系结构:

1. 基本加密函数

  • 用于连接到 CSP 的 上下文函数。 这些函数使应用程序可以按名称选择特定 CSP,或选择可以提供所需的功能类别的特定 CSP。

  • 用于生成和存储 加密密钥的 密钥生成函数。 更改 链接模式、 初始化矢量和其他加密功能包含完全支持。 有关详细信息,请参阅密钥生成和 Exchange 函数。

  • 用于交换或传输密钥的 密钥交换功能。 有关详细信息,请参阅加密密钥存储和 Exchange以及密钥生成和 Exchange 函数。

2. 证书编码/解码函数

  • 用于对数据进行加密或解密的函数。 还包括对 哈希 数据的支持。 有关详细信息,请参阅 数据加密和解密功能 以及 数据加密和解密。

3. 证书存储函数

  • 用于管理数字证书集合的函数.有关详细信息,请参阅数字证书和证书存储功能。

4. 简化消息函数

  • 用于加密和解密消息和数据的函数。

  • 用于对消息和数据进行签名的函数。

  • 用于验证收到的消息和相关数据的签名真实性的函数。
    有关详细信息,请参阅简化消息和简化消息功能。

5. 低级别消息函数

    • 用于执行简化消息函数执行的所有任务的函数。 低级别消息函数比简化消息函数提供的灵活性更高,但需要更多函数调用。 有关详细信息,请参阅 低级消息 和 低级别消息函数。

参考文档:
https://docs.microsoft.com/zh-cn/windows/win32/seccrypto/cryptoapi-system-architecture?redirectedfrom=MSDN

(二)PKCS#11

在密码系统中,PKCS#11是公钥加密标准(PKCS, Public-Key Cryptography Standards)中的一份子 ,由RSA实验室(RSA Laboratories)发布[1],它为加密令牌定义了一组平台无关的API ,如硬件安全模块和智能卡。

PKCS#11标准定义了与密码令牌(如硬件安全模块(HSM)和智能卡)的独立于平台的API,并将API本身命名为“Cryptoki”(来自“加密令牌接口”,发音为“crypto-key” - 但是“PKCS#11”通常用于指代API以及定义它的标准)。 API定义了最常用的加密对像类型(RSA密钥,X.509证书,DES / 三重DES密钥等)以及使用,创建/生成,修改和删除这些对象所需的所有功能。

PKCS#11创建和支持对象

(三)GMT 0016-2012

本标准规定了基于PKI密码体制的智能密码钥匙密码应用接口,描述了密码应用接口的函数、数据类型、参数的定义和设备的安全要求。
本标准适用于智能密码钥匙产品的研制、使用和检测。

结构模型

设备应用结构

(四)GMT 0018-2012

本标准规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准,
本标准适用于服务类密码设备的研制使用,以及基于该类密码设备的应用开发,也可用于指导该类密码设备的检测

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

1.Crypto API

使用CryptoAPI编写一个文件保护程序,具有如下功能:

(1)给定明文文件,生成加密文件,同时产生文件的数字签名文件;

(2)给定密文文件,解密出明文文件,并验证签名的正确性。

在不安全的网络上进行安全的数据传输涉及三个方面的要求:信息隐藏,身份鉴别和完整性检验。CryptoAPI除了提供上述三个功能外还提供标准的ASN.1编码、解码,信息解密,数字证书和证书存储区的管理,证书信任列表、吊销列表和证书有效性检查等功能。

信息隐藏

信息隐藏的意义是保障信息内容只能被特定的人获取。信息隐藏通常是使用某种形式的密码学方式。数据加密算法能保障信息的安区隐藏和传输。数据加密算法是将明文数据经过一定的变换使其看上去是一组毫无意义的数据。在没有加密密钥的情况下,对于好的加密算法想从密文获取明文信息是不可能的。被加密的数据可以是任意的ASCII编码文本文件,数据库文件,和任意需要进行安全传输的数据。这里,“信息”是指任意的一段数据,“明文”是指任意一段没有被加密的数据,“密文”是指任意一段加密的数据。被加密的数据可以在不安全的通道上进行传输而不伤害其安全性。之后,密文可以被还原成明文.

数据加密和解密的概念是:对数据加密的时候需要一个加密密钥,相当于门上的一把钥匙。解密的时候,需要使用一个解密密钥来解开数据。加密密钥、解密密钥可以相同也可以不相同。

加密密钥必须小心保存,给其它用户的时候也必须通过安全的通道传递。对解密密钥的访问权限必须小心控制,因为拥有解密密钥意味着可以解开所有相应加密密钥加密的信息。

身份鉴别

安全通讯的前提是通讯的双方知道对方的身份。身份鉴别的任务就是鉴别一个用户或者实体的真实身份。标识用户身份的文档通常被称为信任状或者凭证。

身份鉴别有时候也用来判定接受的数据就是被发送的数据。如果A向B发送了一段数据,B需要鉴别这段数据就是A发出去的,而不是其它冒充A发出去的。为了满足这类验证的需求,CryptoAPI提供数字签名和校验函数,用来对信息进行鉴别。

因为在计算机网网络上传输的数据与用户之间并没有物理连接,因此对数据进行鉴别的凭证也必须能够在网络上进行传输。这种凭证必须由受信任的凭证发行机构发行。

数字证书就是平常说的证书就是这种凭证,是计算机在网络上进行身份验证的有效凭证。

数字证书是由一个被称为证书机构的信任组织或实体颁发的凭证。它包含与证书对应的用户公钥以及其它一些记录证书主题和用户信息的数据。证书机构只有在验证了证书主题和证书对应的用户公钥的有效性之后才会签发证书。

证书申请者和证书机构之间交换签发证书信息可以使用物理介质,比如软盘,进行传输。通常,这种信息都是在计算机网络上进行完成的。证书机构使用被信任的服务程序处理用户的请求和证书的签发工作。

完整性检测

任何通过不安全介质传输的信息都可以被意外或蓄意的修改。在现实世界中,盖章、签名就是用来提供和证明信息完整性的工具。

信息的接收者不但需要确定信息是由谁发送的,还要确定自己收到的信息是发送者发送的信息,而没有任何的变化。要建立数据的完整性检测机制,不仅要发送信息本身,还要发送用来校验数据的信息,这一信息通常被称作哈希值。数据和验证信息都可以与数字签名一起发送来证明其完整性。

2.PKCS#11

架构:

会话状态:

对象:

3.GMT 0016-2012

下列文件对于本文件的应用是必不可少的凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
①GM/T 0006 密码应用标识规范
②GM/T0009 SM2密码算法使用规范

术语和定义

下列术语和定义适用于本文件

应用 application

包括容器、设备认证密钥和文件的一种结构,具备独立的权限管理。

容器container

密码设备中用于保存密钥所划分的唯一性存储空间。

设备device

本标准中将智能密码钥匙统称为设备

设备认证 device authentication智能密码钥匙对应用程序的认证
设备认证密钥 device authentication key用于设备认证的密钥。
设备标签 label
设备的别名,可以由用户进行设定并存储于设备内部。

消息鉴别码 message authentication code; MAC消息鉴别算法的输出。
管理员PIN administrator PIN管理员的口令,为ASCII字符串
用户PIN user PIN
用户的口令,为ASCII字符串。

缩略语

下列缩略语适用于本规范: API 应用编程接口(Application Programming Interface)
PKI 公钥基础设施(Public Key Infrastructure)
PKCS#1
公钥密码使用标准系列规范中的第1部分,定义RSA公开密钥算法加密和签名机制(the Public-Key Cryptography Standard Part 1)
PKCS#5 公钥密码使用标准系列规范中的第5部分,描述一种利用从口令派生出来的安全密
钥加密字符串的方法(the Public-Key Cryptography Standard Part 5)
PIN 个人身份识别码(Personal Identification Number)
MAC 消息鉴别码(Message Authentication Code)

4.GMT 0018-2012

规范性引用文件

下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件,凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GM/T0006密用标识规范 GM/T0009SM2密码算法使用规范

术语和定义

以下术语和定义活用干本文件

算法标识algorithm ideutifier

用于对密码算法进行唯一标识的符号。

非对称密码算法/公钥密码算法 asymmetric cryptographic algorithm/public key cryptographic algorithm加解密使用不同密钥的密码算法。

解密 decipherment/decryption加密过程对应的逆过程。
设备密钥device key pair
存储在设备内部的用于设备管理的非对称密钥对包含签名密钥对和加密密钥对。

加密encipherment/encryption

对数据进行密码变换以产生密文的过程。

密钥加密密钥key encrypt key;KEK对密钥进行加密保护的密钥。

公钥基础设施public key infrastructure;PKI
用公钥密码技术建立的普遍适用的基础设施,为用户提供证书管理和密钥管理等安全服务。

私钥访问控制码private key access password

用于验证私钥使用权限的口令字。

对称密码技术/对称密码体制 symmetric cryptographic technique

原发者和接收者均采用同秘密密钥进行变换的密码技术(体制)。其中,加密密钥与解密密钥相同或者一个密钥可以从另一个密钥导出的密码体制。

会话密钥session key

处于层次化密钥结构中的最低层,仅在一次会话中使用的密钥。

用户密钥 user key

存储在设备内部的用于应用密码运算的非对称密钥,包含签名密钥对和加密密钥对。

符号和缩略语

下列缩略语适用于本部分:
ECC 椭圆曲线算法(Elliptic Curve Cryptography)
IPK 内部加密公钥(Internal Public Key)
ISK
内部加密私钥(Interal Private Key) EPK
外部加密公钥(Extenal Public Key) KEK 密钥加密密钥(Key Encrypt Key)

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

1.Crypto API

基本加密函数
服务提供者函数

应用程序使用服务提供者函数来连接和断开一个 CSP。下面就是主要的 API:

密钥的产生和交换函数

密钥产生函数创建、配置和销毁加密密钥。他们也用于和其他用户进行交换密钥。下面就是主要的一些函数:

编码/解码函数

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

数据加密/解密函数

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

哈希和数字签名函数

完成计算哈希、创建和校验数字签名

函数详解

密码服务提供者CSP函数

CryptoAPI的密码服务提供者函数主要包括6个函数。连接或断开CSP函数CryptAcquireContext、CryptReleaseContext,枚举CSP函数CryptEnumProviders,获得或设置默认CSP函数CryptGetDefaultProvider、CryptSetProvider,获取或设置CSP参数函数CryptGetProvParam、CryptSetProvParam。

    1. 连接CSP函数 CryptAcquireContext

      函数功能:连接CSP,获得指定CSP的密钥容器的句柄。

    2. 枚举CSP函数 CryptEnumProviders
      函数功能:枚举计算机上的所有CSP。此函数可以得到第一个或下一个可用的CSP。如果循环调用可以得到计算机上所有可用的CSP。

    3. 获得默认CSP函数 CryptGetDefaultProvider

      函数功能:获得系统默认的CSP。

    4. 设置默认CSP函数 CryptSetProvider

      函数功能:设置系统默认的CSP。

    5. 获得CSP参数属性函数 CryptGetProvParam

      函数功能:获得CSP各种参数属性。

    6. 设置CSP参数函数 CryptSetProvParam

      函数功能:设置CSP各种参数属性。

    7. 断开CSP函数 CryptReleaseContext
      函数功能:断开CSP,释放CSP句柄,和 CryptAcquireContext相对应。

密钥的产生与交换函数

CryptoAPI密钥产生和交换函数主要有生成密钥函数 CryptGenKey、派生密钥函数CryptDeriveKey、销毁密钥函数CryptDestoryKey、复制密钥函数CryptDuplicateKey、导出密钥函数CryptExportKey、导入密钥函数CryptImportKey、获得密钥参数函数CryptGetKeyParam、设置密钥参数函数CryptSetKeyParam、产生随机函数 CryptGenRandom。

  1. 生成函数 CryptGenKey
    函数功能:产生一个随机的对称或非对称算法的密钥。

  2. 派生密钥函数 CryptDeriveKey
    函数功能:根据基础数据派生一对称密钥(会话密钥)。

  3. 销毁密钥函数 CryptDestroyKey

    函数功能:销毁密钥。

  4. 复制密钥函数 CryptDuplicateKey
    函数功能:复制一个密钥。产生一个密钥的拷贝,包括其状态。

  5. 导出密钥函数 CryptExportKey

    函数功能:从CSP导出密钥或密钥对。

  6. 导入密钥函数 CryptlmportKey
    函数功能:把BLOB数据导入的CSP。该函数可以导入会话密钥、公钥、或者公/私钥对。

  7. 获得密钥参数函数 CryptGetKeyParam

    函数功能:获得key句柄的各项参数。

  8. 获得密钥参数函数 CryptSetKeyParam

    函数功能:设置key句柄的各项参数。

  9. 获得密钥参数函数 CryptGenRandom

    函数功能:生成随机数。

数据的加密与解密函数

CryptoAPI利用CryptEncrypt函数实现数据加密,利用CryptDecrypt实现数据解密。调用这2个函数前必须指定一个密钥,这个密钥可以由CryptGenKey、CryptDeriveKey或CryptImportKey产生。也可用CryptSetKeyParam函数指定额外的加密参数。

  1. 数据加密函数 CryptEncrypt
    函数功能:使用hKey指定的密钥和算法加密数据。
  2. 数据解密函数 CryptDecrypt
    函数功能:使用hKey指定的密钥和算法对加密数据解密。
哈希和数字签名函数

CryptoAPI提供的哈希和数字签名函数包括创建哈希函数CryptCreateHash、销毁哈希CryptDestroyHash、复制哈希函数CryptDuplicateHash、获得哈希参数函数CryptGetHashParam,设置哈希参数函数CryptSetHashParam、哈希会话密钥函数 CryptHashSessionKey、哈希数据函数CryptHashData、对哈希签名函数CryptSignHash和对哈希验证签名函数CryptVerifySignature。

  1. 创建哈希函数 CryptCreateHash

    函数功能:创建哈希。

  2. 销毁哈希 CryptDestroyHash

    函数功能:销毁哈希对象。

  3. 复制哈希函数 CryptDuplicateHash

    函数功能:复制一个哈希对象。

  4. 获得哈希参数函数 CryptGetHashParam

    函数功能:获得哈希对象的参数。

  5. 设置哈希参数函数 CryptSetHashParam

    函数功能:设置哈希对象的参数。

  6. 哈希会话密钥函数 CryptHashSessionKey
    函数功能:对一个会话密钥进行哈希,把它加到指定的哈希对象中。

  7. 哈希数据函数 CryptHashData
    函数功能:对数据进行哈希操作,此函数可以反复调用。

  8. 对哈希签名函数 CryptSignHash

    函数功能:对哈希对象进行签名。

  9. 对哈希验证签名函数 CryptVerifySignature

    函数功能:验证哈希签名。

证书和证书库函数

CryptoAPI证书和证书库函数主要包括打开证书库函数CertOpenStore、关闭证书库函数CertCloseStore、从证书库枚举证书函数CertEnumCertificatesInStore、从证书库查找证书函数CertFindCertificateInStore、创建证书句柄函数 CertCreateCertificateContext、释放证书句柄函数CertFreeCertificateContext、获得证书句柄属性函数CertGetCertificateContextProperty、设置证书句柄属性函数CertSetCertificateContextProperty和获得证书主题名称函数CertGetNameString。

    1. 打开证书库函数 CertOpenStore

      函数功能:根据证书库类型,打开证书库。

    2. 关闭证书库函数 CertCloseStore

      函数功能:关闭证书库。

    3. 从证书库枚举证书函数 CertEnumCertificateslnStore
      函数功能:枚举证书库中的证书。该函数通过循环调用,可以枚举证书库内的全部证书,上一次的返回,是下一次的pPrevCertContext,直到返回值为NULL。

    4. 从证书库查找证书函数 CertFindCertificatelnStore

      函数功能:从证书库中查找指定的证书。

    5. 创建证书句柄函数 CertCreateCertificateContext

      函数功能:由证书数据创建证书句柄。

    6. 释放证书句柄函数 CertFreeCertificateContext

      函数功能:释放证书句柄。

    7. 获得证书句柄属性函数 CertGetCertificateContextProperty

      函数功能:获得证书句柄属性。

    8. 设置证书句柄属性函数 CertSetCertificateContextProperty

      函数功能:设置证书句柄属性。

    9. 获得证书主题名称函数 CertGetNameString

      函数功能:从证书中获得主题或颁发者的名称。

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

证书库函数

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

维护函数

证书函数

证书撤销列表函数

证书信任列表函数

扩展属性函数

证书验证函数
使用 CTL 的函数

证书链验证函数

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

低级消息函数

简化消息函数

辅助函数
数据管理函数

数据转换函数

增强密钥用法函数

密钥标示函数

证书库回调函数

OID 支持函数

远程对象恢复函数

PFX 函数

2.PKCS#11

函数概述

 
 
种类函数描述
通用l C_Initialize 初始化 Cryptoki
目的函数 C_Finalize 整理各种适合 Cryptoki的资源
C_GetInfo 获得关于Cryptoki的通用信息  
C_GetFunctionList 获得Cryptoki 库函数的进入点  
槽和令牌 C_GetSlotList 获得系统中槽的名单
管理 C_GetSlotInfo 获得关于特殊槽的信息
函数 C_GetTokenInfo 获得关于特殊令牌的信息
C_WaitForSlotEvent 等待槽事件(令牌插入,转移等) 的发生  
C_GetMechanismList 获得由令牌支持的机制的名单  
C_GetMechanismInfo 获得关于特殊机制的信息  
C_InitToken 初始化一个令牌  
C_InitPIN 初始化普通用户的 PIN  
C_SetPIN 改变现在用户的PIN  
会话管理函数 C_OpenSession 打开一个应用程序和特殊令牌之间的连接或安装一个应用程序呼叫返回令牌插入
C_CloseSession 关闭一个会话  
C_CloseAllSessions 用令牌关闭所有的会话  
C_GetSessionInfo 获得关于会话的信息  
C_GetOperationState 获得会话的加密操作状态  
C_SetOperationState 设置会话的加密操作状态  
C_Login 注册一个令牌  
C_Logout 从一个令牌注销  
对象管理函数 C_CreateObject 建立一个对象
C_CopyObject 建立一个对象的拷贝  
C_DestroyObject 销毁一个对象  
C_GetObjectSize 获取字节中一个对象的大小  
C_GetAttributeValue 获取一个对象的属性值  
C_SetAttributeValue 改变一个对象的属性值  
C_FindObjectsInit 初始化一个对象的搜索操作  
C_FindObjects 继续一个对象搜索操作  
C_FindObjectsFinal 完成一个对象搜索操作  
加密 C_EncryptInit 初始化一个加密操作
函数 C_Encrypt 加密单部分数据
C_EncryptUpdate 继续一个多部分加密操作  
C_EncryptFinal 完成一个多部分加密操作  
解密 C_DecryptInit 初始化一个解密操作
函数 C_Decrypt 解密单部分加密数据
C_DecryptUpdate 继续一个多部分解密操作  
C_DecryptFinal 完成一个多部分解密操作  
消息 C_DigestInit 初始化一个消息摘要操作
解密 C_Digest 摘要单部分数据
函数 C_DigestUpdate 继续一个多部分摘要操作
C_DigestKey 摘要一个密钥  
C_DigestFinal 完成一个多部分摘要操作  
签名 C_SignInit 初始化一个签名操作
和MACing C_Sign 签名单部分数据
函数 C_SignUpdate 继续一个多部分签名操作
C_SignFinal 完成一个多部分签名操作  
C_SignRecoverInit 初始化一个签名操作,在操作中数据能从签名中恢复  
C_SignRecover 签名单部分数据,在操作中数据能从签名中恢复  
鉴定函数 C_VerifyInit 初始化一个鉴定操作
签名 C_Verify 在单部分数据上鉴定一个签名
和 MACs C_VerifyUpdate 继续一个多部分鉴定操作
C_VerifyFinal 完成一个多部分鉴定操作  
C_VerifyRecoverInit 初始化一个鉴定操作,在操作中数据能从签名中恢复  
C_VerifyRecover 在单部分数据上鉴定一个签名,在操作中数据能从签名中恢复  
双效加密 C_DigestEncryptUpdate 继续类似的多部分摘要和加密操作
函数 C_DecryptDigestUpdate 继续类似的多部分解密和摘要操作
C_SignEncryptUpdate 继续类似的多部分签名和加密操作  
C_DecryptVerifyUpdate 继续类似的多部分解密和鉴定操作  
密钥 C_GenerateKey 产生一个保密密钥
管理 C_GenerateKeyPair 产生一个公共/私钥对
函数 C_WrapKey 加密一个密钥
C_UnwrapKey 解密一个密钥  
C_DeriveKey 从基础密钥派生一个密钥  
随机数字生成 C_SeedRandom 把一个附加种子材料加入随机数字生成器
函数 C_GenerateRandom 生成随机数据
并行功能管理函数 C_GetFunctionStatus 经常返回 CKR_FUNCTION_NOT_PARALLEL的遗产函数
C_CancelFunction 经常返回 CKR_FUNCTION_NOT_PARALLEL的遗产函数  
呼叫返回函数   Cryptoki中应用程序提供的处理通知的函数

根据机制标记,可以分为几类:
CKF_ENCRYPT:加密类
CKF_DECRYPT:解密类
CKF_DIGEST:摘要类
CKF_SIGN:签名类
CKF_SIGN_RECOVER:可恢复签名类
CKF_VERIFY:验证类
CKF_VERIFY_RECOVER:可恢复验证类
CKF_GENERATE:密钥产生
CKF_GENERATE_KEY_PAIR:密钥对产生
CKF_WRAP:密钥封装
CKF_UNWRAP:密钥解封
CKF_DERIVE:密钥派生

3.GMT 0016-2012






4.GMT 0018-2012






总结异同

同:大致流程相似,先连设备,进行设备操作,然后进行密钥管理,然后进行算法运算,且密码算法的大致相似,都初始化,单组操作,多组操作,结束这四步。
异:使用接口不同,Crypto API使用CSP,PKCS#11使用KI,GMT 0016-2012使用SKF,GMT 0018-2012使用SDF。

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

EncryptDecryptFile

EncrypteFile

DecryptFile

EnumCerts

Sign_Verify

PKCS#11

SKF

DevAuth
EncryptData

 

posted @ 2024-04-08 11:25  20211329史雨洁  阅读(3)  评论(0编辑  收藏  举报