国密数字信封和数字签名

国密算法

国密是指经国家密码管理局批准可用于对不涉及国家秘密内容的信息进行加密的国产密码算法,即商用密码。为了保障商用密码的安全性,国家制定了一系列密码标准,其中包括了对称加密算法、椭圆曲线非对称加密算法和杂凑(哈希、散列)算法等。国密算法套件中包含的算法如所示。PKI中使用的主要是SM2、SM3和SM4算法。

国密算法套件总览表

算法

类型

功能

对应的国际算法

是否公开

SM1

对称加密

分组密码算法

AES128

否,仅以IP核的形式存在于硬件中。

SM2

椭圆曲线非对称加密

ECC加解密,签名验签,密钥交换

RSA、ECC

是,已纳入ISO国际标准。

SM3

哈希

商用密码应用中的数字签名和验证,消息认证码的生成与验证以及随机数的生成

SHA256

是,已纳入ISO国际标准。

SM4

分组加密

分组加解密,在加密算法和解密算法中保持一致,只是解密密钥是加密密钥的逆序

DES、AES

SM7

分组加密

分组加解密

-

否,仅以IP核的形式存在于硬件中。

SM9

基于身份标识的非对称加密

标识密码算法:签名校验,密钥交换,密钥封装与加解密

-

是,已纳入ISO国际标准。

ZUC

流加密

祖冲之序列密码算法,一种对称加密算法

EEA3 & EIA3

SSF33

分组加密

分组加解密

-

数字信封

数字信封是指发送方采用接收方的公钥加密对称密钥后与密文组合在一起所得的数据。采用数字信封时,接收方需要使用自己的私钥才能打开数字信封,得到对称密钥。数字信封技术结合了对称密钥加密和公钥加密的优点,解决了对称密钥发布和公钥加密速度慢等问题,提高了安全性、扩展性和网络传输效率。

数字信封的加解密过程如图所示。

数字信封的加解密过程示意图

甲事先获得乙的公钥,具体加解密过程如下:

  1. 甲使用对称密钥对明文进行加密,生成密文信息。
  2. 甲使用乙的公钥加密对称密钥,和密文一起生成数字信封。
  3. 甲将数字信封发送给乙。
  4. 乙接收到甲的加密信息后,使用自己的私钥打开数字信封,得到对称密钥。
  5. 乙使用对称密钥对密文信息进行解密,得到最初的明文。

从加解密的过程中可以发现,其实数字信封技术也存在问题,如果攻击者拦截甲的信息,用自己的对称密钥加密伪造的信息,并用乙的公钥加密自己的对称密钥,然后发送给乙。乙收到加密信息后,解密得到的明文会被误认为是甲发送的信息。此时,需要一种方法确保接收方收到的信息就是指定的发送方发送的。

数字签名

数字信封无法保证接收方收到的信息就是指定的发送方发送的,数字签名可以解决这个问题。它不但可以验证信息是否被篡改,还可以证明发送方的身份。

数字签名是指发送方用自己的私钥对数字指纹进行加密后所得的数据,接收方需要使用发送方的公钥才能解开数字签名,得到数字指纹。

数字指纹又称信息摘要,是指发送方通过HASH算法对明文信息计算后得出的数据。采用数字指纹时,发送方会将数字指纹和明文一起发送给接收方,接收方用同样的HASH算法对明文计算生成的数据指纹,与收到的数字指纹进行匹配,如果一致,便可确定明文信息没有被篡改。

数字签名的加解密过程如所示。

数字签名的加解密过程示意图

甲事先获得乙的公钥,具体加解密过程如下:

  1. 甲使用乙的公钥对明文进行加密,生成密文信息。
  2. 甲使用HASH算法对明文进行HASH运算,生成数字指纹。
  3. 甲使用自己的私钥对数字指纹进行加密,生成数字签名。
  4. 甲将密文信息和数字签名一起发送给乙。
  5. 乙使用甲的公钥对数字签名进行解密,得到数字指纹。
  6. 乙接收到甲的加密信息后,使用自己的私钥对密文信息进行解密,得到最初的明文。
  7. 乙使用HASH算法对明文进行HASH运算,生成数字指纹。
  8. 乙将生成的数字指纹与得到的数字指纹进行比较,如果一致,乙接收明文;如果不一致,乙丢弃明文。比较的过程也称为验签。

从加解密的过程中可以看出,数字签名技术不但可以验证信息是否被篡改,还可以证明发送方的身份。数字签名和数字信封技术也可以组合使用。

但是,数字签名技术还有个问题,如果攻击者更改乙的公钥,甲获得的是攻击者的公钥,攻击者拦截乙发送给甲的信息,用自己的私钥对伪造的信息进行数字签名,然后与使用甲的公钥的加密伪造的信息一起发送给甲。甲收到加密信息后,解密得到的明文,并验证明文没有被篡改,则甲始终认为是乙发送的信息。

数字证书

数字签名无法确定某个特定的公钥属于特定的拥有者,因为谁都可以生成公钥和私钥,仅凭一个公钥无法判断收到的公钥是不是对方的。因此需要一个安全可信的载体来交换公钥,这个载体就是数字证书。

数字证书简称证书,它是一个经证书授权中心数字签名的文件,包含拥有者的公钥及相关身份信息。

数字证书可以说是网络上的安全护照或身份证,提供的是网络上的身份证明。数字证书技术解决了数字签名技术中无法确定公钥是指定拥有者的问题。

证书结构

最简单的证书包含一个公钥、名称以及证书授权中心的数字签名。一般情况下证书中还包括密钥的有效期、颁发者(证书授权中心)的名称和该证书的序列号等信息。证书的结构遵循X.509 v3版本的规范。展示了一种常见的证书结构。

证书结构示意图

证书的各字段解释如下:

  • 版本:即使用X.509的版本,目前普遍使用的是v3版本(0x2)。
  • 序列号:颁发者分配给证书的一个正整数,同一颁发者颁发的证书序列号各不相同,可与颁发者名称一起作为证书的唯一标识。
  • 签名算法:颁发者颁发证书时使用的签名算法。
  • 颁发者:颁发该证书的设备名称,必须与颁发者证书中的主体名一致。通常为CA服务器的名称。
  • 有效期:包含有效的起、止日期,不在有效期范围内的证书为无效证书。
  • 主体名:证书拥有者的名称,如果与颁发者相同则该证书是一个自签名证书。
  • 公钥信息:用户对外公开的公钥以及公钥算法信息。
  • 扩展信息:通常包含证书的用法、CRL的发布地址、OCSP服务器的URL等可选字段。
  • 签名:颁发者用私钥对证书信息的签名。

证书签名的形成过程如下:首先,CA使用签名算法中的HASH密码学算法生成证书的摘要信息,然后使用签名算法中的公钥密码学算法,配合CA的私钥对摘要信息进行加密,最终形成签名。这些操作都是证书颁发之前在CA上进行的。

证书分类

证书有三种类型,如t图所示。

 证书类型

类型

描述

说明

CA证书

CA自身的证书。如果PKI系统中没有多层级CA,CA证书就是自签名证书;如果有多层级CA,则会形成一个CA层次结构,最上层的CA是根CA,它拥有一个CA“自签名”的证书。

申请者通过验证CA的数字签名从而信任CA,任何申请者都可以得到CA的证书(含公钥),用以验证它所颁发的本地证书。

本地证书

CA颁发给申请者的证书。

-

自签名证书

  • 自签名证书是设备为自己颁发的证书,由设备的预置CA进行签名。即证书颁发者和证书主体相同,自签名证书带有签名信息,不需要向其他机构申请签名。
  • 不带签名的证书是在设备上生成一本证书,但不进行签名,需要向CA机构申请签名,证书颁发者是CA。

通过设备生成自签名证书和不带签名的证书,可以实现简单的证书颁发功能。

设备不支持对其生成的自签名证书进行生命周期管理(如证书更新、证书撤销等),为了确保设备和证书的安全,建议用户替换为自己的本地证书。

证书格式

设备支持三种文件格式保存,如表所示。

 证书格式

格式

描述

说明

PKCS#12

以二进制格式保存证书,可以包含私钥,也可以不包含私钥。常用的后缀有.P12和.PFX。

如果证书后缀为.CER或.CRT,可以用记事本打开证书,通过查看证书内容来区分格式。

  • 如果有类似"-----BEGIN CERTIFICATE-----"和"-----END CERTIFICATE-----"的头尾标记,则证书格式为PEM。
  • 如果是乱码,则证书格式为DER。

DER

以二进制格式保存证书,不包含私钥。常用的后缀有.DER、.CER和.CRT。

PEM

以ASCII码格式保存证书,可以包含私钥,也可以不包含私钥。常用的后缀有.PEM、.CER和.CRT。

国密证书

通常情况下,设备仅会部署一张证书同时用于签名和加密,该证书为单证书,公私钥均由设备负责保存。按照规范,国密需要采用双证书体系,根据证书的使用目的和功能可分为签名证书和加密证书两种,签名证书仅用于验证身份,其公私钥均由设备本身生成并负责保管,签名密钥的用法为Digital Signature, Non-Repudiation,加密证书在密钥协商时使用,其公私钥均由CA产生,加密密钥的用法为Key Encipherment, Data Encipherment, Key Agreement。一般情况下,设备产生签名密钥对,生成只包含公钥信息的签名证书请求后发送签名证书给CA,CA验证设备的签名密钥对,生成加密密钥对和加密证书,设备获得加密证书和私钥的过程如图所示。签名证书和加密证书的密钥对均为SM2密钥对。

国密数字信封的加解密过程示意图

  1. CA生成对称密钥,使用设备的签名公钥加密对称密钥,生成对称密钥的密文,即数字信封。
  2. CA使用对称密钥对加密证书对应的私钥进行加密,生成加密私钥的密文。
  3. CA将加密证书、签名证书、对称密钥的密文和加密私钥的密文发给设备。
  4. 设备使用自己的签名私钥解密对称密钥的密文,得到对称密钥。
  5. 设备使用对称密钥对加密私钥的密文进行解密,得到加密私钥的明文。
### 回答1: 数字信封解析是使用C语言实现的一种解算法。是中自主研发的码技术标准,数字信封是一种基于非对称加的保护数据机制。 在C语言中实现数字信封解析,可以借助现有的码学库,比如OpenSSL。首先,需要引入码学库的头文件,并进行相应的初始化工作。 然后,需要提供解所需的私钥文数据。私钥通常存储在文件中,可以通过读取文件的方式获取私钥信息。文数据是使用公钥加后的数据。 接下来,通过调用码学库提供的函数,使用私钥对文进行解操作。解过程首先要解析文,获取其中的加算法参数等信息。然后使用私钥解得到明文数据。 最后,对得到的明文数据进行相应的处理,比如输出到文件,或者进一步处理。 需要注意的是,在使用C语言实现数字信封解析时,需要熟悉算法相应的码学知识。同时,保证程序的安全性,防止钥信息泄露数据篡改等风险。 ### 回答2: 数字信封解析是一个使用C语言编写的程序,用于解析处理数字信封的相关操作。数字信封是一种加技术,用于在网络传输中保护数据的安全性完整性。 该程序的实现主要包括以下几个步骤:首先,需要读取数字信封的相关信息,包括加的数据、钥、解算法等。然后,通过调用相关的C语言库函数,对文进行解操作,恢复原始的明文数据。在解过程中,还需要验证文的完整性,确保数据没有被篡改。 在解过程中,需要使用到算法中的相关函数数据结构,例如SM4算法、GCM模式等。C语言提供了丰富的库函数数据类型,可以方便地进行对这些算法的调用处理。通过合理的编程算法设计,可以提高解的效率安全性。 除此之外,数字信封解析程序还可以包括一些其他功能,例如钥管理、用户身份验证等。这些功能可以通过C语言的指针、结构体文件操作等特性来实现。 总之,数字信封解析程序的目的是通过C语言编写的程序,来实现对数字信封的解析处理操作。通过合理地使用C语言的库函数数据类型,可以高效地处理保护数据的安全性完整性。 ### 回答3: 数字信封解析是指在使用算法进行加的过程中,对数字信封进行解析的操作。 算法是中自主研发的一种码算法体系,包括对称加算法、非对称加算法、杂凑算法等。在使用算法对信息进行加时,通常会使用数字信封的方式,即将对称钥使用非对称加算法进行加,然后将加后的后的信息一起发送或存储起来。 数字信封解析的过程主要包括以下几个步骤: 1. 获取加的对称后的信息。 2. 使用私钥进行解,获取解后的对称钥。 3. 使用解后的对称钥对加后的信息进行解,获得原始的明文信息。 在C语言中,可以使用算法的相关库函数进行数字信封解析的实现。例如,可以使用OpenSSL库提供的函数来实现RSA私钥解、AES对称钥解等操作。具体实现的步骤如下: 1. 使用OpenSSL函数读取私钥文件,并使用私钥初始化RSA结构体。 2. 使用RSA私钥解函数,将加后的对称钥解得到原始的对称钥。 3. 使用原始的对称算法加函数,对加后的信息进行解操作,得到明文信息。 需要注意的是,在进行数字信封解析时,需要保证所使用的私钥算法与加时使用的公钥算法一致,以确保解的正确性。 总之,数字信封解析是使用算法对加后的信息进行解的过程,在C语言中可以使用相关库函数实现解析操作,包括私钥解对称钥解等步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值