• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Ape_utopia

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

api

实验概述

CryptoAPI使用两种密钥:会话密钥与公共/私人密钥对。会话密钥使用相同的加密和解密密钥,这种算法较快,但必须保证密钥的安全传递。公共/私人密钥对使用一个公共密钥和一个私人密钥,私人密钥只有专人才能使用,公共密钥可以广泛传播。如果密钥对中的一个用于加密,另一个一定用于解密。公共/私人密钥对算法很慢,一般只用于加密小批数据,例如用于加密会话密钥。

  CryptoAPI支持两种基本的编码方法:流式编码和块编码。流式编码在明码文本的每一位上创建编码位,速度较快,但安全性较低。块编码在一个完整的块上(一般为64位)上工作,需要使用填充的方法对要编码的数据进行舍入,以组成多个完整的块。这种算法速度较慢,但更安全。

 

一、微软的CryptoAPI加密技术

 

    1. 功能:为应用程序开发者提供在Win32环境下使用加密、验证等安全服务时的标准加密接口。CryptoAPI处于应用程序和CSP(cryptographic service provider)之间。
    2. CryptoAPI共有五部分组成:简单消息函数(Simplified Message Functions)、低层消息函数(Low-level Message Functions)、基本加密函数(Base Cryptographic Functions)、证书编解码函数(Certificate Encode/Decode Functions)和证书库管理函数(Certificate Store Functions)。其中前三者可用于对敏感信息进行加密或签名处理,可保证网络传输信心的私有性;后两者通过对证书的使用,可保证网络信息交流中的认证性。
      • 基本加密函数:为开发加密应用程序提供了足够灵活的空间。所有CSP 的通讯都是通过这些函数。
        image
      • 编码/解码函数:用来对证书、证书撤销列表、证书请求和证书扩展进行编码和解码。
        image
      • 证书和证书库函数:这组函数管理、使用和取得证书、证书撤销列表和证书信任列表。
        image
      • 低级消息函数:
        image
      • 简化消息函数:
        image
    3. CSP:真正实行加密的独立模块,既可以由软件实现也可以由硬件实现。但是他必须符合CryptoAPI接口的规范。
      image
    4. 创建密钥容器,得到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
    5. PKCS#11及CSP接口标准
      1. PKCS#11(简称P11)是针对密码设备的接口指令标准。P11模型中重要的概念之一是slot,也称为槽。一个slot为一个密码设备对象。某个打开的slot会话称之为session。Session之间存在不同的验证权限。而同一个slot的不同的session之间存在操作的互相影响性,同时在某些状况下,权限会发生同步。另外一个重要的概念是对象。P11中支持几种重要的对象,如公钥、私钥、对称密钥,数据对象等。
      2. PKCS#11创建和支持下列对象:
        image
        PKCS#11的对象可根据其生命期长短的不同分成两大类:一类是持久存储的类对象,这类对象被保存在USB Key的安全存储区域当中,直到应用程序主动删除这些对象;另一类是会话对象,这类对象只存在于运行时建立的特定会话(Session对象)当中,一旦会话结束,这类对象也跟着被删除。决定对象生命期的模板属性是CKA_TOKEN,这是个布尔值,所有的对象都有这一属性。当该值为TRUE时,该对象将被保存到Key内的存储空间,否则,该对象保存在会话空间中,当会话结束后,该对象即销毁。
      3. P11标准颁发了70余条指令。其中部分指令简介如下表:
        image
        image
        image
        image
        image
      4. PKCS#11架构
        image

        GMT 0018-2012

        1. 本标准的目标是为公钥密码基础设施应用体系框架下的服务类密码设备制定统一的应用接口标准,通过该接口调用密码设备,向上层提供基础密码服务。为该类密码设备的开发、使用及检测提供标准依据和指导,有利于提高该类密码设备的产品化、标准化和系列化水平。
        2. 范围:本标准规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准,适用于服务类密码设备的研制、使用,以及基于该类密码设备的应用开发,也可用于指导该类密码设备的检测。
        3. 密码设备应用接口在公钥密码基础设施应用技术体系框架中的位置:在公钥密码基础设施应用技术体系框架中,密码设备服务层由密码机、密码卡、智能密码终瑞等设备组成,通过本标准规定的密码设备应用接口向通用密码服务层提供基础密码服务。如下图:
          image
          • 基础密码服务包括密钥生成、单一的密码运算、文件管理等服务。
          • 本标准采用C语言描述接口函数,无特别说明时,函数中参数的长度单位均为字节数。
        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)设备状态要求:
          • 密码设备应具有初始和就绪两个状态;
          • 未安装设备密钥的密码设备应处于初始状态,已安装设备密钥的密码设备应处于就绪状态;
          • 在初始状态下,除可读取设备信息、设备密钥的生成或恢复操作外,不能执行任何操作,生成或恢复设备密钥后,密码设备处于就绪状态;
          • 在就绪状态下,除设备密钥的生成或恢复操作外,应能执行任何操作;
          • 在就绪状态下进行的密钥操作,设备操作员应经过密码设备的认证。

 

 

 

 

 

 

 

 

 

 

 

posted on 2021-04-25 18:28  Ape_utopia  阅读(161)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3