概述
本篇博文是博主对David Youd于1996年发表的《What is a Digital Signature?》的翻译,原文地址:What is a Digital Signature?
图片来源:数字签名是什么?用图片通俗易懂地解释
文中红色字属于博主附加的解释文字,并非原文翻译内容
鲍勃有两边钥匙,一把公钥,一把私钥。
鲍勃的公钥可以被分享给任何需要它的人,但是鲍勃的私钥只由鲍勃自己保管。(如上图所示:帕蒂、道格、苏珊都是鲍勃的同事,鲍勃将自己的公钥分享给他们每个人)
这两把钥匙是用来加密信息的。
所谓“加密信息”就是指“将信息内容变得混乱,不易被解读”,从而使“只有拥有正确钥匙的人”才能对其再次解读。
鲍勃的这两把钥匙,任意一把都可以用于加密信息,相对应的,另一把就可以用来解密信息。
(如下图所示)苏珊可以用鲍勃的公钥来加密一封邮件。鲍勃再用他自己的私钥来解密这封邮件。(这里使用的就是“公钥加密,私钥解密”的方式)
除了鲍勃以外,鲍勃的所有同事都能访问苏珊的这封邮件,但是没有鲍勃的私钥,这封邮件对他们来说没有任何价值。(因为没有私钥无法翻译嘛)
(现在鲍勃整理了一份重要文档,并且需要发给帕蒂)鲍勃用自己的私钥和正确的软件生成“数字签名”,并将“数字签名”附加在文档上。(原文这里写的是附加在“文档和其他数据”上,我个人觉得只翻译出“文档”可能更好理解。其实也差不多,文档里有重要数据嘛)
所谓“数字签名”,就是鲍勃在文档上附加的“戳儿、印章”。“数字签名”是鲍勃专属的唯一标识,很难被伪造。
此外,“数字签名”对文档内容不会产生任何影响,这点是可以确定的。
(那么“数字签名”是如何生成的呢?请看下图)为了给文档签名,鲍勃的软件会使用哈希算法将文档内容压缩成一个“只有几行内容”的摘要。(摘要是无法被还原成原始文档的)(所以不用担心“摘要”会泄露文档内容)
然后,鲍勃的软件使用鲍勃的私钥将摘要加密,就得到了“数字签名”。
最后,鲍勃的软件将“数字签名”附加到文档上。所有被“哈希”过的数据都会被附加上“数字签名”。
现在,鲍勃将文档发给了帕蒂。
(帕蒂收到文档后要进行解密和验证操作了)首先,帕蒂的软件使用鲍勃的公钥对文档上对签名进行解密,使签名变回摘要。如果能成功(这里指“使用鲍勃的公钥将鲍勃的签名变回摘要”),那么就证明这个签名是鲍勃的,因为只有鲍勃有鲍勃自己的私钥。
然后,帕蒂使用哈希算法将文档生成摘要,如果这个摘要和刚才“使用公钥解密签名后得到的摘要”一样的话,帕蒂就可以知道这个文档没有被更改过。
(情景假设,坏人道格出来搞事了)道格(一个令人不满的员工)想要欺骗帕蒂。他很确定帕蒂收到了一份有签名的文档和一个“似乎属于鲍勃的”公钥。
帕蒂并不知道,道格狡诈地使用鲍勃的名字将自己的一对钥匙伪装成鲍勃的,并替换了帕蒂的钥匙。(其实这里是说,道格将鲍勃的分享给帕蒂的公钥换成了自己的,但是仍然标名“鲍勃的公钥”)
帕蒂获取不到鲍勃的公钥,该怎么确认鲍勃的公钥是否真实呢?(个人觉得应该换成“帕蒂无法确认钥匙来源,该怎么验证收到的公钥是不是鲍勃的呢?”)
(救星苏珊出场,呃。。。莫名觉得苏珊跟道格有夫妻相。。。)你说巧不巧,苏珊刚好在公司的“证书颁发中心”部门工作。苏珊只需要将鲍勃的公钥和鲍勃的一部分个人信息整合在一起并对其签名,就可以很简单地为鲍勃创建一个“数字证书”。(这里的数字证书的作用就是“证明公钥是鲍勃的”。方式是:“证书中心”(certificate authority,简称CA)用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。)
(现在这份文档就包括了:文档内容+鲍勃的签名+数字证书,如下图)
(帕蒂收到文档之后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。如下图)
现在,鲍勃的同事就可以检查鲍勃的数字证书来确保公钥确实属于鲍勃。
事实上,鲍勃公司的员工都不会接受“没有携带苏珊颁发的证书”的签名。
这就给予了苏珊一个权利:如果私钥泄漏或者不再被需要的时候,苏珊可以撤销签名。
更甚之,也可以请更具有权威的认证机构对苏珊进行认证。
(举个例子)现在假设鲍勃给帕蒂发了一份文档。为了验证文档上的签名,帕蒂的软件先用苏珊(证书中心)的公钥来检查鲍勃证书上的签名。如果成功解密证书,就能证明证书确实是苏珊创建的。然后,帕蒂的软件再检查鲍勃在证书中心机构的信誉是否良好,以及所有与鲍勃身份有关的证书信息是否被改动过。
接着,帕蒂的软件从证书中获取到鲍勃的公钥,并使用它检查鲍勃的签名。由于这个公钥是苏珊(证书中心)已经认证了的,所以如果鲍勃的公钥能成功解密签名,则帕蒂就能确信这个签名是用鲍勃的私钥创建的。
最后,理所应当的,如果签名是证实有效的,那么我们就可以知道道格没有试图更改这个签名内容。(简单来说,就是确保道格没有搞鬼)
尽管上面这些步骤听起来很繁琐,但是它们都是由帕蒂的软件在后台自动完成的。对于帕蒂来说,他只需要点击一下这个按钮(如下图),就能验证签名了。
© 1996, David Youd
本文最后感谢一下原作者David Youd,讲得如此生动形象简单易懂,原文链接:What is a Digital Signature?;
以及图片获取来源博文的作者阮一峰,博文链接:数字签名是什么?用图片通俗易懂地解释
非盈获取,侵权立删。
最后
以上就是彩色白猫为你收集整理的什么是数字签名?的全部内容,希望文章能够帮你解决什么是数字签名?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复