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

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

时间:2023-04-04 10:33:58浏览次数:42  
标签:加密 函数 -- 密码 mToken API samples 20201313 CSP

目录

微软的CryptoAPI加密技术

功能:为应用程序开发者提供在Win32环境下使用加密、验证等安全服务时的标准加密接口。CryptoAPI处于应用程序和CSP(cryptographic service provider)之间。CryptoAPI共有五部分组成:简单消息函数(Simplified Message Functions)、低层消息函数(Low-level Message Functions)、基本加密函数(Base Cryptographic Functions)、证书编解码函数(Certificate Encode/Decode Functions)和证书库管理函数(Certificate Store Functions)。其中前三者可用于对敏感信息进行加密或签名处理,可保证网络传输信心的私有性;后两者通过对证书的使用,可保证网络信息交流中的认证性。

基本加密函数:为开发加密应用程序提供了足够灵活的空间。所有CSP 的通讯都是通过这些函数。

编码/解码函数:用来对证书、证书撤销列表、证书请求和证书扩展进行编码和解码。

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

低级消息函数:

简化消息函数:

CSP:真正实行加密的独立模块,既可以由软件实现也可以由硬件实现。但是他必须符合CryptoAPI接口的规范。

创建密钥容器,得到CSP句柄:每一个CSP都有一个名字和一个类型,并且名字保证唯一。所以可以通过名字和类型得到一个CSP。然而,要想加密肯定需要密钥,密钥放在密钥容器。密钥容器并不是一开始就存在的,需要用户去创建。下面是创建容器的代码:

if(CryptAcquireContext(
&hCryptProv, // 返回CSP句柄
UserName, // 密码容器名
NULL, // NULL时使用默认CSP名(微软RSA Base Provider)
PROV_RSA_FULL, // CSP类型
0)) // Flag values
{
//以UserName为名的密钥容器存在,那么我们已经得到了CSP的句柄
printf("A crypto context with the %s key container \n", UserName);
printf("has been acquired.\n\n");
}
else //如果密钥容器不存在,我们需要创建这个密钥容器
{
if(CryptAcquireContext(
&hCryptProv,
UserName,
NULL,
PROV_RSA_FULL,
CRYPT_NEWKEYSET)) //创建以UserName为名的密钥容器
{
//创建密钥容器成功,并得到CSP句柄
printf("A new key container has been created.\n");
}
else
{
HandleError("Could not create a new key container.\n");
}
} // End of else

使用CryptoAPI加密解密:windows crypto API提供了对称加密和非对称加密,并且提供了各种加密、解密的算法,要使用相应的算法进行加密解密,只需要对生成密钥的函数的相关参数改变一下即可。

PKCS#11及CSP接口标准

PKCS#11(简称P11)是针对密码设备的接口指令标准。P11模型中重要的概念之一是slot,也称为槽。一个slot为一个密码设备对象。某个打开的slot会话称之为session。Session之间存在不同的验证权限。而同一个slot的不同的session之间存在操作的互相影响性,同时在某些状况下,权限会发生同步。另外一个重要的概念是对象。P11中支持几种重要的对象,如公钥、私钥、对称密钥,数据对象等。PKCS#11创建和支持下列对象:

img

PKCS#11的对象可根据其生命期长短的不同分成两大类:一类是持久存储的类对象,这类对象被保存在USB Key的安全存储区域当中,直到应用程序主动删除这些对象;另一类是会话对象,这类对象只存在于运行时建立的特定会话(Session对象)当中,一旦会话结束,这类对象也跟着被删除。决定对象生命期的模板属性是CKA_TOKEN,这是个布尔值,所有的对象都有这一属性。当该值为TRUE时,该对象将被保存到Key内的存储空间,否则,该对象保存在会话空间中,当会话结束后,该对象即销毁。P11标准颁发了70余条指令。其中部分指令简介如下表:

PKCS#11架构

GMT 0016-2012

这个标准规定了基于PKI密码体制的智能密码钥匙密码应用接口,描述了密码应用接口的函数、数据类型、参数的定义和设备的安全要求。层次关系:智能密码钥匙密码应用接口位于智能密码钥匙应用程序与设备之间,如下图:

设备管理系列函数:

访问控制系列函数

应用管理函数

容器管理系列函数

密码服务系列函数

GMT 0018-2012

本标准的目标是为公钥密码基础设施应用体系框架下的服务类密码设备制定统一的应用接口标准,通过该接口调用密码设备,向上层提供基础密码服务。为该类密码设备的开发、使用及检测提供标准依据和指导,有利于提高该类密码设备的产品化、标准化和系列化水平。范围:本标准规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准,适用于服务类密码设备的研制、使用,以及基于该类密码设备的应用开发,也可用于指导该类密码设备的检测。密码设备应用接口在公钥密码基础设施应用技术体系框架中的位置:在公钥密码基础设施应用技术体系框架中,密码设备服务层由密码机、密码卡、智能密码终瑞等设备组成,通过本标准规定的密码设备应用接口向通用密码服务层提供基础密码服务。如下图:

基础密码服务包括密钥生成、单一的密码运算、文件管理等服务。本标准采用C语言描述接口函数,无特别说明时,函数中参数的长度单位均为字节数。

设备管理类函数:

密钥管理类函数:

非对称算法运算类函数

对称算法运算类函数

杂凑运算类函数

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

3.1 Crypto API

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

加密前和加密后的文件内容

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

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

3.2 PKCS#11

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

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

使用DES

使用RC2

使用RSA

使用AES

3.3 SKF

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

标签:加密,函数,--,密码,mToken,API,samples,20201313,CSP
From: https://www.cnblogs.com/shadevil/p/17285572.html

相关文章

  • docker 部署mongoDB集群与读写分离
    一.生成key文件需要注意集群中所有机器都需要用同一个文件,否则会出现验证失败的情况#生成keyopensslrand-base64756>/data/volume/mongodb/configdb/mongo.key#设置访问权限chmod400/data/volume/mongodb/configdb/mongo.key 二.启动MongoDB的docker容器d......
  • 实验一-密码引擎-3-加密API研究
    任务详情密码引擎API的主要标准和规范包括:1微软的CryptoAPI2RAS公司的PKCS#11标准3中国商用密码标准:GMT0016-2012智能密码钥匙密码应用接口规范,GMT0018-2012密码设备应用接口规范等研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交......
  • 计网学习笔记六 Network Layer Overview
    这节课开始进入了网络层的学习,讲述了网络层提供的功能,还有路由器内部是什么样子的,以及virtualcircuit网络和datagram网络的一点比较。网络层有什么作用呢?用一句话来说,就是需要负责将传输层的报文段从发送端传输到接收端。再详细一点点就是:在发送方将传输层传下来的数据报文......
  • 问题排查
    一、OOM问题om意味着程序申请内存过大,虚拟机无法满足,为什么会没有内存了呢?原因不外乎有两点:1)分配的少了:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。2)应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。内存泄露:申请使用完的内存没有释放,......
  • SEO常见问题解答:如何解决网站优化中遇到的难题和挑战
    SEO常见问题解答:如何解决网站优化中遇到的难题和挑战网站优化是提高网站在搜索引擎中排名和流量的重要手段,但是在优化过程中,往往会遇到各种难题和挑战,如何有效地解决这些问题,是每个网站运营者和SEO专家都需要掌握的技能。本文将针对一些常见的网站优化问题,给出一些解决方案和建议......
  • linux 系统安装 zookeeper
     下载zookeeper安装包http://mirror.bit.edu.cn/apache/zookeeper/选择3.4.14版本   上传到服务器,并解压到指定目录tar-zxvfzookeeper-3.4.14.tar.gz-C/usr/local/进入/usr/local/zookeeper/config目录1、复制文件重命名cpzoo_sample.cfg......
  • Windows - sfc scan
    C:\Windows\System32>sfc/scannowBeginningsystemscan.Thisprocesswilltakesometime.Beginningverificationphaseofsystemscan.Verification100%complete.WindowsResourceProtectionfoundcorruptfilesandsuccessfullyrepairedthem.Foronlin......
  • centos7/centos8 PHP7.2/php7.3/php7.4 以上版本 源码安装 编译
    yumupdate  1、安装依赖包[root@centos7_4~]#yum-yinstallphp-mcryptlibmcryptlibmcrypt-devel autoconf freetypegdlibmcryptlibpnglibpng-devellibjpeglibxml2libxml2-develzlibcurlcurl-develre2cnet-snmp-devellibjpeg-develphp-ldapopenl......
  • cmake get_filename_component
    get_filename_component(<var><FileName><mode>[BASE_DIR<dir>]var:outputValueFileName:inputValuemodeDIRECTORY=DirectorywithoutfilenameNAME=FilenamewithoutdirectoryEXT=Filenamelongestextension......
  • 垃圾回收之三色标记法
    关于垃圾回收算法,基本就是那么几种:标记-清除、标记-复制、标记-整理。在此基础上可以增加分代(新生代/老年代),每代采取不同的回收算法,以提高整体的分配和回收效率。无论使用哪种算法,标记总是必要的一步。你不先找到垃圾,怎么进行回收?今天一起看下三色标记法。一、如何标记在GC领......