首页 > 其他分享 >加密API研究

加密API研究

时间:2024-04-11 14:22:06浏览次数:27  
标签:加密 研究 RSA 会话 SDF API 密钥

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

(1)Crypto API:
CryptoAPI是微软Windows系统提供的一个应用程序编程接口,旨在让开发者能够轻松地对敏感数据进行加密或数字签名,以保护用户的私钥信息。这套API提供了一系列函数,而实际的加密工作则由专门的加密服务提供程序(CSP)来完成。微软通过集成RSA Base Provider,在操作系统层面提供了一个CSP,该CSP基于RSA公司的公钥加密算法。此外,开发者还可以根据需要添加更多的CSP,甚至与特定的硬件设备(如智能卡)结合使用,以增强数据加密的能力。CryptoAPI不仅支持简单的加密和公钥交换操作,还能用于创建消息摘要和数字签名,并提供了高级的CSP管理功能。它是许多高级安全服务的基础,如SET(用于电子商务)、PCT(用于加密客户机/服务器消息)、PFX(用于跨平台传输机密数据和密钥)以及代码签名等。

(2)PKCS#11:
PKCS#11是一个定义了与密码令牌(如硬件安全模块和智能卡)交互的平台无关API的标准。这个API被称为“Cryptoki”,它涵盖了最常用的加密对象类型(如RSA密钥、X.509证书、DES/三重DES密钥等),并提供了创建、使用、修改和删除这些对象所需的功能。PKCS#11是公钥加密标准(PKCS)的一部分,由RSA实验室发布。由于市场上没有统一的加密令牌标准,PKCS#11 API已经演变成为一个通用的加密令牌抽象层。需要注意的是,PKCS#11只定义了接口规范,具体的实现则由设备供应商(如USB密钥制造商)来提供。这样,开发者只需通过这组接口调用相应的API函数,即可实现与各种加密令牌的交互。

(3)GMT 0016-2012:
该标准详细规定了基于PKI密码体制的智能密码钥匙的密码应用接口,包括接口函数、数据类型、参数定义以及设备安全要求等方面的内容。它适用于智能密码钥匙产品的研发、使用和检测,为相关应用提供了统一的接口标准和安全要求,确保密码应用的安全性和可靠性。

(4)GMT 0018-2012:
该标准针对公钥密码基础设施应用技术体系下的服务类密码设备,规定了其应用接口的标准。这些接口标准适用于服务类密码设备的研制和使用,以及基于这类密码设备的应用开发。同时,它也为该类密码设备的检测提供了指导,确保密码设备在应用中能够满足相应的安全要求,为信息安全提供了有力保障。

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

 

CryptoAPI是Windows平台上广泛应用的加密接口。在编程时,开发者可以直接调用CryptoAPI提供的函数来执行加密、解密、数字签名等操作。这些函数封装了复杂的加密算法和协议,使得开发者无需深入了解底层的加密原理,即可轻松实现安全的数据传输和存储。CryptoAPI还支持多种CSP的插入和管理,使得开发者可以根据实际需求选择适合的加密服务提供程序,提高系统的灵活性和安全性。

PKCS#11是一个跨平台的加密令牌接口标准。在编程中,开发者可以通过PKCS#11接口与各种密码令牌(如HSM和智能卡)进行交互。这意味着开发者可以编写与特定硬件设备无关的代码,通过PKCS#11接口调用硬件设备的加密功能。这种方式不仅提高了代码的可移植性,还充分利用了硬件设备的性能优势,提升了加密操作的速度和安全性。

GMT 0016-2012和GMT 0018-2012则是针对智能密码钥匙和服务类密码设备的应用接口标准。在编程中,这些标准规定了与这些设备交互的规范和数据格式。开发者需要根据这些标准编写相应的代码,通过调用接口函数来实现与设备的通信和数据传输。这些接口函数通常包括设备初始化、密钥管理、数据加密解密等操作,开发者可以根据具体需求选择合适的函数来实现所需的功能。

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

CryptoAPI函数分类与特点:

  1. 基本加密函数:包括密钥生成、加密、解密、签名和验证等操作。这些函数提供了基础的加密功能,用于保护数据的机密性、完整性和真实性。
  2. 证书编解码函数:用于证书的编码和解码操作,方便证书的存储和传输。
  3. 证书库管理函数:管理证书库的创建、访问和删除等操作,确保证书的安全存储和使用。

PKCS#11函数分类与特点:

  1. 令牌管理函数:初始化令牌、获取令牌信息、结束令牌会话等操作,控制对令牌的访问和使用。
  2. 会话管理函数:创建会话、关闭会话、获取会话信息等,管理加密操作的上下文环境。
  3. 对象管理函数:创建、读取、修改和删除密钥、证书等加密对象,实现对加密资源的操作和管理。

GMT 0016-2012和GMT 0018-2012函数分类与特点:

这两个标准主要规定了与智能密码钥匙和服务类密码设备交互的接口函数,包括设备初始化、密钥管理、数据加密解密等操作。这些函数通常与特定的硬件设备相关,用于实现与设备的通信和数据传输。

 

 

 

主要函数:
主函数

void main(void)

加密文件

BOOL EncryptFile(PCHAR szSource, PCHAR szDestination, PCHAR szPassword);

解密文件

BOOL DecryptFile(PCHAR szSource, PCHAR szDestination, PCHAR szPassword);

签名文件

BOOL SignFile (PCHAR szSource, PCHAR szDestination);

验证签名

BOOL VerifyFile (PCHAR szSource, PCHAR szDestination);

错误处理

void HandleError(char *s);
设备管理类函数

设备管理类函数包括以下具体函数:
A.打开设备:SDF_OpenDevice
B.关闭设备:SDF_CloseDevice
C.创建会话:SDF_OpenSession
D.关闭会话:SDF_CloseSession
E.获取设备信息:SDF_GetDeviceInfo
F.产生随机数:SDF_GenerateRandom
G.获取私钥使用权限:SDF_GetPrivateKeyAccessRight
H.释放私钥使用权限: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_GenerateKeyWiuhECC
产生协商数据并计算会话密钥∶SDF_GenerateAgreementDataAndKeyWithECC
基于 ECC算法的数字信封转换∶SDF_ExchangeDigitEnvelopeBaseOnECC
生成会话密钥并用密钥加密密钥加密输出∶SDF_GenerateKeyWithKEK
导入会话密钥并用密钥加密密钥解密∶SDF_ImportKeyWithKEK
销毁会话密钥∶SDF_DestroyKey

异同总结:

  • 相同点:
    • 这些API都提供了加密、解密、签名和验证等基础的加密功能,用于保护数据的机密性和完整性。
    • 它们都支持对密钥和证书的管理,确保加密资源的安全存储和使用。
    • 这些API都通过提供统一的接口和规范,简化了开发者在实现安全功能时的复杂度。
  • 不同点:
    • CryptoAPI是Windows平台特有的加密接口,与操作系统紧密集成,提供了一组丰富的函数来满足各种加密需求。
    • PKCS#11是一个跨平台的加密令牌接口标准,主要关注与硬件设备的交互,提供了与各种密码令牌通信的接口函数。
    • GMT 0016-2012和GMT 0018-2012则是针对智能密码钥匙和服务类密码设备的应用接口标准,其函数通常与特定的硬件设备相关,用于实现与设备的通信和数据传输。
    • CryptoAPI和PKCS#11在编程中的使用更加灵活,可以应用于各种加密场景,而GMT标准则更侧重于与特定设备的交互。
3 以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接

 Crypto API

 

 PKCS#11

 

 

 

 

 

 

 

 

SKF

 

标签:加密,研究,RSA,会话,SDF,API,密钥
From: https://www.cnblogs.com/chen-zeyang/p/18120531

相关文章

  • 淘宝详情API接口文档(java)get调用
    淘宝详情API接口是用于获取淘宝商品详细信息的接口,它允许开发者通过发送请求,获取商品的描述、价格、评价等信息。下面是一个关于淘宝详情API接口的示例文档,包括接口地址、请求参数、响应参数等内容。淘宝详情API接口文档一、接口地址https://api-gw.onebound.cn/taobao/item_ge......
  • ansible python API
    version:v2.9官方示例如下:点击查看代码#!/usr/bin/envpythonfrom__future__import(absolute_import,division,print_function)__metaclass__=typeimportjsonimportshutilimportansible.constantsasCfromansible.executor.task_queue_managerimportT......
  • 211高校研究生招生信息网
    省份学校北京清华大学                 上海               ......
  • Cisco APIC 6.0(5h) M - 应用策略基础设施控制器
    CiscoAPIC6.0(5h)M-应用策略基础设施控制器ApplicationPolicyInfrastructureController(APIC)请访问原文链接:CiscoAPIC6.0(5h)M-应用策略基础设施控制器,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org思科应用策略基础设施控制器(APIC)CiscoNX-OS......
  • 漫谈:编码、哈希、摘要、加密都是什么(别再问“用base64加密行不行”了,会被鄙视)
    初级代码游戏的专栏介绍与文章目录-CSDN博客我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。    刚接触加密领域的新手经常搞不清楚这几个概念,这里给大......
  • JAVA学习-深入研究容器.选择接口的不同实现
        Java集合框架提供了多个接口,每个接口都有不同的实现类,以满足不同的需求。以下是几个常用接口及其不同的实现类的概述:1.List接口:  -特点:有序集合,允许重复元素。  -实现类:ArrayList、LinkedList、Vector。  -使用方法:使用add()方法添加元素,使用g......
  • 为什么每个人都需要了解这些数据加密技术?
    在数字时代,数据加密技术不仅对保护企业的商业秘密至关重要,也是个人隐私安全的重要屏障。随着技术的进步和网络犯罪的增加,数据加密已经成为了信息安全领域的一个热点议题。以下是探讨为什么每个人都需要了解这些数据加密技术的几个主要原因:个人隐私保护:在我们日常的在线活动中,个......
  • [Web逆向] 一个在线php加密文件的解密【转载】
    转自:https://www.52pojie.cn/thread-1912173-1-1.html免费加密网站:aHR0cDovL2RlcGhwLm5ldC9lbmNyeXB0Lmh0bWw=加密前代码:[PHP]纯文本查看复制代码<?php  echo"请破我!"?><?php  echo"<br/>我爱破姐!"?>运行如下:image.png(13.92KB,下载次数:......
  • App Store 警告 ITMS-91053: Missing API declaration
    问题:app虽然成功上架AppStore,但是邮件提示了如下警告:解决:解决方法是添加隐私清单文件。参考官方说明:官方文档其它相关链接:StackOverflow中关于这个问题的讨论这位作者分享了如何解决该问题这篇文章提供了解决该问题详细的指南......
  • python-API开发zk客户端
    前面于超老师讲完了,zk运维的基本命令行玩法,更多的还是开发需要通过代码和zk结合处理。大多数场景是java后端去操作。这里我们以运维更友好的python来学习。1.kazoo模块zookeeper是一个用于维护配置信息、命名、提供分布式同步和提供组服务。它自身是高可用的,只要宕机节点不......