图说“数字签名”

2019-12-30 14:27:37 浏览数 (2)

前言

虽然很久以前就了解了数字签名,但之前突然被一个非程序员朋友问起什么是数字签名时,依然解释得很费力。近日找图片素材看到Peggy_Marco大神的众多人物形象图时,有了用图解说数字签名的想法,于是决定借用大神的人物形象图,尝试用图解释一下说什么是数字签名。

1、图说数字签名

关于数字签名这事,还得从当年小明向王老板借钱说起......

小明要借钱小明要借钱
王老板要数字化转型王老板要数字化转型

1.1、照搬传统

小明正在写电子借条小明正在写电子借条

小明觉得这很简单,不就是把纸质借条转换成电子文档么;于是,小明立即打开电脑,书写借条。

小明发送出去的第1版借条如下:

第1版借条第1版借条
没有签名,无法证明接口人信息没有签名,无法证明接口人信息

很显然,第1版的借条没有借款人签名,是一个无效的借条。数字世界里,则必须加上“数字签名”,用于证明签名者的身份;于是,小明加上签名后的第2版借条如下:

第2版借条:补上借款人签名第2版借条:补上借款人签名
签名不具有独特性,谁都可以伪造签名不具有独特性,谁都可以伪造

1.2、尝试对称加密,解决防伪造问题

确实,数字世界中,一个名字没有笔法字迹可以区分,千篇一律,谁都可以伪造,必须,另想他法用于证明签名信息确实是签名人所为。

小明苦思冥想了半天,终于想起曾经跟陈教授学过的对称加密,刚好可以用上。

对称加密可防伪造,前提是保护好私钥对称加密可防伪造,前提是保护好私钥

于是,小明加上了加密了签名信息后,把下面的第3版借条发给了王老板,并解析了其中的原理。

第3版_签名加密:签名信息是使用对称加密算法AES对签名内容“小明”加密的结果 密钥为“1234567890ABCDEF”,IV参数:“ABCDEFGHIJKLMNOP”第3版_签名加密:签名信息是使用对称加密算法AES对签名内容“小明”加密的结果 密钥为“1234567890ABCDEF”,IV参数:“ABCDEFGHIJKLMNOP”

但是,很快新问题又来了。

矛盾点:签名信息需要可验证,而对称加密密钥不能公开矛盾点:签名信息需要可验证,而对称加密密钥不能公开
对称加密解决不了数字签名问题对称加密解决不了数字签名问题

对称加密确实不适合做数字签名,小明不得不寻找新的解决方案,并陷入苦思中......

转变思路转变思路

1.3、用非对称加密解决内容可验证

是的,陈教授给出了新的解决方案:

非对称加密非对称加密
非对称加密即可验证身份(私钥),又能验证签名内容(公钥)非对称加密即可验证身份(私钥),又能验证签名内容(公钥)

很快,小明按照陈教授的方案,使用一种非对称加密算法RSA进行了加密,并输出了第4版借条。

第4版_非对称加密签名,签名信息是使用非对称加密算法RSA对签名内容“小明”加密的结果第4版_非对称加密签名,签名信息是使用非对称加密算法RSA对签名内容“小明”加密的结果
公钥可公开,可用于验证签名内容公钥可公开,可用于验证签名内容

1.4、用消息摘要解决内容防篡改

关系到钱的问题,王老板不敢大意,仔仔细细的确认了一番,又发现了新的问题。

未加密内容可篡改未加密内容可篡改

全文内容加密后的第5版电子借条如下:

第5版_全文非对称加密:签名信息是使用非对称加密算法RSA对签名内容"借 条n为江湖救急,今收到王老板(身份证号:12345XXXXXXXX12345)出借的人民币壹佰萬整(¥1000000.00),借期1年,2020年12月31日到期还清。立此为据。n借款人:小明"加密的结果第5版_全文非对称加密:签名信息是使用非对称加密算法RSA对签名内容"借 条n为江湖救急,今收到王老板(身份证号:12345XXXXXXXX12345)出借的人民币壹佰萬整(¥1000000.00),借期1年,2020年12月31日到期还清。立此为据。n借款人:小明"加密的结果

但是,签名信息比签名内容还长,怎么看都太长了;这个成本王老板直觉告诉他,应该还可以再优化优化。

全文加密成本太高全文加密成本太高

一直在旁的陈教授,觉得是时候普及一下密码学的基础概念了......

非对称加密的问题非对称加密的问题
消息摘要消息摘要
消息摘要可防篡改消息摘要可防篡改

于是,小明加上了一种消息摘要算法(SHA256),并使用一种非对称加密算法(RSA)进行加密后的第6版借条如下:

第6版_先摘要再加密:签名信息是使用消息摘要算法SHA256对全文哈希后,再用非对称加密算法RSA对消息摘要结果加密的结果第6版_先摘要再加密:签名信息是使用消息摘要算法SHA256对全文哈希后,再用非对称加密算法RSA对消息摘要结果加密的结果

1.5、用CA颁发的数字证书解决公钥归属问题

按照陈教授的提议修改后,一切似乎已经搞定,但在成交的最后关头,王老板提出了一个致命的问题:

证明之再证明证明之再证明
陷入死循环陷入死循环

在一旁的陈教授见此场景,又给支了一招:

借鉴传统借鉴传统

于是,小明就和王老板去找了业界威望极高的CA大佬,希望他能做“担保人”。

寻找高信用担保寻找高信用担保

给完保护费后,小明很快拿到了CA大佬给的证书,终于可以证明小明的公钥确实属于小明了。

用高信用机构(CA)颁发的数字证书证明小明公钥归属用高信用机构(CA)颁发的数字证书证明小明公钥归属

备注:其实CA大佬签发证书的方法和上面小明用于证明自己签名的方法是一样的,只是签名内容换成了小明的公钥,签名密钥换成了CA大佬的公钥;但因为CA大佬有信用背书,且其公钥属于全网公开且知名度极高,所以,其签法证书大家都认。

1.6、完成数字签名

小明拿到CA大佬签名的证书后,加上之前的借条,终于解决了王老板的所有顾虑,和达成了最终的借贷协议。

实现数字签名,达成借贷协议实现数字签名,达成借贷协议

而小明拿到钱的那一刻,只能用“感觉人生已经到达了巅峰来形容”。

感觉人生已经到达了巅峰感觉人生已经到达了巅峰

2、数字签名小结

2.1、法律意义上的数字签名

中华人民共和国电子签名法第二条本法所称电子签名,是指数据电文中以电子形式所含、所附用于识别签名人身份并表明签名人认可其中内容的数据。

电子签名同时符合下列条件的,视为可靠的电子签名:

  (一)电子签名制作数据用于电子签名时,属于电子签名人专有;

  (二)签署时电子签名制作数据仅由电子签名人控制;

  (三)签署后对电子签名的任何改动能够被发现;

  (四)签署后对数据电文内容和形式的任何改动能够被发现。

2.2、数字签名要解决的问题

从电子签名法所描述的可靠电子签名来看,数字签名要解决的问题可归纳为两个:

(1)对签名人身份的确认,且签名人身份不可抵赖

(2)签名人对签名内容的认可,且签名内容不可篡改

2.3、如何解决数字签名面临的问题

通过上面的图说例子,这里的答案应该比较清晰了,那就是运用密码学的知识,使用:

实现数字签名的关键算法实现数字签名的关键算法

用消息摘要算法解决内容防篡改的问题,再使用非对称加密(私钥加密)算法加密消息摘要内容解决签名人身份问题的防伪造和防抵赖问题。

2.4、密钥管理问题

正确使用数字签名的前提是:保证密钥的可靠性。

私钥的可靠性,依赖于签名者自己的保密工作。

而公钥的可信度,则依赖于公钥基础设施。在数字世界里,证明小明的公钥确实属于小明的东西,有个专业名词,叫做“数字证书”,而签发数字证书的机构叫做证书颁发机构(即CA, Certificate Authority),一般由信用高的权威机构颁发。

0 人点赞