前言
虽然很久以前就了解了数字签名,但之前突然被一个非程序员朋友问起什么是数字签名时,依然解释得很费力。近日找图片素材看到Peggy_Marco大神的众多人物形象图时,有了用图解说数字签名的想法,于是决定借用大神的人物形象图,尝试用图解释一下说什么是数字签名。
1、图说数字签名
关于数字签名这事,还得从当年小明向王老板借钱说起......
1.1、照搬传统
小明觉得这很简单,不就是把纸质借条转换成电子文档么;于是,小明立即打开电脑,书写借条。
小明发送出去的第1版借条如下:
很显然,第1版的借条没有借款人签名,是一个无效的借条。数字世界里,则必须加上“数字签名”,用于证明签名者的身份;于是,小明加上签名后的第2版借条如下:
1.2、尝试对称加密,解决防伪造问题
确实,数字世界中,一个名字没有笔法字迹可以区分,千篇一律,谁都可以伪造,必须,另想他法用于证明签名信息确实是签名人所为。
小明苦思冥想了半天,终于想起曾经跟陈教授学过的对称加密,刚好可以用上。
于是,小明加上了加密了签名信息后,把下面的第3版借条发给了王老板,并解析了其中的原理。
但是,很快新问题又来了。
对称加密确实不适合做数字签名,小明不得不寻找新的解决方案,并陷入苦思中......
1.3、用非对称加密解决内容可验证
是的,陈教授给出了新的解决方案:
很快,小明按照陈教授的方案,使用一种非对称加密算法RSA进行了加密,并输出了第4版借条。
1.4、用消息摘要解决内容防篡改
关系到钱的问题,王老板不敢大意,仔仔细细的确认了一番,又发现了新的问题。
全文内容加密后的第5版电子借条如下:
但是,签名信息比签名内容还长,怎么看都太长了;这个成本王老板直觉告诉他,应该还可以再优化优化。
一直在旁的陈教授,觉得是时候普及一下密码学的基础概念了......
于是,小明加上了一种消息摘要算法(SHA256),并使用一种非对称加密算法(RSA)进行加密后的第6版借条如下:
1.5、用CA颁发的数字证书解决公钥归属问题
按照陈教授的提议修改后,一切似乎已经搞定,但在成交的最后关头,王老板提出了一个致命的问题:
在一旁的陈教授见此场景,又给支了一招:
于是,小明就和王老板去找了业界威望极高的CA大佬,希望他能做“担保人”。
给完保护费后,小明很快拿到了CA大佬给的证书,终于可以证明小明的公钥确实属于小明了。
备注:其实CA大佬签发证书的方法和上面小明用于证明自己签名的方法是一样的,只是签名内容换成了小明的公钥,签名密钥换成了CA大佬的公钥;但因为CA大佬有信用背书,且其公钥属于全网公开且知名度极高,所以,其签法证书大家都认。
1.6、完成数字签名
小明拿到CA大佬签名的证书后,加上之前的借条,终于解决了王老板的所有顾虑,和达成了最终的借贷协议。
而小明拿到钱的那一刻,只能用“感觉人生已经到达了巅峰来形容”。
2、数字签名小结
2.1、法律意义上的数字签名
《 中华人民共和国电子签名法 》第二条本法所称电子签名,是指数据电文中以电子形式所含、所附用于识别签名人身份并表明签名人认可其中内容的数据。
电子签名同时符合下列条件的,视为可靠的电子签名:
(一)电子签名制作数据用于电子签名时,属于电子签名人专有;
(二)签署时电子签名制作数据仅由电子签名人控制;
(三)签署后对电子签名的任何改动能够被发现;
(四)签署后对数据电文内容和形式的任何改动能够被发现。
2.2、数字签名要解决的问题
从电子签名法所描述的可靠电子签名来看,数字签名要解决的问题可归纳为两个:
(1)对签名人身份的确认,且签名人身份不可抵赖
(2)签名人对签名内容的认可,且签名内容不可篡改
2.3、如何解决数字签名面临的问题
通过上面的图说例子,这里的答案应该比较清晰了,那就是运用密码学的知识,使用:
用消息摘要算法解决内容防篡改的问题,再使用非对称加密(私钥加密)算法加密消息摘要内容解决签名人身份问题的防伪造和防抵赖问题。
2.4、密钥管理问题
正确使用数字签名的前提是:保证密钥的可靠性。
私钥的可靠性,依赖于签名者自己的保密工作。
而公钥的可信度,则依赖于公钥基础设施。在数字世界里,证明小明的公钥确实属于小明的东西,有个专业名词,叫做“数字证书”,而签发数字证书的机构叫做证书颁发机构(即CA, Certificate Authority),一般由信用高的权威机构颁发。