数字签名和数字证书
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字签名和数字证书相关的知识,希望对你有一定的参考价值。
参考技术A数字签名是一种用于信息 真实性 和 完整性 校验的手段,一套数字签名包含签名和验证两种运算。下面是一套简单的数字签名示意图。
数字签名使用 非对称加密 技术。每个人都有一对钥匙,私钥只有本人知道,公钥公开,私钥签名,公钥验签。
在进行信息传递时,信息发送者用私钥生成签名并将公钥一起发送给信息接收者,接收者使用公钥验签。上述过程中信息完整性得到校验,但发送者的身份是否合法无法得知(因为任何人都可以声称自己是合法的),因此引入了 身份认证机构 。
身份认证机构是 信息接收者 能信任的机构,所有的公钥必须向该机构进行注册。注册后身份认证机构给发送者颁发一 数字证书 。对文件签名后,发送者把此数字证书连同文件及签名一起发给信息接收者,接收者向身份认证机构求证是否真地是用发送者密钥签发的文件。
数字证书是一种电子档案,用来证明公钥拥有者的身份。此档案包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对该文件的数字签名。
证书的本质就是对公钥加数字签名,认证机构用自己的私钥对需要认证的人(或组织机构)的公钥进行数字签名并生成证书。
我们需要了解以下几种类型的证书
自签证书
用户可以自己生成数字证书,不过没有任何可信赖的人签名,它主要用于小范围测试,这种自签名证书通常不会被广泛信任,使用时可能会遇到电脑软件的安全警告。
根证书
根证书获得广泛认可,通常已预先安装在各种软体(包括操作系统、浏览器、电邮软件等),作为信任链的起点,来自于公认可靠的政府机关、证书颁发机构公司、非营利组织等,与各大软件商透过严谨的核认程序才在不同的软件广泛部署。由于部署程序复杂费时,需要行政人员的授权及机构法人身份的核认,一张根证书有效期可能长达二十年以上。在某些企业,也可能会在内部电脑自行安装企业自签的根证书,以支援内部网的企业级软件;但是这些证书可能未被广泛认可,只在企业内部适用。
中介证书
认证机构的一个重要任务就是为客户签发证书,虽然广泛认可的认证机构都已拥有根证书,相对应的私钥可用以签署其他证书,但因为密钥管理和行政考虑,一般会先行签发中介证书,才为客户作数位签署。中介证书的有效期会较根证书为短,并可能对不同类别的客户有不同的中介证书作分工。
TLS服务器证书
网站在互联网上提供服务时,域名就是服务器证书上主体,相关机构名称则写在组织或单位一栏上。证书和私钥会安装在服务器。客户端的软件(如浏览器)会执行认证路径验证算(Certification path validation algorithm)以确保安全,如果未能肯定加密通道是否安全(例如证书上的主体名称不对应网站域名、伺服器使用了自签证书、或加密算法不够强),可能会警告用户。
TLS客户端证书
客户端证书包含电子邮件地址或个人姓名,而不是主机名。客户端证书比较不常见,因为考虑到技术门槛及成本因素,通常都是由服务提供者验证客户身份,而不是依赖第三方认证机构。通常,需要使用到客户端证书的服务都是内部网的企业级软件,他们会设立自己的内部根证书,由企业的技术人员在企业内部的电脑安装相关客户端证书以便使用。在公开的互联网,大多数网站都是使用登入密码和Cookie来验证用户,而不是客户端证书。
根证书(自签证书)、中介证书和终端实体(TLS服务器/客户端)证书的形成如下信任链
证书一般遵从X.509格式规范
证书可以二进制或 Base64 形式储存,常见的文件扩展名有.cer、.crt、.der和.pem。如果把证书和私钥一起储存,则可以使用PKCS#12(.p12)格式。
我们在写对外 API 时,针对信息传递的安全考虑,做如下设计
我们使用 SHA256withRSA 进行签名,下面是一个Java简单例子
加密数字签名和数字证书
加密、数字签名和数字证书
1 对称加密
对称加密算法中,加密和解密使用的是同一个秘钥,所以秘钥的保护是非常重要的,对称加密和解密过程如下图:
对称算法加密过程
对称算法解密过程
尽管对称秘钥能够满足对内容的加密了,但是对称算法还是存在以下两个问题的。
1、秘钥泄密风险:务端与客户端彼此之间必须约定将使用的密钥,而这个约定的过程本身就可能存在泄密的风险;
2、如果有100甚至更多的客户端要向服务器发送文件。那么,服务器可能需要有100多次约定密钥的过程。
由此可见,无论是安全性还是可用性上,对称密钥都是存在问题的。而两个问题则是必须解决的。
2 非对称加密
非对称算法加密和解密使用的是不同的秘钥,加密算法有一对秘钥,分别是公钥和私钥,公钥是公开的,私钥则是自己保管。
非对称算法加密过程
非对称算法解密过程
3 数字签名和加密
加密是指对某个内容加密,加密后的内容还可以通过解密进行还原。 比如我们把一封邮件进行加密,加密后的内容在网络上进行传输,接收者在收到后,通过解密可以还原邮件的真实内容。
签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过。签名一般是对信息做一个hash计算得到一个hash值,注意,这个过程是不可逆的,也就是说无法通过hash值得出原来的信息内容。在把信息发送出去时,把这个hash值加密(使用非对称算法的私钥进行加密)后做为一个签名和信息一起发出去。接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值(解密后)进行对比,如果一致,就说明信息的内容没有被修改过,因为这里hash计算可以保证不同的内容一定会得到不同的hash值,所以只要内容一被修改,根据信息内容计算的hash值就会变化。当然,不怀好意的人也可以修改信息内容的同时也修改hash值,从而让它们可以相匹配,为了防止这种情况,hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。
数字签名解决了信息安全上面的不可抵赖性和不可篡改性问题。
4 数字证书
基于非对称密钥算法,Bob生成了一对公私钥。Bob将公钥发布在公开的密钥库中。而Alice在向Bob发送加密文件或者验证Bob签名的文件时,均要从公钥库取到Bob的公钥。我们已经知道,一般来说公钥就是一段固定长度的字符串,并没有特定的含义。
为了让Alice能够方便的辨别公钥,我们可以考虑对给公钥附加一些信息,例如该公钥使用的算法,该公钥的所有者(主题),该公钥的有效期等一系列属性。这样的数据结构我们称作PKCS10数据包
公钥的主题我们采用唯一标示符(或称DN-distinguished name),以尽量唯一的标示公钥所有者。以下是基于抽象语法表示法所定义的PKCS10数据结构:
我们已经有了PKCS10数据包,除了公钥信息外,还有公钥的持有者,公钥的版本号等信息。然而这样的数据结构其实并没有任何权威性。例如有一天一个叫做Richard的人想冒充Bob,也生成一对公私钥,并且使用了相同的公钥主题封装为P10数据结构。Alice其实并没有办法分辨哪个是真实Bob的公钥。
为了解决这个问题,就需要一个权威的第三方机构,对P10结构的数据进行认证。就如同对P10文件盖上一个权威的章,防止仿照。这样的权威机构,我们称作CA(Certificate Authority)数字证书认证中心。而CA如何为P10数据盖章呢?非常简单,就是我们前文已经提到的数字签名技术:
① 如上图所示,CA机构其实也持有一张私钥。一般来说,CA会对这份私钥进行特别的保护,严禁泄漏和盗用。
② Bob将自己的公钥附加上一系列信息后,形成了P10数据包(请求包),并发送给CA。
③ CA机构通过其他一些手段,例如查看Bob的身份信息等方式,认可了Bob的身份。于是使用自己的私钥对P10请求进行签名。(也可能会先对数据进行一些简单修改,如修改有效期或主题等)
④ 这样的签名结果,我们就称作数字证书。
数字证书同样遵循一个格式标准,我们称作X509标准,我们一般提到的X509证书就是如此。
5 基于数字证书发送文件过程
基于数字证书,我们可以再来看看Bob如何给Alice发送一份不可否认、不可篡改的文件:
第一步:Bob除了对文件进行签名操作外,同时附加了自己的数字证书。一同发给Alice。
第二步:Alice首先使用CA的公钥,对证书进行验证。如果验证成功,提取证书中的公钥,对Bob发来的文件进行验签。如果验证成功,则证明文件的不可否认和不可篡改。
可以看到,基于数字证书后,Alice不在需要一个公钥库维护Bob(或其他人)的公钥证书,只要持有CA的公钥即可。数字证书在电子商务,电子认证等方面使用非常广泛,就如同计算机世界的身份证,可以证明企业、个人、网站等实体的身份。同时基于数字证书,加密算法的技术也可以支持一些安全交互协议(如SSL)。
参考:https://yq.aliyun.com/articles/54155
以上是关于数字签名和数字证书的主要内容,如果未能解决你的问题,请参考以下文章