数字签名:
一、生日问题:
一年365天 每个人生日分布随机
p:所有人生日不在同一天的概率
1-p:至少两个人生日在同一天的概率
[1] 365/365
[2] 365/365*364/365...
[3] ......
... ...
[n]个人 365*364*..(365-n+1)/365^n
10个人的话 P=88.3% 1-P=11.7%
20个人 P=58.8% 1-P=41.2%
50个人 P=2.9% 1-p=97.1% (违反直觉的结果!)
生日碰撞
二、数字签名:
1.哈希函数:
123->abc
4adb5->efg
(都变成了三位)
特点:
1.单向
2.位数固定
有可能出现"碰撞"
2.签名
A->B
A提供一个开着的盒子 盒子只有A能打开
B把123装进去 然后关上,传给A
窃听者:
窃听者把4adb5放到盒子里然后关上传给了A
怎么办?
实现数字签名。
123进行哈希计算得到abc,然后把abc进行加密传给a
这种数据任何人都可以解密 但是只有B能加密
想象一个塑封袋,任何人都能撕开,但是只有b能装进去,撕开就不能装进去了。
附:
公钥密码系统是本文的理解基础。
本文不对公钥密码系统做过多描述。若对公钥密码不熟悉,可以参考阅读维基百科-公开密钥加密
信息安全中有三个需要解决的问题:
这三要素统称为CIA Triad。
公钥密码解决保密性问题
数字签名解决完整性问题和有效性问题
现实生活中,签名有什么作用?在一封信中,文末的签名是为了表示这封信是签名者写的。计算机中,数字签名也是相同的含义:证明消息是某个特定的人,而不是随随便便一个人发送的(有效性);除此之外,数字签名还能证明消息没有被篡改(完整性)。
简单来说,数字签名(digital signature)是公钥密码的逆应用:用私钥加密消息,用公钥解密消息。
用私钥加密的消息称为签名,只有拥有私钥的用户可以生成签名。
用公钥解密签名这一步称为验证签名,所有用户都可以验证签名(因为公钥是公开的)
一旦签名验证成功,根据公私钥数学上的对应关系,就可以知道该消息是唯一拥有私钥的用户发送的,而不是随便一个用户发送的。
由于私钥是唯一的,因此数字签名可以保证发送者事后不能抵赖对报文的签名。由此,消息的接收者可以通过数字签名,使第三方确信签名人的身份及发出消息的事实。当双方就消息发出与否及其内容出现争论时,数字签名就可成为一个有力的证据。
一般来说,不直接对消息进行签名,而是对消息的哈希值进行签名,步骤如下。
证书实际上就是对公钥进行数字签名,它是对公钥合法性提供证明的技术。
考虑这样一种场景:我们对签名进行验证时,需要用到公钥。如果公钥也是伪造的,那怎么办?如果公钥是假的,验证数字签名那就无从谈起,根本不可能从数字签名确定对方的合法性。
这时候证书就派上用场了。
证书一般包含:公钥(记住证书中是带有公钥的),公钥的数字签名,公钥拥有者的信息
若证书验证成功,这表示该公钥是合法,可信的。
注:私钥B是用于加密公钥A的,私钥B和公钥A并不是配对的。
注:公钥B和上述的私钥B是配对的,分别用于对证书的验证(解密)和生成(加密)。
当用户私钥丢失、被盗时,认证机构需要对证书进行作废(revoke)。要作废证书,认证机构需要制作一张证书作废清单(Certificate Revocation List),简称CRL
假设我们有Bob的证书,该证书有合法的认证机构签名,而且在有效期内,但仅凭这些还不能说明该证书一定有效,还需要查询认证机构最新的CRL,并确认该证书是否有效。
下面用两个使用场景来帮助大家理解证书的作用。
客户端在发送或接收消息之前,要验证服务器的合法性(这个服务器是真实的服务器,还是伪造者,我们不知道)
场景1
场景2
原文地址:https://www.cnblogs.com/eret9616/p/9387587.html