首页 > 其他分享 >密码引擎3

密码引擎3

时间:2024-04-14 16:12:40浏览次数:30  
标签:加密 函数 证书 密码 引擎 密钥 数据 设备

一、微软的Crypto API

(一)研究学习

CryptoAPI 系统体系结构
Web Crypto API
Web Cryptography API
CSP开发基础--CryptoAPI函数简介

CryptoAPI是应用程序编程接口,使应用程序开发人员能够将身份验证、编码和加密添加到基于Windows的应用程序。

  1. CryptoAPI 系统体系结构由五个主要功能领域组成:基本加密函数、证书编码/解码函数、证书Microsoft Store函数、简化的消息函数、低级别消息函数。

(1)基本加密函数

  • 用于连接到云解决方案提供商的上下文函数。 这些函数使应用程序能够按名称选择特定的云解决方案提供商,或选择可以提供所需功能类的特定云解决方案提供商。
  • 用于生成和存储加密密钥的密钥生成函数。 完全支持更改 链接模式、 初始化向量和其他加密功能。 有关详细信息,请参阅密钥生成和Exchange函数
  • 用于交换或传输密钥的密钥交换函数。 有关详细信息,请参阅加密密钥存储和Exchange以及密钥生成和Exchange函数。

(2)证书编码/解码函数

(3)证书Microsoft Store函数

(4)简化的消息函数

  • 用于加密和解密消息和数据的函数。
  • 用于对消息和数据进行签名的函数。
  • 用于验证已接收消息和相关数据的签名的真实性的函数。
    有关详细信息,请参阅简化的消息简化的消息函数

(5)低级别消息函数

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

    每个功能区域在其函数名称中都有一个关键字,指示其功能区域。
功能区域 函数名称约定
基本加密函数 Crypt
编码/解码函数 Crypt
证书存储函数 存储
简化的消息函数 消息
低级别消息函数 Msg
应用程序在所有这些领域都使用函数。这些函数组合在一起,组成 CryptoAPI。 基本加密函数将 CSP 用于必要的加密算法以及加密密钥的生成和安全存储。
使用了两种不同类型的加密密钥:会话密钥(用于单个加密/解密)和公钥/私钥对,这些密钥在更永久的基础上使用。

(二)使用方式

使用CryptoAPI编写一个文件保护程序,具有如下功能:
(1)给定明文文件,生成加密文件,同时产生文件的数字签名文件;
(2)给定密文文件,解密出明文文件,并验证签名的正确性。
  在不安全的网络上进行安全的数据传输涉及三个方面的要求:信息隐藏,身份鉴别和完整性检验。CryptoAPI除了提供上述三个功能外还提供标准的ASN.1编码、解码,信息解密,数字证书和证书存储区的管理,证书信任列表、吊销列表和证书有效性检查等功能。

1.信息隐藏

信息隐藏的意义是保障信息内容只能被特定的人获取。信息隐藏通常是使用某种形式的密码学方式。数据加密算法能保障信息的安区隐藏和传输。数据加密算法是将明文数据经过一定的变换使其看上去是一组毫无意义的数据。在没有加密密钥的情况下,对于好的加密算法想从密文获取明文信息是不可能的。被加密的数据可以是任意的ASCII编码文本文件,数据库文件,和任意需要进行安全传输的数据。这里,“信息”是指任意的一段数据,“明文”是指任意一段没有被加密的数据,“密文”是指任意一段加密的数据。被加密的数据可以在不安全的通道上进行传输而不伤害其安全性。之后,密文可以被还原成明文。
  数据加密和解密的概念是:对数据加密的时候需要一个加密密钥,相当于门上的一把钥匙。解密的时候,需要使用一个解密密钥来解开数据。加密密钥、解密密钥可以相同也可以不相同。
  加密密钥必须小心保存,给其它用户的时候也必须通过安全的通道传递。对解密密钥的访问权限必须小心控制,因为拥有解密密钥意味着可以解开所有相应加密密钥加密的信息。

2.身份鉴别

安全通讯的前提是通讯的双方知道对方的身份。身份鉴别的任务就是鉴别一个用户或者实体的真实身份。标识用户身份的文档通常被称为信任状或者凭证。
  身份鉴别有时候也用来判定接受的数据就是被发送的数据。如果A向B发送了一段数据,B需要鉴别这段数据就是A发出去的,而不是其它冒充A发出去的。为了满足这类验证的需求,CryptoAPI提供数字签名和校验函数,用来对信息进行鉴别。
  因为在计算机网网络上传输的数据与用户之间并没有物理连接,因此对数据进行鉴别的凭证也必须能够在网络上进行传输。这种凭证必须由受信任的凭证发行机构发行。
  数字证书就是平常说的证书就是这种凭证,是计算机在网络上进行身份验证的有效凭证。
  数字证书是由一个被称为证书机构的信任组织或实体颁发的凭证。它包含与证书对应的用户公钥以及其它一些记录证书主题和用户信息的数据。证书机构只有在验证了证书主题和证书对应的用户公钥的有效性之后才会签发证书。
  证书申请者和证书机构之间交换签发证书信息可以使用物理介质,比如软盘,进行传输。通常,这种信息都是在计算机网络上进行完成的。证书机构使用被信任的服务程序处理用户的请求和证书的签发工作。

3.完整性检验

任何通过不安全介质传输的信息都可以被意外或蓄意的修改。在现实世界中,盖章、签名就是用来提供和证明信息完整性的工具。
  信息的接收者不但需要确定信息是由谁发送的,还要确定自己收到的信息是发送者发送的信息,而没有任何的变化。要建立数据的完整性检测机制,不仅要发送信息本身,还要发送用来校验数据的信息,这一信息通常被称作哈希值。数据和验证信息都可以与数字签名一起发送来证明其完整性。

(三)API函数

服务提供者函数

密钥的产生和交换函数

编码/解码函数

数据加密/解密函数

哈希和数字签名函数

1.2.2 证书和证书库函数

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

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


维护函数

证书函数


证书撤销列表函数

1.2.3 证书验证函数

证书验证是通过CTL 和证书列表进行的.
使用CTL的函数

证书链验证函数

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

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

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

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

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

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

数据加密和解密的概念是:对数据加密的时候需要一个加密密钥,相当于门上的一把钥匙。解密的时候,需要使用一个解密密钥来解开数据。加密密钥、解密密钥可以相同也可以不相同。
加密密钥必须小心保存,给其它用户的时候也必须通过安全的通道传递。对解密密钥的访问权限必须小心控制,因为拥有解密密钥意味着可以解开所有相应加密密钥加密的信息。

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

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

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

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

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

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

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

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

二、RAS公司的PKCS#11标准

PKCS#11概述

PKCS#11是公钥加密标准Public-Key Cryptography Standards中的一份子,由RSA实验室发布。

PKCS#11标准定义了与密码令牌的独立于平台的API,API本身命名为Cryptoki,这个API已经发展成为一个通用的加密令牌的抽象层。

PKCS#11主要是应用于智能卡和HSM。

PKCS#11为使用加密Token的应用程序提供统一的编程接口,独立于设备,屏蔽加密设备的复杂性,应用程序可以方便地更换设备。

中国商用密码标准:GMT 0016-2012 智能密码钥匙密码应用接口规范,GMT 0018-2012密码设备应用接口规范等

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

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

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

API函数

设备管理系列函数

概述

    设备管理主要完成设备的插拔事件处理、枚举设备、连接设备、断开连接、获取设备状态、设置设备标签、获取设备信息、锁定设备、解锁设备和设备命令传输等操作。设备管理系列函数如下表所示:

1、等待设备插拔事件

函数原型:ULONG DEVAPI SKF_WaitForDevEvent(LPSTR szDevName,ULONG *pulDevNameLen, ULONG *pulEvent)
功能描述:该函数等待设备插入或者拔除事件。szDevName返回发生事件的设备名称。
参 数:szDevName:[OUT] 发生事件的设备名称。
pulDevNameLen:[IN/OUT] 输入/输出参数,当输入时表示缓冲区长度,输出时表示设备名称的有效长度,长度包含字符串结束符。
pulEvent:[OUT]事件类型。1表示插入,2表示拔出。
返 回 值:SAR_OK:成功;其他:错误码。

2、取消等待设备插拔事件

函数原型:ULONG DEVAPI SKF_CancelWaitForDevEvent()
功能描述:该函数取消等待设备插入或者拔除事件。
参 数:无
返 回 值:SAR_OK:成功;其他:错误码。
备 注:使本进程正在执行的SKF_WaitForDevEvent函数立即返回。

3、枚举设备

函数原型:ULONG DEVAPI SKF_EnumDev(BOOL bPresent, LPSTR szNameList, ULONG *pulSize)
功能描述:获得当前系统中的设备列表。
参 数:bPresent:[IN] 为TRUE表示取当前设备状态为存在的设备列表。为FALSE表示取当前驱动支持的设备列表。
szNameList:[OUT] 设备名称列表。如果该参数为NULL,将由pulSize返回所需要的内存空间大小。每个设备的名称以单个‘\0’结束,以双‘\0’表示列表的结束。
pulSize:[IN,OUT] 输入时表示设备名称列表的缓冲区长度,输出时表示szNameList所占用的空间大小。
返 回 值:SAR_OK:成功;其他:错误码。

4、连接设备

函数原型:ULONG DEVAPI SKF_ConnectDev (LPSTR szName, DEVHANDLE *phDev)
功能描述:通过设备名称连接设备,返回设备的句柄。
参 数:szName: [IN] 设备名称。
phDev:[OUT] 返回设备操作句柄。
返 回 值:SAR_OK:成功;其他:错误码。

5、断开连接

函数原型:ULONG DEVAPI SKF_DisConnectDev (DEVHANDLE hDev)
功能描述:断开一个已经连接的设备,并释放句柄。
参 数:hDev:[IN] 连接设备时返回的设备句柄。
返 回 值:SAR_OK:成功;其他:错误码。
备 注:如果该设备已被锁定,函数应首先解锁该设备。断开连接操作并不影响设备的权限状态。

6、获取设备状态

函数原型:ULONG DEVAPI SKF_GetDevState(LPSTR szDevName, ULONG *pulDevState)
功能描述:获取设备是否存在的状态。
参 数:szDevName:[IN] 设备名称。
pulDevState:[OUT] 返回设备状态。
返 回 值:SAR_OK:成功;其他:错误码。

7、设置设备标签

函数原型:ULONG DEVAPI SKF_SetLabel (DEVHANDLE hDev, LPSTR szLabel)
功能描述:设置设备标签。
参 数:hDev:[IN] 连接设备时返回的设备句柄。
szLabel:[IN] 设备标签字符串。该字符串应小于32字节。
返 回 值:SAR_OK:成功;其他:错误码。

8、获取设备信息

函数原型:ULONG DEVAPI SKF_GetDevInfo (DEVHANDLE hDev, DEVINFO *pDevInfo)
功能描述:获取设备的一些特征信息,包括设备标签、厂商信息、支持的算法等。
参 数:hDev:[IN] 连接设备时返回的设备句柄。
pDevInfo:[OUT] 返回设备信息。
返 回 值:SAR_OK:成功;其他:错误码。

9、锁定设备

函数原型:ULONG DEVAPI SKF_LockDev (DEVHANDLE hDev, ULONG ulTimeOut)
功能描述:获得设备的独占使用权。
参 数:hDev:[IN] 连接设备时返回的设备句柄。
ulTimeOut:[IN] 超时时间,单位为毫秒。如果为0xFFFFFFFF表示无限等待。
返 回 值:SAR_OK:成功;其他:错误码。

10、解锁设备

函数原型:ULONG DEVAPI SKF_UnlockDev (DEVHANDLE hDev)
功能描述:释放对设备的独占使用权。
参 数:hDev:[IN] 连接设备时返回的设备句柄。
返 回 值:SAR_OK:成功;其他:错误码。

11、设备命令传输

函数原型:ULONG DEVAPI SKF_Transmit(DEVHANDLE hDev, BYTE* pbCommand, ULONG ulCommandLen,BYTE* pbData, ULONG* pulDataLen)
功能描述:将命令直接发送给设备,并返回结果。
参 数:hDev:[IN] 设备句柄。
pbCommand:[IN] 设备命令。
ulCommandLen:[IN] 命令长度。
pbData:[OUT] 返回结果数据。
pulDataLen:[IN,OUT] 输入时表示结果数据缓冲区长度,输出时表示结果数据实际长度。
返 回 值:SAR_OK:成功;其他:错误码。

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

(一)SKF接口





(二)PKCS#11

  • DES

  • RAS

标签:加密,函数,证书,密码,引擎,密钥,数据,设备
From: https://www.cnblogs.com/wzj1234/p/18134252

相关文章

  • 实验一-密码引擎-3-加密API研究
    实验一-密码引擎-3-加密API研究任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key......
  • ansible 修改密码
    hosts[centos-root]192.168.174.129ansible_ssh_port=22192.168.174.130ansible_ssh_port=22192.168.174.131ansible_ssh_port=22AnsibleVault文件创建AnsibleVault文件#ansible-vaultcreatepasswords.ymlNewVaultpassword:#123456......
  • 读所罗门的密码笔记19_治理模式
    1. 解决方案1.1. 全球人工智能的环境错综复杂,它严重依赖于价值观,且关系重大1.2. 即使是与大家同仇敌忾的问题做斗争,也往往无法在国际社会中取得最佳效果1.3. OPCW(禁止化学武器组织)已经帮助限制了化学武器的开发和部署,但没有协议是百分百奏效的1.4. 如果《核不扩散条约》......
  • 实验一-密码引擎-3-加密API研究
    任务要求密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交博客......
  • 密码引擎-加密API研究
    任务详细密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交......
  • 实验一-密码引擎-3-加密API研究
    一、微软的CryptoAPI参考网站:https://learn.microsoft.com/zh-cn/windows/win32/seccrypto/cryptoapi-system-architecturehttps://developer.mozilla.org/zh-CN/docs/Web/API/Web_Crypto_APIhttps://www.w3.org/TR/2017/REC-WebCryptoAPI-20170126/https://blog.csdn.net/l......
  • 2022年4月树莓派系统初始用户名和密码
    最新版的树莓派系统(2022年4月发布的),没有了初始化的用户名和密码,以前用户名是pi,密码是raspberry,但是这次需要进系统之后才能设置。那如果手头没有屏幕无法操作的话,可以在往tf卡里刷好系统之后,新建一个文件,来设置初始话账号密码。文件名:userconf.txt文件内写入:pi:$6$/4.VdYgDm7......
  • 读所罗门的密码笔记18_大宪章
    1. 大宪章1.1. 1215年会议开启了一个艰难的谈判过程,充满了紧张和对权力与道德权威的争夺1.1.1. 这部宪章会赋予各方一系列的权力,对国王的自由裁量权进行制衡1.2. 《大宪章》还需要300多年的时间和多次迭代,才能成为财产权、公平税收、司法程序和政府最高法律的参考文件1.3......
  • ssh免密码登陆避免首次需要输入yes
    看下面,默认连接需要输入yes服务器多了之后一台一台去输入yes肯定也不现实。太麻烦了[root@ansible~]#ssh-keygen[root@ansible~]#ssh10.0.0.31[root@ansible~]#ssh-copy-id10.0.0.31/usr/bin/ssh-copy-id:INFO:Sourceofkey(s)tobeinstalled:"/root/.ssh/id_......
  • 【虚幻引擎】DTProjectSettings 蓝图获取基本项目配置插件使用说明 获取项目命名,项目
    本插件可以使用蓝图获取到项目的一些基本配置,如获取:公司名、公司识别名、版权声明、描述、主页、许可条款、隐私政策、项目ID、项目命名、项目版本、支持联系方式、项目显示标题、项目调试标题信息、应保留窗口宽高比、使用无边框窗口、以VR启动、允许窗口重设大小、允许关闭、允......