• PKI体系与PKCS#7(Signeddata)结构


    起源

    flowchart TB 明文传输 --> 1["加密传输(对称密钥)"] --> 2["加密传输(公钥密钥)"] --> 3["数字信封(对称和公钥密钥结合)"] --> 4["数字签名"] --> 5["PKI(数字证书)"]

    PKI出现之前的加密通信系统都存在一些问题。

    明文传输:A和B之间的信息易被C窃取和篡改。

    加密传输(对称密钥):需要在通信前将密钥安全分发到对方。

    加密传输(公钥密钥):加密速度慢。

    数字信封:

    A要给B发消息,A有一个对称密钥,B有一个非对称密钥(包括公钥和私钥)。
    
    A先将明文用对称密钥加密,然后用B的公钥对该对称密钥进行加密,将明文加密结果和对称密钥加密结果一起发给B。
    
    B收到后使用自己的私钥对该对称密钥加密结果进行解密,得到对称密钥,再使用对称密钥对明文加密结果进行解密,得到明文。
    
    在上述过程中如果A所使用的B的公钥是假的,其实是攻击者C的公钥,A使用该公钥加密后,B是无法解密的,而C是可以解密的,C可以截取该消息,并用自己的私钥解密,最终得到明文信息。
    
    因此需要一种方法确保一个特定的公钥属于一个特定的拥有者。
    

    数字签名:

    A向B发送消息,使用自己的私钥进行签名,将签名结果和原文一起发送给B,B使用A的公钥和原文进行验签。
    
    这个过程中,如果B所使用的公钥是假的,是攻击者C的公钥,则对A发送过来的消息是无法验签的。而C可以截取该消息,对原文篡改后用自己的私钥进行签名,再发送给B,这时B对这个伪造的消息是可以验签的。
    
    因此需要一种方法确保一个特定的公钥属于一个特定的拥有者。
    

    数字证书

    数字证书简称证书,是一个经过证书授权机构(即PKI中的证书认证机构CA)数字签名的文件,包含拥有者的公钥和相关身份信息。

    证书有四种类型:

    自签名证书:自己给自己签名,当没有办法向CA申请证书,但又要用到非对称加密算法时使用。
    
    CA证书:CA给自己颁发的证书,拥有者和颁发者都是CA。当通信实体向CA申请本地证书时,需要先安装CA证书,使用CA的公钥加密信息再发送,即数字信封。
    
    本地证书:CA给一个通信机构颁发的证书。
    
    设备本地证书:实际颁发者是自己,是根据CA的证书来给自己颁发证书。
    

    证书结构

    最简单的证书包含一个公钥、名称以及CA的数字签名。

    签名时对证书上的所有其他信息先计算哈希值,然后对该哈希值使用CA的私钥进行签名,得到签名值再放在证书里面。

    验签时使用CA的公钥解密签名值,得到其他部分的哈希值,再对证书上其他部分用同样的HASH算法进行计算,比对得到的哈希值和解密的哈希值,若相同则说明该证书内容没有被篡改,该公钥是合法的公钥。

    证书格式

    设备支持三种文件格式保存证书

    格式 描述
    PKCS#12 以二进制格式保存证书,可以包含私钥,也可以不包含私钥。常用的后缀有:.P12和.PFX
    DER 以二进制格式保存证书,不包含私钥。常用后缀有:.DER、.CER和.CRT
    PEM 以ASCII码格式保存证书,可以包含私钥,也可以不包含私钥。常用的后缀有:.PEM、 .CER和.CRT

    这里如果包含私钥的话,证书是一个文件,私钥是另一个文件,证书中不会包含私钥。

    PKI体系

    公钥基础设施PKI(Public Key Infrastructure),是一种遵循既定标准的证书管理平台,它利用公钥技术能够为所有网络应用提供安全服务。

    PKI体系架构

    一个PKI体系由终端实体、证书认证机构CA、证书注册机构RA、证书/CRL(证书废止列表)存储库四部分组成。

    终端实体:向RA或CA申请证书、更新证书。

    证书认证机构CA:负责颁发证书以及废止证书,通过发布证书或CRL信息到存储库来进行发布或废止。

    证书注册机构RA:负责颁发证书,可分担CA的压力。

    证书/CRL存储库:对终端实体开放,终端实体可以在存储库中下载所要通信的目的端的公钥信息,即证书。此外终端实体还可以通过带外加载的方式进行加载。

    PKI生命周期

    PKI的核心技术围绕着本地证书的申请、颁发、存储、下载、安装、验证、更新和撤销的整个生命周期展开。

    flowchart LR 申请 --> 颁发 --> 存储 --> 使用 --> 验证 --> 更新 --> 注销

    证书首先要向CA申请,然后CA机构核实身份,颁发证书,存储在存储库中。

    用户从存储库中下载证书,进行安装,然后验证证书有效期是否过期。

    定期做更新,密钥被窃取等情况也要做更新。

    如果证书不需要用了,就向CA申请注销。

    证书申请

    PKI终端实体生成一对公私钥。

    将公钥和自己的身份信息发送给CA,CA核实PKI实体的身份,然后颁发证书。

    私钥PKI实体自己保存,用来数字签名和数字信封。

    PKI工作过程

    针对一个使用PKI的网络,配置PKI的目的就是为指定的PKI实体向CA申请一个本地证书,并由设备对证书的有效性进行验证。

    A与B向CA申请证书后,安装本地证书,然后从存储库中获取对端本地证书,验证对端本地证书的有效性,再建立通信。

    PKCS#7

    PKCS指“公钥密码学标准”,是RSA Security LLC于1990年代初设计和发布的一组公钥加密标准。

    PKCS#7是在公钥加密系统中交换消息的一种加密标准。

    ASN.1(抽象语法标记1),是一种定义抽象数据类型形式的标准。

    PKCS#7的ASN.1结构描述为:

    ContentInfo ::= SEQUENCE {
        contentType      ContentType,
        content     [0]  EXPLICIT ANY DEFINED BY contentType OPTIONAL 
    }
    

    即PKCS#7由contentType和content两部分组成,contentType是标识content的类型。

    PKCS#7的content有六种类型,分别为:

    1. Data ---> 明文信息
    2. Signed-data ---> 数字签名
    3. Enveloped-data ---> 数字信封
    4. Signed-and-enveloped-data ---> 带签名的数字信封
    5. Digested-data ---> 信息摘要
    6. Encrypted-data ---> 加密数据

    Signed-data类型

    signed-date类型可用于存储证书和证书废止列表(CRL)。并且包括任意类型的数据和0个或多个签名者对数据的签名值。

    .p7b文件是退化的SignedData结构,没有包括签名的数据,仅有证书和CRL。

    ASN.1将该结构描述为:

    SignedData ::= SEQUENCE {
        version                Version,
        digestAlgorithms       DigestAlgorithmIdentifiers,
        contentInfo            ContentInfo,
        certificates     [0]   IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL,
        crls             [1]   IMPLICIT CertificateRevocationLists OPTIONAL,
        signerInfos            SignerInfos 
    }
    

    其中digestAlgorithms、certificates、crls、signerInfos都是集合类型。

    各字段解释如下

    version:语法版本

    digestAlgorithms:摘要算法列表,如果有多个签名者则分别对应他们的摘要算法。

    contentInfo:要签名的内容

    certificates:签名者的证书列表,PKCS#6扩展的证书和X.509证书格式

    crls:证书废止列表

    signerInfos:签名者信息列表

    signerInfos

    signerInfos结构描述为:

    SignerInfo ::= SEQUENCE {
        version                         Version,
        issuerAndSerialNumber           IssuerAndSerialNumber,
        digestAlgorithm                 DigestAlgorithmIdentifier,
        authenticatedAttributes    [0]  IMPLICIT Attributes OPTIONAL,
        digestEncryptionAlgorithm       DigestEncryptionAlgorithmIdentifier,
        encryptedDigest                 EncryptedDigest, 
        unauthenticatedAttributes  [1]  IMPLICIT Attributes OPTIONAL 
    }
    

    其中authenticatedAttributes、unauthenticatedAttributes都是集合类型。

    各字段解释如下

    version:语法版本

    issuerAndSerialNumber:通过颁发者的可区别名和证书序列号来指定签名者的证书

    digestAlgorithm:对内容进行摘要的算法和相关的参数。

    authenticatedAttributes:签名者签名属性的集合,这个字段是可选的。

    digestEncryptionAlgorithm:对摘要进行签名的算法

    encryptedDigest:对内容的摘要值进行签名的结果,即签名值

    unauthenticatedAttributes:没有被签名或认证的属性集,这个字段是可选的。

    certificates

    x.509 V3证书结构用ASN.1描述为:

    Certificate::=SEQUENCE{
        tbsCertificate      TBSCertificate,
        signatureAlgorithm  AlgorithmIdentifier,
        signatureValue      BIT STRING
    }
    

    各字段解释如下

    tbsCertificate:证书主体

    signatureAlgorithm:证书签名算法(摘要算法和签名算法)

    signatureValue:证书签名值,使用签名算法(signatureAlgorithm)对证书主体部分(tbsCertificate)的摘要结果进行签名所得的值

    其中tbsCertificate的结构描述为:

    TBSCertificate::=SEQUENCE{
        version           [0]   EXPLICIT Version DEFAULT v1,
        serialNumber            CertificateSerialNumber,
        signature               AlgorithmIdentifier,
        issuer                  Name,
        validity                Validity,
        subject                 Name,
        subjectPublicKeyInfo    SubjectPublicKeyInfo,
        issuerUniqueID    [1]   IMPLICIT UniqueIdentifier OPTIONAL,
        subjectUniqueID   [2]   IMPLICIT UniqueIdentifier OPTIONAL,
        extensions        [3]   EXPLICIT Extensions OPTIONAL
    }
    

    各字段解释如下

    version:证书版本号

    serialNumber:证书序列号,对同一CA颁发的证书,序列号唯一标识证书

    signature:证书签名算法(摘要算法和签名算法)

    issuer:证书颁发者信息

    validity:证书有效期,包括起始时间和终止时间

    subject:证书持有者信息

    subjectPublicKeyInfo:证书的公钥信息,包括公钥算法和公钥值

    issuerUniqueID:证书颁发者的唯一ID(可选)

    subjectUniqueID:证书持有者的唯一ID(可选)

    extensions:证书拓展部分(可选)

  • 相关阅读:
    git相关整理
    cookie、sessionStorage和localStorage
    AJAX学习笔记
    json web token
    加密算法
    单点登陆
    给手机网络添加手动代理
    oracle数据库索引
    类加载器
    类加载过程
  • 原文地址:https://www.cnblogs.com/lnjoy/p/16121769.html
Copyright © 2020-2023  润新知