分享

数字签名与数字证书技术简介(三)

 dinghxoebpinvw 2018-05-31



基于非对称密钥算法,Bob生成了一对公私钥。Bob将公钥发布在公开的密钥库中。而Alice在向Bob发送加密文件或者验证Bob签名的文件时,均要从公钥库取到Bob的公钥。我们已经知道,一般来说公钥就是一段固定长度的字符串,并没有特定的含义。

为了让Alice能够方便的辨别公钥,我们可以考虑对给公钥附加一些信息,例如该公钥使用的算法,该公钥的所有者(主题),该公钥的有效期等一系列属性。这样的数据结构我们称作PKCS10数据包



公钥的主题我们采用唯一标示符(或称DN-distinguished name),以尽量唯一的标示公钥所有者。以下是基于抽象语法表示法所定义的PKCS10数据结构:

  1. CertificationRequestInfo ::= SEQUENCE {    
  2.         version          INTEGER { v1(0) } (v1,...),   
  3.         subject          Name,    
  4.         subjectPKInfo  SubjectPublicKeyInfo{{ PKInfoAlgorithms }},    
  5.         attributes       [0] Attributes{{ CRIAttributes }}    
  6.         }    
  7.     SubjectPublicKeyInfo { ALGORITHM : IOSet} ::= SEQUENCE {    
  8.         algorithm     AlgorithmIdentifier {{IOSet}},   
  9.         subjectPublicKey  BIT STRING    
  10.         }    
  11.   
  12.     PKInfoAlgorithms ALGORITHM ::= {     
  13.         ...  -- add any locally defined algorithms here -- }    
  14.       
  15.     Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }}     
  16.       
  17.     CRIAttributes  ATTRIBUTE  ::= {    
  18.         ... -- add any locally defined attributes here -- }    
  19.   
  20.     Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {    
  21.         type    ATTRIBUTE.&id({IOSet}),    
  22.         values  SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{@type})   
  23.     }   

我们已经有了PKCS10数据包,除了公钥信息外,还有公钥的持有者,公钥的版本号等信息。然而这样的数据结构其实并没有任何权威性。例如有一天一个叫做Richard的人想冒充Bob,也生成一对公私钥,并且使用了相同的公钥主题封装为P10数据结构。Alice其实并没有办法分辨哪个是真实Bob的公钥。

为了解决这个问题,就需要一个权威的第三方机构,对P10结构的数据进行认证。就如同对P10文件盖上一个权威的章,防止仿照。这样的权威机构,我们称作CA(Certificate Authority)数字证书认证中心。而CA如何为P10数据盖章呢?非常简单,就是我们前文已经提到的数字签名技术:


① 如上图所示,CA机构其实也持有一张私钥。一般来说,CA会对这份私钥进行特别的保护,严禁泄漏和盗用。

② Bob将自己的公钥附加上一系列信息后,形成了P10数据包(请求包),并发送给CA

③ CA机构通过其他一些手段,例如查看Bob的身份信息等方式,认可了Bob的身份。于是使用自己的私钥对P10请求进行签名。(也可能会先对数据进行一些简单修改,如修改有效期或主题等)

④ 这样的签名结果,我们就称作数字证书。

 

数字证书同样遵循一个格式标准,我们称作X509标准,我们一般提到的X509证书就是如此。以下是X509的格式:

  1. [Certificate ::= SEQUENCE {  
  2.     tbsCertificate TBSCertificate,  
  3.     signatureAlgorithm AlgorithmIdentifier,  
  4.     signature BIT STRING  
  5. }  
  6.   
  7. TBSCertificate ::= SEQUENCE {  
  8.     version [0] EXPLICIT Version DEFAULT v1,  
  9.     serialNumber CertificateSerialNumber,  
  10.     signature AlgorithmIdentifier,  
  11.     issuer Name,  
  12.     validity Validity,  
  13.     subject Name,  
  14.     subjectPublicKeyInfo SubjectPublicKeyInfo,  
  15.     issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,  
  16.     -- If present, version must be v2or v3  
  17.     subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,  
  18.     -- If present, version must be v2or v3  
  19.     extensions [3] EXPLICIT Extensions OPTIONAL  
  20.     -- If present, version must be v3  
  21.     }  
  22. Version ::= INTEGER {  
  23.     v1(0), v2(1), v3(2)  
  24. }  
  25.   
  26. CertificateSerialNumber ::= INTEGER  
  27.     Validity ::= SEQUENCE {  
  28.     notBefore CertificateValidityDate,  
  29.     notAfter CertificateValidityDate  
  30. }  
  31.   
  32. CertificateValidityDate ::= CHOICE {  
  33.     utcTime UTCTime,  
  34.     generalTime GeneralizedTime  
  35. }  
  36.   
  37. UniqueIdentifier ::= BIT STRING  
  38.     SubjectPublicKeyInfo ::= SEQUENCE {  
  39.     algorithm AlgorithmIdentifier,  
  40.     subjectPublicKey BIT STRING  
  41. }  
  42.   
  43. Extensions ::= SEQUENCE OF Extension  
  44. Extension ::= SEQUENCE {  
  45.     extnID OBJECT IDENTIFIER,  
  46.     critical BOOLEAN DEFAULT FALSE,  
  47.     extnValue OCTET STRING  
  48. }  

基于数字证书,我们可以再来看看Bob如何给Alice发送一份不可否认、不可篡改的文件:


第一步:Bob除了对文件进行签名操作外,同时附加了自己的数字证书。一同发给Alice



第二步:Alice首先使用CA的公钥,对证书进行验证。如果验证成功,提取证书中的公钥,对Bob发来的文件进行验签。如果验证成功,则证明文件的不可否认和不可篡改。


可以看到,基于数字证书后,Alice不在需要一个公钥库维护Bob(或其他人)的公钥证书,只要持有CA的公钥即可。数字证书在电子商务,电子认证等方面使用非常广泛,就如同计算机世界的身份证,可以证明企业、个人、网站等实体的身份。同时基于数字证书,加密算法的技术也可以支持一些安全交互协议(如SSL)。下一篇文章,将为大家介绍SSL协议的原理。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多