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

密码引擎-3-加密API研究

时间:2024-04-08 11:24:29浏览次数:27  
标签:API 加密 函数 RSA SDF 引擎 密钥 ECC

微软的Crypto API

资料查询和学习

  • 微软公司在NT4.0以上版本中提供了一套完整的Crypto API的函数,支持密钥交换,数据加密解密,数字签名,给程序员带来了很大方便,用户在对软件进行保护的时候可以直接利用Crypto API来完成这些工作,比如计算注册码,检查程序的完整性等。在用这些API进行加密解密的时候,只需要知道如何去应用它们,而不必知道它们的底层实现。首先,是Crypto API运行的环境,需要Crypt32.lib,将它加到project->setting->link下面,也可以在程序中用#pragma comment (lib, "crypt32.lib")加入。在程序开头,你要加入两个头文件windows.hWincrypt.h,和一个#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)。
  • CryptoAPI的编程模型同Windows系统的图形设备接口 GDI比较类似,其中加密服务提供者CSP等同于图形设备驱动程序 ,加密硬件(可选)等同于图形硬件,其上层的应用程序也类似,都不需要同设备驱动程序和硬件直接打交道。
  • CryptoAPI共有五部分组成:简单消息函数(Simplified Message Functions)、低层消息函数(Low-level Message Functions)、基本加密函数(Base Cryptographic Functions)、证书编解码函数(Certificate Encode/Decode Functions)和证书库管理函数(Certificate Store Functions)。其中前三者可用于对敏感信息进行加密或签名处理,可保证网络传输信心的私有性;后两者通过对证书的使用,可保证网络信息交流中的认证性。CSP是真正实行加密的独立模块,可以由软件实现也可以由硬件实现。CSP必须符合CryptoAPI接口的规范。每个CSP都有一个名字和一个类型。每个CSP的名字是唯一的,这样便于CryptoAPI找到对应的CSP。目前已经有9种CSP类型,并且还在增长。
  • 9种CSP类型及其支持算法

使用方法总结

生成密钥和密钥容器

  • 在进行加密解密的时候,需要一个密钥进行加密,一个密钥进行解密,加密密钥和解密密钥可能相同,也可能不同。于是在我们进行加密解密的开始时,我们首先需要有密钥,按步进行下面三个步骤:
    • 获取一个指定的密钥容器,如果不存在,创建一个;
    • 如果容器中不存在一个签名密钥对,创建一个;
    • 如果容器中不存在一个交换密钥对,创建一个。

获取密钥

  • 首先需要获取一个session key,即对话密钥,是对称密钥;当我们已经生成了一个密钥,下面要做的是如何保存,导出,导入一个对话密钥。将一个密钥保存起来,导出,保存到硬盘上。这样,这个密钥就可以在其它应用程序上使用,而不会随着生成密钥程序的关闭而丢失;

进行加密

API函数及分类

基本加密函数

  • 服务提供者函数:应用程序使用服务提供者函数来连接和断开一个CSP,主要API如下图:
  • 密钥的产生和交换函数:密钥产生函数创建、配置和销毁加密密钥,也用于和其他用户进行交换密钥,主要API如下图所示:
  • 编码/解码函数:有一些编码/解码函数,他们可以用来对证书、证书撤销列表、证书请求和证书扩展进行编码和解码。
  • 数据加密/解密函数:这些函数支持数据的加密/解密操作。CryptEncrypt 和CryptDecrypt 要求在被调用前指定一个密钥。这个密钥可以由CryptGenKey、CryptDeriveKey 或CryptImportKey 产生。创建密钥时要指定加密算法。
  • 哈希和数字签名函数:这些函数在应用程序中完成计算哈希、创建和校验数字签名。

证书和证书库函数

  • 证书库函数

  • 维护函数
  • 证书函数

  • 证书撤销列表函数
  • 证书信任列表函数
  • 拓展属性函数

消息函数

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

证书验证函数

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

辅助函数

  • 数据管理函数

  • 数据转化函数
  • 增强秘钥用法函数
  • 秘钥标识函数
  • 证书库回调函数

  • OID支持函数
  • 远程对象回复函数
  • PFX函数

RAS公司的PKCS#11标准

资料查询和学习

  • PKCS#11是公钥加密标准Public-Key Cryptography Standards中的一份子,由RSA实验室发布。PKCS#11是使用非常普遍的密码设备接口,在实际应用中,国密的密码设备应用接口规范GMT0018与之作用相同,在技术体系架构中处于类似的位置。在密码产品的开发中,按照PKCS#11或者GMT0018接口规范提供相应的接口封装,应用程序无需改动或者微小改动就可以更换底层密码设备。PKCS#11标准定义了与密码令牌的独立于平台的API,API本身命名为Cryptoki,这个API已经发展成为一个通用的加密令牌的抽象层。PKCS#11主要是应用于智能卡和HSM。

使用方式总结

Cryptoki模型

Cryptoki:Cryptographic Token Interface Standard 密码令牌接口标准,应用程序与各种各样便携式密码设备间的一种接口。设备的种类和所支持的能力的种类取决于专用的Cryptoki库。该标准只定义库的接口,不定义库的实现,接口实现由设备商提供。Cryptoki主要目标是一个低级程序接口,将设备的细节抽象化,并把密码设备的通用模型-密码令牌提供给应用程序。第二目标是资源共享,单个设备能为一个以上的应用程序共享。Cryptoki为一个或多个密码设备提供一个接口,这些设备通过大量的槽在系统中运行,密码设备可以按照某一命令集执行某些密码操作,这些命令通常通过标准的设备驱动程序来实现,Cryptoki的作用就是屏蔽这些硬件的差异。

令牌逻辑视图

Cryptoki定义数据、证书、密钥三个对象。数据对象由应用程序定义。一个证书对象存储一个证书。一个密钥对象存储一个密码密钥。密钥可以使公共密钥、私钥、保密密钥,每种密钥用于特定的机制时都有其子类型。令牌能建立、破坏、操作和搜寻对象,也可以对对象执行加密功能

主要接口函数

通用接口

  • 槽和令牌管理

回话管理

对象管理

加密函数

解密函数

消息摘要

签名和MAC

验证签名和MAC

秘钥管理

随机数生成

GMT 0016-2012 智能密码钥匙密码应用接口规范

资料查询和学习

智能密码钥匙实现实现密码运算、密钥管理功能的终端密码设备,一般使用 USB 接口形态。密码算法至少支持公钥密码算法、分组密码算法和杂凑算法。

使用方法总结

主要接口函数

设备管理函数

访问控制函数

应用管理函数

文件管理函数

容器管理函数

密码服务函数

GMT 0018-2012密码设备应用接口规范

资料查询和学习

使用方式总结

主要接口函数

设备管理函数

  • 打开设备:SDF_OpenDevice
  • 关闭设备:SDF_CloseDevice
  • 创建会话:SDF_OpenSession
  • 关闭会话:SDF_CloseSession
  • 获取设备信息:SDF_GetDeviceInfo
  • 产生随机数:SDF_GenerateRandom
  • 获取私钥使用权限:SDF_GetPrivateKeyAccessRight
  • 释放私钥使用权限:SDF_ReleasePrivateKeyAccessRight

密钥管理函数

  • 导出RSA签名公钥:SDF_ExportSignPublicKey_RSA
  • 导出RSA加密公钥:SDF_ExportEncPublicKey_RSA
  • 产生RSA非对称密钥对并输出:SDF_GenerateKeyPair_RSA
  • 生成会话密钥并用内部RSA公钥加密输出:SDF_GenerateKeyWithIPK_RSA
  • 生成会话密钥并用外部RSA公钥加密输出:SDF_GenerateKeyWithEPK_RSA
  • 导入会话密钥并用内部RSA私钥解密:SDF_ImportKeyWithISK_RSA
  • 基于RSA算法的数字信封转换:SDF_ExchangeDigitEnvelopeBaseOnRSA
  • 导出ECC签名公钥:SDF_ExportSignPublicKey_ECC
  • 导出ECC加密公钥:SDF_ExportEncPublicKey_ECC
  • 产生ECC非对称密钥对并输出:SDF_GenerateKeyPair_ECC
  • 生成会话密钥并用内部ECC公钥加密输出:SDF_GenerateKeyWithIPK_ECC
  • 生成会话密钥并用外部ECC公钥加密输出:SDF_GenerateKeyWithEPK_ECC
  • 导入会话密钥并用内部ECC私钥解密:SDF_ImportKeyWithISK_ECC
  • 生成密钥协商参数并输出:SDF_GenerateAgreementDataWithECC
  • 计算会话密钥:SDF_GenerateKeyWithECC
  • 产生协商数据并计算会话密钥:SDF_GenerateAgreementDataAndKeyWithECC
  • 基于ECC算法的数字信封转换:SDF_ExchangeDigitEnvelopeBaseOnECC
  • 生成会话密钥并用密钥加密密钥加密输出:SDF_GenerateKeyWithKEK
  • 导入会话密钥并用密钥加密密钥解密:SDF_ImportKeyWithKEK
  • 导入明文会话密钥:SDF_ImportKey
  • 销毁会话密钥:SDF_DestroyKey

非对称算法函数

  • 外部公钥RSA运算:SDF_ExternalPublicKeyOperation_RSA
  • 外部私钥RSA运算:SDF_ExternalPrivateKeyOperation_RSA
  • 内部公钥RSA运算:SDF_InternalPublicKeyOperation_RSA
  • 内部私钥RSA运算:SDF_InternalPrivateKeyOperation_RSA
  • 外部密钥ECC签名:SDF_ExternalSign_ECC
  • 外部密钥ECC验证:SDF_ExternalVerify_ECC
  • 内部密钥ECC签名:SDF_InternalSign_ECC
  • 内部密钥ECC验证:SDF_InternalVerify_ECC
  • 外部密钥ECC加密:SDF_ExternalEncrypt_ECC
  • 外部密钥ECC解密:SDF_ExternalDecrypt_ECC

对称算法函数

  • 对称加密:SDF_Encrypt
  • 对称解密:SDF_Decrypt
  • 计算MAC:SDF_CalculateMAC

杂凑算法函数

  • 杂凑运算初始化:SDF_HashInit
  • 多包杂凑运算:SDF_HashUpdate
  • 杂凑运算结束:SDF_HashFinal

文件操作函数

  • 创建文件:SDF_CreateFile
  • 读取文件:SDF_ReadFile
  • 写文件:SDF_WriteFile
  • 删除文件:SDF_DeleteFile

实例运用

Crypto API 接口

代码链接:Download\龙脉密码钥匙驱动实例工具等\mToken-GM3000\csp\samples\CryptAPI\VC\EncryptDecryptFile\EncryptFile.sln

运行截图

创建原文件

加密

结果

SKF接口

代码链接:龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\windows\EncryptData\EncryptData.sln

运行截图

PKCS#11 接口

代码链接:龙脉密码钥匙驱动实例工具等\mToken-GM3000\pkcs11\windows\samples\PKCStest\PKCStest.sln

DES


DES3


RC2


RC4


RSA


AES


标签:API,加密,函数,RSA,SDF,引擎,密钥,ECC
From: https://www.cnblogs.com/gao0818/p/18120727

相关文章

  • 20211314 实验一-密码引擎-3-加密API研究
    任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交博客......
  • 实验一-密码引擎-加密API研究
    实验一-密码引擎-加密API研究密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用......
  • 密码引擎-加密API研究
    CryptoAPI0查找各种标准的原始文档,研究学习作为一部分MicrosoftWindows提供的应用程序编程接口(API),CryptoAPI提供了一组函数。这些函数允许应用程序在对用户的敏感私钥数据提供保护时,以灵活的方式对数据进行加密或数字签名。实际的加密操作是由称为加密服务提供程序(C......
  • Midjourney api 国内对接使用教程
    项目背景众所周知,Midjourney并没有提供任何的Api服务,但是基于Midjourney目前的行业龙头位置,很多企业以及个人会有相关的需求。TTApi平台基于Midjourney现有功能整理出一套完整的可集成性高的服务,如果你有类似的需求,那么恭喜你找到了正确的使用方式。新用户注册免费送100配......
  • 实验一-密码引擎-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.......
  • 如何用加密技术守护你的数字世界(4):非对称加密
    该文章Github地址:https://github.com/AntonyCheng/encryption-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况......
  • 如何用加密技术守护你的数字世界(2):对称加密
    该文章Github地址:https://github.com/AntonyCheng/encryption-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况......
  • 如何用加密技术守护你的数字世界(5):单向散列函数
    该文章Github地址:https://github.com/AntonyCheng/encryption-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况......
  • SHOPEE虾皮API接口:高效获取搜索栏生成的商品结果列表
    一、什么是SHOPEE虾皮API接口?通过SHOPEE虾皮API接口,开发者能够与SHOPEE虾皮平台实现数据交互,获取商品信息、订单数据等,为电商卖家、数据分析师等提供强大的数据支持。二、SHOPEE虾皮API接口核心功能——获取搜索栏生成的商品结果列表我们的SHOPEE虾皮API接口的核心功能是获......
  • 白嫖 kimi.ai 的 API 接口,给这个开源项目点赞!
    Kimi是当前国内相当火爆的AI产品,输出结果和使用体验都非常不错。Kimi开放了API接口,新用户注册后会免费赠送15元额度。KimiAPI的网址:platform.moonshot.cn/console这是光明正大的白嫖方式,一定不要错过哦。如果赠送额度用完了,你还想继续免费体验,那么,下面的这......