数字签名是一种用于验证数字消息或文档真实性的数学方案。满足先决条件的有效数字签名使接收者有理由相信该消息是由已知的发件人创建的,且消息在传输过程中没有被修改(即完整性)。
数字签名主要有两个作用:
消息或文档的完整性。即消息或文档在网络传输过程中没有被篡改。消息或文档的真实(认证)性。即消息或文档确实是我们预期的发送者发出的。保证消息或文档的完整性,是通过验证发送内容和接收内容的散列值是否相等判断的,计算散列值需要用到散列函数。
常见散列函数的有 MD5、SHA1、SHA256,该类函数特点是函数单向不可逆、对输入非常敏感、输出长度固定,针对数据的任何修改都会改变散列函数的结果,因此可用于防止信息篡改并验证数据的完整性。
数字签名/验证的大致步骤如下:
Signer生成密钥对,自己保留私钥(private key),将公钥提供给Verifier。Siner将要发送的数据通过Hash算法计算Hash值,并通过自己的私钥对Hash值进行加密,加密后的内容即为签名。将签名附加到发送数据上,通过Network将数据发送给Verifier。Verifier接收数据后,Verifier通过相同的Hash算法计算接收数据的新Hash值。利用Signer的公钥(public key)对签名进行解密,获取原Hash值。比对原Hash值和新Hash值,如果两个值相等,那么认为签名是有效的。 可以将上述过程简化为如下模型。在这个模型中,Sender持有自己的私钥,Receiver持有Sender的公钥。Sender通过私钥进行签名,Receiver通过公钥进行签名验证。但公钥只是一串文本,公钥本身并不能表示所有者的任何信息。这时候如果Attacker偷偷用自己的公钥替换掉了Sender的公钥,就可以假冒Sender给Receiver发信息。
如下图所示,Attacker用自己的公钥(public key)替换掉了Sender的公钥(public key),这时候对Receiver根本没有意识到Sender的公钥已经被更改。这时候Attacker就可以使用自己的私钥发送假消息给Receiver。
Attacker的这种做法迟早会被Receiver察觉,这时候Receiver可能会要求Sender去做CA认证。那么CA是什么呢?
在现实生活中我们都是有身份的人,在乘坐高铁、去银行办理业务、去政府部门办事时都需要出示身份证。身份证是我们每个人的凭证,它能证明你是中国的合法公民。身份证的签发机关是公安局。
同样在互联网世界中,如何证明你是你呢?答案就是数字证书。在之前的例子中生成数字证书时我们采用的自签名,如果通信的双方比较熟悉且相互信任使用自签名证书时没有问题的。但是通常情况下我们是需要一个第三方机构对我们的身份进行认证的,这个第三方机构就是CA(Certificate Authority)。
CA可以给个人、机构、设备、甚至代码发放数字证书。
CA建立自上而下的信任链,下级CA信任上级CA,下级CA由上级CA颁发证书并认证。
RootCA: RootCA是CA层级结构中最顶级的CA,每个CA层级结构都是从RootCA开始的。从RootCA可以派生多个分支CA,分支CA与RootCA是父子关系,所有的子CA必须被其父CA认证并一直追溯到RootCA。为了保证RootCA的绝对安全,RootCA通常位于一个安全的区域,并且是一个独立的离线CA。RootCA为中间层CA提供证书,如果合约到期证书将被收回。
中间层CA: 中间层CA是从属与其他CA(RootCA或其他中间层CA)的CA,中间层CA可以为层级结构中的其他CA发布证书。中间层CA通常与RootCA一样,也是独立的离线CA。
发布CA: 发布CA用于为用户、计算机或其他设备提供证书。发布CA可能有多个,一个CA用于生产计算机证书而另一个用于生产用户证书。
颁发证书、废除证书、更新证书、验证证书、管理密钥。
刚刚提到CA提供的服务之一就是颁发证书。于是Sender(Monroe)找到了American CA进行个人认证。
至此Monroe就拥有了自己的数字证书Monroe.crt。
这时候Monroe作为Sender与Receiver进行通信的流程如下图所示:
这时候Receiver持有的不再是Sender的公钥,而是经过CA认证的Sender的证书,同时还持有American CA的证书。其中,American CA的证书用来验证Sender证书签名的有效性,如果证书签名验证通过则证明Sender和公钥的绑定关系,即该公钥确实是Sender的;
然后利用公钥对消息签名进行验证,如果消息签名验证通过,则证明消息确实是Sender发出的(认证性),且消息内容是完整的(完整性)。由于证书签名和消息签名都验证通过,对Sender来讲存在不可抵赖性(除非Sender的私钥被别人窃取啦!)。
Certificate Authority (CA) Hierarchy, Root CA, Intermediate CA, Issuing CA How do digital signatures work? 数字签名是什么? What is a Digital Signature? HTTPS中CA证书的签发及使用过程