实验一-密码引擎-加密API研究
密码引擎API的主要标准和规范包括:
微软的Crypto API
RSA公司的PKCS#11标准
中国商用密码标准:GM/T 0016-2012 智能密码钥匙密码应用接口规范,GM/T 0018-2012密码设备应用接口规范等
一、Crypto API
Crypto API作为一部分 Microsoft Windows 提供的应用程序编程接口(API) ,提供了一组允许应用程序在对用户的敏感私钥数据提供保护时,以灵活的方式对数据进行加密或数字签名的函数,而实际的加密操作是由称为加密服务提供程序 (CSP) 的独立模块执行。
Crypto API函数使用“加密服务提供者”(CSP) 完成数据加密、解密以及密钥的存储管理、所有的CSP都是相互独立的模块。CSP与应用程序之间的关系类似于Windows GDI模型,CSP就类似于图形硬件驱动程序。
Crypto API使用两种密钥:会话密钥与公共/私人密钥对。会话密钥使用相同的加密和解密密钥,这种算法较快,但必须保证密钥的安全传递。公共/私人密钥对使用一个公共密钥和一个私人密钥,私人密钥只有专人才能使用,公共密钥可以广泛传播。如果密钥对中的一个用于加密,另一个一定用于解密。公共/私人密钥对算法很慢,一般只用于加密小批数据,例如用于加密会话密钥。
Crypto API支持两种基本的编码方法:流式编码和块编码。流式编码在明码文本的每一位上创建编码位,速度较快,但安全性较低。块编码在一个完整的块上(一般为64位)工作,需要使用填充的方法对要编码的数据进行舍入,以组成多个完整的块。这种算法速度较慢,但更安全。
二、PKCS# 11
PKCS# 11标准定义了与密码令牌(如硬件安全模块(HSM)和智能卡)的独立于平台的API,API定义了最常用的加密对像类型(RSA密钥,X.509证书,DES / 三重DES密钥等)以及使用,创建/生成,修改和删除这些对象所需的所有功能。
PKCS# 11只提供了接口的定义, 不包括接口的实现,一般接口的实现是由设备提供商提供的。
三、GM/T 0016-2012 智能密码钥匙密码应用接口规范
本标准规定了基于PKI密码体制的智能密码钥匙密码应用接口,描述了密码应用接口的函数数据类型、参数的定义和设备的安全要求。
本标准适用于智能密码钥匙产品的研制、使用和检测。
智能密码钥匙密码应用接口位于智能密码钥匙应用程序与设备之间:
设备的应用结构:一个设备中存在设备认证密钥和多个应用,应用之间相互独立。设备的逻辑结构如下图:
设备管理系列函数
访问控制系列函数
应用管理函数
容器管理系列函数
密码服务系列函数
四、GMT 0018-2012
本标准的目标是为公钥密码基础设施应用体系框架下的服务类密码设备制定统一的应用接口标准,通过该接口调用密码设备,向上层提供基础密码服务。为该类密码设备的开发、使用及检测提供标准依据和指导,有利于提高该类密码设备的产品化、标准化和系列化水平。
范围:本标准规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准,适用于服务类密码设备的研制、使用,以及基于该类密码设备的应用开发,也可用于指导该类密码设备的检测。
密码设备应用接口在公钥密码基础设施应用技术体系框架中的位置:在公钥密码基础设施应用技术体系框架中,密码设备服务层由密码机、密码卡、智能密码终瑞等设备组成,通过本标准规定的密码设备应用接口向通用密码服务层提供基础密码服务。如下图:
基础密码服务包括密钥生成、单一的密码运算、文件管理等服务。
本标准采用C语言描述接口函数,无特别说明时,函数中参数的长度单位均为字节数。
设备管理类函数:
打开设备: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私钥解密:SDFJmportKeyWithlSKJECC
生成密钥协商参数并输出:SDF_GenerateAgreementDataWithECC
计算会话密钥:SDF_GenerateKey WithECC
产生协商数据并计算会话密钥:SDF—GenerateAgreementDataAndKeyWithECC
基于 ECC算法的数字信封转换:SDF_ExchangeDigitEnvelopeBaseOnECC
生成会话密钥并用密钥加密密钥加密输出: SDF_GenerateKeyWithKEK
导入会话密钥并用密钥加密密钥解密:SDF_ImportKeyWithKEK
销毁会话密钥:SDF_DestroyKey
非对称算法运算类函数
部公钥 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
对称算法运算类函数
对称加密:SDF_Encrypt
对称解密:SDF_Decrypt
计算MAC:SDF_CalculateMAC
杂凑运算类函数
杂凑运算初始化:SDF_HashInit
多包杂凑运算:SDF_HashUpdate
杂凑运算结束:SDF_HashFinal
安全要求
(1)基于本标准设计、开发的密码设备在密钥管理方面,应满足以下要求:
设备密钥的使用不对应用系统开放;
密钥必须用安全的方法产生并存储;
在任何时间、任何情况下,除公钥外的密钥均不能以明文形式出现在密码设备外;
密码设备内部存储的密钥应具备有效的密钥保护机制,防止解剖、探测和非法读取;
密码设备内部存储的密钥应具备权限控制机制,防止非法使用和导出。
(2)密码服务要求:
使用的密码算法应得到国家密码主管部门的批准;
使用国家密码主管部门认可的密码算法芯片;
本标准所列的所有接口函数均应能被应用系统任意调用。
(3)设备状态要求:
密码设备应具有初始和就绪两个状态;
未安装设备密钥的密码设备应处于初始状态,已安装设备密钥的密码设备应处于就绪状态;
在初始状态下,除可读取设备信息、设备密钥的生成或恢复操作外,不能执行任何操作,生成或恢复设备密钥后,密码设备处于就绪状态;
在就绪状态下,除设备密钥的生成或恢复操作外,应能执行任何操作;
在就绪状态下进行的密钥操作,设备操作员应经过密码设备的认证。
(4)其他要求:
密码设备应有安全机制和措施,保证密钥在生成、安装、导入、存储、备份.恢复及销毁整个生存期间的安全,此安全机制可由设备厂商自行设计实现