上期我们了解了数字签名的三个等级类型以及数字签名在商业、教育、医疗和政府等众多领域的应用,所以这期我们要接着深入了解,数字证书的技术原理。
数字签名是公钥基础结构的基础部分。当我们说PKI时,一般想到的是数字证书,证书颁发机构(CA),银行使用的Key,以及SSL通信等等。
数字证书,一般都是成对存在的,包含证书的公钥,和证书对应的私钥,公钥本身有一定的身份标识功能(如ssl证书中的域名信息,邮件客户端证书的邮箱地址等),对于数字证书的应用比较广泛,但其基本原理简单来说就是公钥用来加密,私钥用来解密。私钥用来签名,公钥用来验证签名。
那么,在我们了解数字签名的技术原理之前,我们先要明白一个和数字签名密切相关的算法:Hash算法。
hash算法是一种散列(密码杂凑)算法。简单来说这个算法有几个很显著的特性:
1. 易压缩性,可以很容易的将任何长度的数据映射到固定长度的输出。
2. 单向性,它是一种单向密码体制,根据源数据计算一个哈希值很容易,但是要根据计算出的结果得出源数据是不可能的。
3. 高灵敏性,就是对于输入数据的变化非常灵敏,即使很小的变化都会输出差异性很大的结果。
4. 抗碰撞性,对于不同的数据块,其hash值相同的可能性极小;对于一个指定的数据块,找到和它hash值相同的数据块极为困难。
由于具有这些特性,所以它非常适合用来做数据完整性和文件完整性的校验。目前应用较为广泛的哈希算法主要有sha1,sha256,sha384等,而我们国密与之相对应的是SM3算法,其安全性也是递增的。几年前Google就对SHA-1碰撞实验,就是为了验证其安全性。现在随着科技的飞速的发展和计算能力的提升,sha1也即将要退出历史舞台。
工作原理:创建数字签名
现在,让我们逐步了解一下数字签名的过程:
1、将要签名的文件进行hash计算。
2、用私钥将文件的hash值进行签名。
3、除了签名外,还可以添加时间戳以指示签名时间。
这个就是数字签名的主要过程,总的来说就是先对文档进行哈希处理,然后签名者用自己的私钥对文件生成的哈希值进行签名,使用时将原文件和签名数据一起发送。
值得注意的是,数字签名并没有对整个文件进行签名,而是对文件的hash值进行了签名。这样的不仅节约了资源而且提高了效率。
好的,接下来我们讨论一下如何读取和认证签名。
工作原理:验证数字签名
我们已经知道了创建数字签名的过程,随着要来进行数字签名验证。主要过程有以下步骤:
1、将原文件进行hash计算得到hash值。
2、将签名的公钥从签名数据中计算出签名数据中的hash值。
3、将步骤1中得到的hash值和步骤2得到的hash值进行对比,如果对比结果一致则验证通过,反之验证失败。
为什么我们要对所有内容进行数字签名?(数字签名的优势)
除了要点之外,数字签名的应用会越来越广泛,如今连电子发票和电子合同都加入了数字签名的应用行列,所以它的重要性可以预见。
本文技术文案指导:探花郎
高级软件工程师,从事PKI相关技术研发工作多年,熟悉Linux网络编程,擅长C/C++语言。现任职沃通CA,负责国密ssl相关库的开发工作。