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

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

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

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

Crypto API

Windows CryptoAPI是Microsoft 公司提出的安全加密应用服务框架,也是PKI推荐使用的加密 API。它提供了在Win32 环境下使用认证、编码、加密和签名等安全服务时的标准加密接口,用于增强应用程序的安全性与可控性。应用开发者可以在不了解复杂的加密机制和加密算法的情况下,简便、快速地开发出标准、通用和易于扩展的安全加密应用程序。CryptoAPI 提供的功能主要有:密钥管理、数据加密和解密、数字签名和验证、证书管理、可信根证书管理、数据编码和解码、数字证书编码和解码、PKCS#7 标准格式编码和解码等。
CryptoAPI体系架构共由五大主要部分组成:基本CSP函数(Base Cryptographic Functions)、证书编解码函数(Certificate Encode/Decode Functions)、证书库管理函数(Certificate Store Functions),简单消息函数(Simplified Message Functions)、底层消息函数(Low-level Message Functions)。其结构图如下图所示。

基本加密函数:用于选择CSP、建立CSP连接、产生密钥、交换及传输密钥等操作。这些函数为开发加密应用程序提供了足够灵活的空间。所有CSP 的通讯都是通过这些函数,一个CSP 是实现所有加密操作的独立模块,于是在每一个加密应用程序中至少需要提供一个CSP来完成所需的加密操作。

证书编/解码函数:用于数据加密、解密、哈希等操作。这类函数支持数据的加密/解密操作;在应用程序中完成计算哈希、创建和校验数字签名操作;用来对证书、证书撤销列表、证书请求和证书扩展进行编码和解码操作。

证书库管理函数:用于数字证书及证书库管理等操作。这组函数用于管理证书、证书撤销列表和证书信任列表的使用、储存、获取等。

简单消息函数:用于消息处理,比如消息编码/解码、消息加/解密、数字签名及签名验证等操作。它是把多个低层函数包装在一起以完成某个特定任务,以方便用户的使用。

底层消息函数:低级消息函数对传输的PKCS#7 数据进行编码,对接收到的PKCS#7 数据进行解码,并且对接收到的消息进行解密和验证。它可以实现简单消息函数可以实现的所有功能,它提供更大的灵活性,但一般会需要更多的函数调用。对于绝大多数应用,我们不推荐使用低级消息函数,使用简化消息函数更为方便。

PKCS#11

  • 在密码系统中,PKCS#11是公钥加密标准(PKCS, Public-Key Cryptography Standards)中的一份子 ,由RSA实验室(RSA Laboratories)发布[1],它为加密令牌定义了一组平台无关的API ,如硬件安全模块和智能卡。
  • PKCS#11的对象可根据其生命期长短的不同分成两大类:一类是持久存储的类对象,这类对象被保存在USB Key的安全存储区域当中,直到应用程序主动删除这些对象;另一类是会话对象,这类对象只存在于运行时建立的特定会话(Session对象)当中,一旦会话结束,这类对象也跟着被删除。决定对象生命期的模板属性是CKA_TOKEN,这是个布尔值,所有的对象都有这一属性。当该值为TRUE时,该对象将被保存到Key内的存储空间,否则,该对象保存在会话空间中,当会话结束后,该对象即销毁。
  • 指令列表




  • 架构

GMT 0016-2012

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

设备的应用结构:一个设备中存在设备认证密钥和多个应用,应用之间相互独立。设备的逻辑结构如下图:

设备管理系列函数:

访问控制系列函数:

应用管理函数:

容器管理系列函数:

密码服务系列函数:

GMT 0018-2012

  1. 本标准的目标是为公钥密码基础设施应用体系框架下的服务类密码设备制定统一的应用接口标准,通过该接口调用密码设备,向上层提供基础密码服务。为该类密码设备的开发、使用及检测提供标准依据和指导,有利于提高该类密码设备的产品化、标准化和系列化水平。
  2. 范围:本标准规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准,适用于服务类密码设备的研制、使用,以及基于该类密码设备的应用开发,也可用于指导该类密码设备的检测。
  3. 密码设备应用接口在公钥密码基础设施应用技术体系框架中的位置:在公钥密码基础设施应用技术体系框架中,密码设备服务层由密码机、密码卡、智能密码终瑞等设备组成,通过本标准规定的密码设备应用接口向通用密码服务层提供基础密码服务。
  4. 设备管理类函数:
    打开设备:SDF_OpenDevice
    关闭设备:SDF_CloseDevice
    创建会话:SDF_OpenSession
    关闭会话:SDF_CloseSession
    获取设备信息:SDF_GetDeviceInfo
    产生随机数:SDF_GenerateRandom
    获取私钥使用权限: SDF_GetPrivateKeyAccessRight
    释放私钥使用权限: SDF_ReleasePrivateKeyAccessRight
  5. 密钥管理类函数:
    导出 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私钥解密:SDFJmportKeyWithlSKJECC
    生成密钥协商参数并输出:SDF_GenerateAgreementDataWithECC
    计算会话密钥:SDF_GenerateKey WithECC
    产生协商数据并计算会话密钥:SDF—GenerateAgreementDataAndKeyWithECC
    基于 ECC算法的数字信封转换:SDF_ExchangeDigitEnvelopeBaseOnECC
    生成会话密钥并用密钥加密密钥加密输出: SDF_GenerateKeyWithKEK
    导入会话密钥并用密钥加密密钥解密:SDF_ImportKeyWithKEK
    销毁会话密钥:SDF_DestroyKey
  6. 非对称算法运算类函数
    部公钥 RSA 运算:SDF_ExternalPublicKeyOperation_RSA
    内部公钥 RSA 运算:SDF_InternalPublicKeyOperation_RSA
    内部私钥 RSA 运算:SDF_InternalPrivateKeyOperation_RSA
    外部密钥 ECC 验证:SDF_ExternalVerify_ECC
    内部密钥 ECC 签名:SDF_InternalSign_ECC
    内部密钥 ECC 验证:SDF_InternalVerify_ECC
    外部密钥 ECC 加密:SDF_ExternalEncrypt_ECC
  7. 对称算法运算类函数
    对称加密:SDF_Encrypt
    对称解密:SDF_Decrypt
    计算MAC:SDF_CalculateMAC
  8. 杂凑运算类函数
    杂凑运算初始化:SDF_HashInit
    多包杂凑运算:SDF_HashUpdate
    杂凑运算结束:SDF_HashFinal
  9. 安全要求
    (1)基于本标准设计、开发的密码设备在密钥管理方面,应满足以下要求:
    设备密钥的使用不对应用系统开放;
    密钥必须用安全的方法产生并存储;
    在任何时间、任何情况下,除公钥外的密钥均不能以明文形式出现在密码设备外;
    密码设备内部存储的密钥应具备有效的密钥保护机制,防止解剖、探测和非法读取;
    密码设备内部存储的密钥应具备权限控制机制,防止非法使用和导出。
    (2)密码服务要求:
    使用的密码算法应得到国家密码主管部门的批准;
    使用国家密码主管部门认可的密码算法芯片;
    本标准所列的所有接口函数均应能被应用系统任意调用。
    (3)设备状态要求:
    密码设备应具有初始和就绪两个状态;
    未安装设备密钥的密码设备应处于初始状态,已安装设备密钥的密码设备应处于就绪状态;
    在初始状态下,除可读取设备信息、设备密钥的生成或恢复操作外,不能执行任何操作,生成或恢复设备密钥后,密码设备处于就绪状态;
    在就绪状态下,除设备密钥的生成或恢复操作外,应能执行任何操作;
    在就绪状态下进行的密钥操作,设备操作员应经过密码设备的认证。
    (4)其他要求:
    密码设备应有安全机制和措施,保证密钥在生成、安装、导入、存储、备份.恢复及销毁整个生存期间的安全,此安全机制可由设备厂商自行设计实现

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

posted @ 2022-05-12 16:30  金嗷  阅读(81)  评论(0编辑  收藏  举报